參考:
冷熱分離--表資料量大讀寫緩慢最佳化
https://www.bilibili.com/video/BV19j41137Wp?p=2&vd_source=898d5514be58985430a49b46d5500c13
一、什麼場景使用冷熱分離
表資料量大讀寫緩慢,需最佳化,如果滿足如下條件
1、資料走到終態後,只有讀沒有寫的需求,比如訂單完結狀態
2、使用者能接受新舊資料分開查詢,比如預設只查3個月內訂單,查詢3個月前需訪問單獨頁面
二、整體方案
三、冷熱分離實現思路
1、如何區分冷熱資料
基於時間維度:比如3個月前,是冷資料
基於狀態維度:比如資料到了終態
組合欄位:下單時間小於3個月且訂單狀態已完結為冷資料,其他為熱資料
// 如果一個資料被標識為冷資料,業務程式碼不會對它寫操作;不會同時存在讀冷/熱資料的需求
2、如何觸發冷熱資料分離
方案1:直接修改業務程式碼
方案2:監聽資料庫變更日誌
方案3:定時掃描資料庫
方案對比:
4、如何實現冷熱資料分離
需要考慮
1、一致性:同時修改多個資料庫,如何保證資料的一致性 關注操作冪等性
2、資料量大,一次處理不完,需進行批次處理
3、併發性
假如資料量大到需要分到多個地方並行處理,
在定時搬運冷如資料的場景,大到單執行緒批次處理都來不及
多執行緒併發分離邏輯:
1、如何啟動多執行緒:
方法1:啟動多個定時器(定時器間隔較短)
啟動2:執行緒池
2、某執行緒宣佈某個資料正在操作,其他執行緒不要動
3、某執行緒失敗退出,結果鎖沒釋放怎麼辦?
歷史資料如何遷移
給所有歷史資料加上標識 ColdFlag=WaitingForMove ,程式就會自動遷移
冷熱分離方案的不足
1、使用者查詢冷資料速度依舊很慢:假如查詢冷資料使用者只有1%,則沒問題
2、業務無法再修改冷資料:因為冷資料多到一定程度,系統承受不住,則冷資料可能還需要再分庫