在存储层,AnalyticDB PostgreSQL版本支持行存、Append-only行存和Append-only列存三种存储格式。其中,列存表支持在建表时指定压缩算法、对数据进行压缩。存储压缩可以有效帮助用户减少存储成本和I/O资源的消耗。

使用方法

在创建Append-only列存表时,用户可以通过指定COMPRESSTYPE字段来指定压缩的类型。如不指定则数据不会进行压缩。目前支持三种压缩格式: zstd、zlib和lz4。用户可以通过指定COMPRESSLEVEL字段来决定压缩等级,数值越大压缩率越高,取值范围为1-19,通常建议选取9做为压缩等级。

CREATE TABLE LINEITEM (
    ....
)
WITH (APPENDONLY=TRUE, ORIENTATION=COLUMN, COMPRESSTYPE=lz4, COMPRESSLEVEL=9)
DISTRIBUTED BY (L_ORDERKEY);

存储压缩有两方面的好处。一方面,压缩后的数据可以节约存储成本通常可以节约60%~80%的存储空间。另一方面,压缩后的数据由于体积更小,在写入和查询时可以节约一定的I/O带宽,对于I/O密集型场景能够提高性能。

性能测试

下图是ZLIB、ZSTD和LZ4的性能参数对比。ZSTD算法在压缩速度、解压缩度和压缩率三个维度上比较均衡,实践上推荐优先考虑采用ZSTD算法。ZLIB算法主要是为了兼容一些已有的数据,不建议新建的表采用ZLIB算法。LZ4算法的压缩速度和压缩率不如ZSTD,但是解压速度明显优于ZSTD算法,因此对于查询性能要求严格的场景,推荐采用LZ4算法。

- ZLIB ZSTD LZ4
压缩速度 9.5 MB/s 19.2 MB/s 12.7 MB/s
解压速度 154.9 MB/s 353.4 MB/s 854.4 MB/s
压缩率 3.83 3.99 3.2