GUID是否在100%的时间内是唯一的?
它会在多个线程上保持唯一性吗?
#1楼
埃里克·利珀特(Eric Lippert)写了一系列非常有趣的有关GUID的文章。
全世界大约有2 30台个人计算机(当然,许多手持设备或非PC计算设备具有或多或少相同的计算能力,但请忽略它们)。 假设我们将世界上所有这些PC都用于生成GUID。 如果每个人每秒可以生成2 20个 GUID,那么在大约2 72秒( 一百五十万亿年)之后 ,您极有可能与您的特定GUID发生碰撞。 仅三十万亿年后,碰撞的几率就相当可观。
#2楼
我遇到了重复的GUID。
我使用的是Neat Receipts台式扫描仪,它带有专有的数据库软件。 该软件具有“同步到云”功能,并且在同步时一直出现错误。 日志上的秃鹰露出了那条令人敬畏的台词:
“错误”:[{“代码”:1,“消息”:“ creator_guid:已被使用”,“ guid”:“ C83E5734-D77A-4B09-B8C1-9623CAC7B167”}]}}
我有点难以置信,但是可以肯定的是,当我找到了进入本地neatworks数据库的方法并删除了包含该GUID的记录时,错误停止发生。
因此,以传闻证据回答您的问题,不是。 可以重复。 但是,发生这种情况的原因很可能不是偶然的,而是由于没有遵循某种标准惯例。 (我不是那么幸运)但是,我不能肯定地说。 这不是我的软件。
他们的客户支持非常礼貌和乐于助人,但是他们一定从来没有遇到过这个问题,因为与他们通电话3个多小时后,他们找不到解决方案。 (FWIW,Neat给我留下了很深刻的印象,尽管如此令人沮丧,但这种故障并没有改变我对他们产品的看法。)
#3楼
GUID算法通常是根据v4 GUID规范实现的,该规范本质上是伪随机字符串。 可悲的是,它们属于Wikipedia的“可能非唯一”类别(我不知道为什么这么多人忽略了这一点):“ ...其他GUID版本具有不同的唯一性属性和概率,从保证的唯一性到不等可能的非唯一性。”
V8的JavaScript Math.random()
的伪随机属性在唯一性方面很糟糕,冲突通常仅在数千次迭代之后发生,但V8并不是唯一的罪魁祸首。 我已经看到使用v4 GUID的PHP和Ruby实现的真实世界GUID冲突。
由于在多个客户端和服务器群集之间扩展ID生成变得越来越普遍,因此,熵受到很大的打击-使用同一随机种子生成ID升级的机会(时间通常用作随机种子)在伪随机数生成器中),GUID冲突从“可能不唯一”升级为“很可能造成很多麻烦”。
为了解决这个问题,我着手创建一个ID算法,该算法可以安全扩展,并更好地防止冲突。 它通过使用时间戳,内存中的客户端计数器,客户端指纹和随机字符来实现。 因素的组合会产生额外的复杂性,即使您在多个主机上进行扩展,也特别能抵御冲突:
#4楼
附带说明一下,我正在使用Windows XP中的Volume GUID。 这是一个非常模糊的分区布局,具有三个磁盘和十四个卷。
\\?\Volume{23005604-eb1b-11de-85ba-806d6172696f}\ (F:)
\\?\Volume{23005605-eb1b-11de-85ba-806d6172696f}\ (G:)
\\?\Volume{23005606-eb1b-11de-85ba-806d6172696f}\ (H:)
\\?\Volume{23005607-eb1b-11de-85ba-806d6172696f}\ (J:)
\\?\Volume{23005608-eb1b-11de-85ba-806d6172696f}\ (D:)
\\?\Volume{23005609-eb1b-11de-85ba-806d6172696f}\ (P:)
\\?\Volume{2300560b-eb1b-11de-85ba-806d6172696f}\ (K:)
\\?\Volume{2300560c-eb1b-11de-85ba-806d6172696f}\ (L:)
\\?\Volume{2300560d-eb1b-11de-85ba-806d6172696f}\ (M:)
\\?\Volume{2300560e-eb1b-11de-85ba-806d6172696f}\ (N:)
\\?\Volume{2300560f-eb1b-11de-85ba-806d6172696f}\ (O:)
\\?\Volume{23005610-eb1b-11de-85ba-806d6172696f}\ (E:)
\\?\Volume{23005611-eb1b-11de-85ba-806d6172696f}\ (R:)
| | | | |
| | | | +-- 6f = o
| | | +---- 69 = i
| | +------ 72 = r
| +-------- 61 = a
+---------- 6d = m
不是GUID非常相似,而是所有GUID中都包含字符串“ mario”的事实。 这是巧合还是背后有解释?
现在,当在GUID中搜索第4部分时,我发现批量GUID的点击量约为125.000。
结论:关于卷GUID,它们不像其他GUID那样独特。
#5楼
它不应该发生。 但是,当.NET负担很重时,就有可能获得重复的引导。 我有两个使用两个不同sql服务器的不同Web服务器。 我去合并数据,发现我有1500万盾和7个副本。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3159571