Azure Database for PostgreSQL 中的節點和表–超大規模 (Citus),postgresql磁盤陣列柜方案Azure Database for PostgreSQL 中的節點和表–超大規模 (Citus)Nodes超大規模(Citus)承載類型允許Azure Database for Pos......
Nodes
超大規模(Citus)承載類型允許Azure Database for PostgreSQL服務器(稱為節點,)在無共享體系結構中彼此協調。服務器組中的節點共同保存更多的數據,并使用比單個服務器上的更多的CPU內核。該體系結構還允許通過向服務器組中添加更多節點來縮放數據庫。
協調器和輔助角色
每個服務器組都有一個協調器節點和多個輔助角色。應用程序將其查詢發國際快遞協調器節點,該節點將其中繼到相關的工作線程并累計其結果。應用程序無法直接連接到輔助角色。
超大規模(Citus)使數據庫管理員能夠在不同的工作節點上分發表,并存儲不同的行。分布式表是超大規模(Citus)性能的關鍵。如果無法分發表,則會將它們完全留在協調器節點上,并且無法利用跨計算機并行。
對于分布式表的每個查詢,協調器會將其路由到單個輔助角色節點,或將其并行在多個節點上,具體取決于所需的數據是位于單個節點上還是在多個節點上。協調器通過咨詢元數據表確定要執行的操作。這些表跟蹤輔助角色節點的DNS名稱和運行狀況,以及跨節點分布的數據。
表類型
超大規模(Citus)服務器組中有三種類型的表,每個表在節點上以不同方式存儲,并用于不同目的。
類型1:分布式表
第一種類型,最常見的是分布式表。它們看起來像是SQL語句的普通表,但它們在工作節點之間水平分區。這意味著表中的行存儲在名為分片的碎片表中的不同節點上。
超大規模(Citus)只在整個群集中運行SQL但DDL語句。更改分布式表的架構會進行級聯以更新所有表在工作線程中的分片。
分布列
超大規模(Citus)使用算法分片將行分配到分片。根據名為分布列的表列的值,賦值是明確的。群集管理員必須在分發表時指定此列。做出正確的選擇對性能和功能非常重要。
類型2:引用表
引用表是一種分布式表,其整個內容將集中到單個分片中。分片在每個輔助角色上復制。對任何工作人員的查詢都可以在本地訪問引用信息,而無需從另一個節點請求行的網絡開銷。引用表沒有分布列,因為無需區分單獨的分片每行。
引用表通常很小,用于存儲與在任何輔助節點上運行的查詢相關的數據。例如訂單狀態或產品類別等枚舉值。
類型3:本地表
使用超大規模(Citus)時,連接到的協調器節點是一個常規的PostgreSQL數據庫。可以在協調器上創建普通表,并選擇不分片。
對于本地表,最好是不參與聯接查詢的小型管理表。例如,應用程序登錄和身份驗證的用戶表。
分片
上一部分介紹了如何將分布式表存儲為輔助角色節點上的分片。本部分將討論更多技術詳細信息。
pg_dist_shard協調器的元數據表為系統中每個分布式表的每個分片都包含一行。該行將分片ID與(shardminvalue,shardmaxvalue)的哈希空間中的整數范圍匹配。
SQL
SELECT*from pg_dist_shard;
logicalrelidshardidshardstorageshardminvalueshardmaxvalue
++++
github_events102026t268435456402653183
github_events102027t402653184536870911
github_events102028t536870912671088639
github_events102029t671088640805306367
(4 rows)
如果協調器節點要確定哪些分片包含一行github_events,則將對該行中分布列的值進行哈希處理。然后,該節點檢查哪些分片的范圍包含哈希值。定義這些范圍是為了使哈希函數的圖像是其不相交的聯合。
分片放置
假設分片102027與相關行相關聯。在其中一個輔助角色中調用的表中讀取或寫入該行github_events02027。哪個工作線程?這完全由元數據表確定。分片到輔助角色的映射稱為分片位置。
協調器節點將查詢重寫為引用特定表的片段,github_events02027并在相應的輔助角色上運行這些片段。下面是在幕后運行的查詢示例,用于查找包含分片ID 102027的節點。
SQL
SELECT
shardid,
node.nodename,
node.nodeport
FROM pg_dist_placement placement
JOIN pg_dist_node node
ON placement.groupid=node.groupid
AND node.noderole=primary::noderole
WHERE shardid=102027;
輸出
┌─────────┬───────────┬──────────┐
│shardid│nodename│nodeport│
├─────────┼───────────┼──────────┤
│102027│localhost│5433│
└─────────┴───────────┴──────────┘
特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發表后的30日內與ESG跨境電商聯系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部