循序渐进丨MogDB Ustore存储引擎剖析

48afcdd1c49bba6fa66d3df34a1fa87b.png

背景

MogDB 数据库支持不同的存储引擎,其中行存引擎有Astore和Ustore,目前大部分客户场景使用的是Astore,也就是 Append Update(追加更新)模式。

Astore对于业务中的增、删以及HOT Update(即同一页面内更新)有很好的性能表现,但对于跨数据页面的非HOT UPDATE场景,存在历史数据回收不够高效的问题。

造成这一问题的主要原因是Astore中将新旧版本元组集中存储,在进行老数据回收时需要遍历所有数据页面;同时在执行更新操作时后,数据空间中存在一条元组的多个版本,频繁的更新操作会导致页表中存在大量的历史版本,造成数据空间的膨胀。虽然VACUUM机制可以进行一定的空间回收,但是并不能彻底解决表空间的膨胀问题,在元组中会形成很多的碎片空洞,此时只能通过VACUUM FULL进行表的重建,但是VACUUM FULL会阻塞业务,并且带来很高的IO负担。空间膨胀问题,进一步会导致数据库的增删改查性能出现不同程度的下降;数据可见性的判断需要从旧往新遍历版本链,也会造成读操作的时延增加。

8dfbe29ad120c0951070f0ab6e92e366.png

Ustore设计方案

Ustore的设计是为了解决Astore中数据空间膨胀及空间膨胀引起的性能问题。Ustore中采用新旧版本分离存储的方式,将最新版本的“有效数据”存储在数据页面上,并单独开辟一段UNDO空间,用于统一管理历史版本的“垃圾数据”。因此Ustore中数据空间不会由于频繁更新而膨胀,同时历史版本“垃圾数据”集中管理,回收效率更高。

为了进一步提升性能,Ustore存储引擎采用NUMA-aware的UNDO子系统设计,使得UNDO子系统可以在多核平台上有效扩展;同时索引使用多版本技术,解决索引清理问题,有效提升了存储空间的回收和复用效率。

Ustore存储引擎结合UNDO空间,还可以实现更高效、更全面的闪回查询和回收站机制,实现快速回退“误操作”,为 MogDB 提供了更丰富和人性化的企业级功能。

01

空间结构

Ustore与Astore相同,磁盘存储结构也使用8KB页面,区别在于Ustore页面中仅存储最新版本数据,旧版本数据通过版本链集中存储在Undo段中。Ustore页面的结构如图1所示,包括页头、事务目录、元组指针区、元组区和Special Area。与Astore类似,元组指针从前往后插入,元组从后往前插入,在中间形成一段空闲空间,以供后续插入元组和元组指针使用。

98fce1024437c176ef657b7776d88e06.png

图1 Ustore的页面结构

Ustore的页面结构相比Astore新增了事务目录(TD)。它可以为数据页上的元组(tuple)链接相应的事务表(Transaction Table)及UNDO子系统中的UNDO页面。数据库中的每个表可以自定义事务目录的数量,并且可以复用那些已经完成的事务所占用的事务目录。

每个数据页默认有4个事务目录,根据并发需求的不同,事务目录的数量可设置为2~128的任意值。在使用CREATE TABLE命令创建使用Ustore存储引擎的表时添加了一个新的选项INIT_TD,用于指定所需的事务目录数量。命令示例如下:

CREATE TABLE t1
(c1 integer;c2 boolen;
) WITH (INIT_TD=16);

02

原地更新

Astore中更新一个元组时新旧元组会混杂排列在堆表中,历史版本链是从旧到新。而Ustore在空间允许的情况下会尽可能进行原地更新操作,如图2所示。Ustore原地更新操作会将旧版本数据保存至UNDO空间中,堆表中始终存放最新版本的数据,数据版本按照最新到最旧的方式进行链接。

f84b08905ae068c2ed6773d4ba93a96d.png

图2 Ustore原地更新示意图

03

空间清理

Ustore支持用户执行Vacuum语句对空间进行清理,但Vacuum不是唯一的清理途径。Ustore有一套自适应的空间清理机制,执行DML(insert,update,delete)、DQL(select)语句时,一旦发现空间不足或者检测到潜在空闲空间达到阈值,即尝试进行清理,如图3所示。

1b89f6b3957bebb46d6037bb87d269ad.png

图3 Ustore空间清理流程

通过DML或者DQL触发清理,会出现如果某些页面一直未访问,就不能进行清理。为了解决此问题,Ustore引入基于概率的清理方案。基于概率的清理,使用随机算法选择本次清理的页面,该算法并非完全随机,可以保证在执行多次后选取的页面可覆盖关系表的所有页面。

e12ac2fa503b93c24194c92d09a2f537.png

性能测试对比

