GaussDB新特性Ustore存储引擎介绍
1、 Ustore和Astore存储引擎介绍
Ustore存储引擎,又名In-place Update存储引擎(原地更新),是openGauss 内核新增的一种存储模式。此前的版本使用的行存储引擎是Append Update(追加更新)模式。相比于Append Update(追加更新)行存储引擎,Ustore存储引擎可以提高数据页面内更新的HOT UPDATE的垃圾回收效率,有效降低多次更新元组后存储空间占用的问题。Append Update和 In-place Update是两种不同的存储引擎策略,适用场景有所不同。
Append Update:Append Update 存储引擎策略将更新操作视为一种追加操作,即将新的数据追加到已有的数据之后。这种方式适合于写操作频率较高、更新操作较少的场景。在 Append Update 中,旧数据不直接被修改或删除,而是继续存储,新数据将追加到数据集的末尾。这样可以避免数据的移动和重建,提高写入的性能,并且可以实现快速的回滚和历史数据的查询。
In-place Update:In-place Update 存储引擎策略将更新操作视为一种就地修改操作,即直接在原有位置上进行数据的更新。这种方式适用于需要频繁更新和随机访问的场景。在 In-place Update 中,数据库系统会在原有位置上修改被更新的数据,而不是追加新的数据。这可以减少存储空间的占用,并且支持更高的并发性能。然而,In-place Update 可能涉及到数据的移动和重建,特别是在更新操作导致数据大小变化时,可能需要重新分配和调整存储空间。
2、 Ustore存储引擎优势
相比于Append Update(追加更新)行存储引擎,Ustore存储引擎可以提高数据页面内更新的HOT UPDATE的垃圾回收效率,有效降低多次更新元组后存储空间占用的问题。
Ustore存储引擎结合Undo空间,可以实现更高效、更全面的闪回查询和回收站机制,能快速回退人为“误操作”,为GaussDB Kernel提供了更丰富的闪回功能。
Undo技术相对成熟,Ustore基于Undo回滚段技术、页面并行回放技术、多版本索引技术等实现了Ustore作为一款高可用高可靠的行存储引擎。
闪回作为数据库恢复技术的一环,能够使得DBA有选择性的高效撤销一个已提交事务的影响,将数据从人为的不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR等手段找回已提交的数据库修改,恢复时长需要数小时甚至数天。采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。Ustore支持闪回表、闪回查询、闪回TRUNCATE、闪回DROP,而且适用于分区表。
Ubtree与有的Btree索引相比,索引页面增加了事务信息,使得UBtree索引具备MVCC能力以及独立过期旧版本回收能力。In-place Update引擎支持 UBtree索引,UBtree也是In-place Update引擎的默认索引类型。支持并行创建索引、索引空间管理算法优化,索引空间进一步压缩。
Ustore整体架构图:

