왜 성능이 빠른가
ClickHouse의 속도는 하나의 비결이 아니라, 저장 방식부터 CPU 명령어 수준까지 모든 계층에서 불필요한 일을 덜어낸 결과입니다. 데이터를 덜 읽고, 읽은 데이터는 최대한 효율적으로 처리합니다.
ClickHouse의 아키텍처를 다룬 첫 논문이 2024년 데이터베이스 분야 최고 학회인 VLDB에 채택되었습니다. 채택률이 약 20%인 학회로, 창립자 Alexey Milovidov가 직접 발표했습니다.
쿼리 한 건이 지나는 길
데이터가 저장될 때부터 결과가 나올 때까지, 각 단계에서 ClickHouse가 하는 일을 순서대로 정리했습니다.
INSERT가 들어올 때마다 테이블에 새 조각(part)을 하나 만듭니다. 기존 데이터와 맞추는 작업이 없어 쓰기가 디스크 속도에 가깝게 이루어집니다.
조건에 맞지 않는 데이터는 아예 디스크에서 읽지 않습니다. 성능을 좌우하는 가장 큰 요소입니다.
대부분의 분석 DB가 컬럼형 압축을 하지만, ClickHouse는 압축 방식을 테이블 전체가 아니라 컬럼마다 고르고, 데이터의 생김새에 맞춘 인코딩을 범용 압축 앞에 겹쳐 씁니다. 압축률뿐 아니라 압축을 푸는 속도까지 컬럼 단위로 조절할 수 있다는 점이 다릅니다.
CODEC(DoubleDelta, LZ4)읽어 온 데이터는 CPU와 코어를 최대한 활용해 처리합니다.
범용 구현 하나로 모든 경우를 처리하지 않고, 데이터와 쿼리 특성에 맞는 구현을 골라 씁니다.
컬럼 기반 저장
행 기반 DB는 한 행의 값을 붙여 저장하므로, 컬럼 세 개만 필요해도 행 전체를 디스크에서 읽어야 합니다. ClickHouse는 컬럼별로 따로 저장해 쿼리에 쓰이는 컬럼만 읽습니다.
SELECT event_date, user_id, revenue FROM events WHERE event_date = today()
공개 벤치마크
ClickHouse는 성능 수치를 자체 테스트로만 주장하지 않습니다. 쿼리, 데이터, 실행 스크립트를 모두 공개한 벤치마크에서 다른 데이터베이스와 같은 조건으로 비교하고, 결과를 웹에서 누구나 확인할 수 있게 합니다.
| 벤치마크 | 쿼리 수 | 데이터 규모 | 측정 내용 |
|---|---|---|---|
| ClickBench | 42개 | 1억 행 | 웹 분석 로그 기반 대표 분석 쿼리 |
| MgBench | 15개 | 2억 행 | 머신 생성 로그 분석 |
| Star Schema | 13개 | 6억 행 | DW 표준 스타 스키마 조인·집계 |
| NYC Taxi Rides | 4개 | 34억 행 | 뉴욕 택시 운행 기록 집계 |