UUIDv7 并没有你以为的那些性质
来源:alexsci.com — 2026-10-19
📋 概述
大多数介绍 UUIDv7 的文章都会强调三条好处:单调递增、自带创建时间戳、不可猜测。作者逐条检验后认为三条都不严格成立,某些完全符合 RFC 的实现可以把它们破坏到极端程度,UUIDv7 唯一能保证的只有唯一性与抗碰撞。时间戳字段按 RFC 9562 允许被实现改写,甚至可以领先系统时钟,Python 标准库的 uuid.uuid7() 在时钟回跳叠加高负载时会让偏差无限增长。
🔑 核心要点
- RFC 9562 明确允许实现改动时间戳字段,且不保证时钟值与真实时间接近
- Python 的 uuid.uuid7() 在时钟回跳后进入递增循环,偏差可无限增长:示例中回跳一小时后偏差从 3695 秒一路涨到 3994 秒
- 跨节点的严格单调顺序在 1970 年代就已被证明不可能,这也是向量时钟出现的原因
- 单节点单实现也不保证单调:不带计数器、只用毫秒时间戳的实现,一个小 for 循环就能产生乱序 ID
- 时间戳随 ID 一起外泄,用户主页 URL 里的 ID 就暴露了账号创建的高精度时间
💡 金句
Timestamps are only time-ordered if you know what time it is and you don't know what time it is.
👍 0
👎 0
← 返回 Lobsters 首页