本文主要介紹云數據庫ClickHouse企業版中的SharedMergeTree表引擎。
SharedMergeTree簡介
SharedMergeTree表引擎僅在云數據庫ClickHouse企業版中提供。
SharedMergeTree表引擎系列是ReplicatedMergeTree引擎的云原生替代方案,適配共享對象存儲OSS,每個特定的MergeTree引擎類型都有對應的SharedMergeTree引擎,例如ReplacingSharedMergeTree替代ReplacingReplicatedMergeTree。
SharedMergeTree表引擎提高了云數據庫ClickHouse企業版的性能。對于終端用戶來說,無需做任何改變即可使用SharedMergeTree引擎系列,而不是基于ReplicatedMergeTree的引擎。它的優點如下:
插入吞吐量提高。
后臺合并的吞吐量提高。
Mutation操作的吞吐量提高。
更快的擴容和縮容操作。
支持SELECT查詢更輕量的數據強一致性。
SharedMergeTree帶來的一個重要改進是與ReplicatedMergeTree相比,它提供了更徹底的計算和存儲分離。下圖展示了ReplicatedMergeTree如何分離計算和存儲:
正如您所見,盡管存儲在ReplicatedMergeTree中的數據位于對象存儲中,但元數據仍存儲在每個clickhouse-server上。這意味著對于每個復制操作,元數據也需要在所有副本上進行復制。
與ReplicatedMergeTree不同,SharedMergeTree不需要副本之間進行通信。相反,所有通信都通過共享存儲和ClickHouse Keeper進行。SharedMergeTree實現了異步無主復制,并使用ClickHouse Keeper進行協調和元數據存儲。這意味著隨著服務的擴展,不需要復制元數據。這可以加快復制、變更、合并和擴展操作。SharedMergeTree允許每個表有數百個副本,使得無需分片即可進行動態擴展。這也意味著在云數據庫ClickHouse企業版中,使用分布式查詢執行方法可以利用更多的計算資源來執行查詢。
系統監控
用于系統監控的ReplicatedMergeTree的大部分系統表(system table)在SharedMergeTree中也存在,唯獨沒有system.replication_queue
和system.replicated_fetches
,因為沒有數據和元數據的復制。然而,SharedMergeTree對這兩個表有相應的替代表。
system.virtual_parts:這個表作為SharedMergeTree對
system.replication_queue
的替代,它存儲有關最新一組data parts以及正在進行的合并、變更和刪除分區操作的未來分區信息。system.shared_merge_tree_fetches:這個表是SharedMergeTree對system.replicated_fetches的替代。它包含關于正在加載入內存的主鍵和校驗碼信息。
使用SharedMergeTree
SharedMergeTree已經是企業版(development tier)中默認的表引擎,對于支持SharedMergeTree表引擎的實例,您不需要做任何額外變更。您可以像以前一樣創建表,它會自動使用基于SharedMergeTree的表引擎,該引擎與您在CREATE TABLE查詢中指定的引擎相對應。
您可以通過使用SharedMergeTree表引擎可以創建
my_table
表。CREATE TABLE my_table( key UInt64, value String ) ENGINE = MergeTree ORDER BY key
由于
default_table_engine=MergeTree
您不必再特別設置ENGINE=MergeTree
。下面的查詢語句和上面的完全一樣。CREATE TABLE my_table( key UInt64, value String ) ORDER BY key
如果您使用Replacing、Collapsing、Aggregating、Summing、VersionedCollapsing、Graphite MergeTree表,它們將自動轉換為相應的基于SharedMergeTree的表引擎。
CREATE TABLE myFirstReplacingMT ( `key` Int64, `someCol` String, `eventTime` DateTime ) ENGINE = ReplacingMergeTree ORDER BY key;
您可以使用SHOW 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的insert都是quorum insert(寫入共享對象存儲),因此在使用SharedMergeTree表引擎時不需要此設置。insert_quorum_parallel
:所有對SharedMergeTree的insert都是quorum insert(寫入共享對象存儲)。select_sequential_consistency
:不需要quorum inserts,會引起在SELECT查詢中向ClickHouse Keeper增加附加的請求。