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

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

相关文章:

Milvus - 内存索引类型详解

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

【STM32】按键控制LED 光敏传感器控制蜂鸣器

文章目录 前置知识按键介绍传感器模块硬件电路按键硬件电路传感器模块硬件电路 C语言数据类型在Keil中的对应写法C语言枚举 按键控制LED接线图Hardware文件夹(模块化编程)LED驱动程序封装Key(按键)驱动程序封装 main.c源文件 光敏传感器控制蜂鸣器接线图…...

flutter-防抖

在Flutter中实现输入框的防抖功能,通常是为了减少用户输入时触发的事件数量,特别是在进行网络请求时。防抖(Debounce)意味着在用户停止输入一段时间后才触发事件。以下是实现输入框防抖的一种方法: 1、使用Debounce类…...

什么是贪心算法

贪心算法(Greedy Algorithm)是一种逐步构建解决方案的方法,在每一步选择中都作出局部最优的选择,希望最终能够获得全局最优解。贪心算法的核心思想是贪心选择性质,即每次选择当前看来最好的解,不考虑未来可…...

YOLOv6-4.0部分代码阅读笔记-effidehead_lite.py

effidehead_lite.py yolov6\models\heads\effidehead_lite.py 目录 effidehead_lite.py 1.所需的库和模块 2.class Detect(nn.Module): 3.def build_effidehead_layer(channels_list, num_anchors, num_classes, num_layers): 1.所需的库和模块 import torch import t…...

重学SpringBoot3-整合 Elasticsearch 8.x (一)客户端方式

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 这里写目录标题 1. 为什么选择 Elasticsearch?2. Spring Boot 3 和 Elasticsearch 8.x 的集成概述2.1 准备工作2.2 添加依赖 3. Elasticsearch 客户端配置方式…...

极简实现酷炫动效:Flutter隐式动画指南第三篇自定义Flutter隐式动画

目录 前言 一、TweenAnimationBuilder 二、使用TweenAnimationBuilder实现的一些动画效果 1.调整透明度的动画 2.稍微复杂点的组合动画 3.数字跳动的动画效果 前言 上两节博客分别介绍了Flutter中的隐式动画的基础知识以及使用隐式动画实现的一些动画效果。当系统提供的隐…...

无人机维护保养、部件修理更换技术详解

无人机作为一种精密的航空设备,其维护保养和部件修理更换是确保飞行安全、延长使用寿命的重要环节。以下是对无人机维护保养、部件修理更换技术的详细解析: 一、无人机维护保养技术 1. 基础构造理解: 熟悉无人机的基本构造,包括…...

xilinx vitis 更换硬件平台——ZYNQ学习笔记5

1、重新生成硬件信息 2、选择带有bit信息 3、设施路径和名字 4、打开更新硬件选项 5、选择新的硬件信息 6、打开系统工程界面 7、复位硬件信息 更新完毕...

vscode makfile编译c程序

编译工具安装 为了在 Windows 上安装 GCC,您需要安装 MinGW-w64。 MinGW-w64 是一个开源项目,它为 Windows 系统提供了一个完整的 GCC 工具链,支持编译生成 32 位和 64 位的 Windows 应用程序。 1. 下载MinGW-w64源代码,如图点…...

【学术论文投稿】探索嵌入式硬件设计:揭秘智能设备的心脏

【IEEE出版】第六届国际科技创新学术交流大会暨通信、信息系统与软件工程学术会议(CISSE 2024)_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看:https://ais.cn/u/nuyAF3 目录 引言 嵌入式系统简介 嵌入式硬件设计的组成部分 设…...

JavaScript 概述

### JavaScript 概述 JavaScript 是一种广泛使用的编程语言,它最初由 Netscape 公司的 Brendan Eich 在1995年创建,目的是为网页添加交互性。随着时间的发展,JavaScript 已经从一个简单的脚本语言演变成了一种功能强大的编程语言,…...

2024年10月个人工作生活总结

本文为 2024年10月工作生活总结。 研发编码 一个证书过期问题记录 某天,现场反馈某服务无法使用问题,经同事排查,是因为服务证书过期导致的。原来,证书的有效期设置为5年,这个月刚好到期。 虽然这个问题与自己无直接…...

uniapp ,微信小程序,滚动(下滑,上拉)到底部加载下一页内容

前言 小程序的内容基本都是滑动到底部加载下一页,这个一般都没有什么好用的组件来用,我看vant和uniapp的插件里最多只有个分页,没有滚动到底部加载下一页。再次做个记录。 效果预览 下滑到底部若是有下一页,则会自动加载下一页&…...

MySQL中的日志类型有哪些?binlog、redolog和undolog的作用和区别是什么?

简介: MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志&#xff0…...

【uni-app】创建自定义模板

1. 步骤 打开自定义模板文件夹 在此文件夹下创建模板文件(注意后缀名) 重新点击“新建页面” 即可看到新建的模板 2. 注意事项 创建的模板必须文件类型对应(vue模板就创建*.vue文件, uvue模板就创建*.uvue文件)...

Cesium移动Primitive位置

与传统的Entity实体不同,Primitive作为一种自定义基本图元,几何形状、材质和其他属性均由使用者定义,在需要绘制大量静态几何图形的高效渲染场景中更为适用。 Primitive的移动涉及到矩阵变换,并不像Entity那样给它替换一个新的坐…...

安卓13默认连接wifi热点 android13默认连接wifi

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 有时候我们需要让固件里面内置好,相关的wifi的ssid和密码,让固件起来就可以连接wifi,不用在手动操作。 2.问题分析 这个功能,使用普通的安卓代码就可以实现了。 3.代…...

parted 磁盘分区

目录 磁盘格式磁盘分区文件系统挂载使用扩展 - parted、fdisk、gdisk 区别 磁盘格式 parted /dev/vdcmklabel gpt # 设置磁盘格式为GPT p # 打印磁盘信息此时磁盘格式设置完成! 磁盘分区 开始分区: mkpart data_mysql # 分区名&…...

第三百零八节 Log4j教程 - Log4j日志到数据库

Log4j教程 - Log4j日志到数据库 我们可以使用log4j API通过使用org.apache.log4j.jdbc.JDBCAppender对象将信息记录到数据库中。 下表列出了JDBCAppender的配置属性。 属性描述bufferSize设置缓冲区大小。默认大小为1。driverJDBC驱动程序类。默认为sun.jdbc.odbc.JdbcOdbcDr…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率&#xff0c…...

AI,如何重构理解、匹配与决策?

AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

【系统架构设计师-2025上半年真题】综合知识-参考答案及部分详解(回忆版)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20~21题】【第…...

LangChain + LangSmith + DeepSeek 入门实战:构建代码生成助手

本文基于 Jupyter Notebook 实践代码&#xff0c;结合 LangChain、LangSmith 和 DeepSeek 大模型&#xff0c;手把手演示如何构建一个代码生成助手&#xff0c;并实现全流程追踪与优化。 一、环境准备与配置 1. 安装依赖 pip install langchain langchain_openai2. 设置环境变…...