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跨境小程序
手机入驻更便捷
返回顶部