Milvus向量数据库-磁盘索引简介

以下内容是自己在学习Milvus向量数据库时,在Milvus官方网站文档库中对索引的学习整理和翻译,通过自己和借助翻译软件进行了理解整合翻译,有可能有一些地方理解整理的不到位,还望大家理解。

一、磁盘索引

本文介绍了一种名为DiskANN的磁盘索引算法。基于Vamana图,DiskANN在大型数据集中实现了高效搜索。

为了提高查询性能,您可以为每个向量字段指定索引类型

注:

目前,向量字段只支持一种索引类型。Milvus在切换索引类型时会自动删除旧索引。

二、先决条件

要使用DiskANN索引时,请注意以下事项:

1、默认情况下,DiskANN索引是处于启用的状态(Milvus不同版本中的默认状态有可能不一样)。如果您更喜欢内存索引而不是磁盘索引,建议您可以禁用此功能来获得更好的性能。

  1. 要想禁用它,您可以在milvus配置文件中将queryNode.enableDisk更改为false。
  2. 要想再次启用它的话,您可以将queryNode.enableDisk设置为true。

2、Milvus实例需要在Ubuntu 18.04.6或更高版本上运行。

3、Milvus数据路径应挂载到 NVMe SSD 上,以充分发挥性能:

  1. 对于Milvus独立实例,实例运行所在容器中的路径为/var/lib/Milvus/data。
  2. 对于Milvus Cluster实例,查询节点和索引节点运行的容器中的数据路径应该是/var/lib/Milvus/data。

三、限制条件

想使用DiskANN索引,你必须确保以下条件:

  1. 在数据中仅使用至少具有1个维度的浮点向量。
  2. 仅使用欧氏距离 (L2) 或内积 (IP) 来测量向量之间的距离。

四、索引和搜索的设置

指标构建参数,构建DiskANN索引时,使用DISKANN作为索引类型。不需要索引参数。

搜索参数

|-------------|-----------------------|---------------------|
| 参数 | 描述 | 范围 |
| search_list | 候选列表的大小,越大,召回率越高,性能越差 | [topk, int32_max] |

五、DiskANN相关的Milvus配置

DiskAN是可调的。您可以在${MILVUS ROOT PATH}/configs/milvus.yaml中修改与DiskANN相关的参数,以提高其性能。

|------------------------------------------------------------------------------------------------------------------------------------|
| ... DiskIndex: MaxDegree: 56 SearchListSize: 100 PQCodeBugetGBRatio: 0.125 SearchCacheBudgetGBRatio: 0.125 BeamWidthRatio: 4.0 ... |

|--------------------------|-----------------------------------------------------------------------|------------------------------|---------|
| 参数 | 描述 | 取值范围 | 默认值 |
| MaxDegree | Vamana 图的最大度数。 值越大,召回率越高,但会增加构建索引的大小和时间。 | [1,512] | 56 |
| SearchListSize | 候选人名单的大小。 较大的值会增加构建指数所花费的时间,但会提供更高的召回率。 将其设置为小于"最大度数"的值,除非需要减少索引构建时间。 | [1,int32_max] | 100 |
| PQCodeBugetGBRatio | PQ 代码的大小限制。 值越大,召回率越高,但会增加内存使用量。 | [0.0,0.25] | 0.125 |
| SearchCacheBudgetGBRatio | 缓存节点数与原始数据的比率。 较大的值会随着内存使用量的增加而提高索引构建性能。 | [0.0,0.3] | 0.1 |
| BeamWidthRatio | 每次搜索迭代的最大IO请求数与CPU数之间的比率。 | [1,max(128/cpu number,16)] | 4.0 |

六、故障排除

如何处理报"io_setup() failed; returned -11, errno=11:Resource temporarily unavailable"的错误?

答: Linux内核提供异步非阻塞I/O(AIO)功能,允许进程同时启动多个I/O操作,而无需等待任何一个操作完成。这有助于提高可能重叠处理和I/O的应用程序的性能。

可以使用proc文件系统中的/proc/sys/fs/aio-max-nr虚拟文件中的参数来调整其性能。aio-max-nr参数决定了允许的最大并发请求数。

aio-max-nr默认为65535,您可以将其设置为10485760。

有关更多信息,请参阅如何在Milvus中的磁盘索引:

On-disk Index Milvus v2.3.x documentation

相关推荐
羊小蜜.1 分钟前
Mysql 01:基础查询(SELECT)全解——从单表到多字段的完整语法
数据库·mysql·查询
猿小喵14 分钟前
记录一次从库并行回放出现死锁的问题
数据库·mysql·tdsql
随风,奔跑21 分钟前
Redis
数据库·redis·缓存
IvorySQL23 分钟前
2MB 的 PostgreSQL work_mem,如何吃掉 2TB 内存?
数据库·postgresql·开源
桑榆肖物24 分钟前
有字幕,没配音?用浏览器自带语音能力,让网页视频直接“开口说话”
数据库·edge·音视频·tts
熬夜的咕噜猫1 小时前
MySQL主从复制与读写分离
网络·数据库·mysql
道清茗1 小时前
【MySQL知识点问答题】 备份技术、Invisible Indexes 和直方图的应用
数据库·mysql
芒果披萨1 小时前
sql存储过程
java·开发语言·数据库
jnrjian1 小时前
RAC 去除node的建议 dbca 和手动方法
数据库·oracle
TlYf NTLE1 小时前
redis分页查询
数据库·redis·缓存