2011-03-06 41 views
0

我在MongoDB的数据库中有一个“users”集合。我将使用分片。Mongodb数据库在分区配置中具有多个唯一索引

除标准_id以外,还有3个其他字段需要进行索引和唯一:用户名,电子邮件和帐号。所有这些字段中的3个不一定针对每个用户文档都存在,在某些情况下不会存在。

我想要字段进行索引,因为用户会经常被这些字段之一查找。我希望字段是唯一的,因为这是一个要求,我宁愿不处理这个逻辑客户端。

据我所知,mongodb和其他数据库一样有局限性,但我希望有一个解决方案,因为这是一个相当常见的web应用程序设置。

这种场景是否有一个优雅的解决方案?

不知道这个问题是否重要(因为问题属于数据库结构),但我使用的是官方的mongodb C#驱动程序。

回答

3

Mongodb官方文档说,分片集合必须只有一个唯一索引,并且需要唯一的字段存在。但它也says你也可以选择有其他唯一索引当且仅当分片键是其属性的前缀。所以你可以试试这个,但是要知道,必须始终存在唯一的密钥。

我不明白你的业务逻辑,没有关于用户的信息会存在。在这种情况下,您可以分割_id并手动执行唯一性检查。

+0

为了使分片效率更高,mongos进程需要能够仅基于文档选择分片,然后将写入仅发送到该分片。要求文档具有不在分片索引中的唯一密钥,这意味着必须检查所有分片。这导致插入效果与最慢的分片一样慢。你真的有足够的用户,你需要分割这张桌子吗? – 2011-03-07 17:25:09