我们正在探索Mongo寻找一个新网站,我们希望确保没有两个用户使用同一个电子邮件地址注册,因此,电子邮件字段中的唯一索引是必需的。在Mongo中,是否支持分片环境的独特索引?
这是否支持Mongo分区环境? Mongo文档状态支持唯一索引,但没有提及碎片。
http://www.mongodb.org/display/DOCS/Indexes#Indexes-UniqueIndexes
我们正在探索Mongo寻找一个新网站,我们希望确保没有两个用户使用同一个电子邮件地址注册,因此,电子邮件字段中的唯一索引是必需的。在Mongo中,是否支持分片环境的独特索引?
这是否支持Mongo分区环境? Mongo文档状态支持唯一索引,但没有提及碎片。
http://www.mongodb.org/display/DOCS/Indexes#Indexes-UniqueIndexes
从文档:
可以使用
{unique: true}
选项,以确保底层 索引实施唯一性,只要唯一索引是 的片键的前缀。 (注意:在版本2.0之前,仅当 集合为空时才起作用)。
http://www.mongodb.org/display/DOCS/Configuring+Sharding
这使得直观的感觉,因为MongoDB的无跨碎片检查的独特性,除非片键为您提供了这样的跨碎片的唯一保证“免费”的方式。
我们做
if($exists = $mongo_UserCollection->findOne($desiredEmail))
{
throw new User_Exception('Email address in use.');
}
不知道我完全理解。我只需要使电子邮件字段成为分片键的一部分?如果我的分片键是'姓氏:1,电子邮件:1',如何才能确保唯一性只在'email'而不是'lastname'上执行? – user646584 2011-12-31 23:01:51
如果你这样做,mongo将能够确保姓氏是唯一的,但不是电子邮件。如果你的分片键被颠倒了,那么电子邮件的唯一性就可以保证。唯一索引需要是分片键的前缀,而不仅仅是子集。 – 2011-12-31 23:14:56