sharding分表后主键_分库分表 Sharding-JDBC 分布式主键

Sharding-JDBC在分库分表后提供了KeyGenerator接口来生成全局唯一主键,其中DefaultKeyGenerator基于Twitter Snowflake算法实现,生成64位Long型编号。该编号由时间戳、工作进程编号和序列号三部分组成,确保了在分布式环境下的唯一性。DefaultKeyGenerator的代码展示了如何通过设置工作进程ID和序列号生成主键。
摘要由CSDN通过智能技术生成

在传统企业软件开发中,主键自动生成技术是基本需求,各个数据库对于该自增主键的需求提供了相应的支持,如MySQL的自增键。对于MySQL而言,分库分表之后,不同库、不同表生成全局唯一的主键是非常麻烦的事情。因为同一个逻辑表内的不同物理表之间的自增主键是无法互相感知的,这样会生成重复的主键。

目前有许多第三方解决方案可以完美解决这个问题,比如UUID等依靠特定算法自生成不重复键,或者通过引入主键生成服务(Redis或者ZooKeeper)等。

Sharding-JDBC提供了注解生成接口KeyGenerator。各个实现类通过实现generateKey()方法即可对外提供生成主键的功能。下面分析Sharding-JDBC分布式主键的使用。

DefaultKeyGenerator是Sharding-JDBC默认的主键生成器。该主键生成器采用Twitter Snowflake算法实现生成64位的Long型编号。国内很多大型互联网公司发号器服务基于该算法加部分改造实现。下面分析DefaultKeyGenerator产生的编号的组成。

DefaultKeyGenerator生成的64位Long型编号的组成如图所示。

64位Long型编号中各个部分的如表所示。

位数

含义

取值范围

1

符号位

0

41

时间戳

从2016-11-01 00:00:00 开始的毫秒数,支持约70年

10

工作进程编号

最大进程编号1024

12

序列号

每毫秒从0开始自增,每毫秒最多4096个编号,每秒最多4096000个编号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值