Milvus - 内存索引类型详解

1. 背景概述

在大规模数据处理和向量相似性搜索场景中,内存索引的使用显著提升了查询速度和效率。Milvus 提供了多种内存索引类型,以满足不同场景下的性能需求。本文将介绍 Milvus 支持的各种内存索引类型及其适用场景、配置参数和使用方法。

2. 为什么选择内存索引?

内存索引可以有效组织数据,从而提升查询性能。在 Milvus 中,每个向量字段(Field)可以选择一种适合的索引类型,以优化特定查询的速度。Milvus 支持的索引类型主要基于近似最近邻搜索(ANNS)算法,通过允许一定精度的牺牲来实现快速搜索,从而加速大规模数据集上的查询。

3. Milvus 支持的索引类型概览及其使用

Milvus 支持多种索引类型,不同索引在性能、精确度和内存需求方面有所不同。以下内容展示每种索引的使用场景、配置参数及示例代码。

1. FLAT 索引
  • 适用场景:数据集较小且对搜索精度要求极高。
  • 特点:进行穷举搜索,不对数据进行压缩,保证 100% 的召回率和精确性。
  • 配置与使用:无需配置额外参数,直接创建即可。
# 配置索引参数
index_params = {"metric_type": "L2", "index_type": "FLAT"}# 创建索引
collection.create_index(field_name="embedding", index_params=index_params)
2. IVF_FLAT 索引
  • 适用场景:需要较高的召回率和快速查询的场景。
  • 特点:将向量数据划分为多个聚类单元,通过调节 nprobe 在召回率与查询速度之间找到平衡。
  • 配置与使用
# 配置索引参数
index_params = {"metric_type": "L2","index_type": "IVF_FLAT","params": {"nlist": 128}
}# 创建索引
collection.create_index(field_name="embedding", index_params=index_params)# 配置搜索参数
search_params = {"params": {"nprobe": 16}
}
results = collection.search(data=query_vectors, anns_field="embedding", param=search_params, limit=top_K)
3. IVF_SQ8 索引
  • 适用场景:内存资源有限,允许轻微的召回率下降。
  • 特点:标量量化(SQ)将每个浮点数(4 字节)压缩为 1 字节,减少内存占用。
  • 配置与使用
# 配置索引参数
index_params = {"metric_type": "L2","index_type": "IVF_SQ8","params": {"nlist": 128}
}# 创建索引
collection.create_index(field_name="embedding", index_params=index_params)# 配置搜索参数
search_params = {"params": {"nprobe": 8}
}
results = collection.search(data=query_vectors, anns_field="embedding", param=search_params, limit=top_K)
4. IVF_PQ 索引
  • 适用场景:内存资源有限,允许较大召回率下降,适合极高速查询。
  • 特点:结合 IVF 和 PQ(乘积量化),进一步压缩数据存储需求。
  • 配置与使用
