当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HTTP 414错误问题
  • 第三课《排序》
  • 【html+css 绚丽Loading】 10个Loading合集(1)
  • 如何利用命令模式实现一个手游后端架构
  • 通过主成分分析实现检测金融中的异常交易模式
  • 学习node.js 十 redis的基本语法
  • Dashboard Interface 应用
  • LeetCode 3146.两个字符串的排列差:小数据,我选择暴力模拟
  • 02- javascript 高阶-构造函数(知识点)呀
  • PagosController : ControllerBase
  • Oracle(84)什么是SQL调优顾问(SQL Tuning Advisor)?
  • 计算机网络基础 - 应用层(1)
  • 【JVM】亿级流量调优(二)
  • Linux 下命令行参数和环境变量
  • vue3+ts+Go使用百度地图路书实现历史轨迹回放、轨迹回放进度、聚合点、自定义弹框和实时监控视频、多路视频轮巡播放
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • JavaScript-如何实现克隆(clone)函数
  • Android Volley源码解析
  • Django 博客开发教程 8 - 博客文章详情页
  • Mocha测试初探
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • oldjun 检测网站的经验
  • Python 基础起步 (十) 什么叫函数?
  • REST架构的思考
  • vue中实现单选
  • 计算机在识别图像时“看到”了什么?
  • 微信小程序设置上一页数据
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • elasticsearch-head插件安装
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ######## golang各章节终篇索引 ########
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (第27天)Oracle 数据泵转换分区表
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (南京观海微电子)——示波器使用介绍
  • (转载)OpenStack Hacker养成指南
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET项目中存在多个web.config文件时的加载顺序
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @RequestBody与@RequestParam
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [240812] X-CMD 发布 v0.4.5:更新 gtb、cd、chat、hashdir 模块功能
  • [Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解
  • [android] 练习PopupWindow实现对话框
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [Django 0-1] Core.Email 模块