什么是UUID v6?
UUID版本6是一种基于时间的128位标识符(36字符字符串),被提议作为UUID v1的改进版本。它由以下部分组成:
- 重新排序的时间戳:60位时间戳,从最高有效位到最低有效位
- 时钟序列:14位计数器,用于时钟调整
- 节点ID:48位值(通常为MAC地址)
格式示例:1eb527d6-e927-6511-9a03-0242ac130003
UUID v6的工作原理
- 计算当前时间戳(自1582-10-15起的100ns间隔)
- 重新排序时间戳位以便更好地排序(最高有效位优先)
- 获取/递增14位时钟序列(如果时钟向后移动,确保唯一性)
- 获取48位节点ID(通常来自MAC地址)
- 设置版本位(0110)和变体位(10)
- 组装为带连字符的32个十六进制数字:8-4-4-4-12格式
优势与考虑因素
优势 | 考虑因素 |
---|---|
|
|
UUID v6结构
位 | 内容 |
---|---|
0-47 | 时间戳高48位 |
48-51 | 版本(0110表示v6) |
52-59 | 时间戳低8位 |
60-63 | 时间戳高4位 |
64-65 | 变体(10表示RFC4122) |
66-79 | 时钟序列(14位) |
80-127 | 节点ID(48位) |
UUID v6与其他版本对比
版本 | 基于 | 用例 | 隐私 |
---|---|---|---|
UUID v1 | 时间 + MAC | 按时间排序的ID | ⚠️ 暴露MAC |
UUID v3 | 命名空间 + MD5 | 确定性ID | ✅ 私密 |
UUID v4 | 随机 | 安全随机ID | ✅ 私密 |
UUID v5 | 命名空间 + SHA-1 | 确定性ID | ✅ 私密 |
UUID v6 | 时间(重排序) | 可排序ID | ⚠️ 暴露MAC |
UUID v7 | 时间 + 随机 | 可排序ID | ✅ 私密 |
常见用例
- 可按时间排序的数据库键:用于按时间顺序排序
- 分布式数据库:具有按时间排序的索引
- 日志条目:具有自然时间顺序
- 审计跟踪:带有嵌入式时间戳
- 消息队列:用于基于时间的处理
- 交易记录:具有时间顺序排列
常见问题解答
UUID v1和v6有什么区别?
UUID v6重新排列了UUID v1的时间戳位,使其在字典顺序上可自然排序。内容与v1相同,只是重新排列了顺序。
UUID v6是官方标准吗?
UUID v6目前是提议的RFC 4122bis文档中的草案规范。它尚未成为官方RFC标准,但已在许多UUID库中实现。
我可以从UUID v6中提取创建时间吗?
是的。可以从0-59位提取时间戳组件并转换回日期时间值。
UUID v6可以按创建时间排序吗?
是的。与v1不同,UUID v6按从最高有效位到最低有效位的顺序放置时间戳位,使得字典顺序(字符串)比较与时间顺序相匹配。
UUID v6会暴露我的MAC地址吗?
默认情况下,是的。与UUID v1一样,大多数实现使用MAC地址作为节点ID。注重隐私的实现可能会使用随机节点ID代替。