3、 Ustore存储引擎实践
USTORE与原有的ASTORE(Append Update)存储引擎并存。USTORE存储引擎屏蔽了存储层实现的细节,SQL语法和原有的ASTORE存储引擎使用基本保持一致,唯一差别是建表和建索引有些细微区别。同时和Astore相比,Ustore没有VM文件。
在postgresql.conf配置文件中添加如下选项并重启数据库:
track_counts=on
track_activities=on
enable_ustore=on
enable_default_ustore_table=on
创建Ustore表:
create table city(id int, name varchar(120) ,code varchar(20)) with (storage_type=ustore);
确认city表使用ustore存储引擎:
openGauss=# \d
List of relations
Schema | Name | Type | Owner | Storage
--------+------+-------+-------+------------------------------------------------------
public | city | table | omm | {orientation=row,storage_type=ustore,compression=no}
4、 Ustore使用场景
-
高性能:对插入、更新、删除等不同负载的业务,性能以及资源使用表现相对均衡。更新操作采用原地更新模式,在频繁更新类的业务场景下可拥有更高、更平稳的性能表现。适应“短”(事务短)、“频”(更新操作频繁)、“快”(性能要求高)的典型OLTP类业务场景。
-
高效存储:支持最大限度的原位更新, 极大节约了空间;将回滚段、数据页面分离存储,具备更高效、平稳的IO使用能力,Undo子系统采用NUMA-aware设计,具有更好的多核扩展性,Undo空间统一分配,集中回收,复用效率更高,存储空间使用更加高效、平稳。
-
细粒度资源控制:Ustore引擎提供多维度的事务“监管”方式,可基于事务运行时长、单事务使用Undo空间大小、以及整体Undo空间限制等方式对事务运行进行“监管”,防止异常、非预期内的行为出现,方便数据库管理员对数据库系统资源使用进行规范和约束。
5、 Ustore使用约束
尽管Ustore设计几乎能够覆盖SQL和未来特性集;支持大多数的SQL标准,也支持常见的数据库特性。但也存在如下约束:
1)不支持可重复读和串行化隔离级别。
2)对于支持row movement的分区表,不支持并发更新或删除同一行操作。
3)不支持的DDL功能:在线vacuum full/cluster、在线alter table(除新增字段、重命名等无需全量重写数据的操作外)、table sampling、并行查询。
4)不支持hash索引、GiST索引、SP-GiST索引、BRIN索引。
5)不支持压缩。
6)不支持批量访存接口。不支持rowid语义。
7)不支持创建、使用物化视图。
8)不支持设置透明数据加密。
9)不支持单事务块或语句中既包含Astore表又包含Ustore表。
6、 展望未来
Ustore和Astore都有各自的使用场景,在使用时需要根据具体的业务场景进行选择,因此GaussDB把选择权交给了用户。那么Ustore和Astore是否可以融合互补所长,在存储引擎层做彻底的融合优化呢?让我们拭目以待。
相关文章:
GaussDB新特性Ustore存储引擎介绍
1、 Ustore和Astore存储引擎介绍 Ustore存储引擎,又名In-place Update存储引擎(原地更新),是openGauss 内核新增的一种存储模式。此前的版本使用的行存储引擎是Append Update(追加更新)模式。相比于Append…...
人工智能基础_机器学习046_OVR模型多分类器的使用_逻辑回归OVR建模与概率预测---人工智能工作笔记0086
首先我们来看一下什么是OVR分类.我们知道sigmoid函数可以用来进行二分类,那么多分类怎么实现呢?其中一个方法就是使用OVR进行把多分类转换成二分类进行计算. OVR,全称One-vs-Rest,是一种将多分类问题转化为多个二分类子问题的策略。在这种策略中,多分类问题被分解为若干个二…...
【LeetCode刷题-链表】--23.合并K个升序链表
23.合并K个升序链表 方法:顺序合并 在前面已经知道合并两个升序链表的前提下,用一个变量ans来维护以及合并的链表,第i次循环把第i个链表和ans合并,答案保存到ans中 /*** Definition for singly-linked list.* public class List…...
强化学习笔记
这里写自定义目录标题 参考资料基础知识16.3 有模型学习16.3.1 策略评估16.3.2 策略改进16.3.3 策略迭代16.3.3 值迭代 16.4 免模型学习16.4.1 蒙特卡罗强化学习16.4.2 时序差分学习Sarsa算法:同策略算法(on-policy):行为策略是目…...
经典双指针算法试题(一)
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、移动零1、题目讲解2、讲解算法原理3、代码实现 二、复写零1、题目讲解2、讲解算法原理3、…...
MATLAB | 绘图复刻(十三) | 带NaN图例的地图绘制
有粉丝问我地图绘制如何添加NaN,大概像这样: 或者这样: 直接上干货: 原始绘图 假设我们有这样的一张图地图,注意运行本文代码需要去matlab官网下载Mapping Toolbox工具箱,但是其实原理都是相似的&…...
netty整合websocket(完美教程)
websocket的介绍: WebSocket是一种在网络通信中的协议,它是独立于HTTP协议的。该协议基于TCP/IP协议,可以提供双向通讯并保有状态。这意味着客户端和服务器可以进行实时响应,并且这种响应是双向的。WebSocket协议端口通常是80&am…...
选择PC示波器的10种理由!
PC示波器(PCs)在测试仪器领域中的关键项目上正迅速地取代传统的数字存储示波器(DSOs),其中有十个理由: 小巧和便携示波器利用你的PC显示器实现大屏幕和精细彩色显示信号存储只受限于你的PC存储器大小捕捉波…...
【pytorch深度学习 应用篇02】训练中loss图的解读,训练中的问题与经验汇总
文章目录 loss图解析train loss ↘ \searrow ↘ ↗ \nearrow ↗ 先降后升 loss图解析 train loss ↘ \searrow ↘ 不断下降,test loss ↗ \nearrow ↗ 不断上升:原因很多,我是把workers1,batchSize8192train loss ↘ \searro…...
uniapp 微信小程序如何实现多个item列表的分享
以下代码是某个循环里面的item <button class"cu-btn" style"background-color: transparent;padding: 0;"open-type"share" :data-tree"item.treeId" :data-project"item.projectId"v-if"typeId1 && userI…...
.NET 8 正式 GA 遥遥领先
.NET 8 一正式 已正式 GA。 微软称 .NET 8 提供了数以千计的性能、稳定性和安全性改进,以及平台和工具增强功能,有助于提高开发者的工作效率和创新速度。 比如 .NET 8 为 Android 和 WASM 引入了全新的 AOT 模式、改进 System.Text.Json,以…...
2216. 美化数组的最少删除数 --力扣 --JAVA
题目 给你一个下标从 0 开始的整数数组 nums ,如果满足下述条件,则认为数组 nums 是一个 美丽数组 : nums.length 为偶数对所有满足 i % 2 0 的下标 i ,nums[i] ! nums[i 1] 均成立 注意,空数组同样认为是美丽数组。…...
DDD 领域驱动设计
文章目录 请解释下什么是 DDD 领域驱动设计DDD 的四层领域模型是怎样的?包含哪些基础概念?DDD 中的贫血模型和充血模型有什么区别在 DDD 中,如何处理模型的聚合和聚合根DDD 中的实体和值对象有什么区别?在 DDD 中,如何…...
转型做视频了,博客就是稿子,继续坚持写博客,同时发布视频,能写博客说明思路清晰了,能再讲明白,理解就更透彻了,紧跟上时代发展。
1,今天特别记录下,B站给开通了《合集》功能 最近使用视频制作了几个视频。播放量还不错,最好的已经到了 2.6K了。 然后粉丝也涨到了 200个。 添加链接描述 紧跟时代:从写博客到录视频,粉丝大涨,突破200个&…...
小众市场:探索跨境电商中的利基领域
随着全球数字化和互联网的普及,跨境电子商务已经成为了一个蓬勃发展的产业。从亚马逊到阿里巴巴,大型电商平台已经占据了很大一部分市场份额。 然而,在这个竞争激烈的领域,寻找小众市场和利基领域可能是一种成功的策略。本文将探…...
C++中的mutable关键字
mutable是C中的一个关键字,它用来修饰类的成员变量。 当我们将一个成员变量声明为mutable时,就意味着这个成员变量可以被类的任何方法修改,即使这个方法是const类型的。这是因为mutable关键字可以打破const类型的限制,使得const类…...
java: 无效的目标发行版: 17 问题解决
今天在写完类点击运行后显示java: 无效的目标发行版: 17 网上查询了一番,发现有几个地方需要注意。 还有一个就是设置中,下面的就是我本次问题所在,不知道为什么,他自动添加了下面的东西 一个方法是把目标字节码版本改为正确的&a…...
C#的LINQ查询
当使用LINQ(Language Integrated Query)查询时,我们可以在C#中以一种类似于SQL的语法来查询数据。LINQ提供了一种统一的方式来查询各种数据源,如集合、数据库、XML等。 在上述示例中,我们使用LINQ查询来将两个列表根据…...
Python不会调试不够丝滑?那事你不会logging---剖析!
前言: 一直都是手动debug进行调试,F8都按烂了;最近用logging进行提前布置,发现这样更能让代码走得丝滑,同时也能尽早发现问题! 基本概念: Logger - 日志记录接口 Handler - 确定日志记录发送到不同的地方(文件、控制台等) Level - 定义了日…...
OpenAI的Whisper蒸馏:蒸馏后的Distil-Whisper速度提升6倍
1 Distil-Whisper诞生 Whisper 是 OpenAI 研发并开源的一个自动语音识别(ASR,Automatic Speech Recognition)模型,他们通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务(multitask&am…...
DS21FF44芯片IBO功能配置与多通道E1传输优化
1. DS21FF44芯片IBO功能配置实战解析在电信级硬件设备开发中,多通道数据的高效传输一直是设计难点。最近在调试一块基于PCI总线的E1接入板卡时,需要使用DS21FF44帧处理器实现16个E1通道的集中传输。经过反复验证,总结出一套可靠的IBO…...
告别混乱布局!用eGUI的Panel在Rust里快速搭建桌面应用主界面
告别混乱布局!用eGUI的Panel在Rust里快速搭建桌面应用主界面 在Rust生态中构建桌面应用时,界面布局往往是开发者面临的第一个挑战。传统GUI框架复杂的布局系统让许多Rust初学者望而却步,而eGUI以其简洁的Panel系统和纯Rust的实现方式…...
1 虚拟文件系统
1.Linux 内核核心作用 Linux 内核是操作系统的核心底层程序,介于硬件和应用程序之间,是整个系统的「大管家」,核心作用分 7 大类: 1. 进程管理(任务调度) 1.负责创建、销毁、暂停、恢复进程 / 线程 2.时间片…...
OpenClaw任务控制中心:构建自动化工作流的轻量级调度平台
1. 项目概述与核心价值最近在折腾一些自动化任务时,发现很多开源工具虽然功能强大,但往往需要自己写胶水代码来串联,或者需要一个统一的界面来管理和监控。这让我想起了以前在运维和开发中经常遇到的痛点:脚本分散、日志难查、状态…...
MCP协议赋能Ollama:本地大模型工具调用的标准化实践
1. 项目概述:当MCP遇上Ollama,本地AI工作流的“最后一公里” 如果你和我一样,是个喜欢折腾本地大模型的开发者,那你肯定对Ollama不陌生。它让在本地运行Llama、Mistral、Qwen这些开源大模型变得像 ollama run llama3.2 一样简单…...
【ROS2实战笔记-15】ros2bag 的深度应用:从数据回放到系统级离线分析
对于 ROS 2 开发者而言,ros2bag 的价值远不止于记录和回放话题数据。它更像是一个时间旅行工具,将机器人在真实环境中的每一次传感器感知、每一次控制决策、每一次节点间的通信,都完整地凝固下来。这种能力使得它成为离线调试、性能分析和回归…...
粒子群优化算法(PSO)原理与Python高级实现
【智能优化】粒子群优化算法(PSO)原理与Python高级实现📅 2026-05-08 | 🏷️ 智能优化 | 🏷️ 群智能 | 🏷️ PSO一、引言 粒子群优化算法(Particle Swarm Optimization, PSO)是由Kennedy和Eberhart于1995年提出的群智能优化算法。…...
形式化方法
形式化方法是基于数学、逻辑、符号化语言,对软件系统进行合格建模、规范描述、逻辑推理和正确验证的一套开发与分析方法。不依靠人工测试猜测bug,而是用数学方式证明程序和系统是否正确。形式化方法的核心作用在于,它可以用严格的逻辑写清系统…...
555电影网:全网影视网,高清追剧的不二之选
在当下快节奏的生活里,很多人下班回家最放松的方式就是打开一部好剧,沉浸其中。面对海量影视资源,如何快速找到画质清晰、更新及时、观看流畅的平台,成为不少人的困扰。而555电影网正逐渐成为很多剧迷心中的首选。 作为一个聚合全…...
AI智能体长时记忆解决方案:agent-recall架构设计与工程实践
1. 项目概述:一个为AI智能体打造的“记忆宫殿”最近在折腾AI智能体(Agent)的开发,一个绕不开的痛点就是“记忆”问题。你肯定也遇到过:让智能体帮你写个周报,它记得你上周干了啥,但完全忘了上个…...

