用語集
原子性
原子性は、トランザクション(一連のデータベース操作)が分割不可能な単一の単位として扱われることを保証します。つまり、そのトランザクション内の操作はすべて実行されるか、あるいは一切実行されないかのどちらかです。原子的なトランザクションの例として、ある銀行口座から別の銀行口座への送金が挙げられます。送金処理のいずれかのステップが失敗した場合、そのトランザクションは失敗し、資金は最初の口座にとどまります。原子性により、お金が失われたり新たに生み出されたりすることはありません。
ブロック
ブロックは、データ処理および保存を整理するための論理単位です。各ブロックにはカラム形式のデータが含まれており、クエリ実行時のパフォーマンスを高めるためにまとめて処理されます。データをブロック単位で処理することで、ClickHouse はキャッシュミスを最小限に抑え、ベクトル化実行を可能にすることで CPU コアを効率的に活用します。ClickHouse は、LZ4、ZSTD、Delta などのさまざまな圧縮アルゴリズムを使用して、ブロック内のデータを圧縮します。
Cluster
データの保存と処理を協調して行うノード(サーバー)の集合。
CMEK
Customer-managed encryption keys (CMEK) は、顧客が独自のキー管理サービス (KMS) キーを使用して ClickHouse のディスクデータキーを暗号化し、保存データを保護できるようにします。
Dictionary
辞書は、さまざまな種類の参照リストに利用できる、キーと値のペアからなるマッピングです。クエリ内で辞書を効率的に活用できる強力な機能であり、多くの場合、参照テーブルとの JOIN を用いるよりも高い効率が得られます。
Distributed table
ClickHouse における Distributed テーブルは、テーブル自体にはデータを保存せず、クラスター内の複数サーバーにまたがって分散クエリ処理を行うための統一ビューを提供する特殊な種類のテーブルです。
Granule
Granule は、非圧縮ブロック内の行のバッチ(まとまり)です。データを読み出す際、ClickHouse は個々の行ではなく Granule 単位でアクセスするため、分析ワークロードでのデータ処理が高速になります。Granule はデフォルトで 8192 行を含みます。プライマリインデックスには、Granule ごとに 1 つのエントリが含まれます。
増分マテリアライズドビュー
ClickHouse におけるマテリアライズドビューの一種で、データの挿入時に処理と集約を行います。ソーステーブルに新しいデータが挿入されると、マテリアライズドビューはあらかじめ定義された SQL 集約クエリを新しく挿入されたブロックに対してのみ実行し、その集約結果をターゲットテーブルに書き込みます。
軽量な更新
ClickHouse における軽量な更新は実験的な機能で、標準的な SQL の UPDATE 構文を使ってテーブル内の行を更新できるものです。従来のミューテーションのように列全体やデータパーツ全体を書き換えるのではなく、更新された列と行だけを含む「パッチパーツ」を作成します。これらの更新は、パッチの適用を通じて SELECT クエリの結果には即座に反映されますが、物理データ自体が更新されるのは、その後のマージ処理時になります。
マテリアライズドビュー
ClickHouse におけるマテリアライズドビューは、データがソーステーブルに挿入されるたびにクエリを自動実行し、その変換済みまたは集約済みの結果を別のターゲットテーブルに保存することで、クエリの高速化を実現する仕組みです。
MergeTree
ClickHouse の MergeTree は、高いデータ取り込みレートと大容量データ向けに設計されたテーブルエンジンです。ClickHouse における中核となるストレージエンジンであり、カラム型ストレージ、カスタムパーティショニング、疎なプライマリインデックス、バックグラウンドでのデータマージのサポートといった機能を提供します。
ミューテーション
ClickHouse におけるミューテーションとは、通常 ALTER TABLE ... UPDATE や ALTER TABLE ... DELETE のようなコマンドを使用して、テーブル内の既存のデータを変更または削除する操作を指します。ミューテーションは、行をその場で直接変更するのではなく、変更の影響を受けるデータパーツ全体を書き換える非同期のバックグラウンドプロセスとして実装されています。
オンザフライミューテーション
ClickHouse におけるオンザフライミューテーションは、バックグラウンドでのミューテーション処理の完了を待たずに、ミューテーションの送信直後から、後続の SELECT クエリに更新や削除の結果が即座に反映されるようにする仕組みです。
パーツ
テーブルデータの一部をディスク上に格納する物理ファイルのこと。これはパーティションとは異なります。パーティションは、パーティションキーを使って作成されるテーブルデータの論理的な分割です。
パーティショニングキー
ClickHouse におけるパーティショニングキーは、テーブル作成時に PARTITION BY 句で定義される SQL 式です。ディスク上のデータをどのように論理的なパーティションにグループ化するかを決定します。パーティショニングキーの各一意の値ごとに物理パーティションが作成されるため、パーティション単位での削除、移動、アーカイブなどのデータ管理操作を効率的に行えます。
主キー
ClickHouse における主キーは、データがディスク上に格納される順序を決定し、クエリのフィルタリングを高速化する疎なインデックスを構築するために使用されます。従来型のデータベースとは異なり、ClickHouse の主キーは一意性を強制しません。同じ主キー値を持つ複数の行が存在し得ます。
Projection
ClickHouse における Projection は、クエリを高速化するための、非表示かつ自動的に管理されるテーブルであり、メインのプライマリキーに含まれない列でフィルタリングするクエリに対して特に有効です。データを異なる順序で、または事前に集計した形で格納します。
リフレッシュ可能なマテリアライズドビュー
リフレッシュ可能なマテリアライズドビューは、定期的にクエリをデータセット全体に対して再実行し、その結果をターゲットテーブルに保存するマテリアライズドビューの一種です。インクリメンタルなマテリアライズドビューと異なり、リフレッシュ可能なマテリアライズドビューはスケジュールに従って更新され、JOIN や UNION を含む複雑なクエリも制限なくサポートできます。
レプリカ
ClickHouse データベースに保存されているデータのコピーのことです。冗長性と信頼性を高めるために、同じデータのレプリカを任意の数だけ保持できます。レプリカは ReplicatedMergeTree テーブルエンジンと組み合わせて使用され、これにより ClickHouse は異なるサーバー間で複数のデータコピーを同期した状態に保つことができます。
シャード
データの部分集合。ClickHouse では、データに対して少なくとも 1 つのシャードが常に存在します。データを複数のサーバーに分割しない場合、データは 1 つのシャードに保存されます。データを複数のサーバーにシャーディングすることで、単一サーバーの処理能力を超えた場合に負荷を分散できます。
スキッピングインデックス
スキッピングインデックスは、連続する複数のグラニュール単位で少量のメタデータを保存するために使用され、これにより ClickHouse は無関係な行のスキャンを回避できます。スキッピングインデックスは、プロジェクションに対する軽量な代替手段を提供します。
ソートキー
ClickHouse では、ソートキーはディスク上の行の物理的な並び順を定義します。主キーを指定しない場合、ClickHouse はソートキーを主キーとして扱います。両方を指定する場合、主キーはソートキーの先頭部分(プレフィックス)でなければなりません。
疎インデックス
プライマリインデックスが、1 行ごとではなく行のグループごとに 1 つのエントリを保持する種類のインデックスです。行グループに対応するエントリはマークと呼ばれます。疎インデックスでは、ClickHouse はまずクエリに一致する可能性のある行グループを特定し、その後それらを個別に処理して一致するデータを検索します。この仕組みにより、プライマリインデックスはメモリに読み込める程度に十分小さなサイズに抑えられます。
テーブルエンジン
ClickHouse におけるテーブルエンジンは、データの書き込み・保存・アクセス方法を決定します。MergeTree は最も一般的に利用されるテーブルエンジンであり、大量のデータを高速に挿入し、その処理をバックグラウンドで実行できます。
TTL
Time To Live (TTL) は、一定期間の経過後にカラムや行を自動的に移動・削除、またはロールアップする ClickHouse の機能です。これにより、頻繁にアクセスする必要のないデータを削除・移動・アーカイブできるため、ストレージをより効率的に管理できます。