圧縮モード
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 | ハッシュ (ヘッダー + 圧縮データ) |
| raw_size | uint32 | ヘッダーなしの生サイズ |
| data_size | uint32 | 圧縮されていないデータサイズ |
| mode | byte | 圧縮モード |
| compressed_data | binary | 圧縮データのブロック |

ヘッダーは (raw_size + data_size + mode) で構成され、生サイズは len(header + compressed_data) からなります。
チェックサムは hash(header + compressed_data) で、ClickHouse CityHash を使用しています。
None モード
None モードが使用される場合、 compressed_data は元のデータと等しいです。
圧縮なしモードは、チェックサムによる追加のデータ整合性を確保するのに役立ちます。なぜなら、ハッシングのオーバーヘッドは無視できるためです。