世界上有一样的电话号码吗?
分段模式与雪花到底有什么区别? 一个是依赖DB,一个是依赖时间的.
依赖DB分段批量获取的算法,是可以产生全局唯一,且批内连续单调递增的ID。但多个请求分别调用生成一批,多个批都插入数据到库,还是不会连续的。强依赖DB。 雪花生成的是不连续,全局唯一,但只能是趋势递增的ID,部分区间连续,整体不连续。过于依赖时间。
能不能找到一种,既不依赖DB,也不依赖时间的算法呢?答案是,肯定有的,找吧(本文就能找到)! DB表自增ID真的不能用在分布式场景吗? 这个都被大家忽略了: DB表自增ID,也是可以改为具有分布式特性的,SerialUniqueId就是!
distributed-id 是ORM框架Bee使用的分布式ID生成方案。 提供不用依赖DB,不用依赖时钟的生成算法; 提供DB表主键自增也可具有分布式全局唯一数字id特性的生成算法. 分布式环境下生成连续单调递增(在一个workerid内),全局唯一数字id.
Bee 网址:
https://github.com/automvc/distributed-id
Bee在gitee 的网址:
https://gitee.com/automvc/distributed-id
jdk1.7+
雪花算法:PearFlowerId
改进的雪花算法——姑且称为梨花算法吧 (忽如一夜春风来,千树万树梨花开)。
改进目标:解决雪花算法的时钟回拨问题;部分避免机器id重复时,号码冲突问题。
SerialUniqueId
SerialUniqueId:分布式环境下生成连续单调递增(在一个workerid内),全局唯一数字id. 连续单调递增ID生成算法SerialUniqueId:不依赖于时间,也不依赖于任何第三方组件,只是启动时,用一个时间作为第一个ID设置的种子,设置了初值ID后,就可获取并递增ID。在一台DB内与传统的一样,连续单调递增(而不只是趋势递增),而代表DB的workerid作为DB的区别放在高位,从所有DB节点看,则满足分布式DB生成全局唯一ID。本地(C8 I7 16g)1981ms可生成1亿个ID号,利用上批获取,分隔业务,每秒生成过10亿个ID号不成问题,能满足双11的峰值要求。可用作分布式DB内置生成64位long型ID自增主键。只要按本算法设置了记录的ID初值,然后默认让数据库表id主键自增就可以(如MYSQL)。
OneTimeSnowflakeId
注:目前v 1.7.3还未提交到maven,可下载最新源码.
<dependency>
<groupId>org.teasoft</groupId>
<artifactId>bee</artifactId>
<version>1.7.3</version>
</dependency>
<dependency>
<groupId>org.teasoft</groupId>
<artifactId>honey</artifactId>
<version>1.7.3</version>
</dependency>
链接.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。