UUID
UUID是”Universally Unique Identifier”的缩写,它是一个128位的值,全局唯一性是它的主要特性。UUID的主要目的是通过生成一个唯一的ID,使得在不需要中央协调机构的情况下,可以在分布式系统中区分和识别信息。
UUID的标准形式包含32个十六进制数字,分为五个组,形式为8-4-4-4-12,例如:550e8400-e29b-41d4-a716-446655440000。
使用UUID的时候应该注意以下几点:
全局唯一性:正常情况下,UUID是全局唯一的。但是,如果你的系统在生成UUID时存在错误或者重复,可能会导致UUID的全局唯一性被破坏。
无序性:UUID是无序的,如果你需要对数据进行排序,UUID可能不是最佳选择。在数据库中,如果UUID被用作主键,可能会导致性能问题,因为数据库在插入新记录时需要不断地重新排序。
大小和空间:UUID相对较大(16字节,或者以字符串形式存储时为36字节),如果你的系统需要处理大量的UUID,可能需要考虑存储和性能问题。
隐私和安全性:某些类型的UUID(例如版本1的UUID)可能包含机器的MAC地址或者时间戳等信息,这可能引发隐私和安全问题。如果这是一个关注点,你可能需要使用其他版本的UUID,或者使用其他方法来生成唯一标识符。
可读性:UUID是一串难以阅读和理解的字符,如果需要人类可读的标识符,UUID可能不是最佳选择。
确保随机性质量:UUID的唯一性主要依赖于其随机性。如果你使用的随机生成器的质量不高,或者没有正确地初始化,那么生成的UUID可能会有重复。
UUID的版本演化
其实UUID有好几个版本算法
- 基于时间 + mac地址, 但这种可能导致自身的隐私问题暴露,而且可能遭受攻击
- 跟1差不多,但是将时间戳的前四位换成posix的UID,或者GID
- 基于namespace,指定一个namespace + 字符串,然后根据namespace和名字生成一个UUID(MD5)
- 随机数
- 跟3一样,但是使用SHA1
This post is licensed under CC BY 4.0 by the author.