【问题标题】:Mongodb - must _id be globally unique when shardingMongodb - 分片时_id必须是全局唯一的
【发布时间】:2012-11-11 18:19:57
【问题描述】:

我想通过他们的“外键”(userID)而不是他们的 id 字段对集合进行分片。我只需要 userID 和 id 的组合是唯一的。但我不确定 mongodb 是否可以。

警告在任何你没有分片的分片集合中 _id 字段,必须保证 _id 字段的唯一性。确保 _id 始终唯一的最佳方法是使用 ObjectId 或其他 通用唯一标识符 (UUID.)

摘自:http://docs.mongodb.org/manual/tutorial/enforce-unique-keys-for-sharded-collections/#enforce-unique-keys-for-sharded-collections

我必须确保 _id 是唯一的吗?或者如果我总是通过 userID 和 _id 查询就足够了吗?

【问题讨论】:

    标签: mongodb indexing unique sharding


    【解决方案1】:

    除非您手动替换它们,否则自动生成的 _id 是 UUID,根据the documentation,它由“4 字节时间戳(自纪元以来的秒数)、3 字节机器 ID、2 字节进程组成id 和一个 3 字节的计数器”。

    如您所见,唯一的机器 ID 是 UUID 的一部分。这确保了分片中没有两台机器独立创建相同的 UUID(除非它们具有相同的机器 ID - 可能性为 1:16777215 并且当它发生时可以很容易地验证)。理论上,唯一可能存在重复 UUID 的情况是单个进程在一秒钟内创建超过 2^24 个(超过 1600 万个)UUID。

    tl;dr:您不必担心重复的 UUID - 正如文档所述,它们“设计为在分配时具有相当高的唯一性”。

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多