在存儲層,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);

存儲壓縮有兩方面的好處。一方面,壓縮后的數據可以節約存儲成本通??梢怨澕s60%~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