Mongodb ObjectID在文档之间是唯一的吗?

时间:2015-04-30 04:19:03

标签: mongodb

让我们考虑博客网站的一个例子,我想在两个不同的文档中保存问题和回复。我知道这也可以使用Embedding文档完成,但我们假设我们需要两个不同的文档。

我在问题和答复上都有Like选项。如果用户喜欢在question's objectID文档中存储特定Like的问题,并且对于回复中的相似内容。

现在我想知道我在objectID's文档中存储的Like是否会产生冲突。就像question's objectid samereply's objectid一样ObjectID。是否有可能发生此类冲突?

在Mongodb $.ajax({ url: '/Name', 文档中提供了以下内容:

  

ObjectId是一个12字节的BSON类型,使用:

构造      

一个4字节的值,表示自Unix纪元以来的秒数,

     

一个3字节的机器标识符,

     

一个2字节的进程ID,

     

一个3字节的计数器,以随机值开始。

2 个答案:

答案 0 :(得分:0)

Documentation开始,它很可能是唯一的,而不是唯一的。

答案 1 :(得分:0)

它适用于所有实际目的。提到的非唯一性是一个相当理论的。

<{p}}中的ObjectId is constructed

  • 时间戳(纪元以来的秒数)
  • 机器标识符
  • 进程ID
  • 和一个3字节计数器,以随机值开始每秒

所以,在中位数,除非你每个客户每秒写超过3080个文件,你应该保存。 需要注意的是_id有一个独特的约束:即使如果你试图写两次相同的ObjectId,那也是例外。

附注:即使是哈希算法(如MD5)或(在较小程度上)SHA256也有轻微的碰撞机会。但是有了一个独特的约束,你就是安全的。

编辑:由于在非常非常罕见的情况下抛出异常,生成两个相同的ObjectId并尝试同时编写,您只需通过生成一个新的ObjectId来处理它们并尝试再次保存文件。