考虑到每个GUID都由16个字节表示。因此最多有2^128种可能性= 3.4028237e+38个可能的GUID。
是否有可能将所有GUID都用完?
考虑到每个GUID都由16个字节表示。因此最多有2^128种可能性= 3.4028237e+38个可能的GUID。
是否有可能将所有GUID都用完?
没有足够大的存储单位来量化这个数字——最大的标准化数据单位是“尧字节”,即使我们使用它,我们仍然得到一个16位数值,或者5.445万亿尧字节(5.445 x 10^15)。
所以,首先你需要担心能否存储那么多的GUID,然后才能考虑是否会用完它们。
基本上:你几乎不可能用完。
因为我听到很多人担心碰撞问题,所以我将扩展我的答案,包括对碰撞可能性的分析。
这里需要注意一个警告-(大部分)符合RCC-spec规范的随机生成UUID实际上只有122位的随机性,而不是128位,因为有6位被保留用于表示正在生成的UUID的版本和变体。这减少了可生成的UUID数量,并增加了碰撞的潜在可能性,但实际上并没有太大关系,因为仍然有非常多的可能的UUID(但它确实稍微改变了碰撞计算)。
根据生日悖论(应用于哈希函数),预期需要生成的哈希次数,直到出现碰撞,可以粗略地近似为2^(n/2)
,其中n
是总的随机位数。2^(122 / 2) = 2^61
2,305,843,009,213,693,952 UUIDs
1,000,000,000 UUIDs/second
60 seconds/minute
60 minutes/hour
24 hours/day
365.25 days/year
* 73 years
------------------------------------------
2,303,704,800,000,000,000 Total UUIDs
不行。即使你假设在某个领域中GUID的使用率极高,并且时间尺度极长,GUID的关键点是其唯一性。一旦你开始出现任何实际相关概率的重复,人们就会停止使用GUIDs,因此不会再使用更多。当然,在某些区域中他们可能会使用一些看起来像GUID的数字,其中足够低的使用率仍然可以有助于确保本地唯一性,但那些只是LUIDs,如果运气好的话,人们也会这样称呼它们。