The UUID规范 https://www.rfc-editor.org/rfc/rfc4122.html#section-4.3定义了 4 个预定义的命名空间,将其描述为“可能有趣”——除其他外,这意味着“如果其他人在这个命名空间中生成了 UUID,你可以验证它们”:
-
6ba7b810-9dad-11d1-80b4-00c04fd430c8
for DNS
-
6ba7b811-9dad-11d1-80b4-00c04fd430c8
for URL
-
6ba7b812-9dad-11d1-80b4-00c04fd430c8
用于 ISO OID
-
6ba7b814-9dad-11d1-80b4-00c04fd430c8
用于 X.500 DN
这些是从哪里来的?
具体来说;
- 如果我生成自己的命名空间 UUID,我是否需要特别避免任何事情?
- 我知道 UUID 空间有多大,但这对冲突有什么影响吗?
- 为什么他们选择第 4 个八位字节作为一种 UUID“版本号”来增加?
- 我的问题是否意味着我遗漏了有关 UUID 的一些基本知识?
首先,需要明确的是,整个讨论仅限于版本 3 和 5 UUID。根据我的(轶事)经验,版本 4(随机)UUID 最常用。
4122 https://www.rfc-editor.org/rfc/rfc4122.html#section-4.3的命名空间 UUID 生成算法模糊地开始:
分配一个 UUID 用作“命名空间 ID”
没有其他提及“名称空间ID”分配,我和python http://docs.python.org/library/uuid.html已发现 RFC 4122 中列出的四个空间之外的任何标准化空间。
所以你的第一个问题的答案,
- 如果我生成自己的命名空间 UUID,我是否需要特别避免任何事情?
您只需避开四个标准名称空间即可。
下一个问题,
- 我知道 UUID 空间有多大,但这对冲突有什么影响吗?
有两个部分:
-
您的命名空间内的 UUID 会发生冲突吗? 4122 的逐字记录:
从[您的]命名空间中的两个不同名称生成的 UUID 应该不同(概率非常高)。
-
您的命名空间 UUID 会与其他命名空间冲突吗?我找不到直接的答案,因为没有“名称空间 ID”分配的标准,但中的参数第4.1.1节 https://www.rfc-editor.org/rfc/rfc4122.html#section-4.1.3似乎相关:
任何形式的互操作性,与除该形式之外的变体
此处定义的内容无法得到保证,并且不太可能成为问题
实践。
- 为什么他们选择第 4 个八位字节作为一种 UUID“版本号”来增加?
这有点神秘。幸运的是,我们有 UUID 规范,因此我们可以挖掘它们以获得一些见解。
请注意,(0-索引)第 8 个八位字节以8
在所有情况下,所以我们正在处理RFC 4122 变体UUID。唷。
现在检查八位位组 6 的版本:1
,我们正在处理版本 1 基于时间 UUIDs.
This answer https://stackoverflow.com/questions/3795554/extract-the-time-from-a-uuid-v1-in-python有一个方便的算法,用于从版本 1 UUID 中提取 python 日期时间。应用该算法会产生一个时间1998 年 2 月 4 日。我还没有找到这个日期的意义。递增第 3 个八位字节会将最小可编码时间间隔 (100ns) 添加到日期中。
- 我的问题是否意味着我遗漏了有关 UUID 的一些基本知识?
没有。关于 UUID 命名空间的讨论很少,因为随机 UUID 非常简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)