案例库 · 工程与运营 · 技术决策 · 1987-2005
UUID:全球唯一的128位标识符,任何机器都能独立生成
UUID将时间戳、时钟和节点(或足够的随机位)融合成128位,使每台机器无需注册机构即可独立生成唯一ID。
Apollo Computer · Microsoft
那一手
数据库需要主键,但从未连接过的两个系统需要生成永远不会冲突的键。一个简单办法是设个中央机构发放编号ID,但这要求所有系统都能访问它,并且愿意排队等待。
UUID通过将ID设计得既大又能自我描述来解决这个问题。它占128位。版本1使用当前60位时间戳、时钟序列和生成机器的48位节点地址;版本4直接使用122个随机位。两者都包含版本字段,以便未来增加新格式而不破坏旧格式。
关键在于,生成唯一性所需的信息已在本地可取。两台使用时间戳加自身地址的机器不可能产生相同的值,因此无需协调者。
为什么管用
- 版本和变体字段确保格式向前兼容,新增ID方案无需对现有方案重新编号。
- 128位空间配合122个随机位让碰撞概率极低,因此v4完全不依赖时钟或地址。
- ID不透明且本地生成,API可接受它并直接路由,无需查表。
- 它源自Apollo NCS和OSF DCE,后被Microsoft Windows采用,使其进入各种语言的标准库。
值了多少让每台机器都能独立生成唯一ID。聪明
可以搬走什么
如果设计包含足够的独立熵,唯一性可以通过本地计算实现;你不需要注册机构来发放ID,这让成千上万台机器可以离线创建键。
后来呢
UUID在2005年标准化为RFC 4122,并在2024年更新为RFC 9562,增加了按时间排序的版本以解决索引碎片问题。现在它们是数据库、消息队列和分布式系统中默认的标识符类型,尽管版本4的随机顺序有时会影响B树性能。
资料来源
发现哪里写错了?告诉我们。