tomai
登录

UUID 解析:v1、v4、v7 的区别与各自适用场景

UUID 是 128-bit 标签,写成 32 个十六进制字符,分成 8、4、4、4、12 共五组,设计目标是让任何人在任何地方都能独立生成,无需向中央机构申请。它们用来在从不直接通信的系统之间标识数据行、文件、会话和 API key。

1. v1:时间加机器

v1 内嵌时间戳和节点标识,节点标识通常来自网卡。ID 大致按创建时间排序,数据库很喜欢这一点,但它们会泄露生成的时间和地点——这种隐私气味让多数新系统远离了 v1。

2. v4:纯随机

v4 的 128 bit 里有 122 bit 来自密码学随机源,固定 4 bit 标记版本。碰撞概率小到荒谬——每秒生成十亿个 ID、连续生成一百年,出现一次重复的概率仍远低于硬件故障率——但随机性会打散数据库索引,大表写入会变慢。

3. v7:现代默认选择

v7 把毫秒时间戳放在最前面,剩余部分随机填充,得到时间有序又不泄露机器身份的 ID。需要可排序、对索引友好的标识符的新项目,应该直接选 v7;our UUID generator 同时生成 v7 和经典 v4。

4. 什么时候不用 UUID

面向用户的短码、发票号、需要手工输入的任何东西,更适合计数器或紧凑编码——UUID 又长又难念还容易抄错。永远不要把任何 UUID 当密钥:它们只保证唯一,不保证不可猜,v1 和 v7 含有时间戳,v4 虽然随机,却经常躺在日志里或暴露在 URL 中。