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