如果在设备上生成而不是服务器上生成,UUID4有多独特?

3

这个问题从一般意义上回答了它,但没有具体说明如果UUID生成不是集中式的会发生什么。

我最近看到一个架构,所有设备(100万+ ios和android)都使用自己的生成器函数/库生成UUID4密钥,并且当同步时这些密钥在服务器数据库中标记为唯一。我担心由于大约有一百万台设备将尝试本地生成,因此碰撞的机会比上面的问题描述更高。

我以前使用过集中式UUID,但对这种分布式系统还不熟悉,因此我采用质数生成器的类比,在不同的环境中并行运行,这将使最终结果不是质数/唯一的。如果我的理解有误,请纠正我。

此外,请分享任何关于在分布式环境中使用UUID的注意事项和好文章。

编辑:这个答案与Python UUID生成有关,讨论了碰撞和使用UUID1而不是UUID4。我想知道是否有任何文件可以确认这一点,特别是关于android和ios设备的随机性。此外,我应该如何计算/估计这样的碰撞概率。

1个回答

3
UUID的整个意义就在于它是唯一的,全球唯一。UUID通常基于设备的MAC地址和时间戳等其他可能的因素生成。每秒产生数个UUID的百万设备永远不会发生冲突。除非苹果或谷歌在生成UUID的实现上出了问题,否则你不需要担心任何问题。再次强调,UUID的全部意义在于你不需要一个中央单一服务器来生成所有ID。关于UUID算法的详细信息,请参考与您链接的问题的许多答案。那个问题实际上与UUID生成中心化无关。更新-鉴于焦点集中在UUID4上,以下是来自维基百科关于UUID4重复概率的文章摘录:将这些数字放入透视中,人们被陨石击中的年度风险估计为170亿分之1,这意味着概率约为0.00000000006(6×10 -11),相当于在一年内创建了数万亿个UUID并且有一个重复项的可能性。换句话说,在未来100年中每秒生成10亿个UUID后,仅产生一个重复项的概率约为50%。但是,这些概率仅在生成UUID时使用足够的熵时才具有可靠性。否则,由于统计分散可能较低,重复的概率可能会显着提高。在需要为分布式应用程序提供唯一标识符以使即使合并来自许多设备的数据时也不会发生UUID冲突的情况下,必须在每个设备上使用的种子和生成器的随机性对应用程序的寿命是可靠的。如果这不可行,则RFC4122建议改用命名空间变量。根据我对iOS的经验,iOS使用UUID4。鉴于以上事实,我对任何冲突都不担心。

1
但是UUID4规范中说“生成一个随机的UUID”。MAC地址和时间戳是UUID1和UUID2,它们并没有被使用。我的困惑只针对UUID4。如果在100万台机器上生成随机UUID,那么这个随机UUID有多随机呢? - crazydiv

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