N多个数据库,每个库N个表。每个表每月插入上亿的数据。而数据库选用的是MySql,不适合这么大数据量的存储。这就需要数据的备份和删除。优化检索速度。
设计思路:
1.把每个表的备份删除逻辑视为一个Job。则每个主线程开启N个Job。
2.Job中,先查询对应表的Min(Id)和Max(Id)。然后再开启子线程。每个子线程分配到的处理量为Max(Id)-Min(Id)/线程池数(步长)
3.这个表所有的子线程备份成功以后,执行删除逻辑。(此处借助Callable()接口的Future<>)
缺陷:
Callable()接口的Future<>具有阻塞作用,每个表的删除(上亿的数据,delete需要半小时左右),都会产生阻塞。程序会进入串行状态
改进:
子线程备份成功以后,先不执行删除逻辑,记录此表的Future<>,单独开启线程,删除已经备份成功的表