需求
想要做一个自动分表插件,支持分表查询、删除、更新和新增,并且新增时可以动态创建新表。
关注点:
1. 插件内部做多线程安全保障。比如,由100个线程要插入数据,此时,数据表已经达到指定数量,那么就需要使得其中一个线程去完成创建新表任务,其它线程阻塞,然后创建完成后,通知其它线程切换为新表表名,这些线程开始运行,将操作定位到新表。
2. 第1点保证了单台机器内的表安全,在集群分布式情况下,还需要保证多态机器之间的同步,需要用到分布式锁。
执行流程设计:
插入逻辑
1. 插入时,需要比对表是否已经达到最大量,比对的方式:
A. 每一次插入之前都select maxid一下,如果count值大于最大值,就建立新表再插入。
缺点:1. 每一次都要select maxid
B. 将每一次的最新maxID放在info表,每次查询info表的maxId进行比对,并且在插入成功后再进行info表最新maxID的更新。
缺点:查之前以及插入之后都会并发查询和更新该表的字段值,效率极具地下,肯定不可取
查询逻辑
详细路由逻辑
启动加载元数据逻辑
以上会在后期修改,谨在此记录