Doris数据库BE——rowset版本追踪

news2024/11/17 23:55:05

在这里插入图片描述

rowset代码位置be/src/olap/version_graph.cpp,字面意思行集合,由一行或多行组成。rowset版本简单理解为rowset编号,每次导入生成一个rowset,比如insert执行10次会生成10个rowset,一次streamload生成一个rowset。

版本的格式为:version=[start_version,end_version] ,比如你执行10次insert into my_table values(“a”,“b”,“c”); 那么会生成10个rowset,rowset从1到10编号分别[0-0],[1-1],[2-2],[3-3],[4-4],[5-5],[6-6],[7-7],[8-8],[9-9],[10,10]。随后doris会根据表的模型对会这些rowset进行合并,合并的过程在doris内部称为compaction

原始版本:[0-0],[1-1],[2-2],[3-3],[4-4],[5-5],[6-6],[7-7],[8-8],[9-9],[10,10]

第一次合并后:[0-2],[3-6],[7-10]

第二次合并 : [0-10]

Doris构建一个版图来为维护上述版本的变更过程,实现过程:[0-0],[1-1],[2-2],[3-3],[4-4],[5-5],[6-6],[7-7],[8-8],[9-9],[10,10]。每个版本的start,end_version+1作为一个图的一个顶点,顶点保存在数组中,顶点的边的值表示end_version+1对应顶点在数组中的下标。如0-1,有一条边1表示start_version为0,end_version的在下标为1的位置再减去1,即存在[0-0]这个版本其他节点类推。
在这里插入图片描述
第一次合并后图变为:如0-3,有一条边3表示start_version未0,end_version在下表未3的位置在减去1,即存在[0-2]这个版本。
在这里插入图片描述
第二次合并后:
在这里插入图片描述

给定一个版本怎么知道合并路径,比如[0-10]这个版本是怎么合并过来的?

首先找到节点0发现边有三条边11,3,1,那么意味着节点0有3次变更,首先最大开始。下标11对应的节点为11,那么对应end_version=11-1=10 ,刚是[0-10]所以最后一次合并版本为[0-10]。下标3对应节点为3,那么对应end_version=3-1=2,即[0-2],start_version在从3开始,发现版本[3-6],start_version再从7开始,发现[7-10] ,依次类推。按照这个过程会得到一个版本合并树,从而了解整个的合并过程。
在这里插入图片描述

给定一个版本如何找到最少的连续rowset,比如我要找版本为[0-10] 连续rowset 就是[0-10],最少意味着查询的时候最快?

给定[0-10],从节点0开始,从下标最大的边开始,发现[0-10] 就是我们要找的最小的连续一致的rowset。

对于单一的数据分片(Tablet),新的数据先写入内存结构,随后刷入磁盘,形成一个个不可变更的数据文件,这些数据文件保存在一个rowset中。而Doris的Compaction机制主要负责根据一定的策略对这些Rowset进行合并,将小文件合并成大文件,进而提升查询性能。
每一个rowset都对应一个版本信息,表示当前rowset的版本范围,版本信息中包含了两个字段first和second,first表示当前rowset的起始版本(start version),second表示当前rowset的结束版本(end version)。每一次数据导入都会生成一个新的数据版本,保存在一个rowset中。未发生过compaction的rowset的版本信息中first字段和second字段相等;执行compaction时,相邻的多个rowset会进行合并,生成一个版本范围更大的rowset,合并生成的rowset的版本信息会包含合并前的所有rowset的版本信息。Compaction分为两种类型:base compaction和cumulative compaction。其中cumulative compaction则主要负责将多个最新导入的rowset合并成较大的rowset,而base compaction会将cumulative compaction产生的rowset合入到start version为0的基线数据版本(Base Rowset)中,是一种开销较大的compaction操作。这两种compaction的边界通过cumulative point来确定。base compaction会将cumulative point之前的所有rowset进行合并,cumulative compaction会在cumulative point之后选择相邻的数个rowset进行合并,如图1-2所示。
在这里插入图片描述

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

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

相关文章

Pillow:Python的图像处理库(安装与使用教程)

在Python中,Pillow库是一个非常强大的图像处理库。它提供了广泛的图像处理功能,让我们可以轻松地操作图像,实现图像的转换、裁剪、缩放、旋转等操作。此外,Pillow还支持多种图像格式的读取和保存,包括JPEG、PNG、BMP、…

LeetCode 热题 100(七):105. 从前序与中序遍历序列构造二叉树、14. 二叉树展开为链表

题目一: 105. 从前序与中序遍历序列构造二叉树https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 思路:依据前序遍历的根左右和中序遍历的左根右, 且根左长度=左根 代码: …

直播预告:把脉2023年下半场—主动防御邮箱盗号威胁

长期以来,承载着大量敏感数据的企业是黑产团伙的首要攻击目标。Coremail结合多年以来的邮件防护经验发现,黑产团伙针对企业邮箱账号安全的两大攻击方式为暴力破解和钓鱼邮件攻击。 一、企业邮箱安全现状 01、使用弱密码 企业员工使用弱密码让黑产团伙有…

docker 学习-- 04 实践2 (lnpmr环境)

docker 学习 系列文章目录 docker 学习-- 01 基础知识 docker 学习-- 02 常用命令 docker 学习-- 03 环境安装 docker 学习-- 04 实践 1(宝塔) docker 学习-- 04 实践 2 (lnpmr环境) 文章目录 docker 学习 系列文章目录1. 配…

QSqlDatabase(2)实例,QTableView显示数据库表数据

目录 前言 1、实现的功能 2、具体的代码实现 前言 想了解QSqlDatabase基本知识的,以及增删改查的用法,可以浏览上一篇文章: QSqlDatabase(1)基本接口,以及(增删改除)的简单实例_Ivy_belief的博客-CSDN…

