MongoDB对_id使用哪种算法
MongoDB对每个文档使用哪种算法MongoDB对_id使用哪种算法,mongodb,Mongodb,MongoDB对每个文档使用哪种算法 我找不到关于它的任何文件。它是某种uuid吗?ObjectId是“\u id”的默认类型,它使用12个字节的存储空间,这为它们提供了一个字符串表示形式,即24个十六进制数字:每个字节2个数字。这是在客户端生成的。如果您快速连续创建多个新ObjectID,您可以看到每次只有最后几个数字发生更改。另外,Objutd中间的一对数字将改变(如果你将创作空间间隔几秒钟)。这是因为objectid的创建方式。ObjectId的12个字节按如下方式生成: 0|1|2|3
我找不到关于它的任何文件。它是某种uuid吗?ObjectId是“\u id”的默认类型,它使用12个字节的存储空间,这为它们提供了一个字符串表示形式,即24个十六进制数字:每个字节2个数字。这是在客户端生成的。如果您快速连续创建多个新ObjectID,您可以看到每次只有最后几个数字发生更改。另外,Objutd中间的一对数字将改变(如果你将创作空间间隔几秒钟)。这是因为objectid的创建方式。ObjectId的12个字节按如下方式生成:
0|1|2|3 4|5|6 7|8| 9|10|11
Timestamp machine PID Increment
ObjectId的前四个字节是以秒为单位的时间戳。这提供了两个有用的属性:当时间戳与接下来的五个字节组合在一起时,它以一秒钟的粒度提供唯一性。因为时间戳在第一位,这意味着ObjectID将按照大致的插入顺序排序(这不是一个强有力的保证)。
在这四个字节中存在一个隐式的时间戳,表示创建每个文档的时间
ObjectId的下三个字节是生成它的机器的唯一标识符。这通常是计算机主机名的散列。通过包含这些字节,可以保证不同的机器不会生成冲突的objectid
为了在一台机器上同时生成ObjectId的不同进程之间提供唯一性,接下来的两个字节取自ObjectId生成进程的进程标识符(PID)。
ObjectId的前九个字节保证了它在一秒钟内跨机器和进程的唯一性。最后三个字节只是一个递增计数器,负责在单个进程中在一秒钟内保持唯一性
这允许在一秒钟内为每个进程生成多达256^3(16777216)个唯一的ObjectID。uuid不会提供更多的唯一性吗?使用此算法似乎不可能生成重复的ID。。。“machine”-id来自哪里?我在回答中写到machineId是主机名的散列,请检查uuid与objectId的比较:a