1、支持 MMap 的数据存储

在 Milvus 中,内存映射文件允许将文件内容直接映射到内存中。这一功能提高了内存效率,尤其是在可用内存稀缺但完全加载数据不可行的情况下。这种优化机制可以增加数据容量,同时在一定限度内确保性能;但当数据量超出内存太多时,搜索和查询性能可能会严重下降,因此请根据情况选择打开或关闭此功能。

配置内存映射:从 Milvus 2.4 开始,您可以灵活调整静态配置文件,在部署前为整个集群配置默认内存映射设置。此外,您还可以动态更改参数,以微调群集和索引级别的内存映射设置。展望未来,未来的更新将把内存映射功能扩展到字段级配置。

...
queryNode:mmap:# Set memory mapping property for whole clustermmapEnabled: false | true# Set memory-mapped directory path, if you leave mmapDirPath unspecified, the memory-mapped files will be stored in {localStorage.path}/ mmap by default. mmapDirPath: any/valid/path 
....

自 2.4.10 之后,配置queryNode.mmap.mmapEnabled 分成以下四个独立字段,所有默认值均为false :

  • queryNode.mmap.vectorField, 控制向量数据是否为 mmap;

  • queryNode.mmap.vectorIndex控制向量索引是否为 mmap;

  • queryNode.mmap.scalarField控制标量数据是否为 mmap;

  • queryNode.mmap.scalarIndex控制标量索引是否为 mmap;

...
queryNode:mmap:vectorField: false # Enable mmap for loading vector datavectorIndex: false # Enable mmap for loading vector indexscalarField: false # Enable mmap for loading scalar datascalarIndex: false # Enable mmap for loading scalar index
....

此外,只能单独为某个 Collections 打开或关闭向量索引和向量数据 mmap,而不能为其他 Collections 打开或关闭。

兼容性:如果原始配置queryNode.mmap.mmapEnabled 设置为true ,则此时新添加的配置将设置为true 。如果queryNode.mmap.mmapEnabled 设置为false ,如果新配置设置为true ,则最终值将为true

2、群集操作符期间:动态配置

在群集运行期间,可以在 Collections 或索引级别动态调整内存映射设置。

Collections 层级,内存映射会应用到集合内所有未索引的原始数据,不包括主键、时间戳和行 ID。这种方法特别适用于大型数据集的综合管理。

若要动态调整 Collections 中的内存映射设置,可使用set_properties() 方法。在这里,可以根据需要在True 或False 之间切换mmap.enabled 。

collection = Collection("test_collection") # Replace with your collection namecollection.set_properties({'mmap.enabled': True})

在 2.4.10 之后,可以使用add_field 方法调整 Collections 中的内存映射设置。在这里,可以根据需要在True 或False 之间切换mmap_enabled 

schema = MilvusClient.create_schema()schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=768, mmap_enabled=True)

对于索引级设置,内存映射可专门应用于向量索引,而不会影响其他数据类型。对于需要优化向量搜索性能的 Collections 来说,这一功能非常宝贵。

要为 Collections 中的某个索引启用或禁用内存映射,可调用alter_index() 方法,在index_name 中指定目标索引名称,并将mmap.enabled 设置为True 或False

collection.alter_index(index_name="vector_index", # Replace with your vector index nameextra_params={"mmap.enabled": True} # Enable memory mapping for index
)

3、建议在哪些情况下启用内存映射?启用此功能后有哪些权衡?

内存有限或性能要求适中时,建议使用内存映射。启用此功能可提高数据加载能力。例如,在 2 个 CPU 和 8 GB 内存的配置下,启用内存映射比不启用内存映射加载的数据多 4 倍。对性能的影响各不相同:

  • 在内存充足的情况下,预期性能与只使用内存的情况类似。

  • 如果内存不足,预期性能可能会下降。

  • Collection-level 和 Index-level 配置之间的关系是什么?

    Collection-level 和 index-level 不是包含关系,Collection-level 控制原始数据是否启用了 mmap,而 index-level 仅适用于向量索引。

  • 有没有推荐用于内存映射的索引类型?

    有,建议使用 HNSW 启用毫米映射。我们曾测试过 HNSW、IVF_FLAT、IVF_PQ/SQ 系列索引,IVF 系列索引的性能下降严重,而 HNSW 索引启用毫米映射后的性能下降仍在预期之内。

  • 内存映射需要什么样的本地存储?

    高质量的磁盘可以提高性能,NVMe 驱动器是首选。

  • 标量数据能否进行内存映射?

    内存映射可应用于标量数据,但不适用于基于标量字段建立的索引。

  • 如何确定不同级别内存映射配置的优先级?

    在 Milvus 中,当跨多个级别明确定义内存映射配置时,索引级和 Collect 级配置共享最高优先级,然后是集群级配置。

  • 如果我从 Milvus 2.3 升级,并配置了内存映射目录路径,会发生什么情况?

    如果从 Milvus 2.3 升级并配置了内存映射目录路径 (mmapDirPath),您的配置将被保留,启用内存映射的默认设置 (mmapEnabled) 将是true 。迁移元数据对同步现有内存映射文件的配置很重要。

