ClickHouse는 어떤 데이터베이스인가요?
ClickHouse는 어떤 데이터베이스인가요?
ClickHouse는 온라인 분석 처리(OLAP)에 특화된 고성능 컬럼 지향 SQL 데이터베이스예요. 행 단위가 아니라 열 단위로 데이터를 저장해서, 수십억~수조 행을 훑는 집계·필터 같은 분석 쿼리를 빠르게 처리합니다. 오픈소스로 제공되면서 클라우드 서비스로도 쓸 수 있어요.
OLAP가 뭐예요?
OLAP(Online Analytical Processing), 즉 온라인 분석 처리는 대용량 데이터 위에서 복잡한 계산을 하는 SQL 쿼리를 뜻해요. 집계, 문자열 처리, 산술 연산이 대표적이죠.
이와 대비되는 OLTP(Online Transaction Processing) 트랜잭션 쿼리는 쿼리당 몇 개의 행만 읽고 쓰기 때문에 밀리초 단위로 끝나요. 반면 분석 쿼리는 수십억~수조 행을 다루는 일이 일상적이예요. 많은 사용 사례에서 분석 쿼리는 1초 미만으로 결과를 돌려주는 실시간 분석이어야 하죠.
행 지향 저장과 열 지향 저장
이런 성능은 올바른 데이터 '방향성'에서 나와요. 데이터베이스는 데이터를 행 지향(row-oriented) 또는 열 지향(column-oriented) 으로 저장합니다.
- 행 지향 데이터베이스는 테이블의 연속된 행을 차례로 저장해요. 각 행의 컬럼 값이 함께 모여 있으니 단일 행을 빠르게 꺼낼 수 있죠.
- ClickHouse는 열 지향이에요. 각 컬럼의 값들을 순서대로 연속 저장합니다. 행 하나를 복원하는 건 조금 어려워지지만, 대신 필터나 집계 같은 컬럼 연산이 행 지향보다 훨씬 빨라져요.
열 지향 저장이 분석에서 강한 이유는 이래요. 디스크는 고정 크기 블록 단위로 읽히는데, 행 지향에서는 컬럼 몇 개만 필요한 쿼리를 실행해도 그 행의 나머지 컬럼 값까지 디스크에서 메모리로 로드해야 하죠. 열 지향에서는 필요한 컬럼만 읽으니 불필요한 I/O가 사라져요. 어떤 컬럼만 골라 읽는 분석 쿼리 패턴과 디스크 전송 단위가 정확히 맞아떨어지는 거예요. 공식 벤치마크에서도 행 기반 저장 대비 압도적으로 빠른 걸 확인할 수 있어요.
쓰기·복제·보안도 어떻게 처리할까요?
- 비동기 멀티 마스터 복제: ClickHouse는 데이터를 여러 노드에 중복 저장하도록 비동기 복제를 써요. 어떤 레플리카에든 쓰면 나머지 레플리카가 백그라운드에서 복제본을 가져와, 서로 다른 레플리카가 동일한 데이터를 유지합니다. 대부분의 장애 복구는 자동(또는 반자동)으로 진행돼요.
- 역할 기반 접근 제어(RBAC): SQL로 사용자 계정을 관리하고, ANSI SQL 표준과 인기 있는 관계형 DB에서 볼 수 있는 것과 비슷한 역할 기반 접근 제어를 구성할 수 있어요.
- SQL 지원: GROUP BY, ORDER BY, FROM 서브쿼리, JOIN, IN 연산자, 윈도우 함수, 스칼라 서브쿼리 등 넓은 SQL 문법을 지원합니다.
성능을 올리는 몇 가지 설계
- 근사 계산: 정확도를 성능과 맞바꾸는 방법을 제공해요. 예를 들어 일부 집계 함수는 distinct 값 개수, 중앙값, 분위수를 근사로 계산할 수 있고, 데이터 샘플에 대해 쿼리를 실행해 결과를 빠르게 얻을 수도 있어요. 집계를 전체 키가 아니라 키 일부로만 돌리는 방식도 있죠. 키 분포가 얼마나 치우쳐 있는지에 따라 정확 계산보다 훨씬 적은 자원으로 충분히 정확한 결과를 내요.
- 적응형 조인 알고리즘: 조인 알고리즘을 적응적으로 고릅니다. 빠른 해시 조인부터 시작해서 큰 테이블이 하나 이상 있으면 병합 조인으로 전환해요.
ClickHouse가 이렇게 빠른 이유가 더 궁금하다면 공식 'Why is ClickHouse fast?' 가이드를 살펴보세요.
더 알아보기
- 프라이머리 인덱스 — 컬럼 데이터를 건너뛰며 읽는 스파스 인덱스가 어떻게 동작하는지
- 테이블 데이터 파트 — MergeTree 엔진의 데이터가 디스크에 저장되는 단위
- 파트 병합 — 백그라운드에서 파트를 합치는 MergeTree 병합 메커니즘
- 쿼리 병렬 실행 — 모든 CPU 코어를 활용한 병렬 처리 원리