Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB对_id使用哪种算法_Mongodb - Fatal编程技术网

MongoDB对_id使用哪种算法

MongoDB对_id使用哪种算法,mongodb,Mongodb,MongoDB对每个文档使用哪种算法 我找不到关于它的任何文件。它是某种uuid吗?ObjectId是“\u id”的默认类型,它使用12个字节的存储空间,这为它们提供了一个字符串表示形式,即24个十六进制数字:每个字节2个数字。这是在客户端生成的。如果您快速连续创建多个新ObjectID,您可以看到每次只有最后几个数字发生更改。另外,Objutd中间的一对数字将改变(如果你将创作空间间隔几秒钟)。这是因为objectid的创建方式。ObjectId的12个字节按如下方式生成: 0|1|2|3

MongoDB对每个文档使用哪种算法


我找不到关于它的任何文件。它是某种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