华为云云服务器评测|基于华为云云耀云服务器L实例开展性能评测,例如 MySQL、Clickhouse、Elasticsearch等等

在当今云计算时代,越来越多的企业和个人开始选择将应用部署在云服务器上,以便更好地满足高性能、可靠性和可扩展性等需求。而华为云云耀云服务器L实例不仅提供了高性能和可靠性的计算和存储资源,而且具有灵活和高效的成本控制,深受…

红黑树(AVL树的优化)上

红黑树略胜AVL树 AVL树是一颗高度平衡搜索二叉树: 要求左右高度差不超过1(严格平衡) 有的大佬认为AVL树太过严格,对平衡的要求越严格,会带来更多的旋转(旋转也还是会有一定的消耗!!…

05-基础例程5

基础例程5 1、超声波测距 实验介绍 ​ HC-SR04超声波传感器是一款测量距离的传感器。其原理是利用声波在遇到障碍物反射接收结合声波在空气中传播的速度计算的得出。 外观 管脚功能的定义 VCC:供电电源;Trig:触发信号;Echo&a…

元素居中的方法总结

垂直居中 行内元素垂直居中 单行文本垂直居中 1.line-height: 200px; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0&…

0基础学习VR全景平台篇 第92篇:智慧景区教程

一、上传素材 1.上传全景素材 第一步&#xff1a;进入【素材管理】 第二步&#xff1a;选择【全景图智慧景区】分类 第三步&#xff1a;选择相对景区作品分组&#xff0c;上传全景素材 2.素材标注 第一步&#xff1a;选择上传成功后素材&#xff0c;点击【未标注】 第二步&…

继承

目录 引入 继承介绍 概念 优点 分类 公有继承 保护继承 私有继承 特点 单继承 多继承 赋值 介绍 分类 对象之间赋值(拷贝构造) 验证普通赋值需要创建临时变量 指针/引用赋值 赋值原理 继承中的作用域 介绍 隐藏 / 重定义 前提 介绍 派生类的默认成员函…

TIA博途_更新或修改程序时,如何避免数据块中的参数丢失?

TIA博途_更新或修改程序时,如何避免数据块中的参数丢失? DB 快照功能 可以通过捕获 DB 块变量实际值快照用于恢复值操作,捕获的实际快照值可以复制到 CPU 中的实际值中,也可以用于替换变量的起始值。 通过快照能解决以下场景的问题: • 在 HMI 中设置了很多工艺参数,担心…

python怎么提取视频中的音频

目录 操作步骤 1. 安装MoviePy库&#xff1a; 2. 导入MoviePy库和所需的模块&#xff1a; 3. 提取音频&#xff1a; 可能遇到的问题 1. 编解码器支持&#xff1a; 2. 依赖项安装&#xff1a; 3. 文件路径问题&#xff1a; 4. 内存消耗&#xff1a; 5. 输出文件大小&a…

Rabbitmq的消息转换器

Spring会把你发送的消息序列化为字节发送给MQ&#xff0c;接收消息的时候&#xff0c;还会把字节反序列化为Java对象 ,只不过&#xff0c;默认情况下Spring采用的序列化方式是JDK序列化。众所周知&#xff0c;JDK序列化存在下列问题&#xff1a; 数据体积过大 有安全漏洞 可读…

水稻叶病害数据集(目标检测,yolo使用)

1.数据集文件夹 train文件夹&#xff08;44229张&#xff09;&#xff0c;test文件夹&#xff08;4741张&#xff09;&#xff0c;valid文件夹&#xff08;6000张&#xff09; 2.train文件夹展示 labels展示 标签txt展示 data.yaml文件展示 对数据集感兴趣的可以关注最后一行…

vue cli构建的项目出现 Uncaught runtime errors

使用 vue/cli 脚手架构建的项目&#xff0c;在 npm run dev 运行后&#xff0c;页面出现 Uncaught runtime errors 报错遮罩层&#xff0c;如下图所示。 报错原因 这种错误通常是运行时出的问题&#xff0c;可能是网络错误&#xff0c;可能是变量未定义等等。 这种错误默认在开…

华硕笔记本摄像头倒置怎么办?华硕笔记本摄像头上下颠倒怎么调整

笔记本电脑相较于台式电脑&#xff0c;更易携带&#xff0c;解决了很大一部分人的使用需求。但是笔记本电脑也存在很多不足&#xff0c;比如华硕笔记本电脑就经常会出现摄像头倒置的错误&#xff0c;出现这种问题要如何修复呢&#xff1f;下面就来看看详细的调整方法。 华硕笔记…

linux的make和makefile学习

linux的make和makefile学习 准备工作使用GNU链接库链接到math库编写复利程序 创建自己的库链接到主目录 不同的C标准 准备工作 安装GCC和Make工具 安装中文输入法 参考&#xff1a;http://t.csdn.cn/eH0Ow sudo apt-get update sudo apt-get install ibus sudo apt-get inst…

Flutter Web 项目网络请求报 XMLHttpRequest error 解决方案

使用http库进行简单的网络请求时&#xff0c;运行在Chrome浏览器上&#xff0c;网络请求一直报错 XMLHttpRequest error&#xff0c;而在iOS 模拟器上运行则正常&#xff0c;后面在postman上发送请求&#xff0c;也是正常的。这就是很尴尬了&#xff01;&#xff01;&#xff0…

JavaScript基础知识1

基本说明 1.JavaScript能改变html内容&#xff0c;能改变html属性&#xff0c;能改变html样式&#xff08;CSS&#xff09;&#xff0c;能完成页面的数据验证。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…