什么是 ULID?
ULID(通用唯一字典序可排序标识符)是一个 26 字符的 Crockford Base32 字符串:48 位时间戳(自 Unix 纪元起的毫秒数)+ 80 位随机数。由于时间戳在前且 Base32 保持字典序,按字符串排序 ULID 就等于按创建时间排序——正是这一特性使它成为数据库主键和分布式日志的首选。
ULID 与 UUID 对比
- 可排序:UUID v4 是随机的——没有顺序。ULID 行无需额外的时间戳列即可按插入顺序输出。
- 更紧凑:26 个字符对比 36 个;无需转义即可安全用于 URL。
- 单调性:在同一毫秒内,ULID 可以递增随机位以保证排序(即规范中的单调选项)。
- UUID v7 是 IETF 的可按时间排序标准——思路相同,编码不同。如果你的平台原生支持 v7,优先使用它;否则 ULID 作为普通字符串随处可用。
用途
可用于 SQL 主键(插入局部性优于 UUID)、日志中的事件 ID(按时间前缀 grep)、幂等键,以及任何需要 ID 自带创建时间信息的场景——解码器会显示精确到毫秒的时间。
一切都在本地运行:无服务器、无追踪,ID 使用 crypto.getRandomValues 生成。