menu E4b9a6's blog
rss_feed
E4b9a6's blog
有善始者实繁,能克终者盖寡。

除了UUID还有哪些标识符生成算法

作者:E4b9a6, 创建:2024-07-10, 字数:1101, 已阅:428, 最后更新:2024-07-10

这篇文章更新于 134 天前,文中部分信息可能失效,请自行甄别无效内容。

唯一标识符算法(Unique Identifier Algorithm)是一种用于生成唯一标识符(Unique Identifier,简称为 UUID)的算法或方法,用于标识实体、对象或数据的唯一性

其设计目的是确保生成的标识符在给定的范围内具有极低的碰撞概率,即几乎不可能生成相同的标识符,确保在分布式系统、数据库中或任何需要唯一标识符的场景中,每个实体都可以被唯一地标识和区分

像日常开发中的 UUID (Universally Unique Identifier) 就是由时间戳、网络地址、随机数等组成一个 128 位的标识符,通常表示为 32 个十六进制字符或 36 个带有连字符的字符

除此之外,还有其他唯一标识符算法:

Text only
# UUID
5df458ea-8862-44d8-badb-f81352daaf46

# ULID
01ARZ3NDEKTSV4RRFFQ69G5FAV

# NanoID
V1StGXR8_Z5jdHi6B-myT

# KSUID
1B6EJTX8N6FQJ9DCAMRZB6F60A

# Snowflake
1288834974657

各种算法各有优劣和适用场景:

  • UUID:提供极高的唯一性,适合分布式系统,也是唯一标识符算法最为广泛使用的标准,缺点是不包含时间信息,无法按时间排序且长度过长可读性差
  • ULID:比 UUID 更具可读性,唯一性不如 UUID ,适合在日志或者API接口生成时间较短的任务ID
  • NanoID:轻量级的唯一标识符算法实现,其优点是短、快、安全(极端碰撞),适合用于短链生成、会话标识、缩略图、临时标识符
  • KSUID (K-Sortable Unique Identifier):携带时间戳的唯一标识符算法,长度短,可按时间排序,常用于数据库索引、有序数据集合、时间序列集合、分布式系统
  • Snowflake:由Twttier开发的分布式唯一标识符算法,拥有可排序、可扩展以及在分布式系统中相同节点确保唯一的特点,常用于分布式系统、数据库分片、日志系统、分布式锁
  • Sonyflake:与Snowflake类似,唯一不同是加强了时间戳的精确程度、加强了节点中单个机器的生成唯一性,具有更长的时间范围,它保持了唯一性和可排序性的特点
  • XID:在 PostgreSQL 数据库引擎中使用,提供了一种简单而高效的方式来生成全局唯一标识符,并且保留了按照生成顺序排序的能力,ID 算法是为数据库事务而设计的

[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
gravatar
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]