全局ID的相关问题

本文探讨了三种常见的全局唯一ID生成方法:UUID、数据库自增ID(auto_increment)和雪花算法。UUID因其简单易用但缺乏实际意义而被提及,而自增ID在分布式环境中面临挑战。雪花算法则适用于分布式系统,通过时间戳、工作机器ID和序列号确保唯一性,但依赖于机器时间,时间回滚可能导致ID重复。在实际应用中,雪花算法可能遇到精度问题,需要在前后端交互时进行转换。
摘要由CSDN通过智能技术生成

常见的几种解决方法

  • UUID
  • 使用数据库中设置整形字段auto_increment
  • 使用雪花算法

UUID的优缺点

优点:简单,方便生成。
缺点:毫无意义,这个字段仅能保证唯一性,不重复,但是没有实际意义

auto_crement

这个比较简单,设计表的时候,就设置自增长。
缺点:就是采用分布式布局,进行集群,那么不同服务器

雪花算法的理论

这里感谢百度图片提供的,感动的痛哭流涕

雪花算法是生成64位的数字。
最高位是符号位,对于我们来说没有什么实际意义。这位就是0,表示是正数
接着41位是一个时间戳。2^41,2的41次方,可以使用69年,这已经远超一个软件的生命周期了,(我去腾讯学习的时候,说过一般软件的生命周期很短,像QQ这种超长生命周期的产品不多见)
接着10位是工作机器ID,2^10次方,可以有1024个数字,表示可以有1024个机器做集群,这个数字对于我来说很夸张了
最后12位表示序列号,2^12,表示4096,这个是序列号,一毫秒生成4096个序列号,那么一秒钟就会生成4096000,这已经可以保证不重复了吧。

优点就是适用于分布式数据库生成全局ID。缺点就是依赖机器的当前时间。如果机器出现时间回滚,就是回到某个过去的时间,可能会造成ID重复。

雪花算法某些问题

雪花算法在Java对应是long类型,前端接收变成了number类型。会出现精度不匹配的问题,这样就在前后端交互的controller层将long类型变成String类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值