备份数据的分布式历程

N多个数据库,每一个库N个表。每一个表每个月插入上亿的数据。而数据库选用的是MySql,不适合这么大数据量的存储。这就须要数据的备份和删除。优化检索速度。数据库

 

设计思路:大数据

1.把每一个表的备份删除逻辑视为一个Job。则每一个主线程开启N个Job。优化

2.Job中,先查询对应表的Min(Id)和Max(Id)。而后再开启子线程。每一个子线程分配到的处理量为Max(Id)-Min(Id)/线程池数(步长)线程

3.这个表全部的子线程备份成功之后,执行删除逻辑。(此处借助Callable()接口的Future<>)设计

缺陷:接口

Callable()接口的Future<>具备阻塞做用,每一个表的删除(上亿的数据,delete须要半小时左右),都会产生阻塞。程序会进入串行状态线程池

改进:程序

子线程备份成功之后,先不执行删除逻辑,记录此表的Future<>,单独开启线程,删除已经备份成功的表数据

相关文章
相关标签/搜索