Milvus实践 第三章:索引类型

索引类型特性原理距离计算方式
FLAT
  • 查询数据规模小,对查询速度要求不高
  • 不占用磁盘,内存占用与原始数据一致
  • 100% 的召回率
  • rt 35ms
并非真正的索引,索引与向量原始数据一致,无需独立创建索引文件,检索时将向量原始数据加载至内存生成索引,属于暴力检索
  • 浮点型向量
  • 欧氏距离 (L2)
  • 内积 (IP)
     
  • 二值型向量
  • 杰卡德距离 (Jaccard)
  • 谷本距离 (Tanimoto)
  • 汉明距离 (Hamming)
  • 超结构 (superstructure)
  • 子结构 (substructure)

IVF_FLAT

  • 高速查询
  • 磁盘、内存占用与原始数据一致
  • 要求尽可能高的召回率
  • rt 9ms
倒排索引,通过聚类的方式将向量添加到不同的分桶,数据不压缩,查询速度与召回率之间的权衡由参数 nprobe 来控制。nprobe 越大,召回率越高,但查询时间越长。
  • 浮点型向量
  • 欧氏距离 (L2)
  • 内积 (IP)
     
  • 二值型向量
  • 杰卡德距离 (Jaccard)
  • 谷本距离 (Tanimoto)
  • 汉明距离 (Hamming)

IVF_SQ8

  • 高速查询,速度比IVF_FLAT快
  • 磁盘、内存占用为原始数据30%
  • 召回率略低与IVF_FLAT
  • rt 6ms
基于IVF_FLAT的一种向量数据压缩算法,将向量进行标量量化(原始向量中每个 FLOAT(4字节)转为 UINT8(1字节)),磁盘和内存占用比原来降至1/4。
  • 浮点型向量
  • 欧氏距离 (L2)
  • 内积 (IP)

IVF_SQ8H

  • 高速查询,比IVF_SQ8略快,np>1时优于IVF_SQ8
  • 磁盘、内存占用为原始数据30%
  • 召回率与IVF_FLAT一致
  • 需要GPU
  • rt 5ms
对IVF_SQ8做了深度优化,把找出向量最近的nprobe个分桶的运算(Coarse Quantizer)单独拷贝到 GPU运算,大大的节省了Coarse Quantizer时间,每个分桶中的查询受配置参数 gpu_search_threshold 控制,当 nq >= gpu_search_threshold 时,查询在 GPU 上进行;反之在 CPU 上进行。
  • 浮点型向量
  • 欧氏距离 (L2)
  • 内积 (IP)

IVF_PQ

  • 高速查询
  • 磁盘、内存占用极低(可压缩至原始数据1%以下),适用10亿数据集以上计算
  • 召回率、精准度下降
  • rt

基于IVF_FLAT的一种向量数据有损压缩算法(PQ乘积量化),首先,PQ先将D维空间切分成M份:类似于将128维空间切分成M个D/M维的子空间,每个子向量进行k-means聚类。

 

  • 浮点型向量
  • 欧氏距离 (L2)
  • 内积 (IP)

RNSG

  • 高速查询,比ivf系列快
  • 磁盘、内存占用小于原始数据
  • 召回率高、精准度高
  • 不支持增量索引
  • rt

NSG是通过建立导航点 (Navigation Point) ,特殊的选边策略, 深度遍历收回离散节点 (Deep Traversal) 等方法将导航点与子图相连接,获得良好的搜索性能。

RNSG 是 Milvus 在 NSG 基础上自研的基于图的索引算法,它可以 降低图的平均出度,缩短搜索路径,缩减索引大小,降低索引复杂度。

  • 浮点型向量
  • 欧氏距离 (L2)
  • 内积 (IP)

HNSW

  • 高速查询,比ivf系列快
  • 磁盘、内存占用大于原始数据,适用于小数据量,内存充足的计算
  • 召回率高、精准度高
  • 支持增量索引
  • rt

前身是NSW,Milvus借鉴了 SkipList 的思想,提升了其整体性能,按照一定的规则把一张的图分成多张,越接近上层的图,平均度数越低,节点之间的距离越远;越接近下层的图平均度数越高,节点之间的距离也就越近。

  • 浮点型向量
  • 欧氏距离 (L2)
  • 内积 (IP)

Annoy

  • 高速查询,比HNSW慢
  • 磁盘、内存占用大于原始数据,比HNSW索引更大
  • 召回率高、精准度高
  • 不支持增量索引
  • rt
基于树的索引(1/n棵二叉树),建树时每次选择空间中的两个质心作为分割点,相当于kmeans过程,以使得两棵子树分割的尽量均匀以保证logn的检索复杂度。以垂直于过两点的直线的超平面来分割整个空间,然后在两个子空间内递归分割直到子空间最多只有k个点。如下图

查找性能及准确度受treenum、searchnum控制

 

  • 浮点型向量
  • 欧氏距离 (L2)
  • 内积 (IP)

关于rt的数据说明:基于1000000条 * 512维 整形向量计算,索引分桶数为512*16,每次检索np=1,topK=2,检索时nprobe=1024。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值