1. 向量数据库索引技术全景解读
第一次接触Milvus的开发者常会被其丰富的索引类型搞得眼花缭乱。作为专为向量搜索设计的分布式数据库,Milvus的索引系统与传统关系型数据库有本质区别。这里我们需要先建立几个关键认知:
向量索引的核心使命是解决"近似最近邻搜索"(Approximate Nearest Neighbor, ANN)问题。当我们要在百万级高维数据中快速找到相似项时,精确计算每个向量的距离在计算成本上是不可行的。以128维向量为例,单次全量扫描就需要执行:
- 128次减法运算
- 128次乘法运算
- 127次加法运算
- 1次开方运算(欧式距离场景)
这种计算量在亿级数据集上会形成性能灾难。因此,各类ANN算法通过牺牲少量精度来换取数十倍的速度提升,这正是Milvus索引体系的立身之本。
1.1 主流索引类型技术剖析
Milvus 2.x版本目前支持六大类索引,每种都有其独特的算法实现和适用场景:
-
FLAT索引
- 本质:暴力搜索(Brute-force)
- 实现方式:完整计算查询向量与所有存储向量的距离
- 特点:100%准确率但性能最差
- 适用场景:小型数据集(<10万)或作为精度基准
-
IVF类索引
- 代表:IVF_FLAT, IVF_SQ8, IVF_PQ
- 算法核心:倒排文件(Inverted File)
- 工作原理:
- 通过k-means聚类将向量空间划分为nlist个单元
- 搜索时只计算查询向量与最近nprobe个单元中心的距离
- 仅扫描这些单元内的向量
- 变种差异:
- IVF_FLAT:原始向量存储
- IVF_SQ8:向量压缩为8-bit标量量化
- IVF_PQ:乘积量化压缩
-
HNSW索引
- 算法:分层可导航小世界图(Hierarchical Navigable Small World)
- 数据结构:多层图结构(通常3-5层)
- 搜索流程:从顶层开始,逐层向下搜索,利用"小世界"特性快速收敛
- 优势:高召回率,适合高维数据
- 缺点:内存占用高,建索引慢
-
ANNOY索引
- 算法:随机投影森林
- 实现:构建多棵二叉树,通过超平面分割空间
- 特点:内存友好,支持静态数据集
- 局限:不支持增量更新
-
SCANN索引
- 全称:Scalable Nearest Neighbors
- 核心技术:各向异性向量量化
- 优势:平衡精度与速度
- 适用:中等规模数据集(百万级)
-
DISKANN索引
- 特点:面向磁盘优化的图索引
- 优势:支持超大规模数据(十亿级)
- 限制:需要SSD存储
1.2 索引选择决策矩阵
选择索引时需要权衡四个核心维度:
- 查询速度:HNSW > IVF > FLAT
- 内存占用:FLAT < IVF_SQ8 < HNSW
- 精度要求:FLAT=100% > HNSW≈95% > IVF≈90%
