在MongoDB中,分片键上唯一索引的实际限制是什么?

And*_*san 3 sharding mongodb

Mongo Docs阅读:

分片的系统无法强制执行群集范围内的唯一索引,除非唯一字段位于分片键中。

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

不过,对于我来说,分片键应该恰好是唯一索引还是它可以是唯一索引的前缀,这对我来说还是很模糊的。

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

总而言之,我的问题将出现在以下示例中:给定一个Mongo集合,该集合在字段{a,b,c}上具有唯一索引,以下哪个分片键是正确的:

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

非常感谢。

Phi*_*ipp 5

出现此限制的原因是这些分片必须不必与其他分片进行通信即可检查重复项。

这意味着必须清楚其残留在哪个分片上的索引的每个可能值。仅当冲突文档也将存储在其自身上时,碎片才能确定值是唯一的。

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

在您的示例中,分片键A和B将起作用,而C和D将不起作用。当方案C或D中的分片会收到一个字段a,b和c不匹配的文档时,仍然可能存在一个文档,其中a,b和c的值相同,但d的值不同在另一个碎片上。