Le protocole ClickHouse prend en charge la compression des blocs de données avec sommes de contrôle.
Utilisez LZ4 si vous ne savez pas quel mode choisir.
``
Modes
| valeur | nom | description |
|---|---|---|
0x02 |
None | Aucune compression, uniquement des sommes de contrôle |
0x82 |
LZ4 | Extrêmement rapide, bonne compression |
0x90 |
ZSTD | Zstandard, assez rapide, meilleure compression |
LZ4 et ZSTD ont tous deux été créés par le même auteur, mais avec des compromis différents. D’après les tests de performance de Facebook :
| nom | ratio | compression | décompression |
|---|---|---|---|
| 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 |
Bloc
| champ | type | description |
|---|---|---|
| checksum | uint128 | Somme de contrôle de (header + compressed data) |
| raw_size | uint32 | Taille brute sans en-tête |
| data_size | uint32 | Taille des données non compressées |
| mode | byte | Mode de compression |
| compressed_data | binary | Bloc de données compressées |

L’en-tête est constitué de (raw_size + data_size + mode), et la taille brute correspond à len(header + compressed_data).
La somme de contrôle est hash(header + compressed_data), à l’aide de ClickHouse CityHash.
Mode None
Si le mode None est utilisé, compressed_data est égal aux données d’origine.
Le mode sans compression est utile pour renforcer l’intégrité des données grâce aux sommes de contrôle, car
le surcoût du hachage est négligeable.