ClickHouse 协议支持对数据块进行带校验和的压缩。
如果不确定该选择哪种模式,请使用 LZ4。
``
模式
| value | name | description |
|---|---|---|
0x02 |
None | 不压缩,仅使用校验和 |
0x82 |
LZ4 | 速度极快,压缩效果较好 |
0x90 |
ZSTD | Zstandard,速度相当快,压缩效果最佳 |
LZ4 和 ZSTD 都出自同一位作者,但取舍各不相同。 摘自 Facebook benchmarks:
| 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 | (请求头 + 压缩数据) 的 哈希 |
| raw_size | uint32 | 不含请求头的原始大小 |
| data_size | uint32 | 未压缩数据大小 |
| mode | byte | 压缩模式 |
| compressed_data | binary | 压缩数据块 |

请求头为 (raw_size + data_size + mode),raw_size 的值为 len(请求头 + compressed_data)。
校验和为 hash(header + compressed_data),使用 ClickHouse CityHash。
None 模式
如果使用 None 模式,compressed_data 与原始数据相同。
由于哈希计算的开销可以忽略不计,无压缩模式也有助于借助校验和进一步确保数据完整性。