【冷熱分離】

飞翔在天發表於2024-03-10

參考:

冷熱分離--表資料量大讀寫緩慢最佳化

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、業務無法再修改冷資料:因為冷資料多到一定程度,系統承受不住,則冷資料可能還需要再分庫

相關文章