python - 我什么时候应该在 python 中使用 uuid.uuid1() 和 uuid.uuid4()?

标签 python uuid

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

uuid1():
根据主机 ID、序列号和当前时间生成 UUID

uuid4():
生成随机 UUID。

所以 uuid1 使用机器/序列/时间信息来生成 UUID。各自使用的优缺点是什么?

我知道 uuid1() 可能存在隐私问题,因为它基于机器信息。我想知道在选择其中一个时是否有更微妙的地方。我现在只使用 uuid4(),因为它是一个完全随机的 UUID。但我想知道我是否应该使用 uuid1 来降低碰撞风险。

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

最佳答案

uuid1() 保证不会产生任何冲突(假设您不会同时创建太多冲突)。如果 uuid 和计算机之间没有连接很重要,我不会使用它,因为 mac 地址被用来使其在计算机之间具有唯一性。

您可以通过在 100ns 内创建超过 214 个 uuid1 来创建副本,但这对于大多数用例来说都不是问题。

uuid4() 如您所说,生成一个随机 UUID。发生碰撞的机会真的非常非常非常小。足够小,你不应该担心它。问题是,糟糕的随机数生成器更容易发生冲突。

This excellent answer by Bob Aman总结得很好。 (我建议阅读整个答案。)

Frankly, in a single application space without malicious actors, the extinction of all life on earth will occur long before you have a collision, even on a version 4 UUID, even if you're generating quite a few UUIDs per second.

关于python - 我什么时候应该在 python 中使用 uuid.uuid1() 和 uuid.uuid4()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1785503/

相关文章:

python - 无法将字符串转换为 float : 'Product_0332'

python - 使用 OutOfBoundsDatetime 儒略历到公历日期

java - 实现 UUID 以获得更好的性能

postgresql - 如何将 uuid 与 postgresql gist 索引类型一起使用?

python - Pandas 在数据帧中设置值,多线程 - loc 与 set_value

Python提取从索引开始到字符的字符串

python - pyTorch LSTM 中的准确度分数

postgresql - 如何在 Postgres 9.6 中的 uuid 上添加 PostgreSQL GIN 索引

php - 为什么 Eloquent(在 Laravel 中)将我的 varchar uuid 主键转换为整数导致错误?

PHP mysql_insert_id() 用于 MySQL UUID() 主键?