分區化模型
適用於: Azure Cosmos DB for PostgreSQL (由 PostgreSQL 的超大規模 (Citus) 資料庫延伸模組提供)
分區化是一種技術,用於資料庫系統和分散式運算,以水準分割跨多部伺服器或節點的資料。 它牽涉到將大型資料庫或資料集分成較小、易於管理的部分,稱為分區。 分區包含資料的子集,而分區會組成完整的資料集。
Azure Cosmos DB for PostgreSQL 提供兩種類型的資料分區化,即資料列型和結構描述型。 每個選項都有它自己的分區化取捨,可讓您選擇最符合您應用程式需求的方法。
資料列型的分區化
Azure Cosmos DB for PostgreSQL 分區資料表的傳統方式是單一資料庫,共用結構描述模型,也稱為資料列型分區化,租使用者會共存為相同資料表中的資料列。 租用戶是藉由定義散發資料行來決定,以水平方式分割資料表。
資料列型分區化最具硬體效率的方式。 租用戶會密集封裝並分散在叢集中的節點之間。 不過,此方法需要確定架構中的所有資料表都有散發資料行,而且應用程式中的所有查詢都會依它進行篩選。 資料列型分區化在 IoT 工作負載中大放異彩,並達到硬體使用的最佳邊界。
優點:
- 最佳效能
- 每個節點的最佳租用戶密度
缺點:
- 需要結構描述修改
- 需要應用程式查詢修改
- 所有租用戶都必須共用相同的結構描述
結構描述型的分區化
Azure Cosmos DB for PostgreSQL 的 Citus 12.0 可用,結構描述型分區化是共用資料庫、個別結構描述模型,結構描述會成為資料庫中的邏輯分區。 多租使用者應用程式可以使用每個租用戶的結構描述,輕鬆地沿著租用戶維度進行分區。 不需要查詢變更,而且應用程式只需要輕微修改,就能在切換租用戶時設定適當的 search_path。 結構描述型分區化是微服務的理想解決方案,對於部署無法進行資料列型分區化所需變更的應用程式,ISV 而言也是理想的解決方案。
優點:
- 租用戶可以有異質結構描述
- 無需結構描述修改
- 無需應用程式查詢修改
- 結構描述型分區化與資料列型分區化相比,SQL 的相容性更好
缺點:
- 相較於資料列型分區化,每個節點的租用戶較少
分區化取捨
結構描述型的分區化 | 資料列型的分區化 | |
---|---|---|
多租用戶模型 | 每個租用戶個別的結構描述 | 具有租用戶識別碼資料行的共用資料表 |
Citus 版本 | 12.0 或以上 | 所有版本 |
相較於 vanilla PostgreSQL 的額外步驟 | 沒有,僅設定變更 | 在每個資料表上使用 create_distributed_table 以散發和收集租用戶識別碼的資料表 |
租用戶的數目 | 1-10k | 1-1 M+ |
資料模型需求 | 分散式結構描述之間沒有外部索引鍵 | 需要在每個資料表中包含租使用者識別碼資料行 (散發資料行,也稱為分區化索引鍵),以及主索引鍵、外部索引鍵 |
單一節點查詢的 SQL 需求 | 每個查詢使用單一分散式結構描述 | 聯結和 WHERE 子句應包含 tenant_id 資料行 |
平行跨租用戶查詢 | No | Yes |
每個租用戶的資料表定義 | 是 | No |
存取控制 | 結構描述權限 | 結構描述權限 |
在租用戶之間共用資料 | 是,使用參考資料表 (在不同的結構描述中) | 是,使用參考資料表 |
租用戶進行分區隔離 | 依定義,每個租用戶都有自己的分區群組 | 可透過 isolate_tenant_to_new_shard,為特定租用戶識別碼提供自己的分區群組 |