피드로 돌아가기
Dev.toDatabase
원문 읽기
Dictionary Join 도입으로 Hash Join 대비 최대 25배 성능 향상 및 정규화 가능
When to denormalize, when to join: A ClickHouse guide (2026)
AI 요약
Context
과거 Columnar Engine의 메모리 제약과 Distributed Shuffle 비용으로 인한 높은 Query Latency 발생. 이로 인해 Read 성능 확보를 위해 Ingestion 단계에서 데이터를 미리 합치는 Denormalization이 분석 시스템의 표준으로 강제됨.
Technical Solution
- Grace Hash Join 도입을 통한 메모리 초과 시 Disk Spill 처리로 OOM 장애 방지 및 쿼리 안정성 확보
- Parallel Hash Join 및 Merge Join 적용으로 CPU 코어 활용 극대화 및 정렬 데이터 기반의 해싱 단계 제거
- Dictionary-based Direct Join 설계를 통해 Dimension 데이터를 Key-Value 구조로 메모리에 로드하여 Lookup 속도 최적화
- Runtime Bloom Filters 및 Join Reordering 최적화로 불필요한 데이터 스캔 최소화 및 실행 계획 효율 개선
- Materialized View를 활용하여 외부 ETL 파이프라인 의존도를 낮추고 DB 내부에서 전처리 로직 통합 관리
Impact
- Dictionary-based Direct Join 사용 시 일반 Hash Join 대비 최대 25x 속도 향상 달성
실천 포인트
1. 고정된 Access Pattern과 극한의 Read 성능이 필요하다면 Denormalization 유지
2. 데이터 신선도 유지 및 Schema 유연성이 중요하다면 ClickHouse의 Dictionary Join 검토
3. 1:1 또는 N:1 관계의 Dimension Lookup 시 Hash Join 대신 Dictionary 구조 우선 적용
4. Wide Table 컬럼 추가 시 Merge 압력 제어를 위해 Partition 단위의 Incremental Backfill 수행