三条数据库写入跑道 · 标识符也要选型
你选择的,是写入顺序、时间暴露与存储形状。
生成一个 ID 只需一次点击。真正的设计选择在于:UUID v4 的随机分布、UUID v5 的 namespace 确定性映射、UUID v7 与 ULID 的毫秒时间前缀,以及数据库能够约束的规范表示。
UUID v4
随机 · 分散
UUID v7
时间 · 分桶
ULID
字典序 · 对齐
标识符护照
Bit 结构切换台
UUID v4 · 128 bits
UUID v7 · 128 bits
ULID · 128 bits
排序竞速
按时间排序,不等于全局连续递增。
与生成时间没有定义上的关联
随机落入索引空间
按毫秒时间前缀大致呈时间顺序
当前库用内部状态改善同毫秒顺序;跨进程仍无全局序列保证
规范文本按毫秒时间前缀进行字典序排序
本站使用标准生成函数,同一毫秒内的生成顺序不保证单调
存储决策矩阵
时间戳隐私窗口
可以排序的 ID,也会暴露生成时间。
UUID v7 和 ULID 都带有毫秒时间戳,这有利于排障和索引局部性,也可能泄露对象创建时间与大致活动节奏。UUID v4 没有定义时间字段;任何一种标识符都不应被当作访问密钥。
碰撞表述约定
极低概率,不等于绝不可能。
健康的密码学随机源能让 v4、v7 和 ULID 的意外碰撞在常规规模下极不可能;v5 则依赖 namespace 与 name 的稳定输入和摘要映射。身份数据仍应使用唯一约束、冲突重试,并监控生成器质量。
规范化海关
检查时可接受 URN 前缀和大括号
使用小写、带连字符的规范形式
同一 namespace 与 name 得到同一结果;自定义 namespace 必须是有效 UUID
底层库接受不区分大小写的 Crockford 文本
输出 26 个大写规范字符
不会把随机位换个标签,伪造不存在的时间来源