メインコンテンツへスキップ
メインコンテンツへスキップ

ClickHouse の歴史

ClickHouse は当初、Yandex.Metrica世界第 2 位の規模を持つウェブ解析プラットフォーム)を支えるために開発され、現在もその中核コンポーネントとして利用されています。データベース内には 13 兆件を超えるレコードが存在し、1 日あたり 200 億件以上のイベントが蓄積されるという規模においても、ClickHouse は非集約データから直接、オンザフライでカスタムレポートを生成することを可能にします。本記事では、ClickHouse 開発初期段階における目標について簡潔に説明します。

Yandex.Metrica は、ヒットおよびセッションに基づき、ユーザーが定義した任意のセグメントに対するカスタムレポートをオンザフライで作成します。そのためには、多くの場合、ユニークユーザー数のような複雑な集約を計算する必要があり、レポート作成に用いる新しいデータもリアルタイムで到着します。

2014 年 4 月時点で、Yandex.Metrica は 1 日あたり約 120 億件のイベント(ページビューおよびクリック)を追跡していました。これらすべてのイベントは、カスタムレポートを作成するために保存しておく必要があります。単一のクエリであっても、数百ミリ秒のうちに数百万行、あるいは数秒のうちに数億行をスキャンする必要がある場合がありました。

Yandex.Metrica およびその他の Yandex サービスでの利用

ClickHouse は、Yandex.Metrica の中で複数の目的に利用されています。 主な役割は、非集約データを用いてオンラインでレポートを生成することです。そのために 374 台のサーバーからなるクラスターを使用しており、データベースには 20.3 兆行を超えるデータが格納されています。重複やレプリカを除いた圧縮後のデータ量は約 2 PB です。非圧縮データ量(TSV 形式に展開した場合)はおよそ 17 PB になります。

ClickHouse は、次のプロセスにおいても重要な役割を果たしています。

  • Yandex.Metrica の Session Replay 用データの保存。
  • 中間データの処理。
  • Analytics によるグローバルレポートの構築。
  • Yandex.Metrica エンジンのデバッグ用クエリの実行。
  • API およびユーザーインターフェースからのログの分析。

現在では、Yandex のその他のサービスや部門(検索バーティカル、e コマース、広告、ビジネスアナリティクス、モバイル開発、パーソナルサービスなど)においても、数十の ClickHouse インストール環境が稼働しています。

集計済みデータと非集計データ

統計を効率的に計算するには、データ量を削減するためにデータを集計しなければならない、という考え方が一般的です。

しかし、データの集計には多くの制約が伴います。

  • 必要なレポートの一覧をあらかじめ定義しておく必要があります。
  • ユーザーはカスタムレポートを作成できません。
  • 多数の異なるキーで集計を行うと、データ量はほとんど減らず、集計は無意味になります。
  • レポートの種類が多い場合、集計パターンが多すぎます(組み合わせの爆発的増加)。
  • 高カーディナリティのキー(URL など)で集計する場合、データ量はほとんど減りません(2 倍未満の削減)。
  • このため、集計を行ってもデータ量が減るどころか増加してしまうことがあります。
  • 生成したレポートのすべてをユーザーが閲覧するわけではありません。多くの計算は無駄になります。
  • さまざまな集計により、データの論理的一貫性が損なわれる可能性があります。

何も集計せず、非集計データを扱う場合、計算量を削減できる可能性があります。

一方で、集計を行う場合、作業の大部分はオフラインで比較的落ち着いて処理されます。これに対し、オンライン計算では、ユーザーが結果を待っているため、可能な限り高速に計算を行う必要があります。

Yandex.Metrica には、Metrage と呼ばれるデータ集計専用システムがあり、大半のレポートで使用されていました。 2009 年からは、非集計データ用の専用 OLAP データベースである OLAPServer も Yandex.Metrica で使用されるようになりました。これは、以前はレポートビルダー向けに使用されていたものです。 OLAPServer は非集計データに対してはうまく動作していましたが、すべてのレポートで期待どおりに利用できない多くの制約がありました。たとえば、さまざまなデータ型をサポートしていない(数値のみを扱える)、データをリアルタイムに増分更新できない(データは毎日書き換えることでしか更新できない)といった制約です。OLAPServer は DBMS ではなく、専用の DB です。

ClickHouse の当初の目標は、OLAPServer の制約を取り除き、すべてのレポートに対して非集計データを扱う問題を解決することでしたが、年月を経て、幅広い分析タスクに適した汎用的なデータベース管理システムへと成長しました。