ClickHouseの歴史
ClickHouseは、Yandex.Metricaを動かすために最初に開発され、世界で2番目に大きいウェブ解析プラットフォームであり続けています。データベースには13兆件以上のレコードがあり、1日あたり200億件以上のイベントを処理するClickHouseは、非集約データから即座にカスタムレポートを生成することを可能にします。この記事では、ClickHouseが開発初期において目指していた目標について簡単に説明します。
Yandex.Metricaは、ユーザーによって定義された任意のセグメントに基づいて、ヒット数やセッションに基づくカスタマイズされたレポートを即座に生成します。そのため、ユニークユーザー数のような複雑な集約を構築する必要があり、新しいレポート生成のためのデータはリアルタイムで到着します。
2014年4月時点で、Yandex.Metricaは日々約120億件のイベント(ページビューやクリック)を追跡していました。これらのイベントはすべて、カスタムレポートを作成するために保存する必要がありました。単一のクエリには、数百ミリ秒以内に何百万行もスキャンする必要がある場合や、わずか数秒で何億行もスキャンする必要があることがあります。
Yandex.Metricaおよびその他のYandexサービスでの使用
ClickHouseは、Yandex.Metricaにおいて複数の目的に利用されています。 その主なタスクは、非集約データを使用してオンラインモードでレポートを構築することです。これは、20.3兆行以上のデータを保存する374台のサーバークラスタを使用しています。圧縮されたデータの容量は約2PBで、重複やレプリカは含まれていません。非圧縮データ(TSV形式)の容量は約17PBに達するでしょう。
ClickHouseは、以下のプロセスでも重要な役割を果たしています:
- Yandex.Metricaからのセッションリプレイ用データの保存。
- 中間データの処理。
- アナリティクスによるグローバルレポートの構築。
- Yandex.Metricaエンジンのデバッグのためのクエリの実行。
- APIおよびユーザーインターフェースからのログの分析。
現在、他のYandexサービスや部門には数十のClickHouseインスタレーションがあります:検索垂直、Eコマース、広告、ビジネス分析、モバイル開発、個人サービスなどです。
集約データと非集約データ
統計を効果的に計算するには、データを集約する必要があるという広く認識された意見があります。これは、データの量を減らすためです。
しかし、データの集約には多くの制限があります:
- 必要なレポートの事前定義リストが必要です。
- ユーザーはカスタムレポートを作成できません。
- 多くの異なるキーを集約すると、データ量はほとんど減少しないため、集約は無駄です。
- 大量のレポートに対して、集約のバリエーションが多すぎます(組み合わせ爆発)。
- 高い基数を持つキー(例えばURL)を集約する際、データ量はあまり減少しません(2倍未満)。
- このため、集約のあるデータ量はむしろ増加する可能性があります。
- ユーザーは、我々が生成するすべてのレポートを閲覧しません。これらの計算の大部分は無駄です。
- 様々な集約のためにデータの論理的一貫性が損なわれる可能性があります。
何も集約せずに非集約データで作業をすると、計算量が減少するかもしれません。
しかし、集約を行うことで、多くの作業がオフラインで行われ、比較的落ち着いて完了します。それに対し、オンライン計算では、ユーザーが結果を待っているため、できるだけ速く計算する必要があります。
Yandex.Metricaには、Metrageと呼ばれるデータ集約用の専用システムがあり、ほとんどのレポートで使用されていました。 2009年以降、Yandex.MetricaはOLAPServerという非集約データ用の専用OLAPデータベースも使用していました。これは以前はレポートビルダーに使用されていました。 OLAPServerは非集約データに対してはうまく機能しましたが、希望通りにすべてのレポートに使用することを許可しない多くの制限がありました。これには、データ型のサポートが不足(数字のみ)していることや、リアルタイムでのデータのインクリメント更新ができないこと(毎日データを書き換えることでしかできませんでした)が含まれます。OLAPServerはDBMSではなく、専用のデータベースです。
ClickHouseの最初の目標は、OLAPServerの制限を取り除き、すべてのレポートに対して非集約データを扱う問題を解決することでしたが、年月が経つにつれて、幅広い分析タスクに適した汎用データベース管理システムに成長しました。