🛠️

Whiz Tools

Build • Create • Innovate

KSUID 生成器 - 生成可排序的唯一标识符

生成 K-排序唯一标识符 (KSUID),用于分布式系统、数据库和需要唯一、时间可排序键的应用程序。KSUID 将时间戳与随机数据结合,以创建抗碰撞、可排序的标识符。

KSUID 生成器

📚

文档

KSUID 生成器

介绍

KSUID(K-可排序唯一标识符)是一种唯一标识符格式,相较于传统的 UUID(通用唯一标识符)和其他标识符系统,提供了多种优势。此工具允许您快速轻松地生成 KSUID。

什么是 KSUID?

KSUID 是一种 20 字节的可排序标识符,由以下部分组成:

  1. 32 位时间戳(4 字节)
  2. 16 字节的随机数

当以字符串形式表示时,KSUID 使用 base62 编码,长度为 27 个字符。

KSUID 的结构

KSUID 的结构可以分解如下:

  1. 时间戳(4 字节):表示自 Unix 纪元(1970 年 1 月 1 日 00:00 UTC)以来的秒数。时间戳允许 KSUID 按生成时间大致排序。

  2. 随机组件(16 字节):这是一个加密安全的随机数,确保即使在同一秒内生成多个 KSUID 也能保持唯一性。

  3. Base62 编码:将组合的 20 字节(时间戳 + 随机数)使用 base62(A-Z, a-z, 0-9)编码,生成最终的 27 字符串。

KSUID 公式

KSUID 可以用数学表示为:

KSUID=Base62(TR)KSUID = Base62(T || R)

其中:

  • TT 是 32 位时间戳
  • RR 是 128 位随机组件
  • || 表示连接

时间戳 TT 的计算为:

T = \text{floor}(\text{current_time} - \text{KSUID_epoch})

其中 KSUID_epoch 为 1400000000(2014-05-13T16:53:20Z)。

KSUID 结构图

时间戳(4 字节) 随机组件(16 字节)

KSUID 的使用场景

KSUID 在以下场景中特别有用:

  1. 分布式系统:当您需要在多个服务器或服务之间生成唯一标识符时,无需协调。

  2. 可按时间排序的数据:当您希望按创建时间排序数据而无需存储单独的时间戳时。

  3. 数据库键:作为数据库中的主键,特别是在不适合自增整数的分布式数据库中。

  4. URL 安全标识符:用于在 Web 应用程序中为资源创建简短、唯一、URL 安全的标识符。

  5. 日志关联:在微服务架构中关联不同服务的日志条目。

KSUID 的优势

KSUID 相较于其他标识符系统提供了多种优势:

  1. 可排序性:与 UUID 不同,KSUID 可以按时间顺序排序,这对数据库索引和日志分析非常有用。

  2. 无需协调:与自增 ID 不同,KSUID 可以由不同服务器独立生成,而不会导致冲突。

  3. 紧凑表示:KSUID 的字符串表示为 27 个字符,比 UUID 更紧凑。

  4. 嵌入时间戳:嵌入的时间戳允许基于时间的排序和过滤,而无需单独的时间戳字段。

  5. URL 安全:base62 编码使 KSUID 在 URL 中使用时无需额外编码。

  6. 减少冲突概率:16 字节的随机组件使得即使在高生成速率下,冲突也极不可能发生。

如何使用此生成器

  1. 输入任何额外参数(如自定义时间戳)。
  2. 点击“生成 KSUID”按钮以创建新的 KSUID。
  3. 生成的 KSUID 将显示在输出字段中。
  4. 您可以通过重复步骤 1-3 生成多个 KSUID。
  5. 使用每个 KSUID 旁边的“复制”按钮将其复制到剪贴板。
  6. 可选地,使用“导出”功能下载生成的 KSUID 列表。

请记住,每个 KSUID 都是唯一的,应该仅使用一次。每次需要唯一标识符时,请生成新的 KSUID。

代码示例

以下是在各种编程语言中生成 KSUID 的示例:

1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"生成的 KSUID: {new_id}")
6

参考资料

  1. Segment 的 KSUID GitHub 仓库: https://github.com/segmentio/ksuid
  2. Peter Bourgon 的“生成良好的唯一标识符”:https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
  3. KSUID 规范:https://github.com/segmentio/ksuid/blob/master/README.md