有没有可能GUID全部用完?

Is there any possibility that GUID will all be used up?

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

有没有可能全部用完?

没有。即使您假设 非常 GUID 在某些区域的使用率很高,并且 非常 很长时间,关于 GUID 的关键点是它们的唯一性。一旦您开始以与实际相关的任何概率重复,人们就会停止使用 GUID,因此不会再用完它们。当然,他们可能会在某些地区使用一些看起来像 GUID 的数字,足够低的使用率仍然可以帮助确保本地唯一性,但这些只是 LUID,运气好的话人们也会这样称呼它们。

向您展示 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 太字节,或者 45 艾字节。

因此,首先您需要担心能否存储那么多 GUID,然后才能考虑 运行从它们中删除。

基本上:你是不可能运行出来的。


碰撞

正因为我多次听到人们担心碰撞,所以我将扩展我的回答以包括对碰撞可能性的分析。

在发生冲突之前您需要的 average 个 UUID 是:

2^(128 / 2) = 2^64

这意味着当您生成 2^64 UUID 时,有 50% 的机会发生冲突。为此,您需要的 UUID 数量为:

18446744073709551616 UUIDs

这相当于每秒生成10亿个UUID,持续85年。在 103 万亿个 UUID 中找到重复 UUID 的概率是十亿分之一。

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

有关详细信息,请参阅 Birthday Problem and Universally Unique Identifier

我只想补充一点,我们很可能不想达到重复 Guid 的 1%。尽管如此,您需要覆盖 2^121 (2658455991569831745807614120560689152) 组合,才能有 0.78125% 的机会重复 Guid。