Ustore的核心优势场景是数据频繁更新的场景,相较于Astore而言Ustore空间利用更加紧凑,且高效的空间利用有效解决了频繁更新场景下的数据空间膨胀造成性能下降的问题。为此我们测试对比了Astore和Ustore在数据频繁更新场景下的性能。

在非主键的范围更新下,Ustore测试结果相比Astore有很大提升,在不同并发数下的平均性能提升在40%以上,结果如图4所示。

4974c07eb35b81c3c609a42b9b1842af.png

图4 非主键范围更新,Astore和Ustore的性能对比

另一方面,随着更新操作不断执行,Astore出现了表空间膨胀问题,而 Ustore的空间使用则比较平稳,如图5所示。

3f921a8d78acd0da42d2862d09610172.jpeg

图5 非主键范围更新,Astore和Ustore的空间对比

5dc7a845466e97c743d2f37a79982a57.png

总结

Ustore存储引擎在数据频繁更新场景下有非常好的性能和空间表现,可以确保业务系统运行更加平稳,能够支持适应更多业务场景和工作负载,特别是对性能和稳定性有更高要求的金融核心业务场景。

关于作者

赵森,云和恩墨数据库内核研发工程师,毕业于西安交通大学,参与MogDB数据库Ustore引擎的设计、规格文档撰写,目前主要从事Ustore存储引擎uheap、ubtree模块的开发工作。

997af9f147507119bf0daa3b3afd2ca3.gif

数据驱动,成就未来,云和恩墨,不负所托!


云和恩墨创立于2011年,是业界领先的“智能的数据技术提供商”。公司总部位于北京,在国内外35个地区设有本地办公室并开展业务。

云和恩墨以“数据驱动,成就未来”为使命,致力于将创新的数据技术产品和解决方案带给全球的企业和组织,帮助客户构建安全、高效、敏捷且经济的数据环境,持续增强客户在数据洞察和决策上的竞争优势,实现数据驱动的业务创新和升级发展。

自成立以来,云和恩墨专注于数据技术领域,根据不断变化的市场需求,创新研发了系列软件产品,涵盖数据库、数据库存储、数据库云管和数据智能分析等领域。这些产品已经在集团型、大中型、高成长型客户以及行业云场景中得到广泛应用,证明了我们的技术和商业竞争力,展现了公司在数据技术端到端解决方案方面的优势。

在云化、数字化和智能化的时代背景下,云和恩墨始终以正和多赢为目标,感恩每一位客户和合作伙伴的信任与支持,“利他先行”,坚持投入于数据技术核心能力,为构建数据驱动的智能未来而不懈努力。

我们期待与您携手,共同探索数据力量,迎接智能未来。

18a2947a0f6e32a02ccbb948f93f810f.gif

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

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

相关文章

智慧城市治理:构建全域覆盖的城市时空感知体系

TSINGSEE青犀AI算法中台是一款平台型产品,专注于提供各行业中小场景部署解决方案。平台具备接入广、性能强、支持跨平台、芯片国产化等特点,可提供丰富的视图接入能力和智能分析能力。 平台采用了多项IT高新技术,包括视频编解码技术、嵌入式…

Web 后台项目,权限如何定义、设置、使用:菜单权限、按钮权限 ts element-ui-Plus

Web 后台项目,权限如何定义、设置、使用:菜单权限、按钮权限 ts element-ui-Plus 做一个后台管理项目,里面需要用到权限管理。这里说一下权限定义的大概,代码不多,主要讲原理和如何实现它。 一、权限管理的原理 权限…

elementui 实现一个固定位置的Pagination(分页)组件

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 二、elementui 左侧导航菜单栏与main区域联动 三、elementui 中设置图片的高度并支持PC和手机自适应 四、 elementui 实现一个固定位置的Pagination(分页)组件 文章目录 系列文章目录…

酷开科技智慧AI让酷开系统大显身手!

时代的浪潮汹涌而至,人工智能作为技术革新和产业变革的重要引擎,正深刻地影响着各行各业。在科技的海洋中,AI技术正逐渐渗透到我们的日常生活中,为我们带来前所未有的便捷和智慧。酷开科技用技术探索智慧AI,别看它只是…

企业家见识、智慧与胸怀:超越知识、聪明与财富的核心价值​

一、引言 在商界的风云变幻中,企业家们不仅需要拥有丰富的知识和聪明才智,更需要具备远见卓识、深刻智慧和博大胸怀。正如某知名企业家所言:“企业家见识比知识重要,智慧比聪明重要,胸怀比财富重要。”,这…

从零开始:Flutter应用上架iOS的完整流程解析

引言 🚀 Flutter作为一种跨平台的移动应用程序开发框架,为开发者提供了便利,使他们能够通过单一的代码库构建出高性能、高保真度的应用程序,同时支持Android和iOS两个平台。然而,完成Flutter应用程序的开发只是第一步…

Spring Boot--文件上传和下载

