当使用带有_id的复合分片键时,MongoDB是否确保唯一的_id字段值

时间:2013-11-21 08:54:53

标签: mongodb

我想启动分片。如你所知,碎片密钥非常重要。我找到了,MongoDB doesn't ensure unique _id field values when using a shard key other than _id

在我们的馆藏中,用户名应该是分片键。如果我创建复合分片键并使用_id作为分片键的第二部分,mongoDB是否保证_id的唯一性?

2 个答案:

答案 0 :(得分:1)

当用作复合键时,MongoDB无法确保分片中的唯一_id字段。

The documentation州:

  

MongoDB可以强制分片键的唯一性。对于复合碎片   密钥,MongoDB将强制整个密钥组合的唯一性,   不适用于分片键的特定组件

因此,如果您希望mongo强制执行电子邮件的唯一性,那么只需将电子邮件用作分片键即可。

电子邮件地址有一些随机性,很好(内置_id has some predictability),但我建议您将电子邮件字段用作hashed shard key

答案 1 :(得分:0)

MongoDB确保复合键的所有字段的唯一性。但我不确定你是否在寻找这个。如果你有这些文件怎么办? {_id:12345,电子邮件:“test@test.com”}和{_id:4567,电子邮件:“test@test.com”}。分片键是唯一的,但您有两次相同的电子邮件。

如果要在所有分片上查找唯一的电子邮件,可以尝试使用唯一索引创建代理集合。

You have more information here