spring 分库事物实现

本文介绍了一种在Spring框架下处理数据库分库及跨库事务管理的方法。为了解决大规模数据处理的问题,通过哈希算法将数据分布于多个库中,并为每个库配置独立的事务管理器,最终通过自定义的服务管理器实现跨库事务的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在spring的事物控制中一般是针对一个库的。我们现在又这样一个情况。为了应对业务的增长,数据量将来的膨胀。我们的数据将这样保存:

1.我们的数据将按照id进行哈希,然后存放到1000张明细表中。

2.由于使用的是mysql,需要考虑到性能,我们还需要记录数据的统计值。这个数据也要通过同一个id的哈希值,分别存放到1000张统计表中。

      *3.保证数据的事物性操作,即统计表的值要和明细表的数值保持一致。

  4.为了降低数据库的压力,我们将1000张明细表和1000张总表,分成8个库(这个数量可以在数据库压力增大时,再次分库)。每个库125*2张表。

 

spring的事物控制管理是由一个事物代理完成的。代理只支持单个库。也就是我们只能注入一个dataSource。

 

   这样是不能支持我们的分库设计的。所以我们将数据库分别生成不同的事物代理,然后通过一个事物管理器控制。


 

当外部进行操作时,我们将针对id的哈希值来定位数据库,通过一个事物管理器,采用相对应的spring事物代理。

 

将按照数据库的事物代理,封装到一个map中。并且注入到一个事物管理器中。

 


下面是分库事物管理器类的实现:

com.du.service.support.DubaiServiceManager

 

当调用时,使用public Object getServiceBean(String objId) 方法获取相应的事物管理器。

 

 

以上是我实现spring分库事物的方法,其实还很不成熟。有些冗余,有些笨重,希望有更好实现方法的牛人留言!谢谢了!


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值