文件上传和下载 前言文件上传1、以MultipartFile 接口流文件,流的名称需要和前台传过来的名称对应上2、获取到文件名称截取后缀3、为了放置文件名重复使用uuid来随机生成id后缀4、判断转存路径中是否有这个文件夹如果没有就创建5、将文件存储到转存的目录中 文件下载…

python的垃圾回收

引用计数器为主,标记清除和分代回收为辅 1 引用计数器 在python程序运行时,会根据数据类型的不同找到其对应的结构体,根据结构体中的字段来进行创建相关的数据,然后将对象添加到refchain双像链表中,每个对象中的ob_re…

线上研讨会 | 应对汽车毫米波雷达设计中的电磁挑战

智能汽车、新能源汽车最近几年一直是汽车行业关注的热点,随着5G技术越来越普及,汽车智能化发展将越来越迅速。从传统汽车到智能汽车,不是简单功能的增强,而是从单一功能的交通工具变成可移动的办公和娱乐空间,成为物联…

概率论经典题目-二维随机变量及分布--由概率密度求分布函数和概率

解答: 由概率密度函数求解分布函数的公式可知: 辅助图形加以确定积分上下限

CSS - 你知道都有哪些方案可以隐藏一个元素吗

难度级别:初级及以上 提问概率:70% 在前端开发中,隐藏元素并不是一个陌生的话题。根据业务场景不同,实现方案也多种多样,在面试中,应该尽可能多的描述自己遇到过的场景&…

【ElasticSearch】分词器(ElasticSearchIK分词器)

文章目录 1. 分词器介绍2. ik 分词器安装3. 分词器的使用 1. 分词器介绍 •IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包•是一个基于Maven构建的项目•具有60万字/秒的高速处理能力•支持用户词典扩展定义 2. ik 分词器安装 IK 分词器安装…

浅谈分布式光伏电站的运维管理

摘要:随着近些年我国对节能降耗关注力度的持续加大,为满足人们不断增长的电能需求,光伏发电产业得到迅猛发展,其中分布式光伏发电的比重持续增长。在打赢脱贫攻坚战的大背景下,国家电网公司探索出一条“阳光扶贫”的扶…

vue实现导出列表为xlsx文件

1.安装依赖 npm install --save xlsx file-saver 2.引入依赖 import FileSaver from file-saver; import * as XLSX from xlsx; 3.代码实现 <el-button type"primary" click"exportData">导出数据</el-button><el-tableid"table_ex…

IoT数采平台4:测试

IoT数采平台1&#xff1a;开篇IoT数采平台2&#xff1a;文档IoT数采平台3&#xff1a;功能IoT数采平台4&#xff1a;测试 Modbus RTU串口测试 OPC测试 HTTP测试 MQTT透传测试 MQTT网关测试及数据上报 TCP / UDP 监听&#xff0c;客户端连上后发送信息&#xff0c;客户端上报数据…

excel统计分析——协方差分析的作用

参考资料&#xff1a;生物统计学 1、协变量与试验因素的区别 如果把协方差分析资料中的协变量看作多因素方差分析资料中的一个因素&#xff0c;则两类资料有相似之处&#xff0c;但两类资料有本质的不同。在方差分析中&#xff0c;各因素的水平时人为控制的&#xff0c;即使是…

IP代理池是什么?怎样判断IP池优劣?

许多做跨境电商的朋友们都会使用到IP代理池这个模块&#xff0c;那会有新想加入到跨境电商这个行业的朋友们会有疑问&#xff0c;IP代理池究竟是什么&#xff1f;今天为你解答。 IP代理池是一种集成多个代理IP的系统&#xff0c;其核心功能在于收集并维护大量的可用IP地址&…

基于卷积神经网络的苹果等级分类系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示&#xff1a; 苹果等级分类系统&#xff0c;基于vgg16&#xff0c;resnet50卷积神经网络&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的苹果等级分类系统是在pytorch框架下实现的&#xff0c;系统中有两…

STM32 TIM DMA burst 输出变频 PWM 波形

1. 问题背景 客户需要 MCU 输出一组变频的 PWM 波形来控制外围器件&#xff0c;并且不同频率脉冲的个数也不同。STM32U5 芯片拥有 TIM1/TIM8 高级定时器&#xff0c;还有通用定时器TIM2/TIM3/TIM4/TIM5 以及 TIM15/TIM16/TIM17。TIM 模块中&#xff0c;可通过修改 ARR 寄存器的…

C++基础13:C++输入输出

此专栏为移动机器人知识体系下的编程语言中的 C {\rm C} C从入门到深入的专栏&#xff0c;参考书籍&#xff1a;《深入浅出 C {\rm C} C》(马晓锐)和《从 C {\rm C} C到 C {\rm C} C精通面向对象编程》(曾凡锋等)。 12.C输入/输出 12.1 C流类 计算机的输入和输出是数据传送的过…