- insert スループットの向上
- バックグラウンドマージのスループット向上
- mutation のスループット向上
- scale-up および scale-down の高速化
- SELECT クエリに対する、より軽量な強整合性
内部情報の確認
ReplicatedMergeTree の内部情報の確認に使われるシステムテーブルのほとんどは SharedMergeTree にもありますが、データやメタデータのレプリケーションは行われないため、system.replication_queue と system.replicated_fetches は存在しません。ただし、SharedMergeTree にはこれら 2 つのテーブルに対応する代替手段があります。
system.virtual_parts
このテーブルは、SharedMergeTree における system.replication_queue の代替です。現在の最新のパーツ集合に関する情報に加えて、マージ、mutation、削除されたパーティションなどによって今後生成される進行中のパーツに関する情報も格納します。
system.shared_merge_tree_fetches
このテーブルは、SharedMergeTree における system.replicated_fetches の代替です。主キーとチェックサムをメモリに取り込む、現在進行中のフェッチに関する情報を含みます。
SharedMergeTree の有効化
SharedMergeTree はデフォルトで有効になっています。
SharedMergeTree テーブルエンジンをサポートするサービスでは、手動で有効化する必要はありません。これまでと同じ方法でテーブルを作成するだけで、CREATE TABLE クエリで指定したエンジンに対応する SharedMergeTree ベースのテーブルエンジンが自動的に使用されます。
my_table が作成されます。
ClickHouse Cloud では default_table_engine=MergeTree が設定されているため、ENGINE=MergeTree を指定する必要はありません。次のクエリは上記のクエリと同じです。
SHOW CREATE TABLE で CREATE TABLE ステートメントを表示すると確認できます:
設定
一部の設定では挙動が大きく変わっています:insert_quorum— SharedMergeTree へのすべての insert はクォーラムインサート (共有ストレージに書き込まれる) であるため、SharedMergeTree テーブルエンジンを使用する場合、この設定は不要です。insert_quorum_parallel— SharedMergeTree へのすべての insert はクォーラムインサート (共有ストレージに書き込まれる) であるため、SharedMergeTree テーブルエンジンを使用する場合、この設定は不要です。select_sequential_consistency— クォーラムインサートは不要ですが、SELECTクエリで clickhouse-keeper に追加の負荷がかかります
整合性
SharedMergeTree は、ReplicatedMergeTree よりも優れた軽量な整合性を提供します。SharedMergeTree に insert する際、insert_quorum や insert_quorum_parallel などの設定を指定する必要はありません。insert はクォーラムインサートであるため、メタデータは ClickHouse-Keeper に保存され、少なくとも ClickHouse-Keeper のクォーラムにレプリケートされます。クラスター内の各レプリカは、ClickHouse-Keeper から新しい情報を非同期に fetch します。
ほとんどの場合、select_sequential_consistency や SYSTEM SYNC REPLICA LIGHTWEIGHT を使う必要はありません。非同期レプリケーションでほとんどのケースをカバーでき、レイテンシも非常に低く抑えられます。どうしても古い読み取りを防ぐ必要があるまれなケースでは、優先順位の高い順に次の推奨事項に従ってください。
-
読み取りと書き込みのクエリを同じ session または同じノードで実行している場合、レプリカはすでに最新のメタデータを保持しているため、
select_sequential_consistencyは不要です。 -
1 つのレプリカに書き込み、別のレプリカから読み取る場合は、
SYSTEM SYNC REPLICA LIGHTWEIGHTを使用して、そのレプリカに ClickHouse-Keeper からメタデータを fetch させることができます。 -
クエリ設定の一部として
select_sequential_consistencyを使用します。
ALTER とミューテーションの可視性
SharedMergeTree は、ClickHouse Keeper を介してメタデータの変更を調整します。各レプリカは変更されたメタデータを非同期でフェッチするため、メタデータの変更がすべてのレプリカですぐに反映されるとは限りません。なお、同じノード上の同じ session 内での読み取りには、すでに最新のメタデータが使用されます。メタデータの変更直後に別のレプリカで読み取りを実行する必要がある場合は、SYSTEM SYNC REPLICA LIGHTWEIGHT を使用して、そのレプリカに ClickHouse Keeper からメタデータをフェッチさせてください。
ミューテーションを伴う ALTER 操作では、バックグラウンド処理によって共有ストレージ上に新しいパーツが作成され、その可視性は ClickHouse Keeper を介して調整されます。ReplicatedMergeTree のように、レプリカごとに書き換えやデータ転送を行う処理ではありません。
ClickHouse Cloud では、alter_sync のデフォルト値は 0 です。クライアントがメタデータ操作、またはメタデータ以外の MODIFY COLUMN による書き換えの完了を待機する必要がある場合は、この設定を指定してください。UPDATE、DELETE、MATERIALIZE ... 操作では、mutations_sync で待機を制御し、system.mutations で進捗を監視してください。