ULID(Universally Unique Lexicographically Sortable Identifier) 是一种全球唯一的标识符,与 UUID 类似,但具有更短的字符串长度(26 个字符)且天然按时间排序。它由 48 位时间戳(毫秒级)和 80 位随机数组成,采用 Crockford's Base32 编码,兼具可读性、唯一性和排序性。
ULID 仅 26 个字符,而 UUID 为 36 个字符,节省约 28% 的存储空间,在数据库中能有效降低索引开销。
ULID 的前缀包含毫秒级时间戳,天然按时间排序。作为数据库主键时可避免 UUID 随机插入导致的页分裂问题,大幅提升写入性能。
ULID 仅包含大写字母和数字(Crockford Base32),不含特殊字符,可直接用于 URL、文件名等场景。
ULID 的有序性使其成为数据库主键的理想选择,特别适用于 MySQL、PostgreSQL 等关系型数据库,可显著提升插入性能。
在微服务架构中,ULID 可作为全局追踪 ID,便于按时间顺序聚合日志,快速定位问题。
事件存储中,ULID 既能保证唯一性,又能按事件发生时间排序,简化事件流的处理。
ULID 长度适中且无歧义字符,适合作为用户会话标识或临时令牌。
ULID 遵循开源规范(https://github.com/ulid/spec),已被多种编程语言(JavaScript、Python、Java、Go、Rust 等)实现,保证跨语言一致性。
ULID 与 UUID 都是 128 位标识,本网站同时提供了 ULID ↔ UUID 互转工具,满足不同系统集成需求。
在毫秒级时间戳和 80 位随机数的组合下,重复概率极低(约 1.2e-24),可忽略不计,满足生产环境唯一性要求。
标准 ULID 使用大写字母,但部分实现也支持小写,建议统一使用大写以避免解析问题。
本工具目前每次生成一个,如需批量生成可考虑使用 API 集成或编程语言库。