欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分布式主键生成策略

程序员文章站 2022-07-12 10:51:23
...

最近工作中需要手动生成主键,由于是分布式应用,多个应用对多个数据源进行操作,结构图如下:


分布式主键生成策略
            
    
    博客分类: 分布式应用 分布式主键生成策略 


 一个逻辑表可能sharding到多个数据库中,但是要保证在多个数据库中每一个记录的主键不能重复,利用数据库自身的自增策略已经不能满足需求。

 

借鉴IP网络的划分,可以将一段连续的序列切分为多个子序列,以1-20000000为例,切分长度为100000,可以切分为200个子序列,分别为:

 

001 000001-100000
002 100001-200000
003 200001-300000
n (n-1)*100000+1-n*1000000
200 19900001-20000000

 

 

 

 

 

 

 

 

把001、002、...、200看成网络号,对应的取值范围成为主机号。然后可以将这些网络号分配给不同的应用程序A、B:

 

1、A启动,检查配置文件中分配给自己的网络号(假如为001、002、003)和切分长度

2、连接数据库组,查询当前数据库主键在001段区间的最大值,如果该值到达001段的结尾,继续查询在002段区间的最大值,直到找到区间最大值不在该区间末尾的值,设该值为currentMaxValue

3、创建一个AtomicInteger,初始值为currentMaxValue,为上层提供主键生成服务

4、当AtomicInteger增长到当前区间的末尾时,转换到下一个分配的区段

 

如果为每个应用分配不重合的区间,每个应用都能生成区间连续的主键,各个应用之间也不会出现生成主键重复的现象。很好的解决了分布式情况下的主键生成问题,不需要应用之间协调,只需要预先规划分配一下区段即可。

  • 分布式主键生成策略
            
    
    博客分类: 分布式应用 分布式主键生成策略 
  • 大小: 24 KB