What is ClickHouse?

What is ClickHouse? (ClickHouse란 무엇인가요?)

ClickHouse는 온라인 분석 처리(OLAP)를 위한 고성능 컬럼 지향 SQL 데이터베이스 관리 시스템(DBMS)이에요. 오픈소스 소프트웨어와 클라우드 서비스 두 형태로 제공됩니다.

출처: 문서

본문

ClickHouse®는 온라인 분석 처리(OLAP)를 위한 고성능, 컬럼 지향 SQL 데이터베이스 관리 시스템(DBMS)입니다. 오픈소스 소프트웨어클라우드 제공 두 형태로 제공됩니다.

분석이란 무엇인가요? (What are analytics?)

분석(analytics)은 OLAP(Online Analytical Processing)라고도 하며, 방대한 데이터셋에 대해 복잡한 계산(예: 집계, 문자열 처리, 산술)을 수행하는 SQL 쿼리를 말합니다.

쿼리당 몇 개의 행만 읽고 써서 밀리초 단위로 끝나는 트랜잭션 쿼리(또는 OLTP, Online Transaction Processing)와 달리, 분석 쿼리는 일상적으로 수십억, 수조 개의 행을 처리합니다.

많은 사용 사례에서 분석 쿼리는 "실시간"이어야 하며, 즉 1초 미만으로 결과를 반환해야 합니다.

행 지향 vs 컬럼 지향 저장 (Row-oriented vs. column-oriented storage)

이런 수준의 성능은 올바른 데이터 "지향성(orientation)"으로만 달성할 수 있습니다.

데이터베이스는 데이터를 행 지향 또는 컬럼 지향으로 저장합니다.

행 지향 데이터베이스에서는 연속된 테이블 행이 차례로 하나씩 저장됩니다. 이 레이아웃은 각 행의 컬럼 값이 함께 저장되므로 행을 빠르게 검색할 수 있게 해 줍니다.

ClickHouse는 컬럼 지향 데이터베이스입니다. 이러한 시스템에서 테이블은 컬럼의 집합으로 저장됩니다. 즉, 각 컬럼의 값이 차례로 하나씩 저장됩니다. 이 레이아웃은 단일 행을 복원하기는 더 어렵게 하지만(이제 행 값 사이에 간격이 생기므로), 필터나 집계 같은 컬럼 연산은 행 지향 데이터베이스보다 훨씬 빨라집니다.

그 차이는 실제 익명화된 웹 분석 데이터 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개가 넘는 기존 컬럼 중 단 몇 개만 선택·필터링해서 밀리초 내에 결과를 반환합니다.

위 그림의 통계 섹션에서 볼 수 있듯이, 이 쿼리는 92밀리초 안에 1억 행을 처리했으며, 이는 초당 약 10억 행 이상 또는 초당 약 7GB 미만의 데이터 전송 처리량입니다.

행 지향 DBMS 행 지향 데이터베이스에서는 위 쿼리가 기존 컬럼 중 몇 개만 처리하더라도, 시스템은 여전히 디스크에서 다른 기존 컬럼의 데이터를 메모리로 로드해야 합니다. 그 이유는 데이터가 블록(보통 고정 크기, 예: 4KB 또는 8KB)이라 불리는 청크로 디스크에 저장되기 때문입니다. 블록은 디스크에서 메모리로 읽히는 데이터의 가장 작은 단위입니다. 애플리케이션이나 데이터베이스가 데이터를 요청하면 운영체제의 디스크 I/O 서브시스템이 디스크에서 필요한 블록을 읽습니다. 블록의 일부만 필요해도 전체 블록이 메모리로 읽힙니다(디스크와 파일시스템 설계 때문입니다).

컬럼 지향 DBMS 각 컬럼의 값이 디스크에 차례로 하나씩 저장되므로, 위 쿼리를 실행할 때 불필요한 데이터는 로드되지 않습니다.

블록 단위의 저장과 디스크-메모리 전송이 분석 쿼리의 데이터 접근 패턴과 정렬되어 있으므로, 쿼리에 필요한 컬럼만 디스크에서 읽혀 사용하지 않는 데이터에 대한 불필요한 I/O를 피할 수 있습니다. 이는 관련 없는 컬럼을 포함한 전체 행이 읽히는 행 기반 저장보다 훨씬 빠릅니다.

데이터 복제와 무결성 (Data replication and integrity)

ClickHouse는 데이터가 여러 노드에 중복 저장되도록 보장하기 위해 비동기 멀티-마스터 복제 방식을 사용합니다. 사용 가능한 어떤 복제본에든 기록된 후, 나머지 모든 복제본은 백그라운드에서 자신의 사본을 가져옵니다. 시스템은 서로 다른 복제본에 동일한 데이터를 유지합니다. 대부분의 실패로부터의 복구는 자동으로, 복잡한 경우에는 반자동으로 수행됩니다.

역할 기반 접근 제어 (Role-Based Access Control)

ClickHouse는 SQL 쿼리로 사용자 계정 관리를 구현하고, ANSI SQL 표준과 인기 있는 관계형 데이터베이스 관리 시스템에서 볼 수 있는 것과 유사한 역할 기반 접근 제어 구성을 허용합니다.

SQL 지원 (SQL support)

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

근사 계산 (Approximate calculation)

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

적응형 조인 알고리즘 (Adaptive join algorithms)

ClickHouse는 조인 알고리즘을 적응적으로 선택합니다. 빠른 해시 조인으로 시작하고, 큰 테이블이 둘 이상이면 merge join으로 대체합니다.

뛰어난 쿼리 성능 (Superior query performance)

ClickHouse는 매우 빠른 쿼리 성능으로 잘 알려져 있습니다.

ClickHouse가 왜 빠른지 알고 싶다면, Why is ClickHouse fast? 가이드를 참고하세요.

더 알아보기 (Learn more)