UUID的放弃,切换到ULID

ULID是为了解决UUID可能出现重复及效率问题而提出的,它具有更高的时间精度(毫秒级),且按时间排序。ULID使用Crockford的Base32编码,保证了可读性和URL安全性,适用于分布式环境中的全局唯一ID,可用于分库分表策略和数据库主键。尽管在同一毫秒内顺序不确定,但总体上仍能保证排序顺序。

背景

日常开发中我们会遇到使用字符串ID,最先行到的就是UUID生成我们的随机字符串,但是UUID也是会出现重复的几率的!所以我们引入的新的ULID

ULID的特性

  • 与UUID的128位兼容性

  • 每毫秒1.21e + 24个唯一ULID

  • 按字典顺序(也就是字母顺序)排序!

  • 规范地编码为26个字符串,而不是UUID的36个字符

  • 使用Crockford的base32获得更好的效率和可读性(每个字符5位)

  • 不区分大小写

  • 没有特殊字符(URL安全)

  • 单调排序顺序(正确检测并处理相同的毫秒)

时间戳

  • UNIX时间(以毫秒为单位)
  • 直到公元10889年,他的空间都不会用完
  • 48位整数

排序

最左边的字符必须排在最前面,最右边的字符必须排在最后(词汇顺序)。必须使用默认的ASCII字符集。在同一毫秒内,不能保证排序顺序。

编码方式

使用了Crockford的Base32。该字母表不包括字母I,L,O和U,以避免混淆和滥用。

二进制布局和字节顺序

组件被编码为16个八位位组。每个组件都以最高有效字节在前(网络字节顺序)进行编码。

随机性

  • 80 位的随机数
  • 尽量采用加密技术保证随机数的随机性

使用场景

  • 分布式环境中,替换我们常用的UUID,全局唯一,并且毫秒精度有序
  • 当我们按照日期对数据库进行分库分表的时候,可以使用ULID通过嵌入时间戳来选择我们想要的正确的分库分表
  • 当我们的可以接受的精度为毫秒时候(毫秒内是无序的),可以按照ULID排序。
  • 当然我们也可以用它来替换掉我们数据库中的ID自增,减少数据库对主键的生成依赖

好了,今天关于ULID就先到这,欢迎大家留言交流。

也希望大家关注我的公号《coder练习生》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值