# 配置索引参数
index_params = {"metric_type": "L2","index_type": "IVF_PQ","params": {"nlist": 128,"m": 4,  # 量化因子数"nbits": 8}
}# 创建索引
collection.create_index(field_name="embedding", index_params=index_params)# 配置搜索参数
search_params = {"params": {"nprobe": 8}
}
results = collection.search(data=query_vectors, anns_field="embedding", param=search_params, limit=top_K)
5. SCANN 索引
  • 适用场景:高精度、高查询速率的场景,适合内存资源较为充足的场景。
  • 特点:与 IVF_PQ 类似,但利用 SIMD 提升计算效率。
  • 配置与使用
# 配置索引参数
index_params = {"metric_type": "L2","index_type": "SCANN","params": {"nlist": 128,"reorder_k": 64}
}# 创建索引
collection.create_index(field_name="embedding", index_params=index_params)# 执行搜索
results = collection.search(data=query_vectors, anns_field="embedding", limit=top_K)
6. HNSW 索引
  • 适用场景:高精度和快速查询,适合内存资源充足的场景。
  • 特点:HNSW 使用多层结构的导航小世界图(NSW)进行搜索。
  • 配置与使用
# 配置索引参数
index_params = {"metric_type": "L2","index_type": "HNSW","params": {"M": 16,"efConstruction": 200}
}# 创建索引
collection.create_index(field_name="embedding", index_params=index_params)# 配置搜索参数
search_params = {"params": {"ef": 64}
}
results = collection.search(data=query_vectors, anns_field="embedding", param=search_params, limit=top_K)

4. 索引的配置与选择

在选择索引时,需要综合考虑数据规模、查询速度需求、硬件资源等因素。以下是对常用索引的总结:

索引类型适用场景精确度查询速度内存需求
FLAT小数据集,需 100% 召回
IVF_FLAT大数据集,需较高召回
IVF_SQ8内存有限,可接受轻微精度损失
IVF_PQ内存有限,可接受较大精度损失极快极低
SCANN高精度,内存充足极快
HNSW高精度,内存充足极快

5. 结语

内存索引在 Milvus 中起到优化查询性能的关键作用。通过合理选择和配置索引类型,可以在精确度和查询速度之间找到平衡,以满足不同的业务需求。希望本文的内容能够帮助您在大规模数据处理中实现更高效的向量相似性搜索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5之Common.py

文章目录 1.学习目的2.网络模型![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/67b8dbd00c9b4034ba370fc8b8a6031a.jpeg)3.common.py分析 1.学习目的 YOLOv5中最关键一个模型类 2.网络模型 3.common.py分析 # Ultralytics YOLOv5 🚀, AGPL-3.0 license…

【设计模式】如何用C++实现依赖倒置

【设计模式】如何用C实现依赖倒置 一、什么是依赖倒置? 依赖倒置原则(Dependency Inversion Principle,DIP)是SOLID面向对象设计原则中的一项。它的核心思想是: 高层模块不应该依赖于低层模块,两者都应该…

2、liunx网络基础

一、TCP/IP协议概述 Linux服务器默认网卡配置文件在/etc/sysconfig/network-scripts/下,命名的名称一般为:ifcfg-eth0 ifcfg-eth1 ,eth0表示第一块网卡,eth1表示第二块网卡,依次类推。一般DELL R720标配有4块千兆网卡。 TCP/IP&a…

MySQL的SQL语句之触发器的创建和应用

触发器 Trigger 一.触发器 作用:当检测到某种数据表发生数据变化时,自动执行操作,保证数据的完整性,保证数据的一致性。 1.创建一个触发器 如上图所示,查看这个create的帮助信息的时候,这个create trig…

2016年ATom-1活动期间航班的每10秒一次的碳 monoxide (CO) 观测数据

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 ATom: Observed and GEOS-5 Simulated CO Concentrations with Tagged Tracers for ATom-1 简介 该数据集包含2016年ATom-1活动期间航班的每10秒一次的碳 monoxide (CO) 观测数据,以及来自戈达德地球观…

Ambari里面添加hive组件

1.创建hive数据库 在添加hive组件之前需要做的事情,先在master这个虚拟机里面创建好hive 先进入虚拟机里面进入mysql 然后输入这个命令看看有没有自己创建的hive数据库 show databases;有的话会显示下面这个样子 没有的同学使用以下命令可以在MySQL中创建hive数…

Java 集合一口气讲完!(上)||o(*°▽°*)o|Ю [有人吗?]

Java 集合遍历 Java集合教程 - Java集合遍历 在Java Collections Framework中,不同类型的集合使用不同类型的数据结构以不同的方式存储它们的元素。 一些集合对它们的元素有排序,有些没有。集合框架提供了遍历集合的以下方法: 使用迭代器使…

Oracle视频基础1.1.3练习

1.1.3 需求: 完整格式查看所有用户进程里的oracle后台进程 查看物理网卡,虚拟网卡的ip地址 ps -ef | grep oracle /sbin/ifconfig要以完整格式查看所有用户进程中的 Oracle 后台进程,并查看物理和虚拟网卡的 IP 地址,可以使用以下…

akshare股票涨跌板与资金流向相关分析

## akshare文档涨跌板 https://akshare.akfamily.xyz/data/stock/stock.html#id374资金流向 https://akshare.akfamily.xyz/data/stock/stock.html#id154涨跌板:https://quote.eastmoney.com/ztb/detail#typeztgc 资金流向:https://data.eastmoney.com/…

11 P4995 跳跳!

题目&#xff1a; 核心&#xff1a; 贪心策略&#xff1a;每次都跳距离自己最远的石头 收获&#xff1a;双指针&#xff08;下标&#xff09;的使用 代码&#xff1a; #include<iostream> using namespace std; # define M 100 #include<algorithm> #include<ma…

热点聚焦:AI在医疗保健领域的深度渗透与变革

内容概要 随着人工智能技术的不断进步&#xff0c;我们正在见证一个充满奇迹的转变&#xff0c;尤其是在医疗保健领域。这种转变不仅仅涉及到提高效率&#xff0c;更在于重新定义我们对疾病诊断和治疗方案的理解。通过智能算法&#xff0c;AI能够在早期识别潜在的健康问题&…

计算机网络八股文个人总结

1.TCP/IP模型和OSI模型的区别 在计算机网络中&#xff0c;TCP/IP 模型和 OSI 模型是两个重要的网络协议模型。它们帮助我们理解计算机通信的工作原理。以下是它们的主要区别&#xff0c;以通俗易懂的方式进行解释&#xff1a; 1. 模型层数 OSI 模型&#xff1a;有 7 层&#…

使用onnxruntime-web 运行yolov8-nano推理

ONNX&#xff08;Open Neural Network Exchange&#xff09;模型具有以下两个特点促成了我们可以使用onnxruntime-web 直接在web端上运行推理模型&#xff0c;为了让这个推理更直观&#xff0c;我选择了试验下yolov8 识别预览图片&#xff1a; 1. 跨平台兼容性 ONNX 是一种开…

Qt 练习做一个登录界面

练习做一个登录界面 效果 UI图 UI代码 <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Dialog</class><widget class"QDialog" name"Dialog"><property name"ge…

ArcGIS软件之“新建中学最适合地址”地图制作

目录 最终效果图(全文图中的颜色类似即可&#xff0c;形状一样为标准&#xff09;第一步、设置现有中学的欧式距离第二步、将计算好的欧式距离 进行重分类第三步、进行核密度分析第四步、进行人口密度的重分类第五步、进行土地使用的要素转栅格第六步、对上一步进行重分类第七步…

就业市场变革:AI时代,我们将如何评估人才?

内容概要 在这个充满变革的时代&#xff0c;就业市场正被人工智能&#xff08;AI&#xff09;技术深刻改变。随着技术的进步&#xff0c;传统的人才评估方式逐渐显示出其局限性。例如&#xff0c;过去依赖于纸质简历和面试评估的方式在快速变化的环境中难以准确识别真实的人才…

Linux Kernel Programming (个人读书笔记)

目录 Before everything begins 笔者的环境 关于如何在Arch Linux下载Virtual Box 下载一个镜像&#xff0c;然后开启一个简单的虚拟机 在Ubuntu虚拟机下东西 配置我们的内核 啥是KConfig和KBuild? 构建内核配置选择 启动&#xff01;一个好的内核配置的开始 使用分发…

【传知代码】智慧医疗:纹理特征VS卷积特征

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 论文概述纹理特征和深度卷积特征算法流程数据预处理方法纹理特征提取深度卷积特征提取分类网络搭建代码复现BLS_Model.py文件——分类器搭建py…

算法深度剖析:前缀和

文章目录 前言一、一维前缀和模板二、二维前缀和模板三、寻找数组的中心下标四、除自身以外数组的乘积五、和为 K 的子数组六、和可被 K 整除的子数组七、连续数组八、矩阵区域和 前言 本章将深度剖析前缀和&#xff0c;以及总结前缀和模板。 前缀和是一种在算法和数据处理中…

leetcode双指针题目总结

文章目录 283. 移动零题目描述解题 11. 盛最多水的容器题目描述解法解释时间复杂度 15. 三数之和题目描述解法思路解释优势 42. 接雨水题目描述解答具体思路 283. 移动零 题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非…