UUID名称空间来自哪里?

UUID规范定义了4个预定义的命名空间,它被描述为“潜在的有趣的”,意思是“如果其他人在这个命名空间中生成了UUID,你可以validation它们:”

  • DNS的6ba7b810-9dad-11d1-80b4-00c04fd430c8
  • 6ba7b811-9dad-11d1-80b4-00c04fd430c8的URL
  • 6ba7b812-9dad-11d1-80b4-00c04fd430c8 ISO OID
  • 6ba7b814-9dad-11d1-80b4-00c04fd430c8于X.500 DN的6ba7b814-9dad-11d1-80b4-00c04fd430c8

这些来自哪里?

特别;

  • 如果我生成我自己的命名空间UUID,我是否需要避免什么特别?
  • 我知道UUID空间有多大,但是这对碰撞有什么意义吗?
  • 为什么他们select第四个八位字节作为UUID的“版本号”来增加?
  • 我的问题意味着我错过了一些关于UUID的基本知识吗?

首先,要清楚的是,整个讨论仅限于版本3和5的UUID。 在我的(轶事)经验中,版本4(随机)UUID是最常用的。

4122的名称空间UUID生成algorithm模糊不清:

分配UUID以用作“名称空间ID”

没有其他提及“名字空间ID”的分配,除了RFC 4122中列出的四种之外,我和Python都没有发现任何标准化的空间。

所以第一个问题的答案,

  • 如果我生成我自己的命名空间UUID,我是否需要避免什么特别?

你只需要避免四个标准的命名空间。


下一个问题,

  • 我知道UUID空间有多大,但是这对碰撞有什么意义吗?

有两个部分:

  1. 你的名字空间中的UUID是否会相互冲突? 逐字从4122:

    [你的]命名空间中的两个不同名称生成的UUID应该是不同的(具有很高的可能性)。

  2. 你的命名空间UUID是否会与其他命名空间相冲突? 我找不到直接的答案,因为“名字空间ID”分配没有标准,但是4.1.1的论点似乎是相关的:

    任何forms的互操作性都不能保证,而且在实践中不太可能成为问题。


  • 为什么他们select第四个八位字节作为UUID的“版本号”来增加?

这个有点神秘。 幸运的是,我们有UUID的规范,所以我们可以挖掘他们的一些见解。

请注意,(0-index)8字节在所有情况下都以8开头,所以我们正在处理RFC 4122变体 UUID。 唷。

现在检查字节6的版本: 1 ,我们正在处理版本1基于时间的 UUID。

这个答案有一个方便的algorithm来从版本1 UUID中提取Pythondate时间。 在1998年2月4日应用algorithm产生一个时间。 在这个日子我还没有find意义。 递增第三个八位字节会将最小的可编码时间间隔(100ns)添加到date。


  • 我的问题意味着我错过了一些关于UUID的基本知识吗?

不。 对UUID命名空间的讨论很less,因为随机的UUID非常容易。

如果我生成我自己的命名空间UUID,我是否需要避免什么特别?

不可以。您的命名空间UUID可以是以任何常规方式生成的任何UUID。 因此,例如,您可能想要生成版本1或版本4的UUID作为您的名称空间UUID。 这可以使用Linux或OS X上的uuidgen程序完成。或者,您可以在线方便地生成版本1或版本4的 UUID。