我已经看过GUID Collisons的 讨论,但只是想知道如果两个客户端同时访问生成 GUID 的同一个网页(可能低至微秒)是否会发生 GUID 冲突?
5 回答
这在理论上是可能的,但极不可能。
不,如果发生这种情况,赶紧出去买彩票!
在单个服务器上,不,这是不可能的。第 4 版 Guid 由(除其他外)伪随机 54 位值组成,据我了解,它们在重复之前循环遍历所有值。
如果在多个服务器上创建,则可能会发生 guid 冲突,尽管这种可能性极小。
请参阅RFC 4122,特别是第 4.1.5 节。我相信现代 Windows 使用 v4 UUID。
全球唯一标识符或 GUID(发音为 /ˈguːɪd/ 或 /ˈgwɪd/)是软件应用程序中使用的一种特殊类型的标识符,用于提供在任何上下文中唯一的参考编号(因此,“全球”),例如,在为软件应用程序中的一种访问点定义内部引用,或在数据库中创建唯一密钥时。虽然不能保证每个生成的 GUID 都是唯一的,但唯一键的总数(2128 或 3.4×1038)是如此之大,以至于两次生成相同数字的概率非常小。例如,考虑可观测宇宙,它包含大约 5×1022 颗恒星;然后,每颗星都可以有 6.8×1015 个普遍唯一的 GUID。
如果您生成大量的 GUID,那么由于生日悖论,碰撞的可能性会变得非常高。理论上 GUID 冲突应该是极不可能的(天真的直觉),但实际上它时常发生。
当然,以编程方式处理这些冲突是浪费时间,但您仍然应该以这样的方式编写代码,如果它发生,那么您的代码应该大声失败,而不是悄悄地和未被检测到。