db-frontier/08
讲清了 HNSW、DiskANN、IVF-PQ
的图/倒排假设与召回–QPS–内存三角。第 8 篇 讲清了
Knowhere 的 VecIndex 类层次与工厂。中间还缺一张
工程师调参时看见的接口表:集合上声明哪种索引、哪些参数属于构建期、哪些属于查询期、Flat
在引擎里扮演什么角色。
本文不重证小世界图性质,只建立 算法名 → 引擎契约 的翻译层。
本文是「向量检索引擎」系列第 2 篇(共 18 篇)。→ 系列目录
版本锚定:Milvus 2.6.x Knowhere / Architecture;算法细节外链 frontier/08。
一、引擎需要的不是论文,是四个动词
生产路径里,ANN 对引擎暴露的能力可以收成:
| 动词 | 含义 | 典型发生位置 |
|---|---|---|
| Train | 需要训练的结构(如 IVF 质心)在数据上拟合 | Data Node 建索 / Knowhere |
| Build / Add | 把段内向量写入索引结构 | 同上 |
| Serialize / Load | 索引落对象存储,Query Node 加载 | 第 6、7、10 篇 |
| Search / Query | 带可选 bitset 掩码的近似 Top-\(k\) | Segcore → Knowhere |
Knowhere 文档强调:与经典「训练集 / 测试集分离」不同,段内数据既用于 train 也用于 search。因此索引生命周期 贴着 Sealed segment,而不是贴着全局离线竞赛设定(第 3、10 篇)。
二、类型速查:算法假设 → 引擎选型直觉
下表只给 接口层直觉;复杂度与参数精调见 frontier/08 与 llm-infra/18。
| 引擎侧常见类型 | 算法家族 | 内存/磁盘假设 | 何时优先考虑 |
|---|---|---|---|
| FLAT / IDMAP | 暴力 | 全向量常驻计算 | 召回金标准、小段、调参对照 |
| IVF_FLAT / IVF_PQ / IVF_SQ* | 倒排 + 可选量化 | 列表扫描;PQ 换内存 | 可接受训练、偏吞吐/压缩 |
| HNSW | 分层小世界图 | 高内存图 | 低延迟内存检索主流默认 |
| DiskANN 等 | 磁盘友好图 | 索引主要在盘/对象侧 | 单机内存装不下全体图 |
| 二进制族 | Hamming 等 | 压缩二值向量 | 指纹/化学等二值特征 |
Architecture Overview 写明 Milvus 构建在
Faiss、HNSW、DiskANN、SCANN 等库之上;具体 release 启用哪些
index_type 字符串以当时 Index 文档为准。
2.1 构建期 vs 查询期参数
| 阶段 | 例子(概念名) | 工程含义 |
|---|---|---|
| 构建期 | HNSW 的 M、efConstruction;IVF
的 nlist |
改了通常要 重建索引 |
| 查询期 | HNSW 的 ef;IVF 的 nprobe |
可按请求调节延迟/召回,不必重建 |
把查询期参数当成「免费旋钮」、把构建期参数当成「变更窗口」——排障时先分清改的是哪一类。
2.2 Flat 的系统角色
Knowhere 把 IDMAP 也做成
VecIndex:无
train/build,查询直接打原始向量。系统用途:
- 离线算 Recall@k 的 ground truth;
- 小数据或索引未就绪时的正确性路径;
- 对比「加索引后掉了多少召回」的基线。
不要在十亿级集合上把 Flat 当默认在线索引。
三、与 Segment / 过滤的接口接点
- 每 Sealed 一段一索引(Data
Processing)→ 全局一次
search= 多索引候选归并(第 9 篇)。 - bitset 软删与属性过滤(Bitset /
Knowhere)→
Search必须接受「哪些行仍参与」的掩码(第 11、13 篇)。 - Growing 路径可能尚无最终 ANN 结构 → 实时可搜 ≠ 最终索引形态(第 5、10 篇)。
选择度很低的标量过滤会让「局部 Top-\(k\) 再合并」失效——这是算法三角之外的第四个变量,展开见第 11 篇与 db-frontier/09。
四、插件契约(回指第 8 篇)
向 Knowhere
增加索引类型的官方步骤:IndexEnum →
ConfAdapter 校验 → 实现 VecIndex →
VecIndexFactory → unittest。量化系参考
IVF_FLAT,图系参考 HNSW,树系参考
Annoy。
本篇对应用的含义:你在 SDK 里填的 index_type
/ params,最终要落到某一 VecIndex
实现的
Train/Query;没有实现的字符串不是「配置写错了就会自动降级」的承诺。
五、学术谱系与开放问题
| 层 | 代表 | 本文角色 |
|---|---|---|
| 算法 | Malkov HNSW;DiskANN;IVF-PQ | 外链 frontier/08 |
| 库 | Faiss / Hnswlib | Knowhere 之下 |
| 契约 | VecIndex 四动词 + 段生命周期 |
本篇 |
| 系统 | Milvus Workers | 第 7–10 篇 |
开放问题:多向量字段时,单段多索引的参数面如何避免组合爆炸;磁盘索引与对象存储冷热分层如何共用同一套 Load 语义(第 6、18 篇)。
六、小结
ANN 进引擎后变成 Train/Build/Load/Search 契约,参数分构建期与查询期,索引贴着 Segment,Flat 是金标准不是默认线上。下一篇起回到数据模型与控制面已写篇章;混合过滤见 第 11 篇。
参考资料
- Milvus Documentation v2.6.x, Knowhere、Architecture Overview、Data Processing。
- db-frontier/08、db-frontier/09。
- 第 8 篇 Knowhere、系列 index。
返回 系列目录 | 上一篇:向量引擎全景 | 下一篇:Segment 状态机
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【向量检索引擎】Knowhere:向量索引执行引擎与插件契约
按官方 Knowhere 文档说明其在 Milvus 中的位置、相对 Faiss 的扩展(bitset、SIMD 选择、二进制度量)、VecIndex 类层次与 IDMAP/IVF/HNSW 等类型,并与 db-frontier/08 的算法细节分工。
【向量检索引擎】向量引擎全景:算法、RAG 与专用引擎之间的一层
定位专用向量检索引擎相对 ANN 算法、RAG 应用与湖仓格式的分工;以 Milvus 2.6.x 四层架构给出本系列 18 篇地图,并交代从 SIGMOD 2021 系统论文到存算分离演进的谱系。
【向量检索引擎】Milvus · Segcore · Knowhere · Qdrant · Lance
补齐 ANN 算法与 RAG 应用之间的生产级向量引擎层:以 Milvus 2.6.x 为主线拆解 Segment、WAL、Segcore、Knowhere、混合过滤与一致性,并用 Qdrant、LanceDB 对照选型。
【向量检索引擎】Qdrant 对照:单库路径、payload 过滤与分片副本
对照 Qdrant 与本系列 Milvus 主线:Rust 段式存储与 payload 索引、分布式下 Raft 管元数据与分片复制;说明何时单进程/小集群更合适,以及分片语义与 Milvus Channel 的差异。