Azure Cosmos DB for PostgreSQL中Citus Colocation ID统一行为的疑问
关于Citus中参考表与分布式表Colocation ID的解释
核心:Colocation ID的作用
Colocation ID是Citus用来标记分片组的唯一标识,核心目的是优化跨表关联查询的性能:当两个表的分片拥有相同的Colocation ID时,Citus会保证这些分片被部署在同一个节点上,这样关联查询时不需要跨节点传输数据,直接在本地完成计算。
参考表的Colocation ID逻辑
- 参考表的设计是单分片全节点复制:所有工作节点上的参考表分片,本质是同一个原始分片的副本,它们属于同一个分片组。
- 所以不管有多少个节点、多少个副本,这些参考表分片都会共享同一个Colocation ID——Citus用这个ID来标记它们是同一组冗余副本,确保数据一致性的同时,让任何节点上的分布式表分片都能直接和本地的参考表副本关联(因为Colocation ID匹配,Citus知道本地有对应的参考表数据)。
分布式表的Colocation ID逻辑
- 你创建的分布式表应该使用了相同的分片键(或者默认的分片策略),Citus会按照分片键的哈希值把所有分布式表的分片划分到同一个分片组里。
- 虽然分布式表的分片分布在所有节点,但同一分片组内的分片(来自不同分布式表、对应相同哈希范围的分片)会被部署在同一个节点上,所以所有分布式表的分片共享同一个Colocation ID。
验证方式
可以通过以下查询查看Colocation的详细信息:
SELECT * FROM pg_dist_colocation; SELECT shardid, nodename, colocationid FROM pg_dist_shard_placement;
内容的提问来源于stack exchange,提问作者Rohith K
相关产品推荐
相关产品推荐

