什么是 UUID v7?
UUID 版本 7 是一种按时间排序的 128 位标识符,由 RFC 9562 定义,2024 年 5 月发布。它由以下部分组成:
- Unix 时间戳:48 位,精确到毫秒的 Unix 时间
- 随机数据:74 位的随机数据
- 版本位和变体位:用于格式识别的 6 位
格式示例: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
UUID v7 的工作原理
- 获取当前 Unix 时间戳(以毫秒为单位)(48 位)
- 生成 74 位加密强随机数据
- 将版本位设置为 0111(版本 7)
- 将变体位设置为 10(RFC 4122 标准)
- 组装为带连字号的 32 位十六进制数字:8-4-4-4-12 格式
优点与注意事项
| Advantages | Considerations |
|---|---|
|
|
UUID v7 结构
| Bits | Content |
|---|---|
| 0-47 | Unix 时间戳(毫秒) |
| 48-51 | 版本(v7 的 0111) |
| 52-63 | 随机数据 |
| 64-65 | 变体(RFC4122 的 10) |
| 66-127 | 随机数据 |
UUID v7 与其他版本的比较
| Version | 基于 | 使用场景 | Privacy |
|---|---|---|---|
| UUID v1 | 时间 + MAC | 按时间排序的 ID | ⚠️ 会暴露 MAC |
| UUID v3 | 命名空间 + MD5 | 确定性 ID | ✅ 私有 |
| UUID v4 | Random | 安全随机 ID | ✅ 私有 |
| UUID v5 | 命名空间 + SHA-1 | 确定性 ID | ✅ 私有 |
| UUID v6 | 时间(重排序) | 可排序的 ID | ⚠️ 会暴露 MAC |
| UUID v7 | 时间 + 随机 | 可排序的 ID | 嵌入生成时间;不包含 MAC 地址 |
常见用例
- 数据库主键:高效的索引
- 分布式系统:无需协调的按时间排序
- 现代应用:注重隐私的标识符
- Microservices:跨服务可排序的 ID
- 事件溯源:按时间顺序的事件 ID
- 数据仓储:按时间排序的分析 ID
常见问题解答
UUID v7 相对于 v1 或 v6 有何优势?
UUID v7 使用以毫秒为单位的 Unix 时间戳和随机数据而不是 MAC 地址,在保持按生成时间排序性的同时提供隐私保护。
UUID v7 是正式标准吗?
是的。UUID v7 由 RFC 9562 定义,2024 年 5 月发布。
我可以从 UUID v7 中提取创建时间吗?
可以。位于前 48 位的毫秒级 Unix 时间戳可以被提取并转换为标准日期时间。
UUID v7 的创建时间可以排序吗?
是的。UUID v7 设计为按字典序可排序,Unix 时间戳位于最高有效位,直接字符串比较即可对应时间顺序。
UUID v7 会暴露任何系统信息吗?
UUID v7 不嵌入 MAC 地址,但其前 48 位会显示以毫秒为单位的生成时间戳。请将此时间元数据视为对任何收到该标识符的人可见。