UUID v4 和 UUID v7 有什么区别?应该生成哪一种
UUID v4 和 UUID v7 都常用,但适合的场景不一样。
UUID v4 是随机 ID;UUID v7 包含 Unix 时间戳相关信息,更适合按时间排序。
UUID v4 适合哪里
需要这些特性时,可以用 UUID v4:
- 随机标识符
- 前端或客户端直接生成 ID
- 不希望 ID 本身带创建时间
- 需要兼容较老系统
缺点是排序。随机 ID 不能自然按创建时间排列,对某些数据库索引也不够友好。
UUID v7 适合哪里
需要这些特性时,可以考虑 UUID v7:
- ID 大致按创建时间排序
- 比随机 ID 更利于数据库局部性
- 分布式系统里不依赖中心序列
- 日志、事件流需要时间顺序
因为 UUID v7 含有时间信息,如果不能暴露创建时间,就不要随便用在公开场景。
数据库和隐私取舍
UUID v4 很适合作为不容易猜的公开标识符。它不会暴露记录创建时间,但随机插入顺序对大型数据库索引不一定友好。
UUID v7 保留了 UUID 的分布式生成能力,同时让新 ID 大致按时间排序。这对索引、事件表、审计日志、追加写入系统更友好。代价是 ID 本身带有时间信息;如果是用户账户、私密文档或低频业务活动,这个时间线索可能不适合暴露。
| 场景 | 更适合作为默认值 | | ---------------- | ------------------------------ | | 公开分享 ID | UUID v4 | | 事件日志 | UUID v7 | | 大规模数据库主键 | 如果技术栈支持,可考虑 UUID v7 | | 老系统集成 | UUID v4 | | 不能暴露创建时间 | UUID v4 |
在已有系统里切换到 UUID v7 前,要先确认数据库支持、排序行为,以及下游服务是否默认认为 UUID 都是 v4 随机值。
简短结论
想要简单随机、兼容性强,用 UUID v4;想要可排序、适合数据库和事件流,用 UUID v7。公开 ID 是否能泄露创建时间,是选择 v7 前必须考虑的问题。
参考资料: