UUID详解,uuid在线生成

看这篇文章前可以先直接在线生成一个uuid,预览一下,

http://www.uuid.online/

UUID是什么?

UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。

A universally unique identifier (UUID) is an identifier standard used in software construction, standardized by the Open Software Foundation (OSF) as part of the Distributed Computing Environment (DCE). The intent of UUIDs is to enable distributed systems to uniquely identify information without significant central coordination. In this context the word unique should be taken to mean "practically unique" rather than "guaranteed unique". Since the identifiers have a finite size it is possible for two differing items to share the same identifier. The identifier size and generation process need to be selected so as to make this sufficiently improbable in practice. Anyone can create a UUID and use it to identify something with reasonable confidence that the same identifier will never be unintentionally created by anyone to identify something else. Information labeled with UUIDs can therefore be later combined into a single database without needing to resolve name conflicts.

A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation‘s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.

上面说的到在grub中写到的UUID的的好处是什么呢?

这样做和使用/dev/sda5这种直接引用分区的方法的一个优点就是,当硬盘中增加了新的分区,或者分区的顺序改变后,仍然能够保证系统加载分区到正确的加载点。

这对于swap分区尤为重要,如果硬盘分区顺序改变,而fstab对swap分区编号做响应的调整,是不是会把其他分区给作为swap哪?结果是很可怕的,这个分区上的数据恐怕就要不保了。通过在/dev/disk/uuid,这里的uuid列表实际上是一些symbol link文件,系统可以保证针对每一个分区生成一个唯一的编码,增加了系统的稳定性。

UUID具有以下涵义:

经由一定的算法机器生成
为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。UUID的复杂特性在保证了其唯一性的同时,意味着只能由计算机生成。

非人工指定,非人工识别
UUID是不能人工指定的,除非你冒着UUID重复的风险。UUID的复杂性决定了“一般人“不能直接从一个UUID知道哪个对象和它关联。

在特定的范围内重复的可能性极小
UUID的生成规范定义的算法主要目的就是要保证其唯一性。但这个唯一性是有限的,只在特定的范围内才能得到保证,这和UUID的类型有关(参见UUID的版本)。

UUID是16字节128位长的数字,通常以36字节的字符串表示,示例如下:

3F2504E0-4F89-11D3-9A0C-0305E82C3301

其中的字母是16进制表示,大小写无关。
GUID(Globally Unique Identifier)是UUID的别名;但在实际应用中,GUID通常是指微软实现的UUID。

UUID的版本

UUID具有多个版本,每个版本的算法不同,应用范围也不同。
首先是一个特例--Nil UUID--通常我们不会用到它,它是由全为0的数字组成,如下:
00000000-0000-0000-0000-000000000000

UUID Version 1:基于时间的UUID
基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替MAC地址--Java的UUID往往是这样实现的(当然也考虑了获取MAC的难度)。

UUID Version 2:DCE安全的UUID
DCE(Distributed Computing Environment)安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。这个版本的UUID在实际中较少用到。

UUID Version 3:基于名字的UUID(MD5)
基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。

UUID Version 4:随机UUID
根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的,但狗屎运通常会在不经意中到来。

UUID Version 5:基于名字的UUID(SHA1)
和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。

UUID的应用

从UUID的不同版本可以看出,Version 1/2适合应用于分布式计算环境下,具有高度的唯一性;Version 3/5适合于一定范围内名字唯一,且需要或可能会重复生成UUID的环境下;至于Version 4,我个人的建议是最好不用(虽然它是最简单最方便的)。
通常我们建议使用UUID来标识对象或持久化数据,但以下情况最好不使用UUID:
    映射类型的对象。比如只有代码及名称的代码表。
    人工维护的非系统生成对象。比如系统中的部分基础数据。
对于具有名称不可重复的自然特性的对象,最好使用Version 3/5的UUID。比如系统中的用户。如果用户的UUID是Version 1的,如果你不小心删除了再重建用户,你会发现人还是那个人,用户已经不是那个用户了。(虽然标记为删除状态也是一种解决方案,但会带来实现上的复杂性。)

转载http://blog.chinaunix.net/uid-26495963-id-3150576.html

时间: 2024-11-05 12:14:16

UUID详解,uuid在线生成的相关文章

iOS开发中的UDID和UUID详解

