【问题标题】:In Mongo, are unique indexes supported for sharded environments?在 Mongo 中,分片环境是否支持唯一索引?
【发布时间】:2011-12-31 22:24:18
【问题描述】:

我们正在探索 Mongo 的新网站,我们希望确保没有两个用户使用相同的电子邮件地址注册,因此,电子邮件字段上的唯一索引是必要的。

分片 Mongo 环境是否支持此功能? Mongo 文档声明支持唯一索引,但没有提及分片。

http://www.mongodb.org/display/DOCS/Indexes#Indexes-UniqueIndexes

【问题讨论】:

    标签: mongodb indexing sharding mongodb-indexes


    【解决方案1】:

    来自文档:

    您可以使用{unique: true} 选项来确保底层证券 index 强制唯一性,只要唯一索引是 分片键。 (注意:在 2.0 版之前,这仅在 集合为空)。

    http://www.mongodb.org/display/DOCS/Configuring+Sharding

    这很直观,因为 mongodb 无法检查分片之间的唯一性,除非分片键“免费”为您提供这种跨分片唯一性保证。

    【讨论】:

    • 不确定我是否完全理解。我只需要将电子邮件字段作为分片键的一部分吗?如果我的分片键是 lastname:1, email:1,我如何确保仅在 email 而不是 lastname 上强制执行唯一性?
    • 如果您这样做,mongo 将能够确保 lastname 是唯一的,但不是电子邮件。如果您的分片键被反转,则可以确保电子邮件的唯一性。唯一索引需要是分片键的前缀,而不仅仅是一个子集。
    【解决方案2】:

    我们这样做

    if( $exists = $mongo_UserCollection->findOne( $desiredEmail ) )
    {
        throw new User_Exception( 'Email address in use.' );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-07
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 2020-02-17
      • 2011-09-21
      • 2016-02-17
      相关资源
      最近更新 更多