不同集合中的碎片平衡

时间:2016-12-29 11:40:18

标签: mongodb sharding

查询块分布在具有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的文档位于同一节点上?

1 个答案:

答案 0 :(得分:1)

无法保证两个集合的分发方式相同,即使x在两个集合中具有相同的基数(或者即使x是相同的字段)。

平衡器尝试在所有分片上均匀分布块。这是在不需要知道实际分片键的情况下完成的。从平衡器的角度来看,两个集合之间(或任何分片集合之间)没有关系。

您可以在此页面中阅读有关平衡器的信息:https://docs.mongodb.com/v3.2/core/sharding-balancer-administration/。请注意,该页面中根本没有关于分片键的提及,只有块。