由APR::UUID模块生成的标识符中保证的惟一性是什么?



Data::UUID的文档说明

UUID长度为128位,并且保证不同于所有UUID

在3400 CE之前生成的其他uid/guid。

APR::UUID的文档描述生成的标识符是随机的。

这是否意味着APR::UUID创建的guid不能保证是唯一的?

维基百科关于UUID s和GUID s的文章在这里很有指导意义。

uuid是随机的,但从如此大的分布中抽取,碰撞的概率是极小的,在这种情况下,极小意味着在你生成两个相同的uuid之前,你可能会被成千上万的小行星撞击。

GUID大多是随机的,但也包含一些确定的但系统的唯一数据,例如网络硬件的MAC地址和当前时间,因此在另一个系统上创建的GUID之间发生冲突的可能性更小。

我知道这是一个古老的问题,但当我偶然发现这个问题时,我想我应该分享一些观察。

如daxim所述,APR::UUID使用液体。然而,至少在一些实现中,liquid不会生成一个随机的(v4) UUID,而是一个v1 UUID(基于MAC地址和时间戳)。这些确实是唯一的(只要您的MAC地址确实是唯一的),但是它们包含信息(您的MAC地址和UUID生成的时间),并且可能至少在某种程度上是可预测的。

如果UUID生成代码符合规范,则可以通过查看3组的第一个数字来确定生成的是哪个版本的UUID。v1 uuid不是随机的,而是可预测的。v4 uuid是随机的,并且(据说)是不可预测的。

最新更新