Perl APR::UUID模块生成的标识符中保证的唯一性是什么

Perl APR::UUID模块生成的标识符中保证的唯一性是什么,perl,apache2,perl-module,mod-perl2,Perl,Apache2,Perl Module,Mod Perl2,Data::UUID的文档说明 UUID的长度为128位,保证与所有UUID不同 在3400 CE之前生成的其他UUID/GUID APR::UUID的文档将生成的标识符描述为 这是否意味着APR::UUID创建的GUID不能保证唯一 关于和的维基百科文章在这里很有启发性 UUID是随机的,但其分布如此之大,以至于碰撞的概率非常小,在这种情况下,微小意味着在生成两个相同的UUID之前,你可能会被数千颗小行星撞击 GUID大多是随机的,但也包含一些确定性但唯一的数据到您的系统中,例如网络硬件的MA

Data::UUID的文档说明

UUID的长度为128位,保证与所有UUID不同 在3400 CE之前生成的其他UUID/GUID

APR::UUID的文档将生成的标识符描述为

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

关于和的维基百科文章在这里很有启发性

UUID是随机的,但其分布如此之大,以至于碰撞的概率非常小,在这种情况下,微小意味着在生成两个相同的UUID之前,你可能会被数千颗小行星撞击


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

我意识到这是一个老问题,但当我偶然发现这个问题时,我想我会分享一些观察结果

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


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

感谢这些链接,但是,我的问题是关于APR::UUID实现的,即它是否依赖于相同数量随机生成两次的概率可以忽略不计,还是通过使用某种算法来保证唯一性。因为这些被认为是通用的或全局唯一的,如果没有宇宙中的每个人或地球上的每个人都使用的中央服务器,就不可能保证唯一性。必须在没有此类连接的情况下生成ID,因此无法保证ID是唯一的。如果您要求ID是唯一的,则不能仅依赖于此,您必须在生成时处理确保唯一性的逻辑,并检查DB/数据存储是否已存在,为您的实现提供保证。一些研究为想要回答问题的人提供了一个开头:当文档中说“随机”时,它的意思是。在Unix上,这是通过libuuid实现的,请参阅源代码中的
misc/Unix/rand.c
。@daxim这回答了我的问题,提供了我所需的确切详细程度。谢谢