ULID Generator
One input per line. Output is numbered to match the input order.
Pinned tools are listed in your favourites on the home page.Copies a link to this tool that carries your current input, so it opens ready to run.Gives you an iframe snippet for putting this tool on your own site.
Ctrl+Enter Run · Ctrl+Shift+C Copy · Esc Clear
Understand ULID Generator
生成 ULID——26 个字符的标识符,开头的字符编码了创建时间,因此它们作为纯文本就能按时间顺序排序。
How it works
ULID 共 128 位:48 位的毫秒时间戳,后接 80 位随机值,以 Crockford Base32 写成 10 个时间戳字符加 16 个随机字符。由于这种编码保持顺序,对字符串排序就是按创建时间排序,这正是 ULID 作为数据库键很划算的原因——新行追加到索引末尾,而不是散布其间。该字母表省略了 I、L、O 和 U,以保证誊写时不产生歧义。
When to use it
- 为需要时间顺序、又不想依赖中心化序列的表生成主键。
- 为之后需要按时间做范围扫描的事件、日志或消息生成 id。
- 在多个服务上各自独立生成、却仍需能够放在一起排序的 id。
- 任何你本会选用 UUID v4、但同时在意索引局部性的场合。
- 需要有人从屏幕上读取的标识符,那里受限的字母表会有帮助。
Watch out for
- 可排序性只在时钟可信的范围内成立。单调模式通过递增随机部分,让同一毫秒内生成的一批 ULID 保持有序,但在不同机器上生成的两个 ULID 是按各自机器的时钟排序的——几毫秒的偏差就足以让它们顺序颠倒。
- 创建时间是公开的。前 10 个字符可直接解回一个毫秒时间戳,因此任何持有 ULID 的人都知道记录是何时创建的。
- Crockford Base32 在纸面上大小写不敏感,但按原始字节比较的数据库索引并非如此。本工具始终输出大写;请统一以一种大小写存储,否则排序和相等判断会出乎你的意料。
- 随机部分是 80 位,而 UUID v4 是 122 位,这一差别只在同一毫秒内才有意义——但它确实意味着,当 id 必须不可猜测时,ULID 是比 UUID v4 更弱的选择。
Frequently Asked Questions
作数据库主键时,ULID 为什么比 UUID v4 更好?
UUID v4 是随机的,会造成 B 树索引的随机插入,规模上去后索引碎片严重。ULID 按时间有序——新记录始终插入到索引末尾,就像自增整数一样,但又是全局唯一的。
ULID 的单调模式是什么?
当同一毫秒内产生多个 ULID 时,单调模式会把上一个的随机部分加一,而不是重新抽取随机位。这保证了同一毫秒内严格的字典序,而普通的随机 ULID 做不到。当你请求批量生成时,本生成器默认使用单调模式。
ULID 区分大小写吗?
不区分——ULID 使用 Crockford Base32(0-9、A-Z,排除 I、L、O、U),其设计本身就是大小写不敏感的。01AN4Z07BY 与 01an4z07by 相同。该字母表还避开了视觉上容易混淆的字符。
How to Use ULID Generator
- Paste or type your input in the input area above.
- The tool processes your input automatically or click Run.
- Copy or download the result using the action buttons.
- Use Ctrl+Enter to run quickly from the keyboard.