2

GUID 是 MSFT 生成的 128 位唯一标识符。

我怀疑 GUID 是否是全球唯一的。我的意思是我生成的 GUID,在任何系统中使用任何应用程序的整个世界中没有其他人可以生成?真的吗?

我很惊讶微软将如何知道或跟踪这种独特性。

并且生成的唯一 GUID 也可以链接到任何实体?应用、变量、系统、?

GUOD 可以链接到哪些实体?任何人都可以澄清 GUID 的概念吗?它是否独立于编程语言。

4

5 回答 5

5

您可能会对这两篇文章感兴趣,并且应该可以帮助您理解这些 ID 背后的概念。


UUID 的目的是使分布式系统能够唯一地识别信息,而无需大量的中央协调。[...] 独特一词应理解为“实际上独特”而不是“保证独特”。[...] 两个不同的项目可以共享相同的标识符。

需要选择标识符大小和生成过程,以使这在实践中足够不可能。

任何人都可以创建一个 UUID 并使用它来识别某些东西,并且有理由相信任何人都不会无意中创建相同的标识符来识别其他东西。因此,标有 UUID 的信息可以在以后组合到单个数据库中,而无需解决标识符 (ID) 冲突。

非常简单:它基本上是一种创建标识符(具有特定格式)的方法,该标识符具有很高的唯一性。

于 2012-04-26T08:56:14.807 回答
1

它基本上是一种各种信息位的哈希值,它们的总组合极有可能是唯一的或极其罕见的。与任何哈希一样,冲突是可能的,它们实际发生的机会非常低,可以忽略不计。

散列函数利用保证或预期是唯一的各种信息(例如,它可以使用 MAC 地址),或者另一种选择是随机生成数字(使用 128 位,随机生成完全相同的数字的机会是......好吧,你可以计算,相当低:-))

于 2012-04-26T08:55:43.917 回答
0

您可能想阅读对非常相似的问题给出的答案GUID 是否 100% 的时间都是唯一的?其中包括来自 Wikipedia 的以下引用:

虽然不能保证每个生成的 GUID 都是唯一的,但唯一键的总数(2^128 或 3.4×10^38)是如此之大,以至于生成两次相同数字的概率非常小。例如,考虑可观测宇宙,它包含大约 5×10^22 颗恒星;然后,每颗星都可以有 6.8×10^15 个普遍唯一的 GUID。

请参阅lx给出的答案中的链接

然后,按照 Raymond Chen 的博客文章GUID 是全球唯一的,但 GUID 的子字符串不是更多详细信息。

在另一个 SO 问题之后进行了有趣的讨论简单证明 GUID 不是唯一的,也值得检查。

于 2012-04-26T08:59:31.160 回答
0

可以生成全局唯一标识符。例如,MAC 地址(唯一)+ 当前时间。当然,GUID 生成器使用更复杂的算法。

于 2012-04-26T09:00:05.610 回答
0

我可以想到一个简单的反例,它证明 GUID 即使在单个系统上也不是唯一的,更不用说全局了:

for i = 0 : 2^128
   generateGUID();

确实生成2^128GUID 是不可行的,但这表明唯一性在数学上是不可能的。

不过,您绝对不太可能遇到两个相同的 GUID。

于 2012-04-26T09:30:30.780 回答