EN
返回档案库

案例库 · 工程与运营 · 技术决策 · 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树性能。

资料来源

发现哪里写错了?告诉我们。

同一路聪明