3

Mongo 文档阅读:

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

从这里: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} ?

非常感谢。

4

1 回答 1

5

此限制的原因是分片必须可以检查重复项,而无需与其他分片通信。

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

这意味着当 shard-key 只是索引的一部分时是可以的,但当索引只是 shard-key 的一部分时则不行。

对于您的示例,分片键A 和 B 会起作用,但 C 和 D 不会。当场景 C 或 D 中的分片接收到字段 a、b 和 c 不匹配的文档时,仍然可能存在 a、b 和 c 具有相同值但 d 值不同的文档在另一个分片上。

于 2013-10-30T16:23:05.630 回答