我想我想知道在同一台机器与不同机器上生成时发生冲突的概率,如果 c# 的Guid.NewGuid()
、SQL服务器newid()
, newsequentialid()
功能或不同应用程序的任何其他功能
这是一个极其广泛的问题。 “不同应用程序中的任何其他功能”不是我们可以推理的。
相反,让我们提出一个可以回答的问题,然后回答它。
生成 GUID 的不同机制有哪些?
第一版 GUID 结合了当前计算机的 MAC 地址、当前时间以及一些特定于实现的来源。因此,它们在时间和空间上都是独一无二的。
第三版和第五版 GUID 使用唯一字符串的加密强度哈希。它们的冲突概率基于哈希冲突的概率。
第四版 GUID 使用伪随机数生成器。它们的碰撞概率基于 PRNG 生成碰撞的概率。
假设计算机具有唯一的 MAC 地址,两台不同计算机上版本 1 GUID 冲突的概率是多少?
Zero.
当在同一台物理机上运行两个虚拟机并在每个虚拟机上生成 GUID 时,版本一 GUID 冲突的概率是多少?
高的;如果 GUID 是在同一时间片中生成的,那么它们发生冲突的可能性就很高。
如果这样做时会感到疼痛,请不要这样做。
GUID 算法的其余部分不依赖于机器的细节。
假定源字符串是唯一的,版本 3 或版本 5 GUID 与另一个版本发生冲突的概率是多少?
该概率与版本 4 GUID 冲突的概率大致相同,因此让我们考虑一下。
版本 4 GUID 冲突的概率是多少?
The probability that a given v4 GUID will collide with any v4 GUID in a set of n unique v4 GUIDs is n divided by 2122.
The probability that given a set of n v4 GUIDs will contain at least one collision is harder to express but it is extremely small as long as n is significantly smaller than 261.