MongoDB:分片系统无法强制实施群集范围的唯一索引

时间:2014-03-13 17:54:45

标签: mongodb mongodb-indexes

来自mongoDB文档(http://docs.mongodb.org/manual/core/sharding-shard-key/)我正在阅读

  

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

我很难理解。 如果我有以下唯一索引 {A B C D} 和分片键 {A,B},

是在所有群集中尊重的{a,b,c,d}的唯一性吗?

1 个答案:

答案 0 :(得分:2)

由于分片键是唯一键的前缀,因此保留了此唯一性。关键的见解是每个块只存在于一个碎片上。

唯一性约束是,如果你有两个不同的文件,其中a,b,c和d都是相同的,它们不应该都存在,因为它们不是唯一的。但由于它们都具有相同的a和b值,因此它们必须位于同一个块中,因此它们将位于相同的碎片上。该分片在{a:1,b:1,c:1,d:1}上确实有唯一索引,因此它将保持这两个文档的唯一性不变,并且不允许您插入第二个文档。 / p>

所以:

  

是在所有群集中尊重的{a,b,c,d}的唯一性吗?