今天突然想和大家聊聊UDID和UUID的问题,虽然平时我们对这两个东西很忽视,往往也很难区分这两个东西.今天就来好好谈谈. [UDID] UDID的全名为 Unique Device Identifier :设备唯一标识符.从名称上也可以看出,UDID这个东西是和设备有关的,而且是只和设备有关的,有点类似于MAC地址.我在上一篇博客中<iOS应用发布流程详解>提到了真机调试,然后需要把UDID这个东西添加到Provisoning Profile授权文件中,也就是把设备唯一标识符添加进去,以此来

UUID详解

什么是UUID? UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符.UUID具有以下涵义: 经由一定的算法机器生成 为了保证UUID的唯一性,规范定义了包括网卡MAC地址.时间戳.名字空间(Namespace).随机或伪随机数.时序等元素,以及从这些元素生成UUID的算法.UUID的复杂特性在保证了其唯一性的同时,意味着只能由计算机生成. 非人工指定,非人工识别 UUID是不能人工指定的,除非你冒着UU

【转载】详解使用icomoon生成字体图标的方法并应用

原文:http://blog.csdn.net/u013938465/article/details/50680468 最近项目大量用到字体图标,大家也知道,字体图标任意缩放不会失真,也大大减少请求数量,非常好用.以下将讲解本人如何根据美工提供的.svg文件生成字体图标并应用. 借助一个在线生成工具:https://icomoon.io/app/#/select 1.进入网址:主页面 2.新建一个图集 3.添加.svg图片(可以使用现成的,也可以使用自定义的) 使用现成的点击页面红色的Add I

DOM节点渲染详解--盒子的生成到布局过程

CSS的可视化格式模型是一种处理文档并把它显示在可视化媒介中的一种算法.它是CSS的基本概念,可视化格式模型转化每个文档元素,生成0个或一个或多个符合CSS盒子模型规则的盒子.每个盒子的布局受如下几点影响: 1. 盒子的大小: 2. 盒子的类型: 3. 定位的方案: 4. 它的子代和兄弟: 5. 可视区域和位置: 6. 它包含的图片的已有大小: 7. 其他额外的信息: 特定的模型渲染每个盒子,这个模型与包含这个盒子的块相关.通常,一个盒子为他的后代元素建立一个包含块,除非这个盒子不受包含块的约束

【机器学习详解】概率生成模型与朴素贝叶斯分类器

转载请注明出处http://blog.csdn.net/luoshixian099/article/details/51028244 1.概率生成模型 首先介绍生成模型的概念,然后逐步介绍采用生成模型的步骤. 1.1概念 即对每一种类别Ck分别建立一种模型p(Ck|x),把待分类数据x分别带入每种模型中,计算后验概率p(Ck|x),选择最大的后验概率对应的类别. 假设原始数据样本有K类,生成学习算法是通过对原始数据类p(x|Ck)与p(Ck)建立数据类模型后,采用贝叶斯定理从而得出后验概率p(C

MySQL UUID函数的详解(转)

MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l  都可以实现生成唯一值的功能: l  UUID是可以生成时间.空间上都独一无二的值:自增序列只能生成基于表内的唯 一值,且需要搭配使其为唯一的主键或唯一索引: l  实现方式不一样,UUID是随机+规则组合而成的,而自增序列是控制一个值逐步增长的: l  UUID产生的是字符串类型值,固定长度为:36个字符,而自增序列产生的是整数

java生成UUID通用唯一识别码 (Universally Unique Identifier),在线生成uuid:http://www.uuid.online/

看这篇文章前可以先直接在线生成一个uuid,预览一下, http://www.uuid.online/ UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份.UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而

详解分布式系统中的唯一id生成策略

系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很多,适应不同的场景.需求以及性能要求.所以有些比较复杂的系统会有多个ID生成的策略.下面就介绍一些常见的ID生成策略. 平常应用中方式很多 1. 数据库自增长序列或字段 2. UUID 3.uuid的变种 4.redis生成 5. Twitter的snowflake算法 snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID.其核心思想是:使用41bit作为毫秒数,1

详解使用DockerHub官方的mysql镜像生成容器

收藏 yope 发表于 10个月前 阅读 1506 收藏 32 点赞 1 评论 0 腾讯云·云上实验室:开发者零门槛,免费使用真机在线实验!>>>   摘要: 详解使用DockerHub官方的mysql镜像生成容器 一.下载官方的mysql镜像: 二.生成容器 : 三.进入到新生成的容器: 四.修改容器中mysql的配置文件 . 写在前面:看到网上关于利用DockerHub官方的mysql镜像生成容器此类的文档比较少,故结合自身实践分享给大家,还望多多指教. 我的需求:利用docker