TypeIDs是UUIDv7的一个现代的、类型安全的扩展。
TypeIDs被规范地编码为小写的字符串,由三部分组成:
- 一个类型前缀
- 一个下划线'_'分隔符
- 一个128位UUIDv7编码为base32的26个字符的字符串(使用小写的Crockford字母表)。
下面是一个用户类型的TypeID的例子:
user_2x4y6z8a0b1c2d3e4f5g6h7j8k |
优点
- 类型安全:你不能意外地使用一个用户ID,因为它应该是一个帖子ID。在调试时,由于类型前缀的存在,你可以立即了解TypeID指的是什么类型的实体。
- 与UUIDs兼容:TypeIDs是UUIDs的一个超集。他们是基于即将到来的UUIDv7标准。如果你解码TypeID并移除类型信息,你会得到一个有效的UUIDv7。
- K-Sortable:TypeIDs是K-排序的,可以在数据库中作为主键使用,同时确保良好的定位性。与完全随机的全局ID相比,比如UUIDv4,它通常会有很差的数据库定位性。
- 深思熟虑的编码:base32编码是URL安全的,不区分大小写,避免模棱两可的字符,可以通过双击选择复制粘贴,并且是一个比UUIDs使用的传统十六进制编码更紧凑的编码(26个字符对36个字符)。
Related Work
- UUIDv7 - TypeID 所基于的即将推出的 UUID 标准。
- UUIDv7 的替代方案也值得考虑(但不像 TypeID 那样是类型安全的):