데이터 압축 모드
데이터 압축 모드 (Compression Modes)
ClickHouse 프로토콜은 체크섬이 있는 데이터 블록 압축을 지원해요. 어떤 모드를 고를지 잘 모르겠다면 LZ4를 사용하세요. 사용 가능한 컬럼 압축 코덱에 대해 더 알아보고, 테이블을 만들 때 또는 이후에 지정하세요.
출처: 문서
본문
모드 (Modes)
| 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 |
블록 (Block)
| field | type | description |
|---|---|---|
| checksum | uint128 | (헤더 + 압축 데이터)의 Hash |
| 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는 원본 데이터와 같아요. No compression 모드는 해싱 오버헤드가 무시할 만하므로, 체크섬으로 추가 데이터 무결성을 보장하는 데 유용해요.