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

相关推荐
普马萨特2 小时前
实体与位置关系的数据从哪里来:获取、治理与仍待解决的问题
网络·数据库
醉颜凉2 小时前
MySQL 8 忘记 root 密码?这两种方法帮你轻松解决
数据库·mysql·adb
RestCloud2 小时前
集成链路监控体系搭建:接口调用、数据流转与异常告警全覆盖
数据库·数据安全·ipaas·api管理·数据监控·集成平台·api 治理
xxwl5853 小时前
MySQL 基础学习笔记
数据库·mysql
SKH.3 小时前
Linux软件编程(6)线程间通信
java·开发语言·数据库
Rain的Java大神之路3 小时前
PC版网站被狂刷怎么处理
java·数据库·redis·后端·mysql·web安全·运维开发
闻哥3 小时前
小表驱动大表——SQL查询优化的核心原则(深度剖析+流程图)
数据库·sql·流程图
cmes_love4 小时前
港股Level2历史数据:逐笔成交与分钟线
数据库·oracle
自由能燃气设备4 小时前
燃气热水锅炉/全预混低氮冷凝锅炉哪个品牌好?哪家好?6大商用品牌横评
大数据·数据库·人工智能
智购科技智能售货柜4 小时前
2026自动售货机设备能耗计量系统:从功率监测到能效分析的工程实践~YH
数据库·人工智能·redis·缓存·架构·perl·symfony