【发布时间】:2014-03-13 17:54:44
【问题描述】:
来自我正在阅读的 mongoDB 文档 (http://docs.mongodb.org/manual/core/sharding-shard-key/)
分片系统不能强制执行集群范围的唯一索引,除非 唯一字段在分片键中。
我不知道很好理解。 如果我有以下唯一索引 {A B C D} 和分片键 {a,b},
在所有集群中都尊重 {a,b,c,d} 的唯一性吗?
【问题讨论】:
来自我正在阅读的 mongoDB 文档 (http://docs.mongodb.org/manual/core/sharding-shard-key/)
分片系统不能强制执行集群范围的唯一索引,除非 唯一字段在分片键中。
我不知道很好理解。 如果我有以下唯一索引 {A B C D} 和分片键 {a,b},
在所有集群中都尊重 {a,b,c,d} 的唯一性吗?
【问题讨论】:
由于分片键是唯一键的前缀,因此保留了这种唯一性。关键的见解是每个块都存在于一个分片上。
唯一性约束是,如果您有两个不同的文档,其中 a、b、c 和 d 都相等,它们不应该同时存在,因为它们不是唯一的。但是由于它们对于 a 和 b 具有相同的值,因此它们必须在同一个块中,因此它们将位于同一个分片上。该分片在 {a:1, b:1, c:1, d:1} 上确实具有唯一索引,因此它将保持这两个文档的唯一性不变性,并且不允许您插入第二个文档。
所以:
在所有集群中都尊重 {a,b,c,d} 的唯一性吗?
是的。
【讨论】: