为什么我们需要GUID的规范格式?

阿斯特夫

一天的辛苦工作中,我注意到我用通常的.NET方法生成的GUID在第三个代码块的开头Guid.NewGuid()具有相同的数字4

efeafa5f-fe21-4ab4-ba82-b9eefd5fa225
480b64d0-6762-4afe-8496-ac7cf3292898
397579c2-a4f4-4611-9fda-16e9c1e52d6a
...

每秒钟大约有十个出现在屏幕上。在第五个GUID之后,我一直关注着这种模式。最后,最后一个里面有相同的四位,我决定我是一个幸运的人。我回到家,觉得整个世界都对像我这样的杰出人士开放。下周,我找到了一份新作品,打扫了房间,打了个电话给父母。

但是今天我又面对了同样的情况。一千次。而且我再也感觉不到选择的那个。

我已经用Google搜索了,现在我知道UUID和规范格式,其中4个保留位用于version和2个用于variant

这是一个可尝试的代码段:

static void Main(string[] args)
{
    while (true)
    {
        var g = Guid.NewGuid();
        Console.WriteLine(BitConverter.ToString(g.ToByteArray()));
        Console.WriteLine(g.ToString());
        Console.ReadLine();
    }
}

但是,还有一件事我不了解(除了如何继续生活)。为什么我们需要这些保留位?我看到了它的危害-暴露内部实现细节,更多冲突(仍然没有什么可担心的,不过有一天……),更多自杀-但我看不出任何好处。你能帮我找到任何东西吗?

内部GUID生成算法

戴夫

这样一来,如果您更新算法,则可以更改该数字。否则,出于不同的原因,两种不同的算法可能会产生完全相同的UUID,从而导致冲突。它是一个版本标识符。

例如,考虑人为简化的UUID格式:

00000000-00000000
  time  -   ip

现在假设我们出于某种原因将该格式更改为:

00000000-00000000
   ip   -  time

当具有IP 12.34.56.78的计算机在时间01234567处使用第一种方法生成UUID,而后来具有IP 01.23.45.67的第二台计算机使用更新的方法在时间12345678处生成UUID时,可能会产生冲突。但是,如果我们为版本标识符保留一些位,则可能不会导致冲突。

值4特别是指随机生成的UUID(因此,它依赖于给定这么多位的冲突的微小机会),而不是其他可以使用时间,mac地址,pid或其他类型的时空标识符的组合的方法保证唯一性。

有关相关规范,请参见此处:https : //tools.ietf.org/html/rfc4122#section-4.1.3

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们需要GUID的规范格式?

来自分类Dev

为什么我们需要机器学习中的标准化和规范化?

来自分类Dev

我们为什么需要容器?

来自分类Dev

为什么我们需要IO?

来自分类Dev

XML的Rails请求为什么我们需要指定格式

来自分类Dev

什么是BIOS,为什么我们需要它?

来自分类常见问题

为什么我们需要使用flatMap?

来自分类Dev

为什么我们需要Clojure中的'in(require'[...]])?

来自分类Dev

mongodb为什么我们需要getSisterDB

来自分类Dev

为什么我们需要Avro模式演变

来自分类Dev

为什么我们需要虚拟内存?

来自分类Dev

为什么我们需要MapReduce中的“地图”部分?

来自分类Dev

为什么我们需要在Linux上挂载?

来自分类Dev

为什么我们需要gevent.queue?

来自分类Dev

为什么我们需要创建CFC的实例?

来自分类Dev

为什么我们需要把*用作指针

来自分类Dev

为什么我们需要* .lib文件?

来自分类Dev

为什么我们需要分别编译和链接?

来自分类Dev

为什么我们需要隐式应用

来自分类Dev

为什么我们在MongoDB中需要created_at

来自分类Dev

为什么我们需要adsense来注册admob

来自分类Dev

为什么我们需要数据仓库?

来自分类Dev

为什么我们需要request.getSession(true)?

来自分类Dev

Firebase:为什么我们需要bindTo方法?

来自分类Dev

为什么我们需要明确的关系?

来自分类Dev

为什么我们通常需要flatMap?

来自分类Dev

为什么我们需要使用AsEnumerable()方法?

来自分类Dev

为什么我们需要Fuseki服务器?

来自分类Dev

为什么我们完全需要表之间的“关系”?