赞
踩
opengauss数据库是以数据页面(Page)为单位进行压缩解压,本特性自openGauss 3.0.0版本开始引入,通过对数据页的透明页压缩和维护页面存储位置的方式,做到高压缩、高性能。提高数据库对磁盘的利用率。
数据页面在写入到磁盘前进行压缩,内存中数据为未压缩的状态。数据页面压缩后,拆分为多个定长(1K/2K/4K)的Chunk存储,压缩算法支持lz4和zstd。
本特性自MogDB 3.1.0版本开始引入。 在数据写入aStore行存表时,后台对数据进行压缩,典型场景下可以获得50%的存储空间节省,同时通过后台流控技术减少对系统资源的占用,性能几乎无损。
MogDB以数据行(Tuple)为单位进行压缩解压,以页面为单位训练字典。数据页面在写入内存页面时,准实时完成压缩,内存中为压缩状态,自研轻量级压缩算法。以记录行为单位进行压缩解压,对于OLTP点查场景,只需要解压一行数据,没有解压放大,能够获得更好的查询性能;
内存中的页面为压缩状态,在相同Shared Buffer大小下可以提供更高的内存命中率,进而提升查询性能;
在MVCC(多版本并发控制)查找历史版本链时,无需解压中间版本,只需要解压目标版本的数据行。这样可以大大减少解压的工作量,提高查询性能;
采用多数据页共享字典的方案,相比单表训练字典的方案,压缩字典可以随数据的变更自动演进,没有字典逐渐失效的问题。
Astore行级压缩支持如下功能:
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
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
3、执行vacuum full可以立即触发压缩指令。
MogDB=# vacuum full tb_mogdb_compress;
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)
可以看出节约了50%以上的存储空间节省,MogDB的行级压缩更省CPU,性能更好,适用于金融高负载场景。
本文由 mdnice 多平台发布
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。