Sharded Cluster中的MongoDB ObjectID唯一性

时间:2015-06-25 10:27:36

标签: mongodb objectid

如果我有一个包含多个MongoS实例的MongoDB分片群集,那么_id中的ObjectID是否会在我写入的MongoS中一致?

例如,如果我从MongoS#1写入一些数据并且_id正常上升,如果我使用MongoS#2写入,那么这些_id也会与其他写入一致吗?

看作ObjectID的一部分是基于机器哈希和进程ID,我无法看到这将对ObjectID进行排序将是无用的。正确的吗?

这里的推荐是什么?

1 个答案:

答案 0 :(得分:0)

如何生成ObjectId可以让您对查询有一个全面的了解。

如果您在mongo控制台中键入此内容,

  

new ObjectId()

您会将ObjectId示例值视为

ObjectId("558bf61f9f49f303f72dd59b")

现在,让我们休息一下,看看mongo是如何生成这个的。     558bf61f 9f49f3 03f7 2dd59b

  1. 这里前8个字符(4个字节)表示作为时间戳的秒数(不是毫秒)。
  2. 接下来的3个字节是机器识别的。
  3. 接下来的2个字节是进程ID。
  4. 最后3个字节是随机值。
  5. http://api.mongodb.org/libbson/current/bson_oid_t.html

    所以,当然,无论你与之相关联的mongos,随着时间的推移它只会按升序排列(因为第一点),其他点确保它始终是唯一的数字。希望它澄清你的怀疑。

    - $