最近工作中需要手动生成主键,由于是分布式应用,多个应用对多个数据源进行操作,结构图如下:
一个逻辑表可能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
分享到:
相关推荐
分布式ID生成策略是现代互联网应用中的重要组成部分,尤其是在大数据时代,每个数据实体通常都需要一个唯一标识符(ID)来区分其身份。Snowflake算法是由Twitter开源的一种高效且可扩展的分布式ID生成方案,广泛应用...
在现代大数据处理与分布式系统中,主键生成策略是确保数据唯一性的重要环节。随着微服务和分布式数据库的发展,ShardingSphere作为一款开源的数据库中间件,其功能不断升级以适应新的需求。在最新的版本中,...
在Java的持久化框架Hibernate中,主键生成策略是一个至关重要的概念,它决定了数据库表中主键值如何自动生成。主键通常是表中唯一标识记录的一列,对于数据的完整性和一致性至关重要。以下是对Hibernate中主键生成...
本压缩包文件"04_JPA详解_第一个JPA实例与JPA主键生成策略.zip"包含了关于如何在实际项目中运用JPA,以及理解JPA主键生成策略的详细教程。 ### JPA基础 1. **JPA简介**: JPA是Java EE的一部分,它提供了一套规范,...
【hibernate主键生成策略】是Hibernate框架中用于生成持久化对象主键的重要机制,它决定了如何在数据库中创建唯一的标识符。在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,主键生成策略的...
主键生成策略是Hibernate中一个重要的概念,因为它决定了如何为实体生成唯一的标识符。本文将详细解释Hibernate的几种主键生成策略及其配置。 1. assigned策略 assigned策略允许开发者在保存对象之前手动设置主键。...
在主键生成策略方面,MybatisPlus提供了多种选择,以适应不同场景的需求。以下是关于MybatisPlus主键生成策略的详细说明: 1. **默认主键生成策略:雪花算法** 当MybatisPlus未进行任何主键策略配置时,它会默认...
5. **雪花算法**:这是一种分布式主键生成策略,常用于分布式系统。雪花算法结合了时间戳、机器ID和序列号,确保全局唯一性。Ibatis可以借助第三方库如Snowflake或者Twitter的实现来应用此策略。 6. **UUID**:对于...
MyBatis-Plus主键生成策略是其框架中一个重要的特性,它提供了多种方式来生成主键ID,以便适应不同的数据库环境和业务需求。MyBatis-Plus的默认策略是Twitter的“Snowflake”算法,它能生成全局唯一的长整型ID。然而...
通过对不同场景需求的分析,我们可以选择适合的ID生成策略。无论是基于时间戳排序还是利用数据库特性,亦或是采用高级算法如雪花算法,都应该根据具体的应用场景和技术栈来决定最佳实践方案。未来随着技术的发展,...
### Hibernate主键生成策略 #### 一、概述 在Hibernate框架中,主键生成策略是对象持久化过程中不可或缺的一部分。合理的主键生成机制不仅能够确保数据的唯一性,还能够提高系统的性能和可扩展性。本文将详细介绍...
分布式主键发生器是解决大型分布式系统中生成全局唯一ID的关键技术。在现代互联网应用中,数据量往往庞大,单个数据库或服务器无法承载所有的业务需求,因此采用分布式架构成为必然选择。在这种环境下,如何保证各个...
结合上述信息,"idGenerate"这个文件很可能是包含了一个Java实现的分布式代码生成器项目,可能包含了Snowflake算法或者其他分布式ID生成策略的源代码。通过学习和理解这些代码,我们可以更好地掌握在Java环境中如何...
ShardingSphere 提供了分布式主键生成策略,可以确保在各个分片之间生成不重复的主键,确保数据的一致性。 4. **事务支持** 面对分库分表后的事务处理,ShardingSphere 提供了柔性事务解决方案,即在无法实现强...
此外,Sharding-JDBC还提供了其他数据分片策略,以及在分布式环境下的分布式主键生成策略,这些策略可以根据应用的特定需求进行配置和优化,以达到最佳的数据处理效果。通过这些功能,Sharding-JDBC帮助开发者解决...
Twitter开源的Snowflake算法是一种常用的分布式ID生成策略,它将ID分为三部分:时间戳(41位)、工作机器ID(10位)和序列号(12位)。通过这种方式,可以保证ID的全局唯一性,并且有序。 #### 3.2 UUID UUID...