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是否可以融合互补所长,在存储引擎层做彻底的融合优化呢?让我们拭目以待。

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

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

相关文章

在网络攻击之前、期间和之后应采取的步骤

在当今复杂的威胁形势下,网络攻击是不可避免的。 恶意行为者变得越来越复杂,出于经济动机的攻击变得越来越普遍,并且每天都会发现新的恶意软件系列。 这使得对于各种规模和跨行业的组织来说,制定适当的攻击计划变得更加重要。 …

【Linux】进程间通信 -- 管道

对于进程间通信的理解 首先,进程间通信的本质是,让不同的进程看到同一份资源(这份资源不能隶属于任何一个进程,即应该是共享的)。而进程间通信的目的是为了实现多进程之间的协同。 但由于进程运行具有独立性&#xff…

密码加密解密之路

1.背景 做数据采集,客户需要把他们那边的数据库连接信息存到我们系统里,那我们系统就要尽可能的保证这部分数据安全,不被盗。 2.我的思路 1.需要加密的地方有两处,一个是新增的时候前端传给后端的时候,一个是存到数…

异步爬取+多线程+redis构建一个运转丝滑且免费http-ip代理池 (三)

内容提要: 如果说,爬取网页数据的时候,我们使用了异步,那么将数据放入redis里面,其实也需要进行异步;当然,如果使用多线程或者redis线程池技术也是可以的,但那会造成冗余; 因此,在测试完多线程redis搭配异步爬虫的时候,我发现效率直接在redis这里被无限拉低下来! 因此: 最终的r…

从0开始学习JavaScript--JavaScript中的集合类

JavaScript中的集合类是处理数据的关键,涵盖了数组、Set、Map等多种数据结构。本文将深入研究这些集合类的创建、操作,以及实际应用场景,并通过丰富的示例代码,帮助大家更全面地了解和应用这些概念。 数组(Array&…

福州大学《物联网中间件技术实验》题库选择与实验要求

一、 实验目的 1.掌握中间件系统框架的搭建; 2.掌握JAVA EE服务器开发技术; 二、 实验仪器、开发环境 1.开发工具:MyEclipse Professional(注意不是Eclipse) 2.开发环境:JDK1.6,MySQL&…

SystemVerilog学习 (11)——覆盖率

目录 一、概述 二、覆盖率的种类 1、概述 2、分类 三、代码覆盖率 四、功能覆盖率 五、从功能描述到覆盖率 一、概述 “验证如果没有量化,那么就意味着没有尽头。” 伴随着复杂SoC系统的验证难度系数成倍增加,无论是定向测试还是随机测试&#xff…

安全框架springSecurity+Jwt+Vue-1(vue环境搭建、动态路由、动态标签页)

一、安装vue环境,并新建Vue项目 ①:安装node.js 官网(https://nodejs.org/zh-cn/) 2.安装完成之后检查下版本信息: ②:创建vue项目 1.接下来,我们安装vue的环境 # 安装淘宝npm npm install -g cnpm --registryhttps:/…

flask实现session开发

要在Flask应用中实现会话(session)开发,你可以使用Flask内置的session模块。以下是一个示例代码,演示在Flask应用中启用和使用会话功能: from flask import Flask, session, redirect, url_for, requestapp Flask(__…

软件测试/测试开发/人工智能丨基于Spark的分布式造数工具:加速大规模测试数据构建

随着软件开发规模的扩大,测试数据的构建变得越来越复杂,传统的造数方法难以应对大规模数据需求。本文将介绍如何使用Apache Spark构建分布式造数工具,以提升测试数据构建的效率和规模。 为什么选择Spark? 分布式计算:…

easyExcel注解详情

前言11个注解字段注解 类注解基础综合示例补充颜色总结 11个注解 ExcelProperty ColumnWith 列宽 ContentFontStyle 文本字体样式 ContentLoopMerge 文本合并 ContentRowHeight 文本行高度 ContentStyle 文本样式 HeadFontStyle 标题字体样式 HeadRowHeight 标题高度 HeadStyle…

快速弄懂Python3.10的一些新特性与使用场景

Python 3.10的新特性不仅增强了语言的功能性,也提供了更丰富的工具,让开发者能更高效、更准确地编写代码。接下来将通过一些实际的使用场景和方法来探索这些新特性。 1. “精确类型”参数化内置集合 Python 3.10引入了更精确的方式来指定内置集合的类型…

GoogleTest测试框架-Gest和GMock

在B站和油管上面找到涉及到GoogleTest单元测试框架的Gtest和Gmock的三个不错的视频资源: 油管视频链接: Google Test and Mock Platform, Complete Tutorial. Part 1: Google TestGoogle Test and Mock Platform - Part 2: GMock MatchersGoogle Test …

Python将原始数据集和标注文件进行数据增强(随机仿射变换),并生成随机仿射变换的数据集和标注文件

Python将原始数据集和标注文件进行数据增强(随机仿射变换),并生成随机仿射变换的数据集和标注文件 前言前提条件相关介绍实验环境生成随机仿射变换的数据集和标注文件代码实现输出结果 前言 由于本人水平有限,难免出现错漏&#x…

OpenCV快速入门:图像滤波与边缘检测

文章目录 前言一、噪声种类与生成1.1 椒盐噪声1.2 高斯噪声1.3 彩色噪声 二、卷积操作2.1 卷积基本原理2.2 卷积操作代码实现 三、线性滤波3.1 均值滤波均值滤波原理均值滤波公式均值滤波代码实现 3.2 方框滤波方框滤波原理方框滤波公式方框滤波代码实现 3.3 高斯滤波高斯滤波原…

redis非关系型数据库(缓存型数据库)——中间件

【重点】redis为什么这么快?(应届) ①redis是纯内存结构,避免磁盘I/O的耗时 ②redis核心模块是一个单进程,减少线程切换和回收线程资源时间 ③redis采用的是I/O的多路复用机制(每一个执行线路可以同时完…

java面试八股文2023完整版详解110题附带答案

以下是一份Java面试八股文2023,涵盖了Java编程语言的核心概念和常用技术,帮助你更好地准备面试。 1. Java语言有哪些特点? Java语言是一种面向对象的编程语言,具有简单、面向对象、分布式、多线程、动态等优点。它是一种跨平台的…

vue 自定义指令

vue 自定义指令 分类 全局指令 Vue.directive()局部指令 directives vue 自定义指令 钩子函数 vue3 自定义指令 分类 全局指令 app.directive()局部指令 directives vue3 自定义指令 钩子函数 vue 自定义指令 除了Vue提供的内置指令之外,你还可以自定义指令来扩展…

P1281 书的复制

P1281 书的复制 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 书按顺序给k个人,进行抄写,求抄写页数最多的人所用的时间的最小值。最大值最小,考虑二分。 又因为题目要求要尽可能让前面的人少抄写,那么就要求后面的多抄写&…

npm install 下载不下来依赖解决方案

背景 最近在构建 前端自动化部署 的方案中发现了一个问题,就是我在npm install的时候,有时候成功,有时候不成功,而且什么代码也没发生更改,报错也就是那么几个错,所以在此也整理了一下遇到这种情况&#xf…