Page 106 - 《软件学报》2026年第3期
P. 106

邱海浪 等: LSMDiskANN: 更新友好型磁盘向量索引框架                                                1069


                 并操作插入阶段需要对所有磁盘中间层索引组件进行                   1  趟顺序读操作, 但凭借优化的删除阶段算法与磁盘重布局
                 机制 (详见后文第     3.3 节), 在对磁盘基本层索引组件进行合并操作时只需要                2  趟顺序读操作、少量随机读操作和
                 2  趟顺序写操作, 却能达到与       FreshDiskANN  合并操作相近的合并     I/O  操作代价. 此外, 上述合并操作的       3  个阶段
                 的算法能很容易地扩展为批处理模式, 即每次处理一批节点, 进一步降低                      I/O  开销并提升运行效率.
                  3.1.7    合并策略
                    本文设计了两种典型的合并触发策略: (1) 写半合并策略: 当插入线程导致磁盘中间层组件数量超过其上限的
                 一半时, 触发向磁盘基本层的合并操作; (2) 定期合并策略: 维护一个后台合并检测线程, 定期检查中间层组件数
                 量, 并在超出阈值后启动合并操作.
                  3.2   磁盘组件搜索参数动态确定机制设计
                    (1) 层间动态搜索参数策略
                    如图  8(a) 所示, 在单个磁盘层组件中, 影响查询延迟的关键因素是搜索列表长度                     L s  而非组件数据量大小, 并
                          L s  呈线性增长趋势. 因此, 降低查询延迟最直接且有效的方式即为缩小搜索列表长度  . 同时, 如图
                 且该延迟随                                                                       L s
                 8(b) 所示, 查询召回率随搜索列表长度         L s  的增加呈现对数增长, 且在不同规模数据集上具有一致趋势. 因此, 上述
                 两种指标之间的增长趋势差异, 为实现二者的平衡提供了优化空间.

                          8                                    100.0
                          7                                    97.5

                          6                                    95.0
                         Latency (ms)  5 4                    Recall@5  92.5

                                                               90.0
                                                               87.5
                          3
                                                   SIFT100k                               SIFT100k
                          2                        SIFT1M      85.0                       SIFT1M
                                                   SIFT500k                               SIFT500k
                            5   15  25  35  45  55  65  75          5  15  25  35  45   55  65  75
                                      Search list size                        Search list size
                                    (a) Query mean latency                  (b) Query accuracy
                                                图 8 搜索列表长度影响趋势图

                    基于“越靠近下层, 磁盘组件的数据量越大”这一客观规律, 结合“数据量越大的组件更可能包含最终结果”的
                 启发式思想, 本文设计了一种分层搜索参数策略: 对磁盘中间层和磁盘基本层的组件设定不同的搜索参数
                 [    ]
                       , 其中满足        .
                 L s 0  ,L s 1  L s 0  <L s 1
                    (2) 层内动态搜索参数策略
                    在  DiskANN  中, 每个磁盘层组件在构建时都要经历如第           2.2 节所言的量化压缩. 由于量化压缩基于聚类方法, 使
                 用聚类中心对整个向量集合进行离散化处理, 因此这些聚类中心本质上反映了组件的局部数据分布特征.
                    基于这个观察, 受     KRT  导航算法   [52] 的启发, 本文将磁盘中间层组件       I  量化压缩中的聚类中心集合视为其特征
                                                 I
                 点集合  C, 定义向量   x q  与磁盘中间层组件   的组件距离为向量         x q  到该组件特征点集合    C  中的最小值:

                                                 (   )    (   )        (  )
                                              Dist x q ,I = Dist x q ,C = minDist x q ,c              (2)
                                                                 c∈C
                    进一步借鉴     SPANN [11] 中的动态决定搜索列表数策略, 在磁盘中间层组件的搜索中, 本文定义了向量                      x q  在给
                                 I
                 定的  n 个磁盘层组件   中的搜索距离阈值公式, 用于判定组件是否值得深入查询, 其中                     η 是动态搜索阈值系数:

                                                           (   )
                                                D th = minDist x q ,I i ×η, η ∈ (0,1]                 (3)
                                                     i∈[0,n)
   101   102   103   104   105   106   107   108   109   110   111