GUID 可以多短?

问题描述 投票:0回答:6

我知道标准 GUID。它们可以变得更短吗?其背后的理论是什么?

guid
6个回答
26
投票

Greg Dean 的答案是正确的,但为了了解 GUID 是如何生成的以及为什么不应该缩短它,我强烈建议您阅读下面的文章。

旧的新事物:GUID 是全局唯一的,但 GUID 的子字符串不是

客户需要生成一个 8字节唯一值及其初始值 想法是生成一个 GUID 并抛出 下半场继续保持 前八个字节。他们想知道 如果这是个好主意的话。

不,这不是一个好主意。

GUID生成算法依赖 事实上它有全部 16 个字节 用于建立唯一性,并且如果 你扔掉一半,你就输了 独特性。


13
投票

根据您的应用程序,这实际上取决于您的应用程序中的“G”(全局)有多大。

“GUID”,全球唯一ID。典型的现代“通用”GUID 是为任何应用程序设计的,它们的“G”,即“全局”,字面意思就是这样。全球的。全世界。跨越应用、国家、地域、一切。 16 字节的信息量很大。

现在,如果在您的应用程序中,您的“G”不是那么大,如果您没有期望或意图“G”在世界意义上是全局的,而不是简单地在应用程序空间意义上的“全局”,那么您可以轻松地将尺寸缩小到您的应用范围。

您的公司有四个部门,永远不会有更多部门吗? 2 位——0、1、2、3 对于该任务来说是足够大的“GUID”。显然,这是一个人为的应用程序。

我们过去在解决千年问题时就已经了解了“限制比特”的后果。因此,“位很便宜”是一个足够充分的理由,可以不限制 GUID 大小,并宁可犯“目前位太多”的错误。但是,说实话,许多应用程序只是受到限制,许多应用程序很可能会生成大量数据,或者带宽受限于不需要 16 字节 GUID 的地方,并且使用 GUID 会影响性能和资源。

因此,请了解 GUID 的概念以及它如何应用于您的应用程序。然后你可以将其做成任何需要的尺寸。


8
投票

查看 Jeff Atwood 撰写的这篇文章:
编码恐怖:装备我们的 ASCII 装甲

他展示了如何将 GUID 缩短为 20 个可打印字符,同时保持 GUID 的“唯一性”。


5
投票

“据称全球唯一”的 ID 越短,当其中许多或多或少是随机生成时,发生冲突的可能性就越高 - 而且,由于“生日”,这种可能性可能比您想象的要高悖论”...参见 http://betterexplained.com/articles/understanding-the-birthday-paradox/ 。 作为(非常近似但有用)的经验法则,如果(在 N 个可能的 UID 中)您分配

sqrt(N)
左右,那么机会是不可忽略的。 因此,即使对于数十亿个 ID,128 位 ID 也非常安全,不会发生意外冲突;但如果你将其缩短为 32 位,即使只有几万个 ID,也会面临很大的冲突风险。


3
投票

它们正好是 16 个字节。

从技术上讲,缩短它们的效果会根据生成它们的算法而有所不同。 考虑到,您使用的 API(可能)不能保证特定的版本或实现,缩短它们不是一个好主意。 即使这样做了,这也是一个坏主意。 如果您需要少于 16 字节的熵,您可能不应该使用 GUID。

欲了解更多信息: http://en.wikipedia.org/wiki/Globally_Unique_Identifier


0
投票

简单地说,GUID 保证是唯一的,因为它们就像坐标一样。

传统上*,一半是特定于机器的(通过使用 MAC 地址),一半来自时间。

因为 MAC 在机器之间是唯一的,并且每台机器一次可以执行一条指令(传统上记住!)GUID 肯定是唯一的。

但这意味着,如果您放弃 GUID 的任何部分,您就会失去唯一性的保证。 Martelli 先生很好地解释了为什么这比您想象的更严重。

*我是传统上说的,但我从未读过一篇表明重大变化的文章。我不认为现在使用实际的 MAC(我猜是出于安全原因),但我认为它们仍然是 MAC 派生的或至少是特定于机器的。

© www.soinside.com 2019 - 2024. All rights reserved.