N多個數據庫,每一個庫N個表。每一個表每個月插入上億的數據。而數據庫選用的是MySql,不適合這麼大數據量的存儲。這就須要數據的備份和刪除。優化檢索速度。數據庫
設計思路:大數據
1.把每一個表的備份刪除邏輯視爲一個Job。則每一個主線程開啓N個Job。優化
2.Job中,先查詢對應表的Min(Id)和Max(Id)。而後再開啓子線程。每一個子線程分配到的處理量爲Max(Id)-Min(Id)/線程池數(步長)線程
3.這個表全部的子線程備份成功之後,執行刪除邏輯。(此處藉助Callable()接口的Future<>)設計
缺陷:接口
Callable()接口的Future<>具備阻塞做用,每一個表的刪除(上億的數據,delete須要半小時左右),都會產生阻塞。程序會進入串行狀態線程池
改進:程序
子線程備份成功之後,先不執行刪除邏輯,記錄此表的Future<>,單獨開啓線程,刪除已經備份成功的表數據