跳到主要内容

ulid

  • ulid/spec - Universally Unique Lexicographically Sortable Identifier
  • 例如 01ARZ3NDEKTSV4RRFFQ69G5FAV
  • 128bit - 编码后 26 字符
    • timestamp 48bits + 随机 80bits
    • Crockford base32 - 5 bit/char
    • ttttttttttrrrrrrrrrrrrrrrr - t 时间戳, r 随机
    • 时间戳保留到 毫秒
  • 可排序 - 单调递增 - Monotonicity 保证同 ms 内递增
    • 有些实现不一定能保证 - 因为需要状态
    • 如果已经有 时间 信息可直接用于生成 ULID
      • 例如 create_at 列, 创建时间, 一个能标识消息且不会变的时间
  • 大小写无关 - Crockford base32
  • 无特殊字符 - URL 安全 - 0123456789ABCDEFGHJKMNPQRSTVWXYZ
  • pksunkara/pgx_ulid
警告
  • ULID 使用 base32 无关大小 - 大多实现使用 大写 - 个人喜欢小写