共用方式為


Azure Cosmos DB for PostgreSQL 中調整的基本概念

適用於: Azure Cosmos DB for PostgreSQL (由 PostgreSQL 的 Citus 資料庫延伸模組提供)

在調查組建新應用程式的步驟之前,先查看相關字詞和概念的快速概觀,會對您很有幫助。

架構概觀

Azure Cosmos DB for PostgreSQL 可讓您將資料表和/或結構描述散發到叢集中的多部機器,並使用您查詢一般 PostgreSQL 的相同方式以透明地進行查詢:

協調器節點將數據表分片至工作節點的圖表。

在 Azure Cosmos DB for PostgreSQL 架構中,有多種節點:

  • 協調員節點會儲存分散式資料表中繼資料,並且負責分散式規劃。
  • 相對地,「工作節點」工作節點會儲存實際資料和中繼資料,並執行計算。
  • 協調員和背景工作角色都是一般 PostgreSQL 資料庫,並已載入 citus 延伸模組。

若要散發一般 PostgreSQL 資料表,如上方圖表中的 campaigns 所示,請執行稱為 create_distributed_table() 的命令。 執行此命令之後,Azure Cosmos DB for PostgreSQL 會以透明的方式跨工作節點建立資料表分區。 會在圖表中以藍色方塊表示分區。

若要散發一般 PostgreSQL 結構描述,請執行 citus_schema_distribute() 命令。 執行此命令後,Azure Cosmos DB for PostgreSQL 會以透明方式將這些結構中的資料表轉換為單一分片的共置資料表,使其能夠在叢集節點之間作為一個單位移動。

備註

在沒有工作節點的叢集上,分散式資料表的分片位於協調器節點上。

分區是一般 (但特別命名) PostgreSQL 資料表,該資料表可保存資料的配量。 在我們的範例中,因為我們由 company_id 散發 campaigns,所以分區會保存活動,其中會將不同公司的活動指派給不同的分區。

散發資料行 (也稱為分區索引碼)

create_distributed_table() 是 Azure Cosmos DB for PostgreSQL 提供的特別功能,可用於散發資料表並跨多部機器使用資源。

SELECT create_distributed_table(
	'table_name',
	'distribution_column');

上述第二個引數會從資料表挑選資料行,並將其作為散發資料行。 該資料行可以是任何具備原生 PostgreSQL 類型的欄位(整數和文字是最常見的)。 散發資料行的值會決定哪些資料列要進入哪個分區,所以散發資料行也被稱為分區索引碼

Azure Cosmos DB for PostgreSQL 會根據查詢是否使用分片鍵來決定執行方式:

查詢包含 其執行的位置
只有一個分區索引碼 在保存其分區的背景工作角色節點上
多個分區索引碼 跨多個節點平行處理

分區索引碼的選擇會決定應用程式的效能和可擴縮性。

  • 每個分區索引碼的資料分佈不平均 (也稱為資料扭曲),這對效能來說並不是最佳狀況。 例如,請勿選擇單一值代表 50% 資料的資料行。
  • 低基數的分區索引碼可能會影響可擴縮性。 您能使用的相異索引碼值的數量與分區的數量一樣。 請選擇一個基數在數百到數千之間的鍵。
  • 若聯結兩個具有不同分區索引碼的大型資料表,速度可能會變慢。 在大型資料表中選擇通用分區索引碼。 在共置中深入了解。

共置

與分片鍵緊密相關的另一個概念是共置。 依照相同散發資料行值的分區化資料表是共置狀態 - 共置資料表的分區會一起儲存在相同的背景工作角色上。

以下是以相同索引碼分區的兩個資料表,site_id。 它們已共置。

已將 http_request 和 http_request_1min 的資料表依照 site_id 進行共置的圖表。

Azure Cosmos DB for PostgreSQL 可確保兩個資料表中具有相符 site_id 值的資料列,都儲存在相同的工作節點上。 您可以看到,兩個表格中具有 site_id=1 的資料列都儲存在工作者 1 上。 其他網站的識別碼也一樣。

共置有助於最佳化這些資料表的 JOIN。 如果您在 site_id 上聯結這兩個資料表,Azure Cosmos DB for PostgreSQL 就可以在工作節點本地執行聯結,而不需要在節點間移動資料。

分散式結構描述內的資料表一律會彼此共置。

下一步