ModaHub AI模型开源社区——向量数据库Milvus存储操作教程

news2024/11/16 18:33:38

目录

存储操作

数据插入

数据落盘

定时触发

客户端触发

缓冲区达到上限触发

数据合并

建立索引

删除

删除集合

删除分区

删除实体

数据段整理

数据读取

常见问题


存储操作

阅读本文前,请先阅读 存储相关概念。

数据插入

客户端通过调用 insert 接口来插入数据,单次插入的数据量不能大于 256 MB。插入数据的流程如下:

  1. 服务端接收到插入请求后,将数据写入预写日志(WAL)。
  2. 当预写日志成功记录后,返回插入操作。
  3. 将数据写入可写缓冲区(mutable buffer)。

每个集合都有独立的可写缓冲区。每个可写缓冲区的容量上限是 128 MB。所有集合的可写缓冲区总容量上限由系统参数 insert_buffer_size 决定,默认是 1 GB。

数据落盘

缓冲区中的数据落盘有三种触发机制:

定时触发

系统会定时触发落盘任务。定时间隔由系统参数 auto_flush_interval 决定,默认是 1 秒。

落盘操作的流程如下:

  1. 系统开辟一块新的可写缓冲区,用于容纳后续插入的数据。
  2. 系统将之前的可写缓冲区设为只读(immutable buffer)。
  3. 系统把只读缓冲区的数据写入磁盘,并将新数据段的描述信息写入元数据后端服务。

完成以上流程后,系统就成功创建了一个数据段(segment)。

客户端触发

由客户端调用 flush 接口触发落盘。

缓冲区达到上限触发

累积数据达到可写缓冲区的上限(128MB)会触发落盘操作。

每个数据段的所有相关文件都被存放在以段 ID 命名的文件夹中,比如记录实体 ID 的 UID 文件、用于标记已被删除实体的 delete_docs 文件,以及用于快速查找实体的布隆过滤器(bloom-filter)文件。

段内数据文件请参考 分区和数据段 中的示意图。

 

数据合并

小数据段过多会导致查询性能低下。为了避免此问题,Milvus 会在需要的时候触发后台段合并任务,即把小数据段合并成新的数据段,并删除小数据段、更新元数据。其中,新数据段的大小不低于 index_file_size。

合并操作的触发时机如下:

  • 启动服务时
  • 完成落盘任务后
  • 建索引前
  • 删除索引后

已经建立了索引的数据段不会参与合并操作。

建立索引

未建立索引之前,Milvus 对集合的查询操作都是以暴力搜索(brute-force search)的方式完成的。为提高查询性能,你可以为集合建立合适的索引。索引建成后,每个数据段都会产生一个索引文件,此时元数据也会同步更新。

更多索引相关信息,请参考 向量索引。

删除

删除集合

  1. 客户端调用 drop_collection 接口来删除一个集合。
  2. 服务端接收到请求后,仅在元数据中把该集合(包括它的分区和段)标记为删除状态。对于已标记为删除状态的集合,将无法再对其进行任何新操作(比如插入和查询)。
  3. 后台的清理任务将被标记为删除状态的集合(包括它的分区和段)从元数据中删除,然后将该集合的数据文件和文件夹从磁盘上删除。如果在删除操作之前已经有对该集合的操作正在执行,后台清理任务不会删除正在使用的段,直到操作完成。

删除分区

  1. 客户端调用 drop_partition 接口来删除一个分区。
  2. 服务端接收到请求后,仅在元数据中把该分区(包括它的段)标记为删除状态。
  3. 后台清理任务按照删除集合的流程来删除该分区和元数据。

删除实体

Milvus 为每个数据段建立了一个 delete_docs 文件,用来记录被删除向量在段内的位置。

Milvus 使用布隆过滤器(bloom filter)来快速判断一个实体 ID 是否可能存在于某个数据段中。因此,在每个数据段下都创建了一个名为 bloom_filter 的文件。

删除实体的流程如下:

  1. 客户端调用 delete_entity_by_id 接口删除集合中的实体。
  2. 服务端接收到请求后,执行以下操作删除实体:
    • 如果该实体在插入缓冲区中,直接删除该实体。
    • 否则,根据每个数据段的布隆过滤器判断该实体所处的数据段,然后更新该数据段的 delete_docs 以及 bloom_filter 文件。

 

