我知道标准的GUID。他们可以缩短吗?它背后的理论是什么?
答案 0 :(得分:24)
Greg Dean的回答是正确的但是为了理解如何生成GUID以及为什么不应该缩短它,我强烈建议你阅读下面的文章。
The Old New Thing : GUIDs are globally unique, but substrings of GUIDs aren't:
客户需要生成 8字节的唯一值,以及它们的初始值 想法是生成一个GUID并抛出 下半场,保持 前八个字节。他们想知道 如果这是一个好主意。
不,这不是一个好主意。
GUID生成算法依赖 事实上它有16个字节 用来建立唯一性,如果 你扔掉了一半,你输了 独特性。
答案 1 :(得分:12)
根据您的应用程序,它实际上取决于您的“G”(全局)在您的应用程序中的大小。
“GUID”,全球唯一ID。典型的现代“通用”GUID是为任何应用程序设计的,而它们的“G”,它们的“全局”,就是字面意思。全球。全世界。跨应用程序,国家,地理,一切。 16个字节是很多信息。
现在,如果在你的应用程序中,你的“G”不是那么大,如果你没有期望,或者“G”的意图是世界意义上的全球,而不是简单地在应用空间意义上的“全球” ,然后您可以轻松地将尺寸缩小到您的应用范围。
贵公司有四个部门,永远不会有更多部门? 2位 - 0,1,2,3对于此任务来说是足够大的“GUID”。显然,这是一个人为的应用程序。
我们在过去了解了当我们解决Y2K问题时“限制比特”的后果。所以,“比特很便宜”是一个有效的理由,不能限制你的GUID大小,并且在“现在太多比特”方面犯了错误。但是,事实上,许多应用程序只是受限制,许多应用程序可能会生成大量数据,或者带宽受限于不需要16字节GUID的地方,并且使用一个应用程序会影响性能和资源。
因此,了解GUID的概念,以及它如何应用于您的应用程序。然后你可以任意大小。
答案 2 :(得分:6)
查看Jeff Atwood撰写的这篇文章:
Coding Horror: Equipping our ASCII Armor
在那里他展示了如何将GUID缩短为20个可打印字符,保持GUID的“唯一性”。
答案 3 :(得分:5)
较短的“据称全球唯一”ID,当其中许多或多或少随机生成时发生碰撞的机会越高 - 并且,这个机会可能比你想象的要高,因为“生日悖论”......见http://betterexplained.com/articles/understanding-the-birthday-paradox/。作为(非常近似但有用)的经验法则,如果(在N个可能的UID中)指定sqrt(N)
左右,则机会是不可忽略的。因此,128位ID对于意外碰撞是非常安全的,即使对于数十亿的ID也是如此;但如果你把它缩短到比如32位,即使只有几万个ID,你也会有很大的冲突风险。
答案 4 :(得分:3)
它们正好是16个字节。
从技术上讲,缩短它们的效果将根据用于生成它们的算法而有所不同。考虑到,您使用的API(可能)不保证特定版本或实现,缩短它们是个坏主意。即使它确实如此,这也是一个坏主意。如果您需要少于16个字节的熵,则应该不使用GUID。
了解更多信息: http://en.wikipedia.org/wiki/Globally_Unique_Identifier
答案 5 :(得分:0)
简单地说,GUID保证是唯一的,因为它们就像坐标一样。
传统上*,一半是特定于机器(通过使用MAC地址),一半来自时间。
因为MAC在机器之间是唯一的,并且每台机器一次可以执行一条指令(传统上记住!),GUID肯定是唯一的。
但是,这意味着,如果您丢弃GUID的任何部分,您将失去唯一性的保证。马尔泰利先生很好地解释了为什么这个问题比你想象的更重要。
* 我传统上说,但我从未读过表明重大变化的文章。我不认为现在使用实际的MAC(出于安全原因,我猜),但我认为它们仍然是MAC衍生的或至少是机器特定的。