功能简介
这个工具在浏览器里批量生成 ULID。ULID 和 UUID 一样是 128 位的唯一标识符,但只有 26 个字符,而且按生成时间排序。它很适合做数据库主键、事件和日志 ID、文件名等需要「按创建顺序排列」又不想额外加时间字段的场景。
ULID 由两部分组成:
- 时间戳(前 10 个字符):从 Unix 纪元起的毫秒数,共 48 位,可以用到公元 10889 年。
- 随机数(后 16 个字符):80 位,来自浏览器的加密安全随机数生成器。
ULID 使用 Crockford Base32 字母表 0123456789ABCDEFGHJKMNPQRSTVWXYZ,去掉了 I、L、O、U,读写时不容易混淆,也不含任何需要在 URL 里转义的字符。
使用方法
- 选择要生成的数量,1 到 1000 个。
- 如果同一毫秒内生成的多个 ID 也必须保持先后顺序,打开「单调递增」开关,随机部分会逐个加一。
- 如果你的系统用小写存储 ID,打开「小写」。ULID 不区分大小写,标准形式是大写。
- 复制列表或下载为文本文件。再点一次生成可以得到新的一批。
示例
01ARZ3NDEKTSV4RRFFQ69G5FAV
其中 01ARZ3NDEK 是时间戳 1469922850259(2016-07-30 23:54:10.259 UTC),TSV4RRFFQ69G5FAV 是随机部分。间隔一秒生成的两个 ULID 前几个字符相同,所以直接按字符串排序就是按时间排序。
ULID 与 UUID 的区别
随机的 UUID v4 会让新数据分散写入 B 树索引的各个位置,大表插入会变慢。ULID 基本是递增的,新数据总是追加在索引末尾,效果接近自增整数,同时又能在多台机器上独立生成而不冲突。代价是 ULID 会暴露大致的创建时间;如果介意这一点,请使用 UUID v4。
常见问题
› ULID 是什么?
ULID(Universally Unique Lexicographically Sortable Identifier)是一种 128 位的唯一 ID,写成 26 个 Crockford Base32 字符。前 10 个字符是毫秒时间戳,后 16 个字符是随机数。
› ULID 和 UUID 该用哪个?
需要按创建时间排序的 ID(比如数据库主键、日志 ID)时用 ULID;不希望 ID 暴露创建时间时用 UUID v4。UUID v7 也是按时间排序的标准方案。
› 单调递增模式(Monotonic)有什么用?
同一毫秒内生成的 ULID 默认各自取随机数,彼此的先后顺序是随机的。开启单调递增模式后,随机部分改为逐个加一,保证批量生成的每个 ID 都严格排在前一个之后。
› 生成的 ID 安全吗?
安全。随机部分来自浏览器的加密安全随机数生成器,所有计算都在本地完成,不会发送到服务器。