数据段整理

查询一个数据段时,Milvus 会将该数据段的实体数据以及 delete_docs 文件读入内存。虽然被删除的实体不参与计算,但它们也会被读入内存。所以,一个数据段中被删除的实体越多,浪费的内存资源和磁盘空间越多。为了减少此类不必要的资源消耗,Milvus 提供了数据段整理(compact)的操作,流程如下:

  1. 客户端调用 compact 接口。
  2. 服务端接收到请求后,根据 delete_docs 所记录的信息,将段内未被删除的实体写入一个新的数据段,并把旧数据段标记为删除状态。之后将由后台清理任务负责清理被标记为删除状态的数据段。如果旧数据段已建立索引,新数据段产生之后会重建索引。

compact 操作会忽略被删除向量占比小于 10% 的数据段。

数据读取

  1. 客户端调用 get_entity_by_id 接口读取原始实体数据。
  2. 服务端接收到请求后,通过布隆过滤器找到实体所在的段,返回该实体 ID 对应的数据。

浮点型向量在 Milvus 中以单精度(float)方式存储。

 

常见问题


Milvus 可以通过扩展某些接口(如 S3 接口、GlusterFS 接口)来扩展存储吗?

目前暂不支持。

Milvus 有没有数据导出的功能?

目前没有专门的工具实现该功能。你可以通过 get_entity_by_id 得到指定 ID 对应的向量。

 

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

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

相关文章

读写锁原理解读

目录 回顾什么是读写锁 t1 w.lock,t2 r.lock t3 r.lock,t4 w.lock t1 w.unlock t2 r.unlock,t3 r.unlock 写锁上锁流程 写锁释放流程 读锁上锁流程 读锁释放流程 回顾什么是读写锁 读写锁是一对互斥锁,分为读锁和写锁。…

UG\NX二次开发 显示临时标记 UF_DISP_display_temporary_point

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 显示临时标记 UF_DISP_display_temporary_point,最后一个参数控制显示的类型,可通过下表1表2查询 表1: 表2: 0UF_DISP_NO_MARKER

jenkins构建异常Type org.springframework.boot.maven.RepackageMojo not present

目录 问题描述解决过程 问题描述 我公司dev环境使用的是spug构建,当时构建并没有出现这种问题,而线上使用的是jenkins部署到华为云上,构建线上的时候却出现了这个问题。 java.lang.TypeNotPresentException: Type org.springframework.boot…

leetcode72. 编辑距离(动态规划-java)

编辑距离 leetcode72. 编辑距离题目描述解题思路代码演示 动态规划代码演示 动态规划专题 leetcode72. 编辑距离 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/edit-distance 题目描述 给你两个单词 word1 和 word2&am…

关于DMS批量导入的注意事项

前言 当你注意了列命和数据库对应关系,批量后报错,常见的是无列名都好找问题,说一条不好找的 SQL解析失败:解析文件失败::读取字段定义异常,字段定义存在非法的空字段,请检查提交的Excel文件首行中的字段定义1、列名…

springboot本机启动elasticjob抛出异常HostException(ip is null)

1.使用的elasticjob版本为3.0.1 2.本机的IPV4在校验isReachable 返回false&#xff08;可能是使用无线网&#xff0c;导致ip验证问题&#xff09; 3.最后引入Groovy解决 引入包 <dependency><groupId>org.codehaus.groovy</groupId><artifactId>gr…

【CSS3系列】第九章 · 响应式布局和BFC

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

OpenCV快速生成带边缘的棋盘格

import numpy as np import cv2 as cv# 生成棋盘格 def generateChessBoard(xSize32,ySize32,w6,h6)::param xSize: 棋盘尺寸:param ySize: 棋盘尺寸:param w: 横向角点个数:param h: 纵向角点个数:return:w,hw1,h1boardnp.zeros((xSize*(w),ySize*(h),3),np.uint8)board.fill(…

【网页复习】4道大题

&#x1f38a;专栏【 前端易错合集】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;实现如图的导航栏⭐代码&#x1f384;注…

多元分类预测 | Matlab萤火虫算法(FA)优化极限学习机(ELM)的分类预测,多特征输入模型。FA-ELM分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab萤火虫算法(FA)优化极限学习机(ELM)的分类预测,多特征输入模型。FA-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程…

