假设一个GUID永远是唯一的是否安全?

我知道发生冲突的可能性很小,但如果我生成了一批1000个GUID(例如),是否可以安全地假设它们都是独一无二的,以便保存每一个的测试结果?

奖金问题

测试GUID唯一性的最佳方法是什么? 布隆过滤器可能?


是的你可以。 由于GUID是128位长,所以出现冲突的可能性很小 - 但“分”这个词远不够强。 有很多GUID,如果你随机产生数万亿个GUID,你更有可能被陨石击中,甚至有一次碰撞(来自维基百科)。 如果您不是随机产生它们,而是例如使用MAC地址和时间戳算法,那么它们也将是唯一的,因为MAC地址在计算机中是唯一的,并且时间戳在您的计算机上是唯一的电脑。

编辑1:要回答您的奖金问题,测试一组GUID以获得唯一性的最佳方法是假定它们都是唯一的。 为什么? 因为,鉴于您生成的GUID数量,GUID碰撞的几率比计算机内存中宇宙射线翻转一点点的几率要小,并且由您关心的任何“准确”算法给出答案跑步。 (请参阅数学的StackOverflow答案。)

那里有大量的GUID。 引用道格拉斯亚当斯的银河系漫游指南:

它说,“太空”很大,真的很大,你不会相信它有多么大的惊人的大小,我的意思是你可能认为它离化学家还有很长的路要走,但这只是空间的花生,听...“

而且由于宇宙中有大约7×1022颗恒星,而且只有2128颗GUID,所以每颗恒星大约有4.86×1015-几乎是5万亿个GUID。 如果每一颗恒星都拥有一个像我们这样蓬勃发展的世界,那么在每一颗恒星周围,每个曾经居住过的人类或外星人都将有权获得超过四万五千个GUID。 对于宇宙中每颗恒星的历史上的每一个人。 GUID空间与整个宇宙的大小处于同一水平。 你不必担心。

编辑2:反思这个:哇,我没有意识到这是什么意思,这个GUID空间是难以理解的巨大,我有点敬畏它。)


简短的回答:出于实际的目的,是的。

但是,你必须考虑生日悖论!

我计算了几个有代表性的碰撞概率。 使用维基百科文章中指定的122位UUID,如果至少生成2.71492e18 UUID,则碰撞概率为1/2。 使用10 ^ 19个UUID,概率为0.999918。 有10 ^ 17个UUID,0.000939953。

一些用于比较的数字可以在Wikipedia上找到。 因此,您可以安全地为每个已居住的人,可观察宇宙中的每个星系,海洋中的每条鱼以及地球上的每只蚂蚁分配一个UUID。 然而,如果你为每个晶体管产生一年的UUID,地球上的每个昆虫,地球上的每颗沙子,可观测宇宙中的每颗恒星或任何更大的物体,碰撞几乎可以肯定。

如果每秒生成10亿个UUID,则碰撞概率将达到10%将需要大约36年的时间。

最终,在人类历史过程中产生的一组UUID可能会相互冲突。 尽管如此,UUID碰撞的概率将被用于相同的目的,这个概率很小,所以在实践中没有问题。


一般来说,是的,这是安全的。

如果您的GUID生成器是真正随机的,1000个GUID内的冲突的可能性非常小。

当然,这假设一个好的GUID生成器。 所以问题是关于您对用于生成GUID的工具的信任程度以及是否有自己的测试?

链接地址: http://www.djcxy.com/p/91461.html

上一篇: Is it safe to assume a GUID will always be unique?

下一篇: Invoke REST API method to update the local admin password