是否有可能GUID全部用完?

时间:2015-04-16 17:41:53

标签: sql math guid uuid

假设每个GUID由16个字节表示。所以充其量只有2 ^ 128种可能性= 3.4028237e + 38种可能的GUID。

它是否有可能全部用完?

2 个答案:

答案 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具有良好的随机性算法和良好的熵源。