ClickHouse とは?
ClickHouse® は、オンライン分析処理 (OLAP) 向けの高性能な列指向SQLデータベース管理システム (DBMS) です。オープンソースソフトウェア としても、クラウドサービス としても提供されています。
アナリティクスとは何か
アナリティクスは OLAP(Online Analytical Processing)とも呼ばれ、巨大なデータセットに対して、集約処理・文字列処理・算術演算などの複雑な計算を行う SQL クエリを指します。
1 回のクエリで読み書きする行数がごく少数であるためミリ秒単位で完了するトランザクション処理のクエリ(OLTP、Online Transaction Processing)とは異なり、アナリティクスクエリは日常的に数十億〜数兆行を処理します。
多くのユースケースでは、アナリティクスクエリは「リアルタイム」である必要があります。つまり、1 秒未満で結果を返す必要があります。
行指向ストレージ vs. 列指向ストレージ
このレベルのパフォーマンスは、データの「指向性」を適切に選択した場合にのみ達成できます。
データベースは、データを行指向または列指向のいずれかで格納します。
行指向データベースでは、テーブルの連続する行が順番に格納されます。このレイアウトでは、各行の列値がまとまって格納されているため、行をすばやく取得できます。
ClickHouse は列指向データベースです。このようなシステムでは、テーブルは列の集合として格納され、つまり各列の値が連続した配列として格納されます。このレイアウトでは(行の値の間にギャップが生じるため)単一行の再構成は難しくなりますが、フィルタや集約など列に対する処理は、行指向データベースよりもはるかに高速になります。
違いは、実世界の匿名化された Web 分析データの 1 億行に対して実行するクエリ例で説明するのが最もわかりやすいでしょう。
ClickHouse SQL Playground でこのクエリを実行すると、100 を超える既存カラムのうちごく一部だけを選択・フィルタするクエリをミリ秒単位で実行できます。

上の図の stats セクションに示されているとおり、このクエリは 1 億行を 92 ミリ秒で処理しており、これは 1 秒あたり約 10 億行超、あるいは 1 秒あたり 7 GB 弱のデータを転送している計算になります。
行指向 DBMS
行指向データベースでは、上記のクエリが既存カラムのうちごく一部しか処理しない場合でも、システムは結局、他の既存カラムのデータもディスクからメモリへ読み込む必要があります。これは、データがディスク上に ブロック と呼ばれるチャンク(通常は 4 KB や 8 KB などの固定サイズ)に分割されて保存されているためです。ブロックは、ディスクからメモリへ読み出されるデータの最小単位です。アプリケーションやデータベースがデータを要求すると、オペレーティングシステムのディスク I/O サブシステムがディスクから必要なブロックを読み出します。ブロックの一部だけが必要な場合でも、ブロック全体がメモリに読み込まれます(これはディスクおよびファイルシステムの設計によるものです):

カラム指向 DBMS
各カラムの値がディスク上で連続して格納されているため、上記のクエリを実行しても不要なデータが読み込まれることはありません。 ブロック単位でのストレージとディスクからメモリへの転送は、分析クエリのデータアクセスパターンに合わせて最適化されているため、クエリに必要なカラムだけがディスクから読み出され、未使用データに対する不要な I/O を回避できます。これは、全行(不要なカラムを含む)を読み出す行指向ストレージと比較して 大幅に高速です。

データレプリケーションと整合性
ClickHouse は、非同期マルチマスターレプリケーション方式を使用して、データが複数ノードに冗長に保存されるようにしています。利用可能な任意のレプリカに書き込まれた後、残りのすべてのレプリカはバックグラウンドでそれぞれのコピーを取得します。システムは、異なるレプリカ間で同一のデータを維持します。ほとんどの障害からの復旧は自動的に行われ、複雑なケースでは半自動的に行われます。
ロールベースアクセス制御
ClickHouse は SQL クエリを使用してユーザーアカウントを管理し、ANSI SQL 標準や一般的なリレーショナルデータベース管理システムと同様のロールベースアクセス制御を構成できるようになっています。
SQL サポート
ClickHouse は、SQL に基づく宣言型クエリ言語 をサポートしており、多くの点で ANSI SQL 標準と同一です。サポートされているクエリ句には、GROUP BY、ORDER BY、FROM におけるサブクエリ、JOIN 句、IN 演算子、ウィンドウ関数、およびスカラーサブクエリが含まれます。
近似計算
ClickHouse は、精度とパフォーマンスをトレードオフするための手段を提供します。たとえば、一部の集約関数は、異なる値の個数や中央値、分位数を近似的に計算します。また、データのサンプルに対してクエリを実行し、概算結果を素早く算出することもできます。さらに、すべてのキーに対してではなく、キー数を制限して集約を実行することも可能です。キーの分布の偏り具合によっては、厳密な計算に比べてはるかに少ないリソースで、十分に実用的な精度の結果を得られる場合があります。
アダプティブ結合アルゴリズム
ClickHouse は状況に応じて結合アルゴリズムを選択します。まず高速なハッシュ結合を試し、大きなテーブルが複数存在する場合はマージ結合に切り替えます。
優れたクエリパフォーマンス
ClickHouse は、非常に高速なクエリパフォーマンスで広く知られています。 ClickHouse がこれほど高速な理由については、Why is ClickHouse fast? ガイドを参照してください。