피드로 돌아가기
ClickHouse Native JSON Support in 2026: A PR-by-PR Analysis
Dev.toDev.to
Database

MongoDB 대비 2,500배 빠른 Columnar 기반 Native JSON 구현

ClickHouse Native JSON Support in 2026: A PR-by-PR Analysis

Manveer Chawla2026년 4월 20일26advanced

Context

기존 String 기반 JSON 저장 방식은 쿼리 시 전체 컬럼 스캔이 불가피한 구조적 한계를 가짐. 초기 Object('json') 타입 역시 타입 통합 오류와 메타데이터 폭발, Race Condition 문제로 인해 실무 적용이 불가능한 상태였음.

Technical Solution

  • Variant, Dynamic, JSON의 3가지 기초 타입을 정의하여 타입 보존과 유연한 스키마 처리 구조 설계
  • 각 JSON 경로를 독립적인 Dynamic-typed subcolumn으로 저장하는 Columnar 포맷 도입
  • Per-granule metadata와 Path Index를 적용한 Shared Data Serialization(PR #83777)으로 선택적 경로 읽기 최적화
  • 쿼리 플래너 단계에서 필요한 Subcolumn만 읽어 들이는 Selective Path Read 메커니즘 구현
  • max_dynamic_paths 설정을 통한 컬럼 폭발 방지와 초과 경로의 효율적 공유 저장소 처리
  • JSON subcolumn에 대한 Primary Key 및 Data-skipping Index 지원으로 검색 성능 강화

Impact

  • JSONBench 10억 건 벤치마크 기준 MongoDB 대비 집계 속도 2,500배 향상
  • Elasticsearch 대비 10배, DuckDB/PostgreSQL 대비 9,000배 빠른 분석 성능 달성
  • Advanced Serialization 도입을 통한 읽기 속도 58배 향상 및 메모리 사용량 3,300배 절감
  • ClickStack 내 OpenTelemetry 로그 처리 시 기존 Map 방식 대비 쿼리 속도 9배 향상

Key Takeaway

Semi-structured 데이터의 분석 성능 최적화를 위해서는 단순한 포맷 저장을 넘어, 물리적 저장 구조를 Columnar 형태로 분리하고 메타데이터 기반의 경로 인덱싱을 결합하는 설계가 필수적임.


- 대규모 JSON 분석 필요 시 전체 스캔 방식(JSONExtract) 대신 Native JSON 타입 적용 검토 - 컬럼 폭발 방지를 위해 max_dynamic_paths 설정값과 실제 데이터 경로 수 비교 분석 - 잦은 쿼리 대상인 JSON 경로는 Type Hint를 통해 물리적 컬럼으로 구체화하여 최적화 - Legacy Object('json') 사용 시 v

2

5.11 업그레이드 전 ALTER TABLE을 통한 마이그레이션 수행

원문 읽기