4、Milvus为什么需要load整个index data到内存中,而不是类似MySQL这种传统数据库做分片加载

向量每个维度的值是float32,占用4个字节。每条1536维的向量占用的空间是6KB。1000条就是6MB,一百万条6GB,一亿条就是600GB,十亿条就是6TB。这个是理论值。然后用不同的索引类型使用的内存关系如下:HNSW/IVF_FLAT ------------- 这两种需要的内存和理论值基本相等IVF_SQ8/IVF_PQ-------------- 这两种需要的内存大约相当于理论值的25%~30%

如果除了向量之外还有别的字段,比如Int64类型的字段,十亿条就占用 十亿乘以8字节 这么多空间。如果是VARCHAR类型,那就跟字符串的长度相关,由于是用UTF-8编码,每个字符可能占用1~4字节。

所以,你基本可以按这个路子估计出任意数据所需的最小内存。

选择占内存小的索引是最简单的方法。降维也是一个方法,但降维的工具你要自己去找。

  1. 换索引类型

  1. 降维HNSW/IVF_FLAT更适用于高维向量且对内存和查询速度有较高要求,而IVF_SQ8/IVF_PQ适用于大规模数据且能够在较低的内存消耗下实现高效的近似最近邻搜索。不知道这个对索引选用的说法对不对。像我这个大规模数据,感觉是得用IVF_SQ8/IVF_PQ去搞

IVF_SQ8对搜索精度有较大影响DiskANN需要高性能磁盘,并且对延迟有很大影响HNSW需要较多的内存使用你也可以直接使用Zilliz cloud的Capacity optimized 实例,目前是性价比比较高的选择。1亿向量大概只需要16CU,大概一万多一个月

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

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

相关文章

C++编程之旅-- -- --默认成员函数(全详解)

目录前言构造函数构造函数形式:构造函数的特性:explicit关键字析构函数析构函数的概念析构函数的特性含有类类型的成员变量的类析构函数的调用拷贝构造函数拷贝构造函数的概念拷贝构造函数的特性浅拷贝和深拷贝:拷贝构造函数典型调用场景&…

Linux网络编程:TCP的远程多线程命令执行

目录 前言: 一、前文补充 二、服务端的修改 三、Command类的新增 前言: 好久不见,最近忙于其他事情,就耽误了咱们的Linux的网络部分的学习。 今天咱们先来给之前所学的TCP的部分进行一个首尾工作,主要是给大家介绍…

重学React(三):状态管理

背景: 继续跟着官网的流程往后学,之前已经整理了描述UI以及添加交互两个模块,总体来说还是收获不小的,至少我一个表面上用了四五年React的前端小卡拉米对React的使用都有了新的认知。接下来就到了状态管理(React特地加…

java web项目入门了解

目录一、项目流程1. 使用servle2. 使用框架二、了解java web项目构造1. 项目目录结构2. 查看页面访问顺序3. 发起请求:jqueryajax4. 接受参数5. JSONJSON 数组三、get和post请求区别一、项目流程 1. 使用servle 有客户端和服务端,客户端和服务端进行交…

网络资源模板--基于Android Studio 实现的日记本App

目录 一、测试环境说明 二、项目简介 三、项目演示 四、部设计详情(部分) 创建修改页面 五、项目源码 一、测试环境说明 电脑环境 Windows 11 编写语言 JAVA 开发软件 Android Studio (2020) 开发软件只要大于等于测试版本即可(近几年官网直接下载也可…

GO的启动流程(GMP模型/内存)

目录第一部分:程序编译第二部分:函数解读1)Golang 核心初始化过程2)创建第一个协程3)启动系统调度4)跳转main函数5)总结第三部分:GMP模型Goroutine流程解读第四部分:内存…

OLTP与OLAP:实时处理与深度分析的较量

OLTP(Online Transaction Processing)定义:OLTP 系统主要用于管理事务性应用程序的数据。这类系统需要支持大量的短时、快速的交互式事务,比如银行交易、在线购物订单等。特点:实时处理:OLTP 系统要求对数据…

