El protocolo de ClickHouse admite la compresión de bloques de datos con sumas de comprobación.
Use LZ4 si no está seguro de qué modo elegir.
``
Modos
| valor | nombre | descripción |
|---|---|---|
0x02 |
Ninguno | Sin compresión, solo sumas de comprobación |
0x82 |
LZ4 | Extremadamente rápido, buena compresión |
0x90 |
ZSTD | Zstandard, bastante rápido, la mejor compresión |
Tanto LZ4 como ZSTD fueron creados por el mismo autor, pero con distintas compensaciones. Según los benchmarks de Facebook:
| nombre | ratio | compresión | descompresión |
|---|---|---|---|
| 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 |
Bloque
| campo | tipo | descripción |
|---|---|---|
| checksum | uint128 | Hash de (encabezado + datos comprimidos) |
| raw_size | uint32 | Tamaño bruto sin encabezado |
| data_size | uint32 | Tamaño de los datos sin comprimir |
| mode | byte | Modo de compresión |
| compressed_data | binary | Bloque de datos comprimidos |

El encabezado es (raw_size + data_size + mode); el tamaño bruto consiste en len(header + compressed_data).
La suma de comprobación es hash(header + compressed_data), mediante ClickHouse CityHash.
Modo None
Si se usa el modo None, compressed_data es igual a los datos originales.
El modo sin compresión es útil para garantizar una mayor integridad de los datos mediante sumas de comprobación, porque
la sobrecarga del hash es insignificante.