ulid 是什么
ulid(通用唯一按字典排序的标识符)是一种新型的全局唯一标识符,他结合了时间戳和随机数的特性,提供高性能,低碰撞,并且可排序的标识符。
ulid 特点
- 全局唯一性:通过时间戳和随机数,确保生成的
ulid
在全球都是唯一的。 - 时序性:
ulid
中时间戳部分精确到毫米,可以得到ulid
的生成时间,因此可以方便对实体进行排序和检索。 - 高性能:
ulid
生成速度远快于uuid的生成速度。 - 兼容性:
ulid
和uuid
一样都是128位的,可以于现有的uuid
标准进行兼容。
ulid主要应用场景
分布式系统:在分布式系统中,可以用
ulid
作为实体唯一标识符,可以保障不同节点上生成的id是唯一的。数据库索引:在数据库中使用
ulid
作为主键,可以避免主键冲突问题,并且可以进行排序,有较好的检索性能。日志记录:在日志系统中可以用
ulid
作为唯一id,确保不同机器生成的id是唯一的,同时也可以方便的对日志进行排序和检索。
ulid组成
时间戳
48bit
的整数。Unix时间戳
(毫秒)。
随机数
80bit
的随机数。
排序
最左边的字符必须排在最左边,最右边的字符必须排在最右边,必须使用ASCII字符集
。
编码方式
通过Crockford的Base32进行编码,该编码方式字母表不包括I、L、O、U。
二进制布局和字节顺序
组件被编码为16个八位位组。每个组件都以最高有效字节在前(网络字节顺序)进行编码。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 32_bit_uint_time_high |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 16_bit_uint_time_low | 16_bit_uint_random |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 32_bit_uint_random |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 32_bit_uint_random |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+