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

1026                                                       软件学报  2026  年第  37  卷第  3  期


                 目标近邻. 在典型的索引图方法中, HNSW           通过多层跳跃图结构实现高效的内存搜索; NSG               通过约束图结构的稀
                 疏性, 优化搜索路径长度和冗余边数; DiskANN          提出了一种面向磁盘的索引图结构, 通过             Beam Search  搜索算法支
                 持大规模向量检索, 已被集成至         Milvus 等工业系统.
                    (1) 存储优化技术
                    存储布局是基于磁盘的索引图系统的核心设计要素, 其物理组织方式直接决定了检索过程中的磁盘                                 I/O  效率.
                 当前主流向量数据库系统主要采用两种基础存储策略: 插入顺序存储与哈希分布存储. 插入顺序存储按照向量插
                 入的时序线性组织数据, 虽然实现简单且写入吞吐量高, 但由于完全忽略向量的相似性, 导致高维空间中相邻的向
                 量在物理存储上呈现高度离散分布, 使得查询时需要触发大量随机                      I/O  操作. 哈希分布存储通过哈希函数实现数
                 据的均匀分布, 能够有效避免访问热点问题, 但同样割裂了图结构中邻接顶点的物理存储位置, 导致跨页访问现象
                 加剧.
                    针对上述问题, 学界提出了多种创新解决方案. 例如, Facebook             的  Faiss-IVFOPQ [23] 通过倒排索引 (inverted file,
                 IVF) 聚类相似向量, 并配合乘积量化 (PQ) 压缩存储, 同时减少了磁盘寻道次数和单次                   I/O  数据传输量. UC Berkeley
                 提出的   LENS  系统基于查询日志挖掘访问热点, 进行主动预加载, 实验结果表明可将缓存命中率提升约                          25% [30] .
                    (2) 缓存优化技术
                    为了降低查询过程中的磁盘访问延迟, 现代              ANNS  系统普遍引入缓存机制, 以缓解因图结构跳转不确定性导
                 致的频繁    I/O  问题. 缓存机制主要通过在查询路径上提前加载部分关键顶点数据, 从而提升查询阶段的数据命中
                 率与响应效率. DiskANN    等方法通过提前加载访问频率较高的入口顶点及其若干跳邻居, 来减少从磁盘加载数据
                 的次数. Starling  系统则引入了内存导航图的概念, 依据系统的内存限制, 从整个数据集中随机采样一部分顶点, 并
                 利用构建算法 (如     Vamana) 在内存中构建轻量级导航图. 该导航图能够高效地为查询向量提供更接近的入口点,
                 从而显著缩短其在磁盘图上的搜索路径, 有效降低                I/O  负担.

                  3   方法概览

                    本文提出    GoVector, 一种基于向量相似性的      I/O  高效向量近邻查询缓存策略. 其方法整体框架如图              4  所示.

                                                         1 选择拓展点
                                             候选搜索                      搜索
                                             向量队列                             5 数据加载
                                    搜索模块                 6 计算与拓展
                                                                    3
                                                             3  命中缓存   2 发起数据请求
                                     静                              动   3  未命中
                                     态          入口顶点                态    缓存     相似性
                                     缓                              缓          感知读取
                                     存                       缓存区    存

                                    混合缓存模块
                              内存                                       4  选择加载策略
                              磁盘
                                        聚类信息                    索引图信息
                                                     #0        #1       #2
                                                     id 向量  邻居  id  向量  邻居  id  向量  邻居
                                                                                 …
                                                     id  向量  邻居  id  向量  邻居  id  向量  邻居
                                                     id  向量  邻居  id  向量  邻居  id  向量  邻居

                                                  图 4 GoVector 系统架构图

                    在内存层面, GoVector 设计了一种静态与动态结合的混合缓存机制, 以适应                   ANNS  查询过程中不同阶段的访
                 问行为. 在静态缓存区, 系统根据预设的容量, 从入口点出发预加载其多跳邻居, 用于快速定位到查询向量附近的
   58   59   60   61   62   63   64   65   66   67   68