ClickHouse 연혁
ClickHouse는 처음에 Yandex.Metrica, 전 세계에서 두 번째로 큰 웹 분석 플랫폼을 구동하기 위해 개발되었으며, 현재까지도 그 핵심 구성 요소로 사용됩니다. 데이터베이스에 13조 개가 넘는 레코드가 저장되어 있고 매일 200억 개가 넘는 이벤트가 발생하는 환경에서 ClickHouse는 사전 집계되지 않은 데이터로부터 실시간으로 사용자 정의 보고서를 생성할 수 있도록 합니다. 이 문서에서는 ClickHouse 개발 초기 단계의 목표를 간략하게 다룹니다.
Yandex.Metrica는 히트(hit)와 세션(session)을 기반으로, 사용자가 정의한 임의의 세그먼트를 사용해 실시간으로 사용자 정의 보고서를 생성합니다. 이 과정에서는 종종 고유 사용자 수와 같은 복잡한 집계를 계산해야 하며, 보고서 생성을 위한 새로운 데이터가 실시간으로 유입됩니다.
2014년 4월 기준으로 Yandex.Metrica는 매일 약 120억 개의 이벤트(페이지 조회 및 클릭)를 추적했습니다. 이러한 모든 이벤트는 사용자 정의 보고서를 생성하기 위해 저장되어야 했습니다. 단일 쿼리는 수백 밀리초 안에 수백만 개의 행을 스캔해야 했고, 몇 초 안에 수억 개의 행을 스캔해야 할 수도 있었습니다.
Yandex.Metrica 및 기타 Yandex 서비스에서의 사용
ClickHouse는 Yandex.Metrica에서 여러 용도로 사용됩니다. 주요 역할은 비집계(non-aggregated) 데이터를 활용해 온라인 모드에서 보고서를 생성하는 것입니다. 374대의 서버로 구성된 클러스터를 사용하며, 데이터베이스에는 20.3조 개가 넘는 행이 저장되어 있습니다. 압축된 데이터의 용량은 중복 및 레플리카를 제외하고 약 2 PB입니다. 압축되지 않은 데이터(TSV 형식)의 용량은 대략 17 PB에 이릅니다.
ClickHouse는 다음과 같은 프로세스에서도 핵심적인 역할을 합니다.
- Yandex.Metrica의 Session Replay를 위한 데이터 저장
- 중간 데이터 처리
- Analytics를 사용한 글로벌 보고서 생성
- Yandex.Metrica 엔진 디버깅을 위한 쿼리 실행
- API 및 사용자 인터페이스에서 발생하는 로그 분석
현재는 검색 버티컬, 이커머스, 광고, 비즈니스 분석, 모바일 개발, 개인화 서비스 등 여러 Yandex 서비스 및 부서에서 수십 개의 ClickHouse 인스턴스가 운영되고 있습니다.
집계 데이터와 비집계 데이터
통계를 효율적으로 계산하려면 데이터를 집계해야만 한다는 널리 퍼진 의견이 있습니다. 집계를 하면 데이터 양이 줄어들기 때문입니다.
그러나 데이터 집계에는 많은 제약이 따릅니다:
- 필요한 보고서 목록을 미리 정의해 두어야 합니다.
- 사용자는 맞춤형 보고서를 만들 수 없습니다.
- 상이한 키의 개수가 많을 때 집계를 수행하면 데이터 양이 거의 줄어들지 않으므로, 집계가 쓸모없게 됩니다.
- 보고서의 개수가 많을 경우, 집계 방식의 변형이 너무 많아집니다(조합 폭발).
- 카디널리티가 높은 키(예: URL)를 집계하면 데이터 양이 크게 줄어들지 않습니다(2배 미만).
- 이 때문에 집계를 수행하면 데이터 양이 줄어들기는커녕 오히려 늘어날 수도 있습니다.
- 생성된 모든 보고서를 사용자가 확인하는 것은 아닙니다. 그 계산의 상당 부분은 쓸모가 없습니다.
- 다양한 집계 방식에 따라 데이터의 논리적 무결성이 훼손될 수 있습니다.
아무것도 집계하지 않고 비집계 데이터로 작업하면, 계산량이 줄어들 수도 있습니다.
하지만 집계를 사용하면 작업의 상당 부분을 오프라인으로 전환하여 비교적 여유 있게 완료할 수 있습니다. 반면, 온라인 계산은 사용자가 결과를 기다리고 있으므로 가능한 한 빠르게 계산을 완료해야 합니다.
Yandex.Metrica에는 Metrage라는 데이터 집계 전용 시스템이 있으며, 대부분의 보고서에 사용되었습니다. 2009년부터 Yandex.Metrica는 비집계 데이터용으로 OLAPServer라는 전용 OLAP 데이터베이스도 사용했는데, 이전에는 보고서 빌더에 사용되던 것이었습니다. OLAPServer는 비집계 데이터에 대해서는 잘 동작했지만, 모든 보고서에 원하는 대로 사용할 수 없게 만드는 많은 제약이 있었습니다. 예를 들어, 다양한 데이터 타입을 지원하지 않음(숫자만 지원), 실시간으로 데이터를 점진적으로 갱신할 수 없음(일 단위로 데이터를 다시 쓰는 방식만 가능) 등이 있었습니다. OLAPServer는 DBMS가 아니라 특수 목적의 데이터베이스입니다.
ClickHouse의 초기 목표는 OLAPServer의 제약을 제거하고, 모든 보고서에 대해 비집계 데이터로 작업하는 문제를 해결하는 것이었지만, 수년이 지나면서 일반적인 분석 작업 전반에 적합한 범용 데이터베이스 관리 시스템으로 성장했습니다.