mybatis自定义插件之分表插件(一)设计 与 前期知识储备

本文探讨了一个MyBatis插件的实现,用于自动分表并支持查询、删除、更新和新增操作。插件着重解决多线程安全问题,采用分布式锁保证集群环境下的同步。在插入逻辑中,对比了两种检查表容量的方法,并提出了可能的效率问题。设计上,插入时若达到最大量则动态创建新表,查询逻辑和详细路由逻辑仍有待进一步阐述。博客作者分享了初步设计思路,并计划后续更新具体实现。

需求

想要做一个自动分表插件,支持分表查询、删除、更新和新增,并且新增时可以动态创建新表

关注点:

1. 插件内部做多线程安全保障。比如,由100个线程要插入数据,此时,数据表已经达到指定数量,那么就需要使得其中一个线程去完成创建新表任务,其它线程阻塞,然后创建完成后,通知其它线程切换为新表表名,这些线程开始运行,将操作定位到新表。

2. 第1点保证了单台机器内的表安全,在集群分布式情况下,还需要保证多态机器之间的同步,需要用到分布式锁。

设计

执行流程设计:

插入逻辑

1. 插入时,需要比对表是否已经达到最大量,比对的方式:
A. 每一次插入之前都select maxid一下,如果count值大于最大值,就建立新表再插入。
缺点:1. 每一次都要select maxid


B. 将每一次的最新maxID放在info表,每次查询info表的maxId进行比对,并且在插入成功后再进行info表最新maxID的更新。
缺点:查之前以及插入之后都会并发查询和更新该表的字段值,效率极具地下,肯定不可取

查询逻辑

 

 详细路由逻辑

 启动加载元数据逻辑

以上会在后期修改,谨在此记录



前期知识

基于mybatis的插件开发,需要了解相关的知识。下面黏贴出一些网上还不错的文章:

官方:

mybatis – MyBatis 3 | 配置

其它:

mybatis插件实现自定义改写表名_beiwangnull的博客-CSDN博客_mybatis 修改表名

如何用Mybatis分库分表 - palapala - 博客园
 

未完待续

后续会继续更新具体的实现,欢迎订阅。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值