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空间有多大,但是这对碰撞有什么意义吗?
有两个部分:
-
你的名字空间中的UUID是否会相互冲突? 逐字从4122:
[你的]命名空间中的两个不同名称生成的UUID应该是不同的(具有很高的可能性)。
-
你的命名空间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。