假设每个GUID由16个字节表示。所以充其量只有2 ^ 128种可能性= 3.4028237e + 38种可能的GUID。
它是否有可能全部用完?
答案 0 :(得分:4)
没有。即使你假设在某些领域极度使用GUID,以及极长时间尺度,关于GUID的关键点是它们的唯一性。一旦你开始重复任何具有实际意义的概率,人们就会停止使用GUID,因此不再使用它们。当然,他们可能会在某些区域使用一些看起来像GUID的数字,其中使用率足够低仍然可以帮助确保本地唯一性,但那些只是LUID,运气好的话人们也会这样称呼它们。
答案 1 :(得分:3)
向您展示2 ^ 128 GUID的大小:
1 GUID = 16 bytes
。
因此2^128
GUIDS需要存储2^4 * 2^128 bytes
。
2^4 * 2^128 = 2^132 bytes
使用Python,我计算出这将需要:
4,951,760,157,141,521,099,596,496,896
太字节。
首先,您需要担心能够存储那么多GUID,然后才能考虑用完它们。
基本上:你不可能用完。
仅仅因为我听到人们多次担心碰撞,我会扩展我的答案,包括对碰撞可能性的分析。
在发生碰撞之前,您需要的average
个UUID是:
2^128 / 2 = 2^127
这意味着有50%
次机会,当您生成2^127
GUID时,您将发生碰撞。您需要的GUID数量为:
170141183460469231731687303715884105728 GUIDs
如果我错了,请有人纠正我,但是:这意味着产生碰撞的可能性非常小,甚至不值得检查刚刚生成的UUID是否已存在于您的数据库中。
注意:这都是假设生成的UUID具有良好的随机性算法和良好的熵源。