当前位置:   article > 正文

数据压缩还能这么玩,国产数据库有救了!_国产数据库具备高级压缩功能的都有哪些

国产数据库具备高级压缩功能的都有哪些

页级压缩

alt

opengauss数据库是以数据页面(Page)为单位进行压缩解压,本特性自openGauss 3.0.0版本开始引入,通过对数据页的透明页压缩和维护页面存储位置的方式,做到高压缩、高性能。提高数据库对磁盘的利用率。

页级压缩方案

数据页面在写入到磁盘前进行压缩,内存中数据为未压缩的状态。数据页面压缩后,拆分为多个定长(1K/2K/4K)的Chunk存储,压缩算法支持lz4和zstd。

行级压缩

alt

本特性自MogDB 3.1.0版本开始引入。 在数据写入aStore行存表时,后台对数据进行压缩,典型场景下可以获得50%的存储空间节省,同时通过后台流控技术减少对系统资源的占用,性能几乎无损。

行级压缩方案

MogDB以数据行(Tuple)为单位进行压缩解压,以页面为单位训练字典。数据页面在写入内存页面时,准实时完成压缩,内存中为压缩状态,自研轻量级压缩算法。以记录行为单位进行压缩解压,对于OLTP点查场景,只需要解压一行数据,没有解压放大,能够获得更好的查询性能;

内存中的页面为压缩状态,在相同Shared Buffer大小下可以提供更高的内存命中率,进而提升查询性能;

在MVCC(多版本并发控制)查找历史版本链时,无需解压中间版本,只需要解压目标版本的数据行。这样可以大大减少解压的工作量,提高查询性能;

采用多数据页共享字典的方案,相比单表训练字典的方案,压缩字典可以随数据的变更自动演进,没有字典逐渐失效的问题。

优点

  • OLTP点查场景,只需要解压一行数据,没有解压放大;
  • 延迟解压,MVCC查找历史版本链时无需解压,只需要解压目标版本;
  • 内存中页面为压缩状态,相同Shared Buffer容量下,内存命中率更高;
  • 页内压缩,无page颗粒压缩的对齐空洞和磁盘碎片问题;
  • 多个页面一起训练并共享压缩字典,减少字典空间占用;
  • 专用字典解码器缓存,解压时无需频繁构建解码器,提升解码性能。

行级压缩支持的功能

Astore行级压缩支持如下功能:

  • 创建和修改压缩表;
  • 在对压缩表进行读写操作时自动完成压缩或解压操作;
  • 支持压缩表主备同步;
  • 支持压缩表过期版本回收;
  • 当数据导入到压缩表时支持自动完成压缩;
  • 支持通过GS_COMPRESSION视图展示系统所有压缩表的压缩情况;
  • 兼容一级分区表,包括移动、迁移、合并、更新,分裂,添加,删除,截断分区等所有功能;兼容二级分区表,二级子分区的相关操作包括新增、删除、分裂、截断分区;
  • 支持在段页式模式下创建压缩表,且段页式压缩表增删改查等特性能正常执行;
  • 压缩表兼容MogDB已经发布的工具;
  • 在autovacuum线程中加入compress page流程,减少磁盘IO次数,加锁次数,从而降低后台压缩开销;同时,Astore行级压缩优化了相关压缩算法;表的压缩效果对用户透明。

行级压缩约束

  • 仅对Astore行存表生效,不能用于Ustore行存表、列存表和MOT;
  • 默认创建非压缩表;
  • 不能为系统表指定压缩属性;
  • 不能为外表指定压缩属性;
  • 不支持tablespace压缩属性;
  • 分区压缩表,单个分区数据量大于128MB才会执行压缩;
  • 普通vacuum命令,不会执行压缩,vacuum full命令会执行压缩;
  • 后台压缩节省出来的空间不会立即反应到磁盘的空间占用,后续的数据插入会重复使用压缩节省出来的空间;
  • 不支持3.0版本的段页式压缩表升级到5.0版本。如果3.0版本中有段页式压缩表,升级前请将段页式压缩表中的数据导入非压缩表进行备份,然后将段页式压缩表删除,升级完成后重新创建段页式压缩表,并将备份的数据导入新创建的段页式压缩表;

实战

1、创建压缩表和非压缩表。

MogDB=# CREATE TABLE tb_mogdb_compress (id INT, name TEXT, addr TEXT, info TEXT) WITH (compression = yes);
CREATE TABLE
MogDB=# CREATE TABLE tb_mogdb_no_compress (id INT, name TEXT, addr TEXT, info TEXT);
CREATE TABLE
  • 1

2、插入随机数据。

MogDB=# INSERT INTO tb_mogdb_compress VALUES (generate_series(0, 1999999), 'fasdfasdhigasidfdfhgioashdfgohaosdgh', 'fasdfasdfasdahasdhsfsdgstyjdth', 'fasdhgsoidfhisdifgiosdfiogio');
INSERT 0 2000000
MogDB=# INSERT INTO tb_mogdb_no_compress VALUES (generate_series(0, 1999999), 'fasdfasdhigasidfdfhgioashdfgohaosdgh', 'fasdfasdfasdahasdhsfsdgstyjdth', 'fasdhgsoidfhisdifgiosdfiogio');
INSERT 0 2000000
  • 1

3、执行vacuum full可以立即触发压缩指令。

MogDB=# vacuum full tb_mogdb_compress;

  • 1

4、查看压缩表和非压缩表所占大小。

MogDB=# \d+
                                             List of relations
 Schema |         Name         | Type  | Owner  |  Size  |              Storage              | Description 
--------+----------------------+-------+--------+--------+-----------------------------------+-------------
 public | tb_mogdb_compress    | table | yaojun | 105 MB | {orientation=row,compression=yes} | 
 public | tb_mogdb_no_compress | table | yaojun | 256 MB | {orientation=row,compression=no}  | 
(2 rows)
  • 1

可以看出节约了50%以上的存储空间节省,MogDB的行级压缩更省CPU,性能更好,适用于金融高负载场景。

本文由 mdnice 多平台发布

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/954276
推荐阅读
相关标签
  

闽ICP备14008679号