我知道冲突的可能性很小,但如果我生成了一批1000个GUID(例如),可以安全地假设它们都是唯一的,以节省测试每一个的时间吗?
奖励问题
测试GUID唯一性的最佳方式是什么?也许是布隆过滤器?
我知道冲突的可能性很小,但如果我生成了一批1000个GUID(例如),可以安全地假设它们都是唯一的,以节省测试每一个的时间吗?
奖励问题
测试GUID唯一性的最佳方式是什么?也许是布隆过滤器?
简短回答:实际上是的。
然而,你必须考虑生日悖论!
我计算了一些代表性的碰撞概率。根据维基百科文章中指定的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用于相同的目的的概率非常小,在实践中没有问题。
一般而言,可以假设是安全的。
如果您的GUID生成器真正是随机的,那么在1000个GUID中发生冲突的可能性非常小。
当然,这需要一个好的GUID生成器。所以问题实际上是关于您信任使用的生成GUID工具有多少,并且它是否有自己的测试?