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 的 magic 函式,不僅可以散發資料表,還可以跨多部機器使用資源。
SELECT create_distributed_table(
'table_name',
'distribution_column');
上述第二個引數會從資料表挑選資料行,並將其作為散發資料行。 該資料行可以是具有原生 PostgreSQL 類型的任何資料行 (整數和文字簡訊是最常見的)。 散發資料行的值會決定哪些資料列要進入哪個分區,所以散發資料行也被稱為分區索引碼。
Azure Cosmos DB for PostgreSQL 會決定如何根據其使用分區索引碼來執行查詢:
查詢包含 | 其執行的位置 |
---|---|
只有一個分區索引碼 | 在保存其分區的背景工作角色節點上 |
多個分區索引碼 | 跨多個節點平行處理 |
分區索引碼的選擇會決定應用程式的效能和可擴縮性。
- 每個分區索引碼的資料分佈不平均 (也稱為資料扭曲),這對效能來說並不是最佳狀況。 例如,請勿選擇單一值代表 50% 資料的資料行。
- 低基數的分區索引碼可能會影響可擴縮性。 您能使用的相異索引碼值的數量與分區的數量一樣。 在數百個到數千個索引碼中,選擇具有基數的索引碼。
- 若聯結兩個具有不同分區索引碼的大型資料表,速度可能會變慢。 在大型資料表中選擇通用分區索引碼。 在共置中深入了解。
共置
與分區索引碼緊密相關的另一個概念是共置。 依照相同散發資料行值的分區化資料表是共置狀態 - 共置資料表的分區會一起儲存在相同的背景工作角色上。
以下是以相同索引碼分區的兩個資料表,site_id
。 它們已共置。
Azure Cosmos DB for PostgreSQL 可確保兩個資料表中具有相符 site_id
值的資料列都儲存在相同的背景工作角色節點上。 您可以在這兩個資料表上發現,會將具有 site_id=1
的資料列儲存在背景工作角色 1 上。 其他網站的識別碼也一樣。
共置有助於最佳化這些資料表的 JOIN。 如果您在 site_id
上聯結這兩個資料表,Azure Cosmos DB for PostgreSQL 就可以在背景工作角色節點上以本地方式執行聯結,而不會在節點之間隨機顯示資料。
分散式結構描述內的資料表一律會彼此共置。