我知道标准GUID。它们可以变短吗?这背后的理论是什么?
Greg Dean的答案是正确的,但为了理解GUID是如何生成的以及为什么不应缩短它,我强烈建议您阅读下面的文章。
The Old New Thing: GUIDs是全局唯一的,但GUID的子字符串不是:
一个客户需要生成一个8字节的唯一值,他们最初的想法是生成一个GUID并丢弃后半部分,只保留前8个字节。他们想知道这是否是一个好主意。
不,这不是一个好主意。
GUID生成算法依赖于它具有所有16个字节来确立唯一性,如果你扔掉其中一半,就会失去唯一性。
根据你的应用程序,这实际上取决于你的应用程序中有多大的“G”(全局)。
“GUID”代表全局唯一标识符。典型的现代“通用”GUID适用于任何应用程序,它们的“G”,也就是“全局”,确实是全球性的。跨应用程序、国家、地理位置等所有范围。16个字节是很多的信息。
如果在你的应用程序中,“G”并不是那么重要,如果你没有期望或意图让“G”在全球范围内成为全局意义上的东西,而只是在应用空间意义上的“全局”,那么你可以将大小缩小到你的应用程序范围内。
你的公司有4个部门,永远不会再增加了?2位 - 0、1、2、3是足够大的一个“GUID”来完成这项任务。显然,这是一个虚构的应用程序。
我们过去已经通过Y2K问题了解到“限制比特”的后果。因此,“比特很便宜”是不限制GUID大小,并且在现在端错误方面犯错误的一个合理理由。但事实是,许多应用程序仅仅是受限的,可能会产生大量的数据,或者带宽受限,使用16字节GUID对性能和资源产生影响是没有必要的。
因此,了解GUID的概念以及其如何适用于你的应用程序是很重要的。然后你就可以使它任何大小。
sqrt(N)
左右,那么几率是不可忽略的。因此,即使对于数十亿个ID,128位的ID也相对安全;但是,如果将其缩短到32位,即使只有几万个ID,也会有相当大的碰撞风险。"它们恰好为16个字节。
从技术上讲,缩短GUID的效果将根据用于生成GUID的算法而异。考虑到您使用的API(可能)不保证特定版本或实现,缩短GUID是一个坏主意。即使它确实保证了,这也是一个坏主意。如果您需要少于16个字节的熵,则应该不使用GUID。
欲了解更多信息,请参阅: http://en.wikipedia.org/wiki/Globally_Unique_Identifier