应用程序是否应该检查UUID v4的重复?

3
我在我的应用程序中使用数据库来存储数据,这个数据库会以UUID v4类型的随机生成ID来存储数据。现在我想知道,一个有很多用户的大型应用程序有多常见地具有重复的ID?由于ID是SQL数据库中的主键,因此只能崩溃一个API调用。检查UUID是否存在(从而捕获后端可能的崩溃)是一种干净的做法还是多余的,因为它发生的概率非常小?
特别考虑到:
- Python中的随机数并不是那么随机 - 有2¹²²种组合
编辑:
根据评论,似乎不需要检查重复项。谢谢!

1
抱歉,random 和任何事情有什么关系? - juanpa.arrivillaga
3
你认为2的122次方中的1是“非常不可能”的吗? - Scott Hunter
1
如果数据库正在强制唯一性,则重复项不是数据完整性问题。在实施重试逻辑之前,我会等待冲突实际成为问题。错误的重试逻辑可能会导致其自身的问题。 - Nick ODell
1
使用UUID,当您在数十亿年后遇到冲突时,您可以提出一个新问题:“如何修复UUID冲突”。 - Tom McLean
1
在我个人看来,这就是为什么旧的UUID格式更好的原因,尽管其他人可能不同意。除非有人在我的机器上一秒钟内生成40亿个UUID,否则它们保证是唯一的。 - Tim Roberts
显示剩余2条评论
1个回答

3

由于碰撞的概率非常低,这在实践中不应该成为问题。

请参阅维基百科关于UUID4 collision的文章。

例如,需要生成多少个随机版本4 UUID才能使至少有50%的概率发生碰撞?这个数字是2.71万亿。

这相当于每秒生成10亿个UUID约85年。包含这么多UUID的文件,每个UUID占用16字节,大约为45艾字节。

NB.UUID1和UUID2具有时间组件,如果以足够合理的频率生成UUID,则不可能发生碰撞。


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