POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 列式数据是如何存储与处理的

c022ddb3dd8867d9393ba8c3fcbcf1f8.png

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共950人左右 1 + 2 + 3)新人会进入3群

第四部分将深入介绍列索引存储,这是PolarDB-IMCI处理分析查询的关键部分。PolarDB-IMCI支持高度调优的面向事务处理的云存储的基于行的存储引擎[14, 28]。然而,基于行的数据格式因其无法有效地访问分析查询而闻名。受领先的工业级数据库(例如Oracle [30]、SQL Server [32])的启发,PolarDB-IMCI通过内存中的列索引实现了双重数据格式,以增强OLAP功能。

89e5897002e9688980b58d5cf491a2a7.png

如图4所示,PolarDB-IMCI中的列索引作为现有行存储的补充存储。在PolarDB-IMCI中,表的列可以选择地参与列索引。PolarDB-IMCI将表的所有行分为多个行组,并进行追加式写入以提高写入性能。在行组中,数据的每一列都与一些统计元数据一起组织成数据包。为了提供快照隔离,每个行组都包含一个插入版本ID(VID)映射和一个删除版本ID映射来控制并发事务处理的可见性。由于行组是追加式的,因此删除操作需要显式提供给定主键的行ID以设置该行的删除版本。为此,PolarDB-IMCI实现了一个行ID定位器(即两层LSM树)来将主键映射到列索引中行的物理位置。

数据包布局。首先,将关系表分成多个行组,行组的大小可配置(即每个行组64K行),而剩余的行组则形成部分行组(例如,图4中的行组N)。为了实现快速数据摄取,行组是追加式的(§4.2)。也就是说,全尺寸的行组是不变的,而部分行组将以追加式方式完成。在行组内属于同一列的数据以压缩格式组织成数据包,以降低空间消耗。请注意,PolarDB-IMCI不会压缩部分数据包,因为它们会持续更新。

元数据。为了避免在查询执行过程中进行不必要的数据访问,PolarDB-IMCI为每个数据包维护一个包元数据。包元数据跟踪每个包的最小和最大值,以及采样直方图,这有益于列扫描。例如,当查询语句指定WHERE子句谓词时,可以使用所引用列的包元数据来检查是否可以跳过对该包的扫描。

为了更好地理解在数据包上进行DML操作的流程,现在我们描述如何在列索引数据结构上进行DML操作。

• 插入:将行插入列索引包括以下四个步骤。首先,列索引从其部分Packs中分配一个空的RID。其次,定位器通过主键更新插入的行的新RID(即在LSM树中添加新记录)。然后,列索引将行数据写入空槽中(例如,图4中行组N内的数据包)。最后,插入VID记录已插入数据的事务提交序列号(即时间戳)。由于插入VID映射维护每个插入数据的插入版本,因此也遵循只追加的写入模式。

• 删除:删除操作通过主键(PK)通过RID定位器检索行的RID,然后使用其事务提交序列号设置相应的删除VID。之后,从定位器中删除PK和RID之间的映射以确保数据一致性。

• 压缩:当部分包达到最大容量并且需要减少空间消耗时,其被转换为数据包,然后压缩到磁盘中。压缩过程采用写时复制模式,以避免访问争用。也就是说,在不更改部分包的情况下生成一个新的数据包,PolarDB-IMCI在压缩后更新元数据,以将部分包替换为新的数据包(即原子地更新指向新数据包的指针)。对于各种数据类型,列索引采用不同的压缩算法。数字列采用参考帧、增量编码和位压缩压缩的组合,而字符串列使用字典压缩。此外,由于数据包是不可变的,当活动事务大于所有VID时,该数据包的插入VID映射是无用的,即没有活动事务引用该插入VID映射。在这种情况下,PolarDB-IMCI删除行组内的插入VID映射,以减少内存占用。

• 压缩:当部分包达到最大容量并且需要减少空间消耗时,其被转换为数据包,然后压缩到磁盘中。压缩过程采用写时复制模式,以避免访问争用。也就是说,在不更改部分包的情况下生成一个新的数据包,PolarDB-IMCI在压缩后更新元数据,以将部分包替换为新的数据包(即原子地更新指向新数据包的指针)。对于各种数据类型,列索引采用不同的压缩算法。数字列采用参考帧、增量编码和位压缩压缩的组合,而字符串列使用字典压缩。此外,由于数据包是不可变的,当活动事务大于所有VID时,该数据包的插入VID映射是无用的,即没有活动事务引用该插入VID映射。在这种情况下,PolarDB-IMCI删除行组内的插入VID映射,以减少内存占用。

• 紧缩:删除操作可以在数据包中设置删除VID,为该数据包打洞。随着无效行数的增加,扫描性能和空间效率会下降。PolarDB-IMCI定期检测和重新排列底部的数据包,以保持列索引的无效行的低水位。例如,稀疏数据包,有效行少于一半,被选为下溢。然后,后台线程发出紧缩事务,每个迁移的有效行进行大量的更新操作,将选定数据包的所有有效行重新附加到部分包中。请注意,列索引的更新操作是原地的,因此在紧缩期间或之后,旧行仍然可以通过前台操作进行访问,从而实现非阻塞更新。在没有活动事务访问它们时,紧缩后的数据包将被永久删除。

972d4cb31fbc552742c258eac3c06ef0.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何实现浏览器内多个标签页之间的通信?

1、使用 LocalStorage 特点:同域共享存储空间;持久化将数据存储在浏览器;提供事件监听storage变化 实现逻辑: A页面将数据存储在本地。B页面监听storage的变化,同步storage的最新数据; 好处:操…

探索MediaPipe的人像分割

