为什么SecureRandom.uuid会创建一个唯一的字符串?

时间:2014-02-28 08:57:30

标签: ruby

为什么SecureRandom.uuid会创建一个唯一的字符串?

SecureRandom.uuid
# => "35cb4e30-54e1-49f9-b5ce-4134799eb2c0"

方法SecureRandom.uuid创建的字符串永远不会重复?

1 个答案:

答案 0 :(得分:8)

该字符串实际上并非保证唯一。碰撞的可能性非常小但有限。

然而在实践中,你永远不会看到使用这种机制产生的两个id是相同的,因为概率很低。

您可以安全地将对SecureRandom.uuid的调用视为在需要管理数十亿数据库实体的代码中生成全局唯一字符串。

Here is a small table of collision probabilities.

意见:如果我选择一个任意限制,你可能开始在整个数据集中看到一两次碰撞,并且具有实际可能性,那么我会选择约10**16 - 假设如果您在系统中每秒创建一百万个ID,则需要30年才能达到该大小。即便如此,在项目的整个30年中看到任何碰撞的概率大约是10万分之一。