UUID是否跨不同系统是唯一的?

16

我在想,即使在不同的系统上生成UUID并使用不同的算法,它们是否仍然是唯一的。例如,如果你在MySQL和.Net中生成了一堆UUID,会不会有更高的碰撞几率,或者所有系统都使用完全相同的算法,从而保证碰撞不太可能发生?

4个回答

6

来自维基百科通用唯一识别码: ..“独特”这个词应该被理解为“几乎独特”而不是“保证独特”。由于标识符具有有限的大小,因此可能会出现两个不同的项目共享相同的标识符。需要选择标识符大小和生成过程,以使这种情况几乎不可能发生。


3

UUID(通用唯一标识符)应该包含时间戳和版本号,但其余部分应该是随机的。因此,除非您确定UUID是在不同的时间生成的,否则无论使用哪个生成器软件,都有相同的碰撞几率。早期版本的生成算法包括MAC地址,这在一定程度上有助于避免MAC地址碰撞风险。这些都在RFC 4122中指定。


2
不是的,这个可能性是不确定的。基本上,发生碰撞的概率取决于UUID生成方法中的(即“真正”的不可预测性)。
(a) UUID有不同的标准格式,每种格式本质上具有不同数量的熵(例如,如果你基于Mac和时间戳生成UUID,则理论上比仅基于随机位串的UUID具有更少的熵)。
(b) 对于 Type 4,它是基于随机位生成的,没有标准的随机数生成算法/标准熵源。
如果你有一个“完美”的随机数生成器,那么一个随机UUID有2^116个可能的值(12个位用于版本标记等),换句话说,在生成约2^56或7x10^16个UUID之前发生碰撞的可能性很小。

没错,如果想进一步了解,生日悖论是一个很好的例子,可以帮助解释如何发生碰撞。 - mikegradek

2

给定128位,有340,282,366,920,938,463,463,374,607,431,768,211,456个可能的UUID。理论上这应该足够使它们在全球范围内唯一 - 因此,简短回答您的问题是肯定的,即使不同的系统使用算法的其他版本。

查看维基百科文章中的表格,可以很好地了解冲突概率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接