milvus Delete api写s3的流程

Delete api写s3的流程

milvus版本:v2.3.2

整体架构:

在这里插入图片描述

Delete 的数据流向

在这里插入图片描述

delete相关配置

dataNode:segment:insertBufSize: 16777216 # Max buffer size to flush for a single segment.deleteBufBytes: 67108864 # Max buffer size to flush del for a single channelsyncPeriod: 600 # The period to sync segments if buffer is not empty.

当collection已经有flushed文件,如果后续有insert和delete操作,这个配置文件控制这个行为。

s3文件不支持进行文件内容的编辑。因此需要有一种机制能够进行insert和delete。

delete在内存中(buffer)的流程

堆栈:

start()(internal\util\flowgraph\node.go)|--go nodeCtx.work()(同上)|--n.Operate(input)(同上)|--dn.bufferDeleteMsg()(internal\datanode\flow_graph_delete_node.go)|--dn.delBufferManager.StoreNewDeletes()(同上)
func (m *DeltaBufferManager) StoreNewDeletes(segID UniqueID, pks []primaryKey,tss []Timestamp, tr TimeRange, startPos, endPos *msgpb.MsgPosition,
) {// 获取delDataBufbuffer, loaded := m.Load(segID)// 如果不存在则新建if !loaded {buffer = newDelDataBuf(segID)}// 将pks存入buffersize := buffer.Buffer(pks, tss, tr, startPos, endPos)m.pushOrFixHeap(segID, buffer)m.updateMeta(segID, buffer)m.usedMemory.Add(size)metrics.DataNodeConsumeMsgRowsCount.WithLabelValues(fmt.Sprint(paramtable.GetNodeID()), metrics.DeleteLabel).Add(float64(len(pks)))
}

pks存储的是主键值。

这是对内存的操作。

delete写入s3的流程

Start()(internal\util\flowgraph\node.go)|--go nodeCtx.work()(同上)|--n.Operate(input)(同上)|--dn.flushManager.flushDelData()(internal\datanode\flow_graph_delete_node.go)|--m.handleDeleteTask()(internal\datanode\flush_manager.go)|--m.getFlushQueue(segmentID).enqueueDelFlush()(同上)|--q.getFlushTaskRunner(pos).runFlushDel()(同上)|--runFlushDel()(internal\datanode\flush_task.go)|--task.flushDeleteData()(同上)|--t.MultiWrite(ctx, t.data)(internal\datanode\flush_manager.go)

当达到syncPeriod或者buffer满或者执行flush操作,会触发写s3操作。

看看这个函数flushDelData():

// notify flush manager del buffer data
func (m *rendezvousFlushManager) flushDelData(data *DelDataBuf, segmentID UniqueID,pos *msgpb.MsgPosition,
) error {// del signal with empty dataif data == nil || data.delData == nil {m.handleDeleteTask(segmentID, &flushBufferDeleteTask{}, nil, pos)return nil}collID, partID, err := m.getCollectionAndPartitionID(segmentID)if err != nil {return err}// 编码解码器,提供序列化,反序列化功能delCodec := storage.NewDeleteCodec()// 序列化blob, err := delCodec.Serialize(collID, partID, segmentID, data.delData)if err != nil {return err}logID, err := m.AllocOne()if err != nil {log.Error("failed to alloc ID", zap.Error(err))return err}blobKey := metautil.JoinIDPath(collID, partID, segmentID, logID)blobPath := path.Join(m.ChunkManager.RootPath(), common.SegmentDeltaLogPath, blobKey)// 合成kvskvs := map[string][]byte{blobPath: blob.Value[:]}data.LogSize = int64(len(blob.Value))data.LogPath = blobPathlog.Info("delete blob path", zap.String("path", blobPath))m.handleDeleteTask(segmentID, &flushBufferDeleteTask{ChunkManager: m.ChunkManager,data:         kvs,}, data, pos)return nil
}

delCodec.Serialize()返回的变量blob类型为*Blob。

// Blob is a pack of key&value
type Blob struct {Key    stringValue  []byteSize   int64RowNum int64
}

blobPath为s3的文件路径。

files/delta_log/447918772784340274/447918772784340275/447918772784340283/447918772783939606

delta_log存储的是insert和delete增量数据。

s3的截图:

在这里插入图片描述

在这里插入图片描述

总结

1.delete/insert增量数据写入buffer。

2.满足一定条件buffer刷入s3。

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

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

相关文章

汽修专用产品---选型介绍 汽修示波器 汽车示波器 汽车电子 汽修波形 汽车传感器波形 汽车检测

为了满足汽车电子用户的测量需求,我司特推出汽修专用版示波器,一键测量,轻松找出汽车问题。 LOTO各种型号的示波器其实都可以用作汽车传感器信号波形的检测。汽修应用中,工程师对示波器的性能要求对于LOTO产品来说不算高。 在我们…

《TCP/IP详解 卷一》第6章 DHCP

目录 6.1 引言 6.2 DHCP 6.2.1 地址池和租用 6.2.2 DHCP和BOOTP消息格式 6.2.3 DHCP和BOOTP选项 6.2.4 DHCP协议操作 6.2.5 DHCPv6 6.2.6 DCHP中继 6.2.7 DHCP认证 6.2.8 重新配置扩展 6.2.9 快速确认 6.2.10 位置信息(LCI和LoST) 6.2.11 移…

Unity Shader ASE基础效果思路与代码(二):边缘光、扰动火焰

Unity Shader ASE基础效果思路与代码(二):边缘光、扰动火焰 这里写目录标题 Unity Shader ASE基础效果思路与代码(二):边缘光、扰动火焰边缘光效果展示:代码与思路: 扰动火焰效果展示:代码与思路: 边缘光 …

