案例库 · 软件与 IT · 技术决策 · 2005–2026
UUID:让任何机器无需中央注册即可生成全局唯一标识符
一种128位标识符,可在任何机器上本地生成,碰撞概率极低,无需注册表或协调器。
开放软件基金会 · 互联网工程任务组
那一手
在UUID出现之前,如果两个系统各自创建了一行数据、一个ID或文件名,它们必须向中央权威请求一个编号,否则就有碰撞风险。分布式数据库和同步应用无法永远协调下去。
RFC 4122定义了一种128位标识符,任何机器都能自行生成。版本1使用时间戳加上机器的MAC地址;版本3和5对命名空间和名称进行哈希;版本4是随机生成。这三种方式都能离线运行,每秒生成数百万个。
唯一性源于位数和生成者身份,而非注册表;该标准指出UUID无需中央协调。由于它是固定的128位值,每个数据库、操作系统和Web服务都能将其存储为单个列,并作为整数进行比较。
为什么管用
- 128位足够小,便于存储,但又足够大,使得两个随机选择几乎不可能相同。
- 生成过程是本地且离线的,因此没有网络跳转、速率限制或单点故障。
- 版本位让读者能辨别ID是基于时间、名称还是随机的。
值了多少本地生成128位;跳过注册表聪明
可以搬走什么
当名字需要全局唯一但没人愿意运行协调器时,把它做得足够大且自描述,让本地随机生成安全可行,并允许任何人在离线状态下制作。
后来呢
UUID成为PostgreSQL的默认键、Mac和Windows GUID方案的内部标识符,以及分布式系统中的自然ID。RFC 4122之后,2024年推出了RFC 9562,增加了单调的UUIDv6/v7编码,并整理了旧版本,但通过本地生成避免碰撞的理念从未改变。
资料来源
发现哪里写错了?告诉我们。