全部產品
Search
文件中心

ApsaraDB for ClickHouse:SharedMergeTree表引擎

更新時間:Jun 30, 2024

本文主要介紹雲資料庫ClickHouse企業版中的SharedMergeTree表引擎。

SharedMergeTree簡介

SharedMergeTree表引擎僅在雲資料庫ClickHouse企業版中提供。

SharedMergeTree表引擎系列是ReplicatedMergeTree引擎的雲原生替代方案,適配共用Object Storage Service,每個特定的MergeTree引擎類型都有對應的SharedMergeTree引擎,例如ReplacingSharedMergeTree替代ReplacingReplicatedMergeTree。

SharedMergeTree表引擎提高了雲資料庫ClickHouse企業版的效能。對於終端使用者來說,無需做任何改變即可使用SharedMergeTree引擎系列,而不是基於ReplicatedMergeTree的引擎。它的優點如下:

  • 插入輸送量提高。

  • 後台合并的輸送量提高。

  • Mutation操作的輸送量提高。

  • 更快的擴容和縮容操作。

  • 支援SELECT查詢更輕量的資料強一致性。

SharedMergeTree帶來的一個重要改進是與ReplicatedMergeTree相比,它提供了更徹底的計算和儲存分離。下圖展示了ReplicatedMergeTree如何分離計算和儲存:image.png

正如您所見,儘管儲存在ReplicatedMergeTree中的資料位元於Object Storage Service中,但中繼資料仍儲存在每個clickhouse-server上。這意味著對於每個複製操作,中繼資料也需要在所有副本上進行複製。

image.png與ReplicatedMergeTree不同,SharedMergeTree不需要副本之間進行通訊。相反,所有通訊都通過共用儲存和ClickHouse Keeper進行。SharedMergeTree實現了非同步無主複製,並使用ClickHouse Keeper進行協調和中繼資料存放區。這意味著隨著服務的擴充,不需要複製中繼資料。這可以加快複製、變更、合并和擴充操作。SharedMergeTree允許每個表有數百個副本,使得無需分區即可進行動態擴充。這也意味著在雲資料庫ClickHouse企業版中,使用分散式查詢執行方法可以利用更多的計算資源來執行查詢。

系統監控

用於系統監控的ReplicatedMergeTree的大部分系統資料表(system table)在SharedMergeTree中也存在,唯獨沒有system.replication_queuesystem.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(寫入共用Object Storage Service),因此在使用SharedMergeTree表引擎時不需要此設定。

  • insert_quorum_parallel:所有對SharedMergeTree的insert都是quorum insert(寫入共用Object Storage Service)。

  • select_sequential_consistency:不需要quorum inserts,會引起在SELECT查詢中向ClickHouse Keeper增加附加的請求。