GBase新闻
一文了解 DC 数据存储的压缩原理
压缩算法类型
分为全局压缩、表级压缩和列级压缩
其中全局压缩通过参数配置,表级压缩通过创建表时指定表属性中的compress关键字指定,列级压缩同样在列属性中指定compress。
支持创建表时指定压缩属性,支持修改表压缩属性;
支持创建列时指定压缩属性,支持修改列压缩属性。
压缩属性修改后,最新的Datacell行开始生效,即一个DC中使用的是同一种压缩算法。
压缩算法优先级
列级>表级>全局,当高级别指定了压缩算法后,低级别失效。
压缩算法由老的配置参数
gbase_compression_str_method、gbase_compression_num_method指定,或由新的配置参数
gbase_compress_method、
gbase_compress_level指定,新旧参数可同时存在。
当新的配置参数存在时,以新参数为准,后文统称为新算法配置方式;
若不存在,则以老参数为准,后文统称为旧算法配置方式。
新老版本算法参数差别
01 新老版算法配置参数差别说明
旧算法配置参数中,可以控制使用算法的种类,而具体到某一算法,但只能采用默认的压缩级别,缺乏灵活性,也限制了算法在不同场景下发挥出最大效能。
同时现在安装后默认配置文件为:
gbase_compression_num_method=5
gbase_compression_str_method=5
如果是(1,3)压缩则
gbase_compression_num_method=1
gbase_compression_str_method=3
与建表时指定的compress(N,M)算法对应关系存在困扰,
为了防止这种情况,新算法采用新的参数配置方式。
gbase_compress_num_or_method =
gbase_compress_method
gbase_compress_str_or_level = gbase_compress_level
现推出新算法配置方式后,老的配置参数依然有效,但只开放如下数值:
gbase_compression_num_method
数值压缩类型
0:不使用压缩
1:highz压缩
5:rapidz压缩
40: Stdz压缩
gbase_compression_str_method
字符串压缩类型
0:不使用压缩
3:highz压缩
5:rapidz压缩
40: Stdz压缩
新版本压缩算法
gbase_compress_method :
压缩类型,不设置时show variables 显示为‘No Setting’
gbase_compress_level :
压缩比,压缩比越低,压缩/解压速度越快,默认是0,表示根据数据内容自动评估
目前配置的默认压缩算法为compress(stdz,0),配置文件中配置参数如下:
gbase_compress_num_or_method=stdz
gbase_compress_str_or_level=0
02 新老版压缩算法对比列表

压缩算法类型说明
01 HighZ类型
存储优先,追求存储节省
优势:在各数据类型下压缩比均较优异,尤其是在字符型数据类型(如 char、varchar)和重复值多的字段上更为突出,能大幅减少存储占用。
劣势:面对char和varchar类型数据时,加载过程耗时较长。
02 STDZ类型
在保持性能前提下提升数据压缩率
优势:压缩比高,高等级在处理重复数据时,压缩比更突出。且高压缩等级在复杂查询中效率更高。
劣势:压缩等级越高,加载耗时越长;高等级压缩比提升有限,但加载耗时增幅较大。
03 RapidZ/NewRapidZ类型
兼顾加载和查询性能。NewRapidZ是在RapidZ的基础上优化压缩解压效率,对压缩率提升不多,故这里不做讨论。
优势:加载和查询效率较均衡,相同数据量下查询时间较短。
劣势:压缩比最低,存储占用相对较高。
04 NoZip类型
不压缩,仅依靠DC存储机制达到降低存储空间的目的。
压缩算法性能对比及总结
01 新老版本默认压缩算法性能对比

通过上述表格可以看出:
STDZ在压缩等级为0-2时,存储空间优于55压缩,查询,加载性能两种压缩基本一致,随着压缩比增高,STDZ压缩加载耗时也越长,原因是压缩级别越高,数据入库时,压缩耗时就越长,但是存储空间占用也随之降低。
02 压缩算法间的压缩性能对比

通过上述表格可以看出:
HighZ 在多数场景下表现优异:尤其是在处理 int(高重复值)、date 和 char 类型时,它的压缩率极高,远超其他算法。
STDZ(9) 是通用性最强的选择:虽然它在某些特定类型上不如 HighZ 极致,但在 varchar 这种大字段上表现最好,且整体总大小最小(8.31G)。
RapidZ 性能最差:在所有测试项中,它的占用空间几乎总是最大的,说明它可能是一种追求极速读写但牺牲了压缩率的策略。


