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 |
블록
| 필드 | 유형 | 설명 |
|---|---|---|
| checksum | uint128 | (헤더 + 압축 데이터)의 해시 |
| raw_size | uint32 | 헤더를 제외한 원본 크기 |
| data_size | uint32 | 비압축 데이터 크기 |
| mode | byte | 압축 모드 |
| compressed_data | binary | 압축된 데이터 블록 |

헤더는 (raw_size + data_size + mode)로 구성되며, raw size는 len(header + compressed_data)입니다.
체크섬은 ClickHouse CityHash를 사용한 hash(header + compressed_data)입니다.
None 모드
None 모드를 사용하면 compressed_data는 원본 데이터와 동일합니다.
압축하지 않는 모드는 체크섬을 통해 추가적인 데이터 무결성을 보장하는 데 유용합니다. hash 계산 오버헤드는 무시할 수 있을 만큼 작기 때문입니다.