首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >假设GUID永远是唯一的是安全的吗?

假设GUID永远是唯一的是安全的吗?
EN

Stack Overflow用户
提问于 2010-06-04 20:30:26
回答 6查看 54.5K关注 0票数 135

我知道冲突的可能性很小,但是如果我生成了一批1000个GUID(例如),那么假设每个GUID都是唯一的保存测试是安全的吗?

奖金问题

检验GUID唯一性的最佳方法?也许是布卢姆过滤器?

EN

回答 6

Stack Overflow用户

发布于 2011-09-30 08:52:24

简短的回答:为了实用目的,是的。

然而,你必须考虑生日悖论!

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

一些比较的数字可以在维基百科上找到。这样你就可以安全地为每一个已经生活过的人,在可观测的宇宙中的每一个星系,海洋中的每一条鱼,以及地球上的每一只蚂蚁指定一个UUID。然而,碰撞几乎是肯定的,如果你产生一个UUID为每个晶体管人类在一年,地球上的每一昆虫,地球上的每一粒沙子,每一颗恒星在可观测的宇宙,或任何更大的。

如果每秒生成10亿UUID,大概要36年将获得10%的碰撞概率。

最终,在人类历史进程中生成的一组UUID之间可能会发生冲突。尽管如此,被碰撞的UUID用于同样目的的可能性仍然非常小,因此在实践中没有问题。

票数 45
EN

Stack Overflow用户

发布于 2010-06-04 21:17:54

关于碰撞可能性的分析可以在维基百科上找到:复本

正如链接中提到的,这将受到随机数生成器属性的影响。

GUID生成器代码中也存在bug的可能性;虽然几率很低,但它们可能高于基于数学的碰撞概率。

Bloom过滤器可能是适当的;它可以快速地告诉您GUID是否是唯一的,但是有可能出现错误的碰撞指示。如果一次测试一个批处理,另一种方法是对批处理进行排序,并比较每个连续的元素。

票数 8
EN

Stack Overflow用户

发布于 2010-06-04 20:33:43

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

如果GUID生成器确实是随机的,则1000 GUID中冲突的可能性非常小。

当然,这假设了一个好的GUID生成器。所以问题是你有多信任你用来生成GUID的工具,它有它自己的测试吗?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2977593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档