ClickHouseの歴史
ClickHouseは最初、Yandex.Metricaを支えるために開発されました。世界で2番目に大きなウェブ解析プラットフォームであり、今でもそのコアコンポーネントとなっています。データベースには130兆以上のレコードがあり、毎日200億以上のイベントを処理するClickHouseは、非集約データから直接カスタムレポートをリアルタイムで生成することができます。この文書では、ClickHouseの初期開発の目標について簡単に説明します。
Yandex.Metricaは、ユーザーが定義した任意のセグメントに基づいて、ヒット数やセッションに基づいたカスタマイズレポートをリアルタイムで構築します。これを行うためには、ユニークユーザー数のような複雑な集約を構築する必要があることが多く、新しいデータはレポート作成のためにリアルタイムで到着します。
2014年4月の時点で、Yandex.Metricaは1日あたり約120億のイベント(ページビューとクリック)を追跡していました。これらのすべてのイベントは、カスタムレポートを作成するために保存する必要がありました。単一のクエリは、数百ミリ秒内に100万行をスキャンする必要がある場合もあれば、数秒で数億行をスキャンする必要がある場合もありました。
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年からは、非集約データ用の専門OLAPデータベースOLAPServerも使用されており、これは以前はレポートビルダーに使用されていました。OLAPServerは非集約データに対してはうまく機能しましたが、すべてのレポートに使用することを妨げる多くの制約がありました。これには、データ型へのサポートがない(数字のみ)ことや、リアルタイムでデータを逐次更新することができない(毎日のデータ書き換えにしかできなかった)ことが含まれています。OLAPServerはDBMSではなく、専門DBです。
ClickHouseの初期の目標は、OLAPServerの制約を取り除き、すべてのレポートに対して非集約データで作業する問題を解決することでしたが、年月が経つにつれて、さまざまな分析タスクに適した汎用データベース管理システムに成長しました。