GUID是否有可能全部用光?

Chr*_*ung 5 sql math uuid guid

假定每个GUID用16个字节表示。因此,充其量只有2 ^ 128个可能性= 3.4028237e + 38个可能的GUID。

是否有可能全部用光?

MvG*_*MvG 5

号即使假设在一些地区的GUID的高使用率,以及长的时间尺度上,有关的GUID关键的一点是他们的独特之处。一旦您开始以任何具有实际相关性的概率获得重复,人们就会停止使用 GUID,因此不会再使用它们。当然,他们可能会在某些区域使用一些看起来像 GUID 的数字,足够低的使用率仍然可以帮助确保本地唯一性,但那些只是 LUID,如果幸运的话,人们也会这样称呼它们。


Joh*_*ohn 5

要显示2 ^ 128 GUID有多少:

1 GUID = 16 bytes

因此,2^128将需要2^4 * 2^128 bytes存储GUIDS 。

2^4 * 2^128 = 2^132 bytes

使用Python,我计算出这将花费:
4,951,760,157,141,521,099,596,496,896TB。

因此,首先,您需要担心能够存储那么多GUID,然后再考虑将其耗尽。

基本上:您不可能用完。


碰撞

正因为我已经多次听到人们担心碰撞的问题,所以我将扩大答案以包括对碰撞可能性的分析。

average发生冲突之前,您需要的UUID数量为:

2^128 / 2 = 2^127
Run Code Online (Sandbox Code Playgroud)

这意味着,在50%生成2^127GUID时,很可能会发生冲突。为此所需的GUID数量为:

170141183460469231731687303715884105728 GUIDs
Run Code Online (Sandbox Code Playgroud)

如果我错了,请有人纠正我,但是:这意味着产生冲突的可能性非常小,甚至不值得检查数据库中是否已经存在刚刚生成的UUID。

注意:所有这些都假设UUID是使用良好的随机性算法和良好的熵源生成的。