Протокол ClickHouse поддерживает сжатие блоков данных с контрольными суммами.
Если не уверены, какой режим выбрать, используйте LZ4.
“
| значение | имя | описание |
|---|
0x02 | None | Без сжатия, только контрольные суммы |
0x82 | LZ4 | Очень быстрый, хорошее сжатие |
0x90 | ZSTD | Zstandard, довольно быстрый, лучшее сжатие |
И LZ4, и ZSTD созданы одним и тем же автором, но с разными компромиссами.
Из бенчмарков Facebook:
| имя | коэффициент | кодирование | декодирование |
|---|
| 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 |
| поле | тип | описание |
|---|
| checksum | uint128 | Хэш от (header + compressed data) |
| raw_size | uint32 | Исходный размер без заголовка |
| data_size | uint32 | Размер несжатых данных |
| mode | byte | Режим сжатия |
| compressed_data | binary | Блок сжатых данных |
Заголовок имеет вид (raw_size + data_size + mode), а raw_size равен len(header + compressed_data).
Контрольная сумма вычисляется как hash(header + compressed_data) с использованием ClickHouse CityHash.
Если используется режим None, compressed_data совпадает с исходными данными.
Режим без сжатия полезен для обеспечения дополнительной целостности данных с помощью контрольных сумм, поскольку
накладные расходы на хеширование пренебрежимо малы. Последнее изменение 10 июня 2026 г.