理论

  • GUID(Globally Unique Identifier)是一个128位整数(16字节),可用于所有需要唯一标识符的计算机和网络。此标识符重复的可能性非常小。

  • GUID是由网卡上的标识数字(每个网卡都有唯一的标识号)以及CPU时钟的唯一数字生成的一个16字节的二进制值。

  • GUID的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每一个x是0-9或a-f范围内的一个十六进制的数字。

  • 世界上的任何两台计算机都不会生成重复的GUID值(概率很小)。

  • GUID主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的表示符。

  • 在Windows平台上,GUID应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。

Time

  • 时间戳。将objectid的前4位进行提取,然后按照十六进制转为十进制,这个数字就是一个时间戳。通过时间戳的转换,可以很容易看清时间格式。

Machine

  • 机器码。接下来的三个字节是所在主机的唯一标识符,一般是机器主机的散列值,这样就确保了不同主机生成不同的机器hash值,确保在分布式中不造成冲突,这也就是在同一台机器生成的objectid中间的字符串都是一模一样的原因。

PID

  • 进程ID。上面的Machine是为了确保在不同机器产生的objectId不冲突,而pid就是为了在同一台机器不同的mongodb进程产生了objectId不冲突,接下来的两位就是产生objectId的进程标识符。

INC

  • 自增计数器。前面的九个字节是保证了一秒内不同机器不同进程生成objectId不冲突,最后面的三个字节是一个自动增加的计数器,用来确保在同一秒内产生的objectId也不会发现冲突,允许2^24等于16777216条记录的唯一性。

“Big Bang” was caused when two GUIDs collided.