このトピックでは、ApsaraDB for ClickHouse Enterprise EditionのSharedMergeTreeテーブルエンジンファミリーについて説明します。
概要
SharedMergeTreeテーブルエンジンファミリーは、ApsaraDB for ClickHouse Enterprise Editionでのみ使用できます。
SharedMergeTreeテーブルエンジンファミリーは、ReplicatedMergeTreeエンジンのクラウドネイティブな代替品であり、Object Storage Service (OSS) の上で動作します。 各特定のMergeTreeエンジンタイプには、SharedMergeTreeエンジンタイプの代替があります。 たとえば、ReplacingSharedMergeTreeはReplacingReplicatedMergeTreeを置き換えます。
SharedMergeTreeテーブルエンジンファミリーは、ApsaraDB for ClickHouse Enterprise Editionのパフォーマンスを向上させます。 ReplicatedMergeTreeベースのエンジンの代わりにSharedMergeTreeテーブルエンジンファミリーを使用するために変更を加える必要はありません。 SharedMergeTreeテーブルエンジンファミリーには、次の利点があります。
挿入スループットの向上
バックグラウンドマージのスループットの向上
変異のスループットの向上
より高速なスケーリング操作
SELECTクエリのより軽量で強力なデータ一貫性
ReplicatedMergeTreeと比較して、SharedMergeTreeはコンピューティングとストレージのより深い分離を提供します。これは大幅な改善です。 次の図は、ReplicatedMergeTreeがコンピューティングとストレージを分離する方法を示しています。
上の図は、ReplicatedMergeTreeに格納されているデータがオブジェクトストレージにあることを示しています。 ただし、メタデータは引き続き各ClickHouseサーバーに存在します。 これは、レプリケーションごとにすべてのレプリカでメタデータをレプリケートする必要があることを示します。
ReplicatedMergeTreeとは異なり、SharedMergeTreeは、互いに通信するためにレプリカを必要としない。 代わりに、すべての通信は共有ストレージとClickHouse Keeperを使用して行われます。 SharedMergeTreeは非同期リーダーレスレプリケーションを実装し、調整とメタデータストレージにClickHouse Keeperを使用します。 これは、サービスのスケールアウト時にメタデータをレプリケートする必要がないことを示しています。 これにより、レプリケーション、変更、マージ、およびスケールアウト操作が高速化されます。 SharedMergeTreeでは、各テーブルに数百のレプリカを含めることができます。 これにより、シャードなしの動的スケールアウトが実装されます。 これは、ApsaraDB for ClickHouse Enterprise Editionで分散クエリ実行アプローチを使用して、クエリにより多くのコンピューティングリソースを利用できることも示しています。
システムモニタリング
システムモニタリングに使用されるReplicatedMergeTreeのシステムテーブルのほとんどは、system.replication_queue
とsystem.replicated_fetches
を除き、SharedMergeTreeに存在します。 これは、データとメタデータの複製が発生しないためです。 ただし、SharedMergeTreeには、2つのテーブルに対応する選択肢があります。
system.virtual_parts: このテーブルは、SharedMergeTreeの
system.replication_queue
の代替として機能します。 このテーブルには、マージ、変更、パーティションの削除など、現在のデータ部分と進行中の将来のデータ部分の最新のセットに関する情報が格納されます。system.shared_merge_tree_fetches: このテーブルは、SharedMergeTreeのsystem.replicated_fetchesの代替として機能します。 テーブルには、メモリにロードされているプライマリキーとチェックサムに関する情報が含まれています。
SharedMergeTreeの使用
SharedMergeTreeベースのテーブルエンジンは、ApsaraDB for ClickHouse Enterprise Editionのデフォルトのテーブルエンジンです。 SharedMergeTreeテーブルエンジンファミリーをサポートするクラスターの場合、追加の変更は必要ありません。 以前と同じ方法でテーブルを作成でき、SharedMergeTreeベースのテーブルエンジンが自動的に使用されます。 エンジンは、CREATE TABLEステートメントで指定されたエンジンに対応します。
SharedMergeTreeテーブルエンジンを使用して、
my_table
という名前のテーブルを作成できます。CREATE TABLE my_table( key UInt64, value String ) ENGINE = MergeTree ORDER BY key
ApsaraDB for ClickHouse Enterprise Editionでは、
default_table_ENGINE
の値がMergeTreeであるため、engine
の値をMergeTreeに設定する必要はありません。 次のクエリは、前述のクエリと同じです。CREATE TABLE my_table( key UInt64, value String ) ORDER BY key
ReplacingMergeTree、CollapsingMergeTree、AggregingMergeTree、SummingMergeTree、VersionedCollapsingMergeTree、GraphiteMergeTreeテーブルエンジンを使用すると、対応するSharedMergeTreeベースのテーブルエンジンに自動的に変換されます。
CREATE TABLE myFirstReplacingMT ( `key` Int64, `someCol` String, `eventTime` DateTime ) ENGINE = ReplacingMergeTree ORDER BY key;
SHOW CREATE TABLEステートメントを実行して、対応するCREATE TABLEステートメントをクエリできます。
SHOW CREATE TABLE myFirstReplacingMT;
CREATE TABLE default.myFirstReplacingMT ( `key` Int64, `someCol` String, `eventTime` DateTime ) ENGINE = SharedReplacingMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') ORDER BY key SETTINGS index_granularity = 8192
エンジン構成
次のエンジン構成の変更に注意する必要があります。
insert_quorum
: SharedMergeTreeへのすべての挿入は、クォーラム挿入 (共有ストレージに書き込まれたデータ) です。 したがって、SharedMergeTreeベースのテーブルエンジンを使用する場合、このパラメーターは必要ありません。insert_quorum_parallel
: SharedMergeTreeへのすべての挿入は、クォーラム挿入 (共有ストレージに書き込まれたデータ) です。select_sequential_consistency
: 定足数の挿入は必要ありません。 追加のリクエストは、SELECTクエリでClickHouse Keeperに送信されます。