生成GUID';s最适合确保GUID真正唯一
本文关键字:GUID 确保 唯一 生成 | 更新日期: 2023-09-27 18:29:24
我已经使用它很长时间了,但我找不到关于它何时不能保证唯一的明确解释。以下是我的意见,请酌情更正。
价值保证在其创建的机器上是唯一的。因此,.net应用程序在计算机上生成的GUID永远不会与SQL Server在同一台计算机上创建的GUID冲突。
在所有其他情况下都无法保证。从理论上讲,如果在不同的计算机上,数据库中的唯一标识符字段有多个创建源(比如不同计算机上的应用程序),那么可能会插入重复的字段。
编辑:对没有正确形成问题表示歉意。我想我想知道,如果使用c#的Guid.NewGuid()
、SQL Server的newid()
、newsequentialid()
函数或不同应用程序的任何其他函数,在同一台机器上与不同机器上生成冲突的概率。"已回答"链接中有一条回复称,他实际上遇到了这样的情况。让你怀疑这种情况发生的频率有多高。
如果我有一个以uniqueidentifier字段为pk的表,我是否应该担心每次插入时通过不同的应用程序或SQL Server的函数创建新值来检查唯一性?
我想我想知道在同一台机器上与不同的机器上生成冲突的概率,如果c#的
Guid.NewGuid()
、SQL Server的newid()
、newsequentialid()
函数或不同应用程序的任何其他函数
这是一个极其宽泛的问题。"不同应用程序中的任何其他函数"不是我们可以推理的。
相反,让我们先问一个可以回答的问题,然后再回答
生成GUID的不同机制是什么?
版本1的GUID将当前机器的MAC地址、当前时间和更多特定于实现的源代码组合在一起。因此,它们在时间和空间上都是独一无二的。
第三版和第五版GUID使用唯一字符串的加密强度哈希。它们的碰撞概率是基于哈希碰撞的概率。
版本4的GUID使用伪随机数生成器。它们的碰撞概率是基于PRNG产生碰撞的概率。
假设机器具有唯一的MAC地址,那么在两台不同的机器上发生版本一GUID冲突的概率是多少?
零。
在同一物理机器上运行两个虚拟机并在每个虚拟机上生成GUID时,版本一GUID冲突的概率是多少?
高;如果GUID是在同一时间片中生成的,那么它们碰撞的概率很高。
如果你这样做很痛苦,就不要这样做。
其余的GUID算法不依赖于机器的详细信息。
给定源字符串是唯一的,一个版本三或五的GUID与另一个发生冲突的概率是多少?
该概率与版本4 GUID冲突的概率大致相同,所以让我们考虑一下。
版本4 GUID冲突的概率是多少?
给定的v4 GUID将与n唯一v4 GUID集合中的任何v4 GUID冲突的概率是n除以2122。
给定一组nv4 GUID将包含至少一个碰撞的概率很难表达,但只要n明显小于261,它就非常小。