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 | (header + compressed data) の ハッシュ |
| raw_size | uint32 | ヘッダーを除いた元のサイズ |
| data_size | uint32 | 非圧縮データサイズ |
| mode | byte | 圧縮モード |
| compressed_data | binary | 圧縮データのブロック |

ヘッダーは (raw_size + data_size + mode) で、元のサイズは len(header + compressed_data) に相当します。
Checksum は ClickHouse CityHash を使用した hash(header + compressed_data) です。
None モード
None モードを使用すると、compressed_data は元のデータと同じです。
圧縮しないモードは、ハッシュ計算のオーバーヘッドがごく小さいため、チェックサムによる追加のデータ整合性の確保に役立ちます。