備份數據的分佈式歷程

N多個數據庫,每一個庫N個表。每一個表每個月插入上億的數據。而數據庫選用的是MySql,不適合這麼大數據量的存儲。這就須要數據的備份和刪除。優化檢索速度。數據庫

 

設計思路:大數據

1.把每一個表的備份刪除邏輯視爲一個Job。則每一個主線程開啓N個Job。優化

2.Job中,先查詢對應表的Min(Id)和Max(Id)。而後再開啓子線程。每一個子線程分配到的處理量爲Max(Id)-Min(Id)/線程池數(步長)線程

3.這個表全部的子線程備份成功之後,執行刪除邏輯。(此處藉助Callable()接口的Future<>)設計

缺陷:接口

Callable()接口的Future<>具備阻塞做用,每一個表的刪除(上億的數據,delete須要半小時左右),都會產生阻塞。程序會進入串行狀態線程池

改進:程序

子線程備份成功之後,先不執行刪除邏輯,記錄此表的Future<>,單獨開啓線程,刪除已經備份成功的表數據

相關文章
相關標籤/搜索