首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中,什么时候应该使用uuid.uuid1()而不是uuid.uuid4()?

在python中,什么时候应该使用uuid.uuid1()而不是uuid.uuid4()?
EN

Stack Overflow用户
提问于 2009-11-24 03:48:24
回答 3查看 118.3K关注 0票数 240

我从docs.中理解了这两者之间的区别

uuid1()

从主机ID、序列号和当前时间生成UUID

uuid4()

生成随机的UUID。

因此,uuid1使用机器/序列/时间信息来生成UUID。使用每种方法的优缺点是什么?

我知道uuid1()有隐私问题,因为它是基于机器信息的。我想知道在选择其中一个的时候有没有什么更微妙的地方。我现在只使用uuid4(),因为它是一个完全随机的UUID。但是我想知道我是否应该使用uuid1来减少冲突的风险。

基本上,我正在寻找人们关于使用一种与另一种的最佳实践的提示。谢谢!

EN

回答 3

Stack Overflow用户

发布于 2015-12-21 16:51:22

我的团队在使用UUID1进行数据库升级脚本时遇到了麻烦,我们在几分钟内生成了大约12万个UUID。UUID冲突导致违反主键约束。

我们已经升级了100台服务器,但在我们的亚马逊EC2实例上,我们遇到了这个问题几次。我怀疑糟糕的时钟分辨率和切换到UUID4为我们解决了这个问题。

票数 33
EN

Stack Overflow用户

发布于 2014-06-18 02:49:51

在使用uuid1时需要注意的一件事是,如果你使用默认调用(没有给出clock_seq参数),你就有机会遇到冲突:你只有14位的随机性(在100 18内生成18个条目会给你大约1%的冲突机会参见生日悖论/攻击)。这个问题在大多数用例中都不会发生,但在时钟分辨率较低的虚拟机上,它会咬你一口。

票数 6
EN

Stack Overflow用户

发布于 2017-04-14 00:46:31

也许有些东西没有被提及,那就是地方性。

MAC地址或基于时间的排序(UUID1)可以提高数据库性能,因为与随机分布的数字(UUID4)相比,将数字更紧密地排序所需的工作更少(请参阅here)。

第二个相关的问题是,即使源数据丢失或没有显式存储(这显然与OP提到的隐私问题相冲突),使用UUID1在调试中也是有用的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1785503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档