压缩模式
ClickHouse 协议支持对带有校验和的数据块进行压缩。
如果不确定选择哪种模式,请使用 LZ4。
提示
了解更多可用的列压缩编解码器,并在创建表时或之后指定它们。
模式
| value | name | description |
|---|---|---|
0x02 | None(无压缩) | 不进行压缩,仅计算校验和 |
0x82 | LZ4 | 极快,压缩效果良好 |
0x90 | ZSTD | Zstandard,速度较快,压缩率最高 |
LZ4 和 ZSTD 均由同一位作者开发,但在性能取舍上有所不同。 数据摘自 Facebook 基准测试:
| name | ratio | encoding | decoding |
|---|---|---|---|
| zstd 1.4.5 -1 | 2.8 | 500 MB/s | 1660 MB/s |
| lz4 1.9.2 | 2.1 | 740 MB/s | 4530 MB/s |
块
| 字段 | 类型 | 说明 |
|---|---|---|
| checksum | uint128 | (header + compressed data) 的 哈希 |
| raw_size | uint32 | 不包含头部的原始大小 |
| data_size | uint32 | 解压后的数据大小 |
| mode | byte | 压缩模式 |
| compressed_data | binary | 压缩数据块 |

头部由 (raw_size + data_size + mode) 组成,raw_size 为 len(header + compressed_data)。
Checksum 为 hash(header + compressed_data),使用 ClickHouse CityHash。
None 模式
如果使用 None 模式,compressed_data 等于原始数据。
无压缩模式在使用校验和进一步确保数据完整性时很有用,因为
哈希计算的开销可以忽略不计。