데이터 엔지니어 · 데이터 사이언티스트를 위한 핵심 요약
ClickHouse는 Yandex에서 개발된 오픈소스 컬럼 지향 OLAP(Online Analytical Processing) 데이터베이스 관리 시스템입니다. 초고속 쿼리 처리와 대용량 데이터 분석에 특화되어 있으며, 실시간 분석 워크로드를 효율적으로 처리합니다. 데이터 엔지니어와 데이터 사이언티스트가 대규모 로그, 시계열, 이벤트 데이터를 다룰 때 필수 도구입니다.
주요 특징: 압축률이 높고, 벡터화된 쿼리 실행, 분산 처리 지원으로 TB~PB급 데이터를 초 단위로 분석 가능.
행 지향 DB와 달리 컬럼 단위 저장으로 압축 효율 ↑, 읽기 성능 ↑. 분석 쿼리에서 필요한 컬럼만 로드.
SIMD 명령어 활용으로 CPU 캐시 최적화. 집계/필터링 속도 10~100배 향상.
샤딩/복제 지원. ZooKeeper로 클러스터 관리. 수평 확장 용이.
전통 RDBMS(MySQL, PostgreSQL)는 OLTP에 강하지만 OLAP에서 병목. ClickHouse는 분석 쿼리에 최적화되어 비용/성능 우위.
| 기능 | ClickHouse | PostgreSQL | MySQL | BigQuery |
|---|---|---|---|---|
| 쿼리 속도 (1TB 집계) | 초 단위 | 분~시간 | 분~시간 | 초~분 (유료) |
| 스토리지 비용 | 낮음 (압축 10x) | 중간 | 중간 | 높음 (스토리지 별도) |
| 오픈소스 | 예 | 예 | 예 | 아니오 |
| 실시간 삽입 | 100만+ TPS | 10만 TPS | 10만 TPS | 스트리밍 지원 |
| 클러스터링 | 내장 | 확장 필요 (Citus) | 확장 필요 | 관리됨 |
MergeTree 엔진: 기본 테이블 엔진. 데이터 파티션/정렬/기본키로 최적화. 배경 Merge로 데이터 병합.
Materialized View: 자동 집계 뷰. 실시간 대시보드에 유용.
샤딩/복제: ReplicatedMergeTree로 고가용성 확보.
클라이언트 → 로드밸런서 → 샤드(데이터 분할) → 레플리카(복제본). ZooKeeper가 메타데이터 동기화.
docker run -d --name ch-server --ulimit nofile=262144:262144 \
-p 8123:8123 -p 9000:9000 \
--volume /path/to/data:/var/lib/clickhouse \
clickhouse/clickhouse-server
docker exec -it ch-server clickhouse-client
pip install clickhouse-connect
import clickhouse_connect
client = clickhouse_connect.get_client(host='localhost', port=8123)
# 테이블 생성
client.command('''
CREATE TABLE IF NOT EXISTS events (
timestamp DateTime,
user_id UInt64,
event_type String,
value Float64
) ENGINE = MergeTree()
ORDER BY (timestamp, user_id)
''')
# 데이터 삽입
client.insert_df('events', df) # pandas DataFrame 사용
# 쿼리
result = client.query_df('SELECT event_type, avg(value) FROM events GROUP BY event_type')
print(result)
config.xml / users.xml에서 수정. 서버 재시작 필요.
| 설정 | 파일 | 기본값 | 설명 | 권장 실무값 |
|---|---|---|---|---|
| max_memory_usage | users.xml | 10GB | 쿼리당 메모리 제한 | 총 RAM 80% |
| max_threads | users.xml | CPU 코어 수 | 병렬 실행 스레드 | CPU 코어 x 2 |
| merge_tree.max_bytes_to_merge_at_max_space_in_pool | config.xml | 150GB | Merge 풀 크기 | 디스크 여유 20% |
| background_pool_size | config.xml | 16 | 배경 작업 풀 | CPU 코어 x 4 |
| listen_host | config.xml | 127.0.0.1 | 바인드 IP | 0.0.0.0 (클러스터) |
추가: Kafka 엔진으로 스트리밍 인제스트. S3 테이블 함수로 외부 데이터 쿼리.