Ustore存储引擎详解
目录
设计原理
核心优势
使用指导
Ustore存储引擎,又名In-place Update存储引擎(原地更新),是openGauss 内核新增的一种存储模式。此前的版本使用的行存储引擎是Append Update(追加更新)模式。追加更新对于业务中的增、删以及HOT(HeapOnly Tuple)Update(即同一页面内更新)有很好的表现,但对于跨数据页面的非HOT UPDATE场景,垃圾回收不够高效。因此,Ustore存储引擎应运而生。
设计原理 Ustore存储引擎将最新版本的“有效数据”和历史版本的“垃圾数据”分离存储。将最新版本的“有效数据”存储在数据页面上,并单独开辟一段UNDO空间,用于统一管理历史版本的“垃圾数据”,因此数据空间不会由于频繁更新而膨胀,“垃圾数据”集中回收效率更高。
Ustore存储引擎采用NUMA-aware的UNDO子系统设计,使得UNDO子系统可以在多核平台上有效扩展;同时采用多版本索引技术,解决索引清理问题,有效提升了存储空间的回收复用效率。
Ustore存储引擎结合UNDO空间,可以实现更高效、更全面的闪回查询和回收站机制,能快速回退人为“误操作”,为openGauss提供了更丰富的企业级功能。
核心优势 高性能:对插入、更新、删除等不同负载的业务,性能以及资源使用表现相对均衡。更新操作采用原地更新模式在频繁更新类的业务场景下可拥有更高、更平稳的性能表现。适应“短”(事务短)、“频”(更新操作频繁)、“快”(性能要求高)的典型OLTP类业务场景。 高效存储:支持最大限度的原位更新, 极大节约了空间;将回滚段、数据页面分离存储,具备更高效、平稳的IO使用能力,UNDO子系统采用NUMA-aware设计,具有更好的多核扩展性,UNDO空间统一分配,集中回收,复用效率更高,存储空间使用更加高效、平稳。 细粒度资源控制:Ustore引擎提供多维度的事务“监管”方式,可基于事务运行时长、单事务使用UNDO空间大小、以及整体UNDO空间限制等方式对事务运行进行“监管”,防止异常、非预期内的行为出现,方便数据库管理员对数据库系统资源使用进行规范和约束。 Ustore存储引擎可以在数据频繁更新场景下性能依旧稳如泰山,使业务系统运行更加平稳,适应更多业务场景和工作负载,特别是对性能和稳定性有更高要求的金融核心业务场景。
使用指导 USTORE与原有的ASTORE(Append Update)存储引擎并存。USTORE存储引擎屏蔽了存储层实现的细节,SQL语法和原有的ASTORE存储引擎使用基本保持一致,唯一差别是建表和建索引有些细微区别。
创建表的方式
USTORE存储引擎含有undo log,创建USTORE存储引擎表的时候需要提前在postgresql.conf中配置undo_zone_count的值,该参数代表的时候undo log的一种资源个数,建议配置为16384,即“undo_zone_count=16384”,配置完成后要重启数据库。
[postgresql.conf配置]
undo_zone_count=16384
创建方式1:创建表时指定存储引擎类型
create table test(id int, name varchar(10)) with (storage_type=ustore);
创建方式2:GUC参数配置指定USTORE存储引擎
数据库启动之前,在postgresql.conf中设置“enable_default_ustore_table=on”,默认指定用户创建表时使用USTORE存储引擎。
[postgresql.conf配置]
enable_default_ustore_table=on
创建表。
create table test(id int, name varchar(10));
创建索引的方式
USTORE存储引擎使用的索引为UBtree, UBtree是专门给USTORE存储引擎开发的索引,也是该引擎目前唯一支持的索引类型。
假定有如下test表结构,计划在test表的age列上增加一个UBtree索引。
openGauss=# \d+ test Table "public.test" Column | Type | Modifiers | Storage | Stats target | Description --------+-----------------------+-----------+----------+--------------+------------- id | integer | | plain | | age | integer | | plain | | name | character varying(10) | | extended | |
创建方式1:不指定创建索引类型,默认创建UBtree索引
`openGauss=# create index ubt_idx on test(age);
openGauss=# \d+ test Table "public.test" Column | Type | Modifiers | Storage | Stats target | Description --------+-----------------------+-----------+----------+--------------+------------- id | integer | | plain | | age | integer | | plain | | name | character varying(10) | | extended | | Indexes: "ubt_idx" ubtree (age) WITH (storage_type=USTORE) TBALESPACE pg_default Has OIDs: no Options: orientation=row, storage_type=ustore, compression=no` 创建方式2:创建索引时使用using关键字指定索引类型为“ubtree”
`openGauss=# create index ubt_idx on test using ubtree(age);
openGauss=# \d+ test Table "public.test" Column | Type | Modifiers | Storage | Stats target | Description --------+-----------------------+-----------+----------+--------------+------------- id | integer | | plain | | age | integer | | plain | | name | character varying(10) | | extended | | Indexes: "ubt_idx" ubtree (age) WITH (storage_type=USTORE) TBALESPACE pg_default Has OIDs: no Options: orientation=row, storage_type=ustore, compression=no`
openGauss: 一款高性能、高安全、高可靠的企业级开源关系型数据库。
🍒如果您觉得博主的文章还不错或者有帮助的话,请关注一下博主,如果三连收藏支持就更好啦!谢谢各位大佬给予的鼓励!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
EasyList “瘫痪”,将被迫迁移
为了不被广告打扰,不少用户都会在浏览器中安装广告拦截扩展,如今也有不少浏览器直接内置了这个功能。这些广告拦截工具都是由不同的 "过滤列表" 驱动,这些规则列表可以告诉广告拦截工具应该如何准确地拦截广告。这之中,EasyList 则是最知名、使用最广泛的一个过滤规则,它是一个由社区管理和维护的项目。 AdBlock Plus、uBlock Origin、AdGuard 等广告拦截工具都有在使用 EasyList,甚至是默认就勾选了它。除此之外,还有很多过滤规则是基于 EasyList 演变而来的,基本上等同于只要你在使用广告拦截工具,你就绕不开 EasyList。 几周前,EasyList 的维护者看到了项目的流量出现的几大幅度的增长。整体的流量迅速从每天几 TB滚雪球般增长了 10-20 倍。结果发现,这一激增的来源是来自印度的 Android 设备。在调查了这个问题之后,发现具有广告屏蔽功能的应用程序在滥用 EasyList 的服务器。 有(多个)开源的 Android 浏览器,实现了广告拦截功能 浏览器是由其他几个在印度非常流行的浏览器分叉而来 浏览器有一个非常严重的缺陷,它在每次...
- 下一篇
什么是跨域以及如何解决?通俗易懂带你彻底搞定
什么是跨域以及如何解决?通俗易懂带你彻底搞定 现在的web项目,很多都是前后端分离,特别容易出现跨域问题 那么什么是跨域问题呢?本篇文章带你彻底从本质上弄明白什么是跨域问题以及如何解决 一 跨域有什么现象? 我们先看一下现象,如何出现跨域问题,如下实验 前端:浏览器正在访问一个页面:https://www.helloworld.net/special , 此页面中发送了一个后端的一个 http 接口 后端:访问的后端接口为: https://tiger-api.helloworld.net/v1/special/getSpecialList 上面的提示:has been blocked by CORS policy: Response to preflight request does not pass access control check 翻译过来就是:已被CORS策略阻止:对请求的响应未通过访问控制检查 这就是没有配置相关的跨域参数,是不能访问这个接口的 二 什么是跨域问题? 举例来说,就是:浏览器访问一个 页面时,比如访问 https://www.helloworld.net...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果