@[toc]

為什麼要資料遷移
- 1.系統重構 (代碼跟不上現在的使用者量)
- 2.資料庫設計不合理,與sql 垃圾,導緻資料庫qps大大的降低,進而導緻資料庫挂掉
- 3.業務不斷增長,現有資源不夠用,戰略的轉移
當這些問題出現的時候,我們會選擇更好的系統架構 ,與解決方案,但是有個不可避免的問題 (資料遷移)當原有系統存在 幾十萬,幾百萬使用者資料的時候,我們就要考慮,這些使用者資料這樣才能完美的在新系統 或者新資料庫上應用
真實案例:
- 資料庫建立的不合理,資料格式錯亂,sql效率低下,導緻索引失效,使用者通路量達 C端項目,導緻資料庫伺服器和 應用伺服器天天挂,
- 是以決定系統重構,資料庫重新設計
- 在開發完成,項目上線前一個階段,就要設計要資料遷移
解決方案
- 導入固定的資料

- 導入使用者資料
記錄一次大規模資料庫遷移(java)為什麼要資料遷移真實案例:解決方案 - 做好之前資料庫以及現在測試資料庫的備份,以及快照
- 少于 5w 以下的資料可以使用 并且 資料格式一樣的資料可以使用
- into (select * from aa) 大于5w 以上的資料,就不能使用
- 大規模資料遷移方式,首先就要考慮多線程 方式,單線程方式可能需要哥好幾十個小時
- 如果跑代碼腳本的話 最好考慮 @asyc 注解式多線程操作
- 如果需要做關系,切記一定要加索引,當遷移百萬級别的資料的時候,就會發現索引的威力是多麼強大
案例
@PostMapping("move")
public ResultBody moveUnderOrderrelationship() {
for (int i = 1; i <50 ; i++) {
int pageNum = (i-1) * 10000;
undersService.moveUnderOrderrelationship(pageNum,10000);
}
return ResultBody.success();
}
@Async
public void moveUnderOrderrelationship(int pageNum, int pageSize) {
……
}
select * from *** limit #{pageNum},#{pageSize}