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