有没有可能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。
假设每个 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。