GUID 100%是唯一的吗?
它会在多个线程中保持唯一吗?
GUID 100%是唯一的吗?
它会在多个线程中保持唯一吗?
当前回答
足够的guid来为可见宇宙中每一颗恒星周围的每一颗假设行星上的每一颗假设沙粒分配一个guid。
以至于如果世界上的每台计算机每秒生成1000个guid,持续200年,就可能发生碰撞。
考虑到当前guid的本地使用数量(例如,每个数据库每个表一个序列),这对于我们这些有限的生物来说是非常不可能成为问题的(对于手机来说,寿命通常不到十年,如果不是一两年的话)。
... 我们现在可以结束这个话题了吗?
其他回答
顺便说一句,我在Windows XP中使用了Volume guid。这是一个非常模糊的分区布局,有3个磁盘和14个卷。
\\?\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部分时,我发现大约有125,000个与音量GUID相关的点击。
结论:当涉及到Volume guid时,它们并不像其他guid那样独特。
GUID 100%是唯一的吗?
不能保证,因为有几种方法可以生成一个。然而,您可以尝试计算创建两个完全相同的GUID的几率,您就会明白:一个GUID有128位,因此,有2128个不同的GUID——比已知宇宙中的恒星要多得多。阅读维基百科的文章了解更多细节。
MSDN:
新Guid的值全为零或等于任何其他Guid的概率非常低。
似乎没有人提到它发生概率的实际数学计算。
首先,让我们假设我们可以使用整个128位空间(Guid v4只使用122位)。
我们知道在n次选择中没有得到重复的一般概率是:
(1-1/2128)(1-2/2128)……(1 - (n - 1) / 2128)
因为2128比n大得多,我们可以将其近似为:
(1-1/2128) n (n - 1) / 2
因为我们可以假设n比0大很多很多,我们可以把它近似为:
(1-1/2128) n ^ 2/2
现在我们可以将其等同于“可接受的”概率,假设是1%:
(1-1/2128)n²/2 = 0.01
我们解出n,得到
N =√(2* log 0.01 / log (1-1/2128))
哪个Wolfram Alpha得到5.598318 × 1019
为了更好地理解这个数字,让我们以10000台机器为例,每台机器都有一个4核CPU,工作4Ghz,花费10000个周期来生成一个Guid,其他什么都不做。然后需要大约111年才能产生一个副本。
简单的答案是肯定的。
Raymond Chen写了一篇关于guid和为什么guid的子字符串不能保证唯一的文章。这篇文章深入探讨了guid的生成方式以及它们用来确保唯一性的数据,这应该会花一些篇幅来解释它们为什么会这样:-)