唯一识别码之UUID入门与实战

上一篇从身份证号是如何生成,来认识了中心机构下生成唯一标识的方法,这一篇来看看面对庞大的计算机世界,无中心机构时,那又如何生成唯一标识呢?

 

认识UUID

接下来从一个广为人知的模块UUID讲起,它似乎在每个语言里都有对应的实现,甚至在部分Unix系统直接提供了实现。

UUID是什么?

UUID的全称是Universally Unique Identifier,中文为通用唯一识别码。本身是由一组32位数的16进制数字所构成,故UUID理论上的总数为1632=2128,约等于3.4 x 1038。也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID使用完,也就是说最多100亿年的时间,UUID将必定出现重复,不过100亿年地球是否存在也似乎不确定,暂时不必考虑那么长远。

UUID的表现形式

UUID也是需要像身份证号一样事先制定一些简单的规则进去的,它的标准型式包含32个16进制数字,以连字号分为五段,表现形式为8-4-4-4-12的32个字符,如下所示:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

其中M与N都有特殊含义,M表示UUID版本,目前只有五个版本,即只会出现1,2,3,4,5,数字 N的一至三个最高有效位表示 UUID 变体,目前只会出现8,9,a,b四种情况。

UUID的版本进化史

一、基于时间和空间的UUID

第一个版本的uuid与身份证号的设计有一点类似,在寻找一个中心机构来解决唯一性的问题,在互联网世界里,时间可以变得更加精细,与宏观世界里相比它能精确到纳秒。而空间的控制却是一个难题,万维网全球化的前提下,很难找出一个类似于政府的机构来制定统一规范,所以只能从计算机出厂时所带的唯一编码(MAC地址)来用作空间上的标识。理想情况下,每一台计算机都有唯一的MAC地址,每一台计算机在某一时刻执行一次生成UUID的操作,在全球内肯定是唯一的。类似于二维世界横纵线的交汇,如果横向代表时间,时间永远不会倒流,纵向代表机器,机器不会在同一时刻执行两次操作。

但是现实情况却并非是这样,也从横纵两个方向去看。

1.计算机对于时间虽然精度很高,但是分布在世界各个角落里的情况下,计算机并不会通过某一个中心点获取当前时间,而是根据机器内部自身来获取,那就会出现一个问题,计算机自身时钟有误后被校准出现时间相同后生成uuid的问题,不过一般可以忽略,时间是相对的概念,只要自身一直保持一个时钟,便不会出现问题。2.实际上,MAC地址并非完全唯一。首先出厂计算机的商家也不是全球一家,即使约定了规范也不能保证网卡制造商没有误差地为网卡分配唯一的 MAC地址。另外计算机在用户的手里,MAC地址在用户计算机上,用户要是了解计算机的原理构造,能不能主动的修改一下MAC地址呢?答案是可以的。3.同时执行生成UUID程序。当两个进程同时跑了一段生成UUID的代码时,它们所处的时间点一致,MAC地址也一致,这时候

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值