snmp协议开通教程

目录 一、什么是snmp协议? 二、snmp协议可以用来干什么? 三、snmp协议的开通 1、snmpv2协议开通 2、snmpv3协议开通 一、什么是snmp协议? SNMP(Simple Network Management Protocol)是一种用于网络管理的标准协议&a…

STM32物联网(封装AT指令进行TCP连接及数据的接收和发送)

文章目录 前言一、AT指令函数封装1.向ESP8266发送数据函数2.设置ESP8266工作模式3.连接WIFI函数4.查询IP地址5.连接TCP服务器6.发送数据到TCP服务器7.接收并解析来自TCP服务器的数据8.关闭TCP服务器 二、代码测试总结 前言 本篇文章将继续带大家学习STM32物联网,那…

Vue 2.0 中的 Vuex Store 状态管理器核心概念和组成部分

Vue 2.0 中的 Vuex Store 状态管理器核心概念和组成部分 State(状态): Vuex Store 的核心就是集中式存储应用的所有组件的状态。它是一个单一状态树,所有的组件都从这个状态树中读取数据并可以响应状态的变化。 const state {c…

Ubuntu20.04 查看系统版本号

目录 uname -auname -vlsb_release -acat /etc/issuecat /proc/version uname -a 查看系统发行版本号和操作系统版本 uname -v 查看版本号 lsb_release -a 查看发行版本信息 cat /etc/issue 查看系统版本 cat /proc/version 查看内核的版本号

计算机网络面经_体系结构一文说清

编辑:平平无奇的羊 目录 基础 1. 计算机网络结构体系 三种模型之间的区别: 如何背诵: 进阶 OSI七层模型: TCP/IP四层模型: TCP/IP五层模型 总结 字节实习生为大家带来的是计算机网络面经系列博文,由浅…

分散的产品开发团队

分散的产品开发团队指的是各个团队或成员在地理位置上分布在不同地方,通过互联网和现代通讯技术进行协作和沟通,以共同完成产品开发任务的团队模式。 这种团队模式的优势在于可以充分利用各地的人才资源,降低团队的管理和协作成本&#xff0…

SpringBoot和SpringCloud的区别,使用微服务的好处和缺点

SpringBoot是一个用于快速开发单个Spring应用程序的框架,通过提供默认配置和约定大于配置的方式,快速搭建基于Spring的应用。让程序员更专注于业务逻辑的编写,不需要过多关注配置细节。可以看成是一种快速搭建房子的工具包,不用从…

ThreeJS 几何体顶点position、法向量normal及uv坐标 | UV映射 - 法向量 - 包围盒

文章目录 几何体的顶点position、法向量normal及uv坐标UV映射UV坐标系UV坐标与顶点坐标设置UV坐标案例1:使用PlaneGeometry创建平面缓存几何体案例2:使用BufferGeometry创建平面缓存几何体 法向量 - 顶点法向量光照计算案例1:不设置顶点法向量…

探讨javascript中运算符优先级

如果阅读有疑问的话,欢迎评论或私信!! 本人会很热心的阐述自己的想法!谢谢!!! 文章目录 深入理解JavaScript运算符优先级运算符优先级概述示例演示示例1:加法和乘法运算符的优先级示…

CentOS7 安装Python3.8

在 CentOS 7 上,按照以下步骤安装 Python 3.8: 添加EPEL仓库:首先安装 EPEL(Extra Packages for Enterprise Linux)仓库 sudo yum install epel-release安装Software Collections (SCL)仓库:随后&#xff0…

【坑】Spring Boot整合MyBatis,一级缓存失效

一、Spring Boot整合MyBatis,一级缓存失效 1.1、概述 MyBatis一级缓存的作用域是同一个SqlSession,在同一个SqlSession中执行两次相同的查询,第一次执行完毕后,Mybatis会将查询到的数据缓存起来(缓存到内存中&#xf…

证件照(兼容H5,APP,小程序)

证件照由uniappuyui开发完成&#xff0c;并同时兼容H5、App、微信小程序、支付宝小程序&#xff0c;其他端暂未测试。 先看部分效果图吧具体可以下方复制链接体验demo 首页代码 <template><view class""><view class"uy-m-x-30 uy-m-b-20"…

Redis 事务机制之ACID属性

事务属性 事务是对数据库进行读写的一系列操作。在事务执行时提供ACID属性保证&#xff1a; 包括原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;…

如何申请代码签名证书?

代码签名证书是一种关键的数字证书&#xff0c;它的功能在于为软件代码提供安全签名和验证服务&#xff0c;从而提升软件整体的安全性和用户信任度。获取代码签名证书的过程通常涉及多个严谨步骤&#xff0c;确保通过正式流程获得的证书能有效加强软件完整性和真实性保护。以下…

Innodb底层原理与Mysql日志机制深入剖析

MySQL的内部组件结构 大体来说&#xff0c;MySQL 可以分为 Server 层和存储引擎层两部分。 Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函…

华为配置WDS手拉手业务示例

配置WDS手拉手业务示例 组网图形 图1 配置WDS手拉手业务示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。但企业考虑到AP通过有线部署的成本较高&#xff0c;所以通过建立…

Android 开发一个耳返程序(录音,实时播放)

本文目录 点击直达 Android 开发一个耳返程序程序编写1. 配置 AndroidManifast.xml2.编写耳返管理器3. 录音权限申请4. 使用注意 最后我还有一句话要说怕相思&#xff0c;已相思&#xff0c;轮到相思没处辞&#xff0c;眉间露一丝 Android 开发一个耳返程序 耳返程序是声音录入…