메인 콘텐츠로 건너뛰기
ClickHouse®는 온라인 분석 처리(OLAP)를 위한 고성능 컬럼 지향 SQL 데이터베이스 관리 시스템(DBMS)입니다. 오픈소스 소프트웨어Cloud 서비스 형태로 제공됩니다.

분석이란 무엇입니까?

분석은 OLAP(Online Analytical Processing)이라고도 하며, 방대한 데이터셋에 대해 복잡한 계산(예: 집계, 문자열 처리, 산술 연산)을 수행하는 SQL 쿼리를 의미합니다. 쿼리당 몇 개의 행만 읽고 쓰기 때문에 밀리초 단위로 완료되는 트랜잭션 쿼리(또는 OLTP, Online Transaction Processing)와 달리, 분석 쿼리는 일반적으로 수십억에서 수조 개의 행을 처리합니다. 많은 사용 사례에서 분석 쿼리는 “실시간”이어야 합니다. 즉, 1초 이내에 결과를 반환해야 합니다.

행 지향 저장과 컬럼 지향 저장 비교

이와 같은 수준의 성능은 데이터의 올바른 “지향성”이 있어야만 달성할 수 있습니다. 데이터베이스는 데이터를 행 지향 또는 컬럼 지향 방식으로 저장합니다. 행 지향 데이터베이스에서는 테이블의 연속된 행이 차례대로 순차 저장됩니다. 이 방식에서는 각 행의 컬럼 값이 함께 저장되므로 행을 빠르게 조회할 수 있습니다. ClickHouse는 컬럼 지향 데이터베이스입니다. 이러한 시스템에서는 테이블이 컬럼들의 집합으로 저장되며, 즉 각 컬럼의 값이 차례대로 순차 저장됩니다. 이 방식에서는 단일 행을 복원하기가 더 어려워지지만(이제 행 값 사이에 간격이 생기기 때문입니다), filter나 집계와 같은 컬럼 연산은 행 지향 데이터베이스보다 훨씬 빨라집니다. 이 차이는 실제 익명화된 웹 분석 데이터 1억 행에 대해 실행한 다음 예시 쿼리로 가장 잘 설명할 수 있습니다:
SELECT MobilePhoneModel, COUNT() AS c
FROM metrica.hits
WHERE
      RegionID = 229
  AND EventDate >= '2013-07-01'
  AND EventDate <= '2013-07-31'
  AND MobilePhone != 0
  AND MobilePhoneModel not in ['', 'iPad']
GROUP BY MobilePhoneModel
ORDER BY c DESC
LIMIT 8;
ClickHouse SQL Playground에서 이 쿼리를 실행하여 기존 100개가 넘는 컬럼 중 일부만 선택하고 필터링한 다음, 결과를 밀리초 단위로 받아볼 수 있습니다: 위 그림의 통계 섹션에서 볼 수 있듯이, 이 쿼리는 1억 행을 92밀리초 만에 처리했으며, 처리량은 초당 약 10억 행 이상, 또는 초당 7 GB에 약간 못 미치는 데이터 전송량에 해당합니다. 행 지향 DBMS 행 지향 데이터베이스에서는 위 쿼리가 기존 컬럼 중 일부만 처리하더라도, 시스템은 여전히 다른 컬럼의 데이터도 디스크에서 메모리로 로드해야 합니다. 이는 데이터가 디스크에 블록이라고 하는 청크 단위로 저장되기 때문입니다(보통 4 KB 또는 8 KB 같은 고정 크기). 블록은 디스크에서 메모리로 읽어 오는 데이터의 가장 작은 단위입니다. 애플리케이션이나 데이터베이스가 데이터를 요청하면 운영 체제의 디스크 I/O 하위 시스템이 디스크에서 필요한 블록을 읽습니다. 블록의 일부만 필요하더라도 전체 블록이 메모리로 읽혀집니다(이는 디스크 및 파일 시스템 설계에 따른 것입니다): 컬럼 지향 DBMS 각 컬럼의 값이 디스크에 순차적으로 저장되므로, 위 쿼리를 실행할 때 불필요한 데이터는 로드되지 않습니다. 디스크에서 메모리로의 block 단위 저장 및 전송이 분석 쿼리의 데이터 접근 패턴과 일치하므로, 쿼리에 필요한 컬럼만 디스크에서 읽어 사용되지 않는 데이터에 대한 불필요한 I/O를 피할 수 있습니다. 이는 전체 행(관련 없는 컬럼 포함)을 읽는 행 기반 저장 방식과 비교하면 훨씬 더 빠릅니다:

데이터 복제 및 무결성

ClickHouse는 여러 노드에 데이터를 중복 저장할 수 있도록 비동기 멀티 마스터 복제 방식을 사용합니다. 사용 가능한 아무 레플리카에 데이터를 쓰면, 나머지 모든 레플리카는 백그라운드에서 해당 데이터의 사본을 가져옵니다. 시스템은 서로 다른 레플리카에 동일한 데이터가 유지되도록 합니다. 대부분의 장애는 자동으로 복구되며, 복잡한 경우에는 반자동으로 복구됩니다.

역할 기반 접근 제어

ClickHouse는 SQL 쿼리를 사용해 사용자 계정을 관리하며, ANSI SQL 표준과 널리 사용되는 관계형 데이터베이스 관리 시스템과 유사한 역할 기반 접근 제어 구성을 지원합니다.

SQL 지원

ClickHouse는 많은 경우 ANSI SQL 표준과 동일한 SQL 기반의 선언형 쿼리 언어를 지원합니다. 지원되는 쿼리 절에는 GROUP BY, ORDER BY, FROM의 서브쿼리, JOIN 절, IN 연산자, 윈도우 함수, 그리고 스칼라 서브쿼리가 포함됩니다.

근사 계산

ClickHouse는 정확도와 성능을 절충할 수 있는 방법을 제공합니다. 예를 들어 일부 집계 함수는 고유값 개수, 중앙값, 분위수를 근사적으로 계산합니다. 또한 데이터의 일부 샘플에 대해 쿼리를 실행해 근사 결과를 빠르게 계산할 수 있습니다. 마지막으로 모든 키에 대해 집계를 수행하는 대신, 제한된 수의 키에 대해서만 집계를 수행할 수 있습니다. 키 분포가 얼마나 치우쳐 있는지에 따라, 이 방식은 정확 계산보다 훨씬 적은 리소스를 사용하면서도 상당히 정확한 결과를 제공할 수 있습니다.

적응형 조인 알고리즘

ClickHouse는 조인 알고리즘을 상황에 맞게 선택합니다. 먼저 빠른 해시 조인을 사용하고, 큰 테이블이 2개 이상이면 머지 조인으로 전환합니다.

뛰어난 쿼리 성능

ClickHouse는 매우 빠른 쿼리 성능을 제공하는 것으로 잘 알려져 있습니다. ClickHouse가 왜 이렇게 빠른지 알아보려면 Why is ClickHouse fast? 가이드를 참조하십시오.
마지막 수정일 2026년 6월 10일