UUID 原理

UUID(Universally Unique Identifier)是一种广泛使用的唯一标识符标准。让我们深入了解 UUID 的原理和实现。

UUID 简介

1. 定义

UUID 是一个 128 位的数字,用于在计算机系统中标识信息。其标准格式为 32 个十六进制数字,用连字符分为 5 组。

格式示例

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

示例:
550e8400-e29b-41d4-a716-446655440000

结构分解

550e8400-e29b-41d4-a716-446655440000
↑        ↑    ↑    ↑    ↑
时间戳    版本  变体  节点
8-4-4-4-12

2. UUID 标准

UUID 由 RFC 4122 标准定义,包含多个版本:

版本描述特点
UUID v1基于时间和节点包含时间戳和 MAC 地址
UUID v2基于 DCE 安全包含用户标识符
UUID v3基于 MD5 命名基于命名空间和名称
UUID v4随机生成完全随机
UUID v5基于 SHA-1 命名基于 SHA-1 哈希
UUID v7基于时间排序时间有序(新标准)

UUID v1:基于时间和节点

1. 组成结构

时间低位 (32位)
时间中位 (16位)
时间高位和版本 (16位)
时钟序列和变体 (16位)
节点标识符 (48位)

示例分解

550e8400-e29b-11d4-a716-446655440000
│        │    │    │    │
└── 60位时间戳
     └─ 版本 (1)
          └─ 13位时钟序列 + 变体
               └─ 48位 MAC 地址

2. 生成过程


3. 特点

优点

  • ✅ 时间有序(同一机器内)
  • ✅ 生成速度快
  • ✅ 无需协调

缺点

  • ❌ 暴露 MAC 地址(隐私问题)
  • ❌ 时钟回拨可能导致重复
  • ❌ 不同机器间无序

UUID v4:随机生成

1. 组成结构

随机位 (122位)
版本标识 (4位)
变体标识 (2位)

示例分解

f47ac10b-58cc-4372-a567-0e02b2c3d479
│        │    │    │    │
└── 48位随机
     └─ 版本 (4)
          └─ 变体
               └─ 62位随机

2. 生成过程


3. 碰撞概率

计算公式

碰撞概率 ≈ n² / (2 × 2¹²²)

其中 n 是生成的 UUID 数量

碰撞概率示例

生成 10亿个 UUID:
碰撞概率 ≈ (10⁹)² / (2 × 2¹²²)
          ≈ 10¹⁸ / (2 × 5.3 × 10³⁶)
          ≈ 0

结论

  • 理论上有碰撞可能
  • 实际上碰撞概率趋近于零
  • 可以认为完全唯一

4. 特点

优点

  • ✅ 完全唯一
  • ✅ 无需协调
  • ✅ 生成速度快
  • ✅ 分布式友好

缺点

  • ❌ 完全无序
  • ❌ 较长(36字符)
  • ❌ 存储空间大

UUID v7:基于时间排序

1. 背景

UUID v7 是 2024 年新提出的标准,专门解决 UUID 无序的问题。

2. 组成结构

Unix 时间戳 (48位)
版本标识 (4位)
随机位 (74位)
变体标识 (2位)

示例分解

0189dcd0-3e45-7123-8b5e-123456789abc
│        │    │    │    │
└── 48位时间戳
     └─ 版本 (7)
          └─ 随机位
               └─ 变体

3. 生成过程


4. 特点

优点

  • ✅ 时间有序
  • ✅ 完全唯一
  • ✅ 无需协调
  • ✅ 存储空间小(19位)

缺点

  • ❌ 较新标准,兼容性可能有问题

使用示例

Java


Python


Go


UUID 的应用场景

适合使用 UUID 的场景

  1. 分布式系统:无需中央协调
  2. 消息 ID:消息追踪和去重
  3. 会话 ID:用户会话标识
  4. 日志追踪:请求追踪 ID
  5. 临时文件:临时文件命名
  6. 数据库主键:当有序性不重要时

不适合使用 UUID 的场景

  1. 订单号:需要可读和有序
  2. 用户 ID:需要短小和有序
  3. 支付流水:需要可追溯
  4. URL 短链:需要短小

下一步

了解了 UUID 的原理后,我们分析它的优缺点。

👉 下一节:优缺点分析