6 中断概览

目录 中断概览 STM32异常和中断介绍 STM32的异常一览 STM32的中断表一览 中断的优先级 中断的优先级分组 优先级分组 嵌套向量中断控制器(NVIC)功能 中断概览 什么是中断&#xff1f; 中断是指计算机运行过程中&#xff0c;出现某些意外情况需主机干预时&#xff0c;机器…

Acer宏碁笔记本电脑 暗影骑士AN515-54原厂Win10系统工厂模式恢复出厂OEM原装预装系统

Acer宏基笔记本电脑&#xff0c;Acer宏碁暗影骑士AN515-54原装出厂Windows10系统恢复原厂OEM系统镜像 系统自带所有驱动、Office办公软件、出厂主题壁纸LOGO、 Acer Care Center、Quick Access、 NitroSense风扇控制等预装程序 所需要工具&#xff1a;32G或以上的U盘&#xf…

Selenium教程__获取浏览器名称和版本(5)

通过学习本文内容&#xff0c;将能够轻松地获取并利用浏览器的信息&#xff0c;从而更好地适应不同的浏览器环境&#xff0c;并确保您的代码和测试脚本能够在各种浏览器中正常运行。 from selenium import webdriverdriver webdriver.Chrome() driver.maximize_window() dri…

SpringSecutiry整合thymeleaf模板

如何构建SpringSecutiry框架&#xff0c;这里就不详细赘述了&#xff0c;直接速通。 目录 thymeleaf教程&#xff08;转载&#xff09; 所需的依赖 Thymeleaf模板文件 具体的项目搭建 资源展览图 接口展示 Thymeleaf模板内容展示 thymeleaf教程&#xff08;转载&#xff09…

uAvionix开始首次FCC授权的C波段无人机数据链BVLOS飞行

2023年6月19日消息&#xff0c;uAvionix是一家为有人和无人驾驶飞机提供指挥、导航和监视技术的领先供应商&#xff0c;该公司今天宣布已获得FCC批准&#xff0c;并与FAA协调&#xff0c;在俄克拉荷马州Choctaw Nation新兴技术试验场运行其SkyLink C波段指挥和控制(C2)无线电&a…

netwox 基于 Ethernet 层构造 IP 数据包【网络工程】(保姆级图文)

目录 基于 Ethernet 层构造 IP 数据包1) 不指定选项&#xff0c;直接运行该模块&#xff0c;查看默认设置。执行命令如下&#xff1a;3) 验证构造的数据包&#xff0c;使用 Wireshark 工具捕获数据包&#xff0c;如图所示。其中&#xff0c;第 2 个数据包为构造的 IPv4 数据包。…

单元测试-sonarqube本地安装使用

sonarqube sonarqube是什么 SonarQube是一个开源的代码分析平台&#xff0c;用来持续分析和评测项目源代码的质量。通过SonarQube我们可以检测出项目中重复代码&#xff0c;潜在bug,代码规范&#xff0c;安全性漏洞等问题&#xff0c;并通过SonarQube web UI展示出来。 Sona…

ESC1+ESC4+CVE-2022–26923

CVE-2022–26923 创建机器账户并指定dnsHostName为dc的域名 certipy account create -u certhacktest.com -p Admin123456. -dc-ip 10.211.55.3 -user win -pass win123456 -dns DC.hacktest.com 用该机器账户向ADCS请求证书 certipy req -u win$hacktest.com -p win123456…

毕业设计之图书馆座位预约系统

1.系统开发环境 系统采用的集成开发环境为IDEA&#xff0c;使用JAVA语言及SPRINGBOOT框架进行开发&#xff0c;其中硬件环境和软件环境如下&#xff1a; 2.硬件环境 处理器&#xff1a;Intel(R) Core(TM) i7-9750 GPU 3.00GHz 内存&#xff1a;8GB 3.软件环境 操作系统&…

【无标题】实时系统Preempt RT与Xenomai之争!谁更主流,谁更实时?

选择争论一直存在 大家知道EtherCAT是实时现场总线技术&#xff0c;当我们开发一款支持EtherCAT总线的控制器时&#xff0c;实时操作系统的选择不仅对于产品本身是最重要的一部分&#xff0c;而且对产品研发的整个过程也影响深远。 根据EtherCAT主站提供商Acontis公司对全球新客…