GUID是否在100%的时间内是唯一的?
GUID是否在100%的时间内是唯一的?
它会在多个线程上保持唯一性吗?
解决方案
回答
While each generated GUID is not guaranteed to be unique, the total number of unique keys (2^128 or 3.4×10^38) is so large that the probability of the same number being generated twice is very small. For example, consider the observable universe, which contains about 5×10^22 stars; every star could then have 6.8×10^15 universally unique GUIDs.
来自维基百科。
这些是有关如何制作GUID(用于.NET)以及如何在正确的情况下获得相同GUID的不错的文章。
http://ericlippert.com/2012/04/24/guid-guide-part-one/
http://ericlippert.com/2012/04/30/guid-guide-part-two/
http://ericlippert.com/2012/05/07/guid-guide-part-three/
回答
是的,GUID应该始终是唯一的。它基于硬件和时间,再加上一些额外的比特以确保其唯一性。我相信从理论上讲,最终可以得到两个相同的对象,但是在现实世界中是极不可能的。
这是雷蒙德·陈(Raymond Chen)在Guids上发表的一篇精彩文章:
http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx
回答
简单的答案是肯定的。
Raymond Chen在GUID上写了一篇很棒的文章,以及为什么不能保证GUID的子字符串是唯一的。本文深入探讨了GUID的生成方式以及它们用于确保唯一性的数据,这在解释它们为什么如此时应做一些工作:-)
回答
MSDN:
There is a very low probability that the value of the new Guid is all zeroes or equal to any other Guid.
回答
Is a GUID unique 100% of the time?
不能保证,因为有多种生成方法。但是,我们可以尝试计算创建两个相同的GUID的机会,然后我们就会明白:一个GUID具有128位,因此,有2128个不同的GUID远远超过已知宇宙中的恒星。阅读Wikipedia文章以了解更多详细信息。
回答
指导在统计上是唯一的。生成相同Guid的两个不同客户端的几率非常小(假设Guid生成代码中没有错误)。我们还可能担心由于宇宙射线而导致处理器故障,并决定今天2 + 2 = 5.
分配新的Guid的多个线程将获得唯一的值,但是我们应该确保所调用的函数是线程安全的。这是什么环境?
回答
从理论上讲,不,它们不是唯一的。可能一遍又一遍地生成相同的GUID。但是,发生这种情况的机会非常低,我们可以认为它们是独一无二的。
我之前读过这篇文章,机会很少,我们真的应该强调其他事情-例如服务器自燃或者代码中的其他错误。也就是说,假设它是唯一的,并且没有内置任何代码来"捕获"重复项-将时间花在更可能发生的事情上(即其他任何事情)。
我试图向我的博客读者(非技术家庭成员)描述GUID的有用性。从那里(通过Wikipedia),生成重复GUID的几率:
- 1分2 ^ 128
- 340十亿分之一(不要担心,十亿不在测验中)
- 1的3.4 10 ^ 38
- 340,000,000,000,000,000,000,000,000,000,000,000,000中的1
回答
如果系统时钟设置正确并且没有缠绕,并且NIC有自己的MAC(即我们尚未设置自定义MAC),并且NIC供应商尚未回收MAC(它们不应该这样做)但已知已发生),并且如果系统的GUID生成功能已正确实现,则系统将永远不会生成重复的GUID。
如果地球上每个生成GUID的人都遵循这些规则,那么GUID将在全球范围内是唯一的。
实际上,违反规则的人数很少,其GUID不太可能"逃脱"。冲突在统计上是不可能的。
回答
附带说明一下,我正在使用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那样独特。
回答
这不应该发生。但是,当.NET负担很重时,就有可能获得重复的引导。我有两个使用两个不同sql服务器的不同Web服务器。我去合并数据,发现我有1500万盾和7个副本。