내 잡다한 노트

ClickHouse 개요 및 추구하는 방향성 과 특징 본문

DB/Clickhouse

ClickHouse 개요 및 추구하는 방향성 과 특징

peanutwalnut 2025. 1. 20. 16:05

ClickHouse가 가진 철학과 추구하는 방향성 및 특징을 설명하는 글.

1. 초고속 대화형 분석(OLAP)에 최적화

  1. 컬럼 지향(Column-Oriented) 구조
    • 일반적인 행(Row) 지향 DB가 아닌 컬럼 단위로 데이터를 저장·압축·인덱싱함으로써,
    • 분석 쿼리에서 특정 컬럼들만 읽으면 되므로 I/O 양메모리 사용을 최소화합니다.
    • 집계(aggregation) 함수나 그룹화 쿼리에서 매우 빠른 성능을 낼 수 있습니다.
  2. 실시간(근실시간) 대량 데이터 처리를 위한 설계
    • 트래픽 로그, 이벤트 로그, IoT 시계열 데이터 등 고속으로 유입되는 대규모 데이터를 수 초 이내에 쿼리할 수 있는 구조로 만들어졌습니다.
    • OLAP + 대화형 쿼리(Interactive Query) 환경을 목표로 하며, 임의의 시점에 대해 초 단위 이하의 응답 속도를 지향합니다.
  3. 수평 확장(MPP) 지향 아키텍처
    • 여러 노드를 클러스터로 묶어 분산 저장(샤딩) 및 분산 쿼리(병렬 처리)가 가능하도록 기본 설계되었습니다.
    • 대용량 데이터를 처리할 때, 노드를 추가해도 선형적인 성능 향상을 기대할 수 있도록 MPP(Massively Parallel Processing) 방식으로 동작합니다.

2. “쓰기”보다는 “읽기/집계”에 초점을 맞춘 구조

  1. 불변(Immutable)에 가까운 스토리지
    • 내부적으로 MergeTree 엔진을 사용해, 새 데이터를 파티션 단위로 순차 쓰기하고, 이후 **Compaction(병합)**으로 관리합니다.
    • 잦은 UPDATE/DELETE 연산은 비효율적이며, OLAP 시나리오처럼 “생성 후 거의 수정되지 않는” 데이터에 특히 최적화되어 있습니다.
  2. 빠른 배치 삽입과 합리적인 실시간 처리
    • 한 번에 많은 데이터를 배치(혹은 스트리밍) 방식으로 삽입해도, 내부에서 효율적으로 파티션/세그먼트를 생성해 병목 현상을 줄입니다.
    • 다만 전통적 OLTP처럼 소량의 행을 자주 수정·삭제하는 시나리오에는 적합하지 않습니다.
  3. 읽기 성능 극대화를 위한 압축·인덱스 최적화
    • 컬럼 단위로 효과적인 압축 알고리즘(LZ4, ZSTD, etc.)을 적용해 디스크 I/O를 최소화하고,
    • Primary KeySkipping Index 등을 사용해 대량의 데이터 중 필요한 범위만 골라서 빠르게 조회합니다.

3. 단순하고 직관적인 구성, 유연한 엔진 체계

  1. 단일 바이너리(서버)와 다양한 엔진
    • ClickHouse는 큰 틀에서 하나의 서버(binary) 프로세스로 동작하며, 테이블 생성 시 MergeTree 시리즈, Log, Memory, View엔진(Engine)을 선택하여 특수한 용도를 커버합니다.
    • 이로써 통합된 운영 환경에서 다양한 요구(실시간, 임시 테이블, 외부 연동 등)를 쉽게 처리할 수 있습니다.
  2. SQL 친화적 문법
    • ANSI SQL과 유사한 문법을 채택하여 익숙함을 제공합니다.
    • 사용자 정의 함수(UDF), 다양한 내장 함수, 윈도우 함수 등 분석에 필요한 기능을 꾸준히 확장합니다.
  3. 오픈소스로 커뮤니티 성장
    • 2016년 오픈소스화 이후, 글로벌 커뮤니티를 통해 빠른 개선이 이루어지고 있습니다.
    • 아키텍처가 비교적 “단순하고 직관적”이라는 평을 받아, 처음 도입 시 개념적인 복잡도가 상대적으로 낮은 편입니다.

4. 유연한 분산·복제(HA) 구조, 그러나 완벽 동기화(트랜잭션)는 지양

  1. 멀티 노드 복제(Replication) + 샤딩
    • ReplicatedMergeTree 엔진을 통해 ZooKeeper(또는 ClickHouse Keeper)를 사용해 노드 간 데이터를 비동기로 복제합니다.
    • 노드 장애 시 빠른 복구, 데이터 무결성 유지 등을 지원하지만,
    • OLTP DB처럼 트랜잭션 단위로 “즉각 동기화”를 제공하지는 않습니다(Eventually Consistent 지향).
  2. ‘분석’ 용도 우선
    • OLTP/ACID 트랜잭션 모델이 아닌, OLAP 시나리오에서 “높은 쓰기 성능(단, 배치 쓰기 기준), 초고속 읽기/집계”에 맞춘 설계입니다.

'DB > Clickhouse' 카테고리의 다른 글

ClickHouse Keeper  (0) 2025.01.22
ClickHouse HA  (0) 2025.01.21