查询块分布在具有2个集合的分片集群中的外观,这些集合具有相同的“顶级”索引,因此具有分片键:
收集一个x分片:
{ x: 1 }
的文档结构相当于:
{
x : integer,
y : integer,
z : integer
}
收集两个x分片:
{ x: 1 }
的文档结构相当于:
{
x : integer,
v : integer,
w : integer
}
x的基数约为100K。两个集合中的x相同,集合1中给定x值的大量文档在集合2中也会有一个比例数。
我想知道,对于x的给定基数,如果来自包含相似x范围的单独集合的块可能位于同一节点上?即来自集合1的x = 5的文档与来自集合2的x = 5的文档位于同一节点上?
答案 0 :(得分:1)
无法保证两个集合的分发方式相同,即使x
在两个集合中具有相同的基数(或者即使x
是相同的字段)。
平衡器尝试在所有分片上均匀分布块。这是在不需要知道实际分片键的情况下完成的。从平衡器的角度来看,两个集合之间(或任何分片集合之间)没有关系。
您可以在此页面中阅读有关平衡器的信息:https://docs.mongodb.com/v3.2/core/sharding-balancer-administration/。请注意,该页面中根本没有关于分片键的提及,只有块。