圧縮モード
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 |
ブロック
| field | type | description |
|---|---|---|
| checksum | uint128 | (header + compressed data) のハッシュ |
| raw_size | uint32 | ヘッダーを含まない生データサイズ |
| data_size | uint32 | 非圧縮データサイズ |
| mode | byte | 圧縮モード |
| compressed_data | binary | 圧縮データのブロック |

ヘッダーは (raw_size + data_size + mode) で構成され、raw_size は header + compressed_data の長さです。
Checksum は ClickHouse CityHash を用いて hash(header + compressed_data) として計算されます。
None モード
None モードを使用する場合、compressed_data は元のデータと同一になります。
非圧縮モードは、ハッシュ計算のオーバーヘッドが無視できる程度に小さいため、チェックサムによって追加のデータ完全性を確保するのに有用です。