MongoDB对每个文档使用哪种算法_id
?
我找不到有关它的任何文档。是某种uuid吗?
ObjectId是“ _id”的默认类型,它使用12个字节的存储空间,这为它们提供了一个字符串表示形式,该字符串表示形式为24个十六进制数字:每个字节2个数字。这是在客户端生成的。如果快速连续创建多个新的ObjectId,则可以看到每次仅更改最后几位。此外,ObjectId中间的几位数字也会更改(如果将创建的内容间隔几秒钟)。这是因为创建ObjectId的方式。ObjectId的12个字节生成如下:
0|1|2|3 4|5|6 7|8| 9|10|11
Timestamp machine PID Increment
ObjectId的前四个字节是以秒为单位的时间戳。这提供了几个有用的属性:时间戳与接下来的5个字节结合使用时,可以在一秒的粒度内提供唯一性。因为时间戳在前,所以这意味着ObjectId将按插入顺序大致排序(这不是很强保证)。在这四个字节中,存在每个文档创建时间的隐式时间戳。
ObjectId的后三个字节是在其上生成对象的机器的唯一标识符。这通常是计算机主机名的哈希。通过包含这些字节,可以确保不同的机器不会生成冲突的ObjectId。
为了在单个机器上同时生成ObjectId的不同进程之间提供唯一性,接下来的两个字节取自于生成ObjectId的进程的进程标识符(PID)。ObjectId的前九个字节保证了它在一秒钟内在机器和进程中的唯一性。最后三个字节只是一个递增计数器,该计数器在单个过程中在一秒钟内负责唯一性。
这样一来,每个进程最多可以生成256 ^ 3(16,777,216)个唯一的ObjectId。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句