我想启动分片。如你所知,碎片密钥非常重要。我找到了,MongoDB doesn't ensure unique _id field values when using a shard key other than _id。
在我们的馆藏中,用户名应该是分片键。如果我创建复合分片键并使用_id作为分片键的第二部分,mongoDB是否保证_id的唯一性?
答案 0 :(得分:1)
当用作复合键时,MongoDB无法确保分片中的唯一_id
字段。
MongoDB可以强制分片键的唯一性。对于复合碎片 密钥,MongoDB将强制整个密钥组合的唯一性, 不适用于分片键的特定组件。
因此,如果您希望mongo强制执行电子邮件的唯一性,那么只需将电子邮件用作分片键即可。
电子邮件地址有一些随机性,很好(内置_id
has some predictability),但我建议您将电子邮件字段用作hashed shard key。
答案 1 :(得分:0)
MongoDB确保复合键的所有字段的唯一性。但我不确定你是否在寻找这个。如果你有这些文件怎么办? {_id:12345,电子邮件:“test@test.com”}和{_id:4567,电子邮件:“test@test.com”}。分片键是唯一的,但您有两次相同的电子邮件。
如果要在所有分片上查找唯一的电子邮件,可以尝试使用唯一索引创建代理集合。