2013-10-30 29 views
3

蒙戈文档读:在MongoDB中,唯一索引对分片键的实际限制是什么?

分片系统不能执行集群范围唯一索引除非 唯一字段是在片键。

从这里:http://docs.mongodb.org/manual/core/sharding-shard-key/

不过,这是相当模糊的,我如果在片键应该是完全唯一索引,也可以是唯一索引的前缀。

我在这个特定主题上找到了很多参考,但不幸的是,我找不到一个好的“DO和DO NOT”示例。

总之,我的问题将驻留在下面的例子: 上的字段{A,B,C},下列哪项碎片键是正确的给予蒙戈集合具有唯一索引:

A. {a}
B. {a,b,c}
C. {a,b,c,d}
D. {a,b,d}?

非常感谢。

+0

分片密钥可以是唯一的,但不必是,即可以存在状态的分片密钥。正常情况下,碎片越有选择性越好。我没有回答你,因为我不知道你的查询或文件中的数据 – Sammaye

回答

4

这个限制的原因是它必须有可能让分片检查重复而不必与其他分片通信。

这意味着它必须清楚它的剩余碎片索引的每个可能的值。一个分片只能确定一个值是唯一的,当一个碰撞的文档也将被存储在它自己。

这意味着当分片键仅仅是索引的一部分时是可以的,但是当索引只是分片键的一部分时就不行。

对于您的示例,分片键A和B可以工作,但C和D不会。当场景C或D中的分片将收到一个文档,其中的字段a,b和c与它所具有的任何内容不匹配时,仍可能有一个文档在a,b和c上具有相同的值,但d的值不同在另一个碎片上。

相关问题