What is ClickHouse?
ClickHouse® は、高性能な列指向 SQL データベース管理システム (DBMS) であり、オンライン分析処理 (OLAP) に向けて設計されています。これは、オープンソースソフトウェア としても、クラウド提供 としても利用可能です。
分析とは何か?
分析、または OLAP (オンライン分析処理) は、大規模なデータセットに対して複雑な計算 (例:集計、文字列処理、算術) を行う SQL クエリを指します。
トランザクショナルクエリ (OLTP、オンライントランザクション処理) がクエリごとに数行しか読み書きしないため、ミリ秒で完了するのに対して、分析クエリは常に数十億または数兆行を処理します。
多くのユースケースでは、分析クエリは「リアルタイム」である必要があります。つまり、1 秒未満で結果を返す必要があります。
行指向ストレージと列指向ストレージ
このようなパフォーマンスを実現するには、適切なデータ「方向」が必要です。
データベースは、データを行指向または列指向 に保存します。
行指向データベースでは、連続したテーブルの行が順番に保存されます。このレイアウトにより、各行のカラム値が一緒に保存されるため、行を迅速に取得できます。
ClickHouse は列指向データベースです。このようなシステムでは、テーブルは一連のカラムコレクションとして保存されます。つまり、各カラムの値は順次一緒に保存されます。このレイアウトは、単一の行を復元するのが難しくなります(行の値の間に隙間ができるため)が、フィルターや集計などのカラム操作は行指向データベースよりもはるかに高速になります。
この違いは、100 百万行の実際の匿名化されたウェブ分析データ を処理する例のクエリで最もよく説明できます:
あなたは、このClickHouse SQL Playground でこのクエリを実行することができ、100以上の既存のカラムからわずか数個を選択してフィルタリングし、ミリ秒以内に結果を返します。

上記の図の統計セクションで見ることができるように、クエリは 1 億行を 92 ミリ秒で処理し、スループットは約 3 億行、または 1 秒未満で 7 GB です。
行指向 DBMS
行指向データベースでは、上記のクエリが既存のカラムのわずか数個を処理しているとはいえ、システムはディスクからメモリに他の既存カラムのデータを読み込む必要があります。その理由は、データがブロック と呼ばれるチャンクにディスク上で保存されているためです (通常、固定サイズ、例えば 4 KB または 8 KB)。ブロックは、ディスクからメモリに読み込まれるデータの最小単位です。アプリケーションやデータベースがデータを要求すると、オペレーティングシステムのディスク I/O サブシステムがディスクから必要なブロックを読み込みます。ブロックの一部だけが必要な場合でも、ブロック全体がメモリに読み込まれます(これはディスクとファイルシステムの設計によるものです):

列指向 DBMS
各カラムの値がディスク上で順次一緒に保存されているため、上記のクエリが実行される際に不要なデータが読み込まれません。 ディスクからメモリへのブロック単位のストレージと転送が分析クエリのデータアクセスパターンと一致しているため、クエリに必要なカラムのみがディスクから読み込まれ、未使用のデータに対して不要な I/O を避けることができます。これは行指向ストレージに比べてはるかに高速です 。行全体(関連のないカラムを含む)が読み込まれることに比べて:

データのレプリケーションと整合性
ClickHouse は、非同期のマルチマスターレプリケーションスキームを使用して、データが複数のノードに冗長的に保存されることを保証します。利用可能なレプリカに書き込まれた後、残りのすべてのレプリカがバックグラウンドでそのコピーを取得します。システムは、異なるレプリカ間で同一のデータを維持します。ほとんどの障害からの回復は自動的に、または複雑な場合には半自動的に行われます。
ロールベースのアクセス制御
ClickHouse は、SQL クエリを使用してユーザーアカウント管理を実装し、ANSI SQL 標準や一般的なリレーショナルデータベース管理システムで見られるのと類似のロールベースのアクセス制御の設定を可能にします。
SQL サポート
ClickHouse は、多くのケースで ANSI SQL 標準と同一の SQL に基づく宣言型クエリ言語 をサポートしています。サポートされているクエリ句には、GROUP BY、ORDER BY、FROM 内のサブクエリ、JOIN 句、IN 演算子、ウィンドウ関数、およびスカラーサブクエリが含まれます。
おおよその計算
ClickHouse は、パフォーマンスのために精度をトレードオフする方法を提供しています。たとえば、一部の集計関数は、近似的に一意の値のカウント、中値、および分位数を計算します。また、データのサンプルでクエリを実行して、迅速に近似結果を計算することができます。最後に、すべてのキーではなく、制限された数のキーに対して集計を実行することができます。キーの分布がどの程度歪んでいるかに応じて、これは非常に少ないリソースでかなり正確な結果を提供します。
適応結合アルゴリズム
ClickHouse は結合アルゴリズムを適応的に選択し、大きなテーブルが 1 つ以上の場合は、高速なハッシュ結合からマージ結合にフォールバックします。
優れたクエリ性能
ClickHouse は、非常に高速なクエリパフォーマンスで知られています。 ClickHouse がなぜこれほど速いのかを学ぶには、なぜ ClickHouse は速いのか? ガイドを参照してください。