通用唯一识别码->UUID

通用唯一识别码[编辑]
维基百科,自由的百科全书


Tango-nosources.svg
Tango-nosources.svg

本条目需要补充更多来源(2014年1月31日)
请协助添加多方面可靠来源以改善这篇条目,无法查证的内容可能会被提出异议而移除。

通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。
UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。另外我们也可以在e2fsprogs包中的UUID库找到实现。

目录
[隐藏]
1定义
2随机UUID的重复概率
3参考信息
4参见

定义[编辑]
UUID是由一组32位数的16进制数字所构成,是故UUID理论上的总数为1632
=2128
,约等于3.4 x 1038
。也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID用完。
UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符。示例:
550e8400-e29b-41d4-a716-446655440000

UUID亦可刻意重复以表示同类。例如说微软的COM中,所有组件皆必须实现出IUnknown接口,方法是产生一个代表IUnknown的UUID。无论是程序试图访问组件中的IUnknown接口,或是实现IUnknown接口的组件,只要IUnknown一被使用,皆会被参考至同一个ID:00000000-0000-0000-C000-000000000046。
随机UUID的重复概率[编辑]
随机产生的UUID(例如说由java.util.UUID类别产生的)的128个比特中,有122个比特是随机产生,4个比特在此版本('Randomly generated UUID')被使用,还有2个在其变体('Leach-Salz')中被使用。利用生日悖论,可计算出两笔UUID拥有相同值的概率约为
{\displaystyle p(n)\approx 1-e{-n{2}/{2\cdot x}}}

p(n)\approx 1-e^{{-n^{2}/{2\cdot x}}}

以下是以x=2122
计算出n笔GUID后产生碰撞的概率:
n
概率

68,719,476,736 = 236

0.0000000000000004 (4 x 10-16
)

2,199,023,255,552 = 241

0.0000000000004 (4 x 10-13
)

70,368,744,177,664 = 246

0.0000000004 (4 x 10-10
)

与被陨石击中的概率比较的话,已知一个人每年被陨石击中的概率估计为170亿分之1[1]
,也就是说概率大约是0.00000000006 (6 x 10-11
),等同于在一年内置立数十兆笔GUID并发生一次重复。换句话说,每秒产生10亿笔UUID,100年后只产生一次重复的概率是50%。如果地球上每个人都各有6亿笔GUID,发生一次重复的概率是50%。
产生重复GUID并造成错误的情况非常低,是故大可不必考虑此问题。
概率也与随机数产生器的质量有关。若要避免重复概率提高,必须要使用奠基于密码学上的假随机数产生器来生成值才行。

你可能感兴趣的:(通用唯一识别码->UUID)