MediaPipe是Google开源的计算机视觉处理框架,基于TensorFlow来训练模型。图像分割模块提供人像分割、头发分割、多类分割。本文主要探索如何实现人像分割,当然在人像分割基础上,我们可以做背景替换、背景模糊。 目录 一、配置参数与模型 1…

微擎后台getshell,低权限也可以

/web/index.php?csite&aeditor 这个文件可以编辑html,然后前台会解析成php 没测试最新版 比如编辑专题:/web/index.php?csite&aeditor&dopage&multiid0 上架抓包 改html内容为php 复制前台url 访问之 博客原文: 微擎后…

GEE入门学习,遥感云大数据分析、管理与可视化以及在林业应用丨灾害、水体与湿地领域应用丨GPT模型应用

目录 ①海量遥感数据处理与GEE云计算技术实践应用 ②GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践应用 ③GEE遥感云大数据林业应用典型案例实践及GPT模型应用 ④遥感云大数据在灾害、水体与湿地领域典型案例实践及GPT模型应用 ①海量遥感…

关于SpringBoot、Nginx 请求参数包含 [] 特殊符号 返回400状态

问题来源: 使用RESTful风格发送带有特殊符号(如:点、大括号等)的请求,当使用Nginx做地址映射时会返回报"HTTP Status 400-Bad Request"的错误,这个时候我们需要对Nginx的映射方式做一下调整。 Nginx调整完发现跳转后又报…

回归预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实现WOA-CNN-GR…

ELK日志记录——Kibana组件——grok 正则捕获插件、mutate数据修改插件、multiline 多行合并插件、date 时间处理插件

grok 正则捕获插件 grok 使用文本片段切分的方式来切分日志事件 内置正则表达式调用 %{SYNTAX:SEMANTIC} ●SYNTAX代表匹配值的类型,例如,0.11可以NUMBER类型所匹配,10.222.22.25可以使用IP匹配。 ●SEMANTIC表示存储该值的一个变量声明&…

【新版系统架构】第十七章-通信系统架构设计理论与实践

软考-系统架构设计师知识点提炼-系统架构设计师教程(第2版) 第一章-绪论第二章-计算机系统基础知识(一)第二章-计算机系统基础知识(二)第三章-信息系统基础知识第四章-信息安全技术基础知识第五章-软件工程…

《数学模型(第五版)》学习笔记(1) 第1章 建立数学模型 第2章 初等模型

参考数学建模论坛《数学模型(第三版)》学习笔记 http://www.madio.net/thread-146480-1-1.html 参考视频 数模视频(姜启源、谢金星) https://www.bilibili.com/video/BV1VJ411w7r3/?spm_id_from333.788.recommend_more_video.0&vd_source3ef6540f84…

【高级程序设计语言C++】初识模板

1. 函数模板1.1函数模板的实例化1.2显示实例化1.3模板参数的匹配原则 2.类模板2.1类模板的定义格式2.2类模板的实例化 1. 函数模板 概念: 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函…

哪些软件分析工具需要使用到pdb符号文件?

目录 1、什么是pdb文件?pdb文件有哪些用途? 2、pdb文件的时间戳与pdb文件名称 3、常用软件分析工具有哪些? 4、使用Windbg调试器查看函数调用堆栈时需要加载pdb文件 4.1、给Windbg设置pdb文件路径 4.2、为什么要设置系统库pdb文件下载服…

springboot家具商城系统

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven…

vuepress - - - 首页底部版权信息加a标签超链接跳转或备案信息跳转链接

修改前 默认的底部版权信息只能填写纯文本,加不了超链接跳转等。 对应\docs\README.md内容: 修改后 修改后,点击Zichen跳转会打开新的网页。 看官网例子 底部添加了备案号跳转链接。 找到官网的github部署的文件。点导航栏中的“指…

【从零开始学习CSS | 第一篇】选择器介绍

目录 前言: 选择器介绍: 各类选择器: 总结: 前言: 本文以及后续几篇文章我们将会集中介绍CSS中的常见选择器,选择器的出现可以让我们实现对具体的元素标签进行定制,因此我们要掌握好各类选择…

js逆向补环境-调试工具vscode与nodejs使用之无环境联调

目录 一、啊哈一、Nodejs安装1、nodejs最新版本的安装(windows)2、旧版nodejs更新成最新版本(windows)3、nodejs安装(linux) 二、vscode安装使用(windows)1、下载安装vscode2、vscode运行插件Code Runner安…

Docker 安装与基本使用

一、简介 Docker 官方文档、Docker 中文文档,更新会落后于官方文档 什么是 Docker ? Docker 是一个应用打包、分发、部署的工具,也可以把它理解为一个轻量的虚拟机,它只虚拟软件需要的运行环境,多余的一点都不要,而普…

【C++】list模拟实现

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸C 🛹Linux 📕 学习格言:博观而约取&#xff0…

LVS负载均衡集群之LVS-DR部署

目录 一、lVS-DR集群概述 二、LVS-DR数据包流向分析 四、LVS-DR特性 五、DR模式 LVS负载均衡群集部 5.0配置虚拟 IP 地址(VIP 192.168.14.180) 5.1.配置负载调度器(192.168.14.101) 5.2部署共享存储(NFS服务器:192.168.14.10…

6.2Java EE——Spring的入门程序

下面通过一个简单的入门程序演示Spring框架的使用,要求在控制台打印“张三,欢迎来到Spring”,实现步骤具体如下。 1、在IDEA中创建名称为chapter06的Maven项目,然后在pom.xml文件中加载需使用到的Spring四个基础包以及Spring依赖…

etcd的使用

什么是etcd ETCD是一个分布式、可靠的key-value存储的分布式系统,用于存储分布式系统中的关键数据;当然,它不仅仅用于存储,还提供配置共享及服务发现;基于Go语言实现 。 etcd的特点 完全复制:集群中的每…