typeid:受 Stripe ID 启发的类型安全、K-sortable、全局唯一标识符


TypeIDs是UUIDv7的一个现代的、类型安全的扩展。

TypeIDs被规范地编码为小写的字符串,由三部分组成:

  • 一个类型前缀
  • 一个下划线'_'分隔符
  • 一个128位UUIDv7编码为base32的26个字符的字符串(使用小写的Crockford字母表)。

下面是一个用户类型的TypeID的例子:

  user_2x4y6z8a0b1c2d3e4f5g6h7j8k
  └──┘ └────────────────────────┘
  type    uuid suffix (base32)


优点

  • 类型安全:你不能意外地使用一个用户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 那样是类型安全的):