南大通用GBase 8a 不同压缩算法对表和列的数据压缩的使用方法

本文介绍GBase 8a数据库集群提供的数据压缩算法,对表、列进行压缩的使用方法,同时也提供了实例级配置参数做默认压缩设置。

语法

压缩算法

LZ4,PPM。如有差异,请以GBase官方提供的文档为准。

可用的格式

数字

0:不压缩/默认压缩
1:高压缩比,压缩比在6-20
5:高性能压缩,压缩比在3-10;

字符串

0:不压缩/默认压缩
3:高压缩比,压缩比在6-20
5:高性能压缩,压缩比在3-10;

表压缩

compress(number_method,str_method)

number_method 数字压缩算法,str_method字符串压缩算法。 日期类型在内部保存的数字。

列压缩

compress(number_method)
compress(str_method)

参数

gbase_compression_num_method

数字类型的压缩方法,可选值0,1,5。

gbase_compression_str_method

字符串压缩方法,可选值0,3,5.

压缩粒度

实例级、表级、列级共3级,其优先级是 列级>表级>实例级。

样例

实例级

通过修改数据库配置文件的方式,对所有建表时没有指定压缩算法的表和列,采用此默认的参数。

在老的版本里默认是0,0,在新版本里默认是5,5, 详情可以看计算节点gnode的配置文件如下的红色部分。

[root@gbase_rh7_001 sys_tablespace]# cat /opt/gbase/gnode/config/gbase_8a_gbase.cnf  | grep gbase_compress
#gbase_compression_sampling=1
gbase_compression_str_method=5
gbase_compression_num_method=5

[root@gbase_rh7_001 sys_tablespace]#

此时建表时,如果不指定压缩方法,则数据使用默认此实例级指定的压缩方法。

gbase> create table t_default_compress(id int, name varchar(100),birth date);
Query OK, 0 rows affected (Elapsed: 00:00:00.10)

gbase> show create table t_default_compress;
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table              | Create Table                                                                                                                                                                                       |
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_default_compress | CREATE TABLE "t_default_compress" (
  "id" int(11) DEFAULT NULL,
  "name" varchar(100) DEFAULT NULL,
  "birth" date DEFAULT NULL
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' |
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

注意

GBase 8a的数据压缩最小单位是DC级(65536行),也就是一个DC只会有1个压缩方法,如果你修改了实例级的配置参数,对于这类没有显式指定压缩方法,而是采用默认实例级的表,现有不足1个DC的数据,会继续使用原有的压缩方法,而新的DC将使用新的压缩方法。其结果就是老的DC是老的方法(数据要先补足),新的DC是新的方法。

表级

在建表时指定整表的压缩方法。如下样例指定了1,3压缩方法。

gbase> create table t_13_compress(id int, name varchar(100),birth date)compress(1,3);
Query OK, 0 rows affected (Elapsed: 00:00:00.11)

列级

如下id列指定压缩方法1,name指定压缩方法5,date使用表级指定的压缩方法(1,3)中的1。如果表没有指定,则data使用实例级当前配置的压缩方法。

gbase> create table t_col_compress(id int compress(1), name varchar(100) compress(5),birth date)compress(1,3);
Query OK, 0 rows affected (Elapsed: 00:00:00.10)

总结

GBase 8a数据库提供了多级压缩粒度,以及几种压缩粒度,用户可以根据业务需求进行选择。高压缩节省了磁盘空间,但带来的是压缩或解压缩性能的损失,不存在一种既高效压缩,又性能(压缩解压缩)优异的算法,如果有,那么它一定会成为业界【默认】的处理方式。