当MongoDB的文档说ObjectID"可能是唯一的"时,它是什么意思?



情况:ObjectIds的MongoDB文档说"ObjectId很小,可能是唯一的,生成速度快,并且有序">

问题:为什么以及如何使MongoDB的ObjectId仅仅是可能是唯一的,而不是完全唯一的?

我尝试过的:在谷歌上搜索SO。其他一些SO问题似乎涉及非唯一性问题,但我还没有看到一个完整的解释。也有一些Medium文章可以解决这一点,但在前几篇文章之后,Medium并不是免费的。

问题:为什么MongoDB的ObjectId可能只是唯一的,而不是完全唯一的?

两个原因:

  1. 每个ObjectId都是在客户端本地生成的。不同的客户端没有协调它们正在生成的值。因此,可能有两个客户端碰巧生成相同的随机数,从而生成完全相同的ObjectId。极不可能但有可能,因此";可能是唯一的";措辞

  2. ObjectId生成算法指定使用3字节计数器,该计数器用于消除同一秒中生成的值的歧义。如果在同一秒内生成超过1600万个ObjectId,则该计数器将溢出,并且您正在使用的客户端将开始生成它刚才已经生成的ObjectId。

最新更新