数据安全与隐私保护:企业级防护策略与技术实现

引言:数据安全的新时代挑战在数字化转型加速的今天,数据已成为企业最核心的资产。然而,数据泄露事件频发,据 IBM《2024 年数据泄露成本报告》显示,全球数据泄露平均成本已达445 万美元,较 2020 年增长了 15…

AI_RAG

一.为什么需要RAG(AI幻觉)大模型LLM在某些情况下给出的回答很可能错误的,涉及虚构甚至是故意欺骗的信息。二.什么是RAGRAG是一种结合“信息检索”和“文本生成”的技术,旨在提升生成式AI模型的准确性和可靠性。它通过以下两个核心…

LeetCode111~130题解

LeetCode111.二叉树的最小深度: 题目描述: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入:root …

n8n飞书webhook配置(飞书机器人、飞书bot、feishu bot)Crypto节点、js timestamp代码、Crypto node

自定义机器人使用指南 利用 n8n 打造飞书 RSS 推送机器人 文章目录自定义机器人使用指南注意事项功能介绍在群组中添加自定义机器人操作步骤邀请自定义机器人进群。- 进入目标群组,在群组右上角点击更多按钮,并点击 设置。- 在右侧 设置 界面&#xff0…

nhdeep档案管理工具软件官网

欢迎访问nhdeep官网: www.nhdeep.com NHDEEP提供一系列专业的单机版档案管理工具,满足不同场景下的档案管理需求,无需网络连接,数据安全可靠。所有工具均提供免费试用版下载。 档案综合管理系统单机版:全面的档案管理解决方案&a…

RocketMQ节点部署计算方案

节点计算公式 业务场景 预期峰值TPS:200,000 单组容量:40K TPS 容灾要求:同城双机房 nameServer节点数max(3, (15/50) 1) max(3, 0.3 1) max(3, 1.3) 3 Broker节点数ceil(200,000 / 40,000) 5组 总节点数 NameServer节点Broker组数(Mas…

MyBatis联合查询 - XML篇

文章目录数据库设计MyBatis 配置MyBatis 映射文件Mapper 接口总结数据库设计 建表 SQL CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL );CREATE TABLE order (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT NOT NULL,order_no VARCHAR(…

Kubelet 探针如何选择 IP:status.PodIP 溯源与“同 Pod 两个 IP“现象解析

背景与现象同一个 Pod 的 readiness 和 liveness 探针日志显示连接的 IP 不一致(例如 10.10.6.10:9999 与 10.10.6.32:9999)。本文从 kubelet 源码入手,解释探针目标 IP 的来源、为何会出现两个不同 IP,并给出建议与验证方法。在如…

Arm Development Studio 安全通告:CVE-2025-7427

安全之安全(security)博客目录导读 目录 一、概述 二、CVE 详情 三、受影响产品 四、建议 五、致谢 六、版本历史 一、概述 ARM已知悉一个影响 Arm Development Studio 的安全漏洞,该漏洞可能允许攻击者执行 DLL 劫持攻击(DLL hijacking attack&…

C#异步编程双利器:异步Lambda与BackgroundWorker实战解析

**摘要:**深入剖析两种异步编程范式,解决GUI线程阻塞难题 一、异步Lambda表达式:事件处理的轻量化利器 核心价值:简化事件响应中的异步操作,避免UI线程阻塞 ✅ 典型应用场景(WPF示例)&#xff1…

yolo world (1): 论文解读

YOLO 系列检测器以其高效性和实用性而闻名。然而,它们依赖于预定义和训练的目标类别,这限制了其在开放场景中的适用性。为了解决这一限制,我们提出了 YOLO-World,这是一种创新的方法,通过视觉-语言建模和大规模数据集预训练,增强了 YOLO 的开放词汇检测能力。具体来说,我…

【JVM】深入解析Java虚拟机

目录 1. 区分JDK,JRE 和 JVM 1.1 JVM 1.2 JRE 1.3 JDK 1.4 关系总结 2. 跨平台性 3. JVM中的内存划分 4. JVM的类加载机制 5. 双亲委派模型 6. 垃圾回收机制(GC) 6.1 识别垃圾 6.1.1 单个引用 6.1.2 多个引用 6.2 释放垃圾 6.…

98-基于Python的网上厨房美食推荐系统

基于Python的网上厨房美食推荐系统 - 技术分享博客 📋 目录 项目概述技术栈系统架构核心功能实现数据库设计推荐算法数据可视化部署与优化项目特色总结与展望 🎯 项目概述 项目背景 随着生活节奏的加快,越来越多的人开始关注美食制作&…