O protocolo do ClickHouse oferece suporte à compressão de blocos de dados com checksum.
Use LZ4 se não tiver certeza de qual modo escolher.
“
| valor | nome | descrição |
|---|
0x02 | None | Sem compressão, apenas checksums |
0x82 | LZ4 | Extremamente rápido, boa compressão |
0x90 | ZSTD | Zstandard, bastante rápido, melhor compressão |
Tanto o LZ4 quanto o ZSTD foram criados pelo mesmo autor, mas com trade-offs diferentes.
Segundo benchmarks do Facebook:
| nome | taxa | codificação | decodificação |
|---|
| 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 |
| campo | tipo | descrição |
|---|
| checksum | uint128 | Hash de (cabeçalho + dados compactados) |
| raw_size | uint32 | Tamanho bruto sem o cabeçalho |
| data_size | uint32 | Tamanho dos dados descompactados |
| mode | byte | Modo de compressão |
| compressed_data | binary | Bloco de dados compactados |
O cabeçalho é (raw_size + data_size + mode), e o tamanho bruto corresponde a len(header + compressed_data).
O checksum é hash(header + compressed_data), usando ClickHouse CityHash.
Se o modo None for usado, compressed_data será igual aos dados originais.
O modo sem compressão é útil para garantir uma camada adicional de integridade dos dados com checksums, porque
a sobrecarga do cálculo de hash é desprezível. Última modificação em 10 de junho de 2026