【问题标题】:How big is the chance to get a Java UUID.randomUUID collision? [duplicate]发生 Java UUID.randomUUID 冲突的机会有多大? [复制]
【发布时间】:2014-07-21 22:55:03
【问题描述】:

我需要在 Java 中创建一些唯一文件,并且我计划使用 UUID.randomUUID 来生成它们的名称。有没有机会为此发生碰撞?我应该做类似波纹管操作系统的事情吗?我不应该担心这个?

Integer attemptsToGenerateUUID = 1;

while (true) {
    UUID fileUUID = UUID.randomUUID();

    if (fileDoesNotExistwith this UUID name) {
        save file;
        break;
    }

    attemptsToGenerateUUID += 1;

    if (attemptsToGenerateUUID > 64) {
        return false;
    }
}

【问题讨论】:

  • 我发现总是有可能发生碰撞。我只是想知道在我的情况下是否值得实施这种“故障安全”,所以我至少尝试几次以获得一个唯一的名称,以防发生冲突。
  • 投反对票。答案在侧边栏中。完成后作为副本关闭。
  • 从透视角度来看——流星更有可能撞击运行程序的计算机,将其炸毁,然后导致 UUID 发生碰撞。因此,如果您想要一个 100% 的防故障程序,您应该在开始研究处理 UUID 冲突之前解决流星防御问题。

标签: java uuid


【解决方案1】:

根据wikipedia,关于随机UUID的重复概率:

仅在接下来的 100 年每秒生成 10 亿个 UUID 之后,仅创建一个副本的概率约为 50%。或者,换句话说,如果地球上每个人都拥有 6 亿个 UUID,那么出现重复的概率大约为 50%。

我想同样的推理也适用于 Java 的 UUID 实现。所以不,你不应该担心这个。

【讨论】:

  • 所以你是说有机会?
  • @Jack 是的,但它是天文数字。
  • 啊,这更像是个玩笑……谢谢你描述得很好的答案!
  • 显然,没有人玩强力球/乐透 :)
  • 我认为这是一个愚蠢的问题,打赌还是让我问吧。多台电脑之间呢?当我有不止一台计算机试图生成 UUID 时,该 UUID 将作为唯一的存储到数据库中
猜你喜欢
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
相关资源
最近更新 更多