【发布时间】:2017-10-06 22:33:11
【问题描述】:
我需要在分布式系统上生成许多唯一标识符。
- 在 paranoia 模式下,我不确定:
- 永远不会发生碰撞
- 阻止确定计算机位置用于生成标识符(Mac 地址和日期时间)
我想生成 UUID。
-
如果我使用 UUID1(基于 MAC 地址、时间戳等):
- 我确定永远不会发生碰撞
- 可以找到位置
-
如果我使用 UUID4(基于随机生成器):
- 有可能发生碰撞(发生碰撞的可能性真的非常非常小,但存在!)
- 我确定无法确定位置(日期和计算机)
你有满足这两个约束的解决方案吗?
【问题讨论】:
-
您可能想查看this answer 链接到一些 Eric Lippert 帖子的链接。您是否真的查看过版本 4 下发生意外碰撞的几率?并将其与其他“极不可能”的情况放在一起?
-
或this answer:“...... GUID 碰撞的几率小于宇宙射线在计算机内存中翻转一点并搞砸任何“准确”给出的答案的几率你想运行的算法”
-
你好,我同意这个理论,但只是为了好玩,我希望找到一个 paranoia 解决方案。
-
简而言之:使用任何去中心化算法总是有可能发生冲突。即使使用 UUID1,您也取决于 MAC 地址的唯一性和时间的正确性(不是给定的)。 UUID4 已经非常好。统计数据和(不)可能性是一件可怕且不直观的事情。你只是比你需要的更偏执。
-
我投票结束这个问题,因为 StackOverflow 的范围仅限于实用、可回答的问题。拒绝接受的最佳实践(以及它们背后的统计数据)使这本质上是一个不切实际的要求。