成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

阿里終面:業務主表讀寫緩慢如何優化?

數據庫 其他數據庫
解決讀寫緩慢的問題冷熱分離是個不錯的選擇,上述介紹了三種方案實現冷熱分離,雖說都能實現,但是仍然要考慮諸多問題,最棘手的問題就是數據一致性的問題。

大家好,我是不才陳某~

無論多么復雜的業務場景,一條數據的一生都體現在CRUD操作上,正是創建、查詢、修改、刪除。正如人的生死輪回,數據亦是如此,一條數據隨著時間的流逝,其價值也是在逐漸變小。

數據存在的價值則是在于它被使用的程度,在不同的系統中,人們對于不同時期的數據有著不同的需求。

比如12306、攜程上的火車、機票訂單,人們往往只關注30天之內的訂單,而攜程正是默認只保留30天的訂單信息,超過30天的訂單需要通過手機號查找。

攜程訂單攜程訂單

攜程為什么要這么做?

其實仔細想想不難明白,作為全國購票平臺,每年數以億計的訂單,如果全部能夠開放操作(CRUD),那么系統將會瞬間崩潰。

一個訂單走到終態的標志則是這筆訂單的完成,也就意味著這筆訂單除了查詢的需求,不再任由用戶修改、刪除。

其實攜程所用的架構方法正是:冷熱分離。

什么是冷熱分離?

冷熱分離則是在處理數據時將數據庫分為熱庫和冷庫兩個庫。冷庫存放的是走到終態的數據,熱庫存放的是還需要修改的數據。

比如30天之內的機票、火車票訂單,用戶可能需要對這期間的訂單做出退票、開發票的操作,但是30天之前訂單卻只有查詢的需求,因此可以將30天之內的訂單放到熱庫中,之前的訂單存放到冷庫中。

那么這里又引出了兩個概念,分別是:

  • 熱數據:被頻繁更新;響應時間有要求
  • 冷數據:不允許更新(具體業務系統具體分析),偶爾被查詢;響應時間無要求。

什么情況下需要使用冷熱分離?

在大型的互聯網系統中,如果出現了以下場景則應該考慮冷熱分離:

  1. 主業務響應延遲太大,比如12306下訂單太慢了。
  2. 數據走到終態后,沒有更新需求,只有讀的需求,比如訂單的完成狀態。
  3. 用戶能夠接受新舊數據分開查詢,比如攜程的訂單查詢30天之前的需要用手機號查詢。

補充:當然現在有些系統不像攜程那樣將往期訂單分開查詢,但是其實內部也是做了冷熱分離,只不過是在你無感知的情況下完成的。

如何判斷一個數據是冷數據還是熱數據?

這個就要根據自己業務系統來區分了,一般而言是根據主表中的一個或者多個字段進行標識區分,比如訂單的時間,這個是時間維度,可以將3個月之前的數據定義為冷數據,最近3個月的數據定義為熱數據。

當然也可以是狀態維度,比如訂單的狀態,已完結的訂單定義為冷數據,未完結的訂單定義為熱數據。

同樣的也可以將時間維度和狀態維度組合起來,比如下單時間大于3個月且訂單狀態為已完結的定義為冷數據,反則為熱數據。

總之:根據自己業務需求,具體問題具體分析。

但是需要注意以下兩點:

  1. 如果一個數據被標識為冷數據,業務代碼不會再對它進行寫操作
  2. 不會同時存在讀冷/熱數據的需求。

如何實現冷熱數據分離?

一切的理論知識都要經過實戰的檢驗,基礎知識了解了,那么如何實現冷熱數據的分離呢?下面介紹三種常見的方法。

1、業務代碼修改

這種方案是直接修改業務代碼,對代碼的侵入性比較高,無法按照時間進行區分,在數據修改時觸發冷熱分離。

圖片圖片

該種方案需要在業務代碼層面判斷是否需要冷熱分離,比如訂單的狀態修改,一旦狀態為終態則將這條數據標記為冷數據,然后觸發冷熱處理,將其寫入冷庫,同時刪除熱庫中的這筆數據。

2、監聽數據庫日志

該種方案需要監聽binlog日志的方式進行觸發,比如訂單狀態修改了,則觸發冷熱分離。

同樣的這里無法按照時間區分,但是對代碼無侵入。

監聽binlog日志的工具有很多,前面介紹過,比如阿里的canal,還有其他的開源中間件可供選擇,如下:

圖片圖片

對于MySQL數據庫建議選擇canal,使用方式看:實戰!Spring Boot 整合 阿里開源中間件 Canal 實現數據增量同步!

整個流程如下圖:

圖片圖片

3、定時任務掃描

該種方案可以按照時間區分,與業務代碼解耦,是個不錯的選擇。

流程如下:

圖片圖片

總結

解決讀寫緩慢的問題冷熱分離是個不錯的選擇,上述介紹了三種方案實現冷熱分離,雖說都能實現,但是仍然要考慮諸多問題,最棘手的問題就是數據一致性的問題。

在冷熱分離的處理邏輯中一定要保證熱庫、冷庫中的數據一致性問題,手段很多,這里就不再過多介紹了。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2022-01-24 08:19:19

業務CRUD場景

2023-09-07 08:59:30

海量數據方案

2022-10-20 09:26:24

MySQLOracleSqlServer

2025-05-12 01:55:00

MySQL存儲數據

2021-03-24 09:23:45

代碼阿里應用分層

2020-12-04 06:35:20

TCPUDP阿里

2021-03-16 16:35:39

網關Java代碼

2021-07-19 09:27:42

SSD內存Linux

2022-08-15 08:34:08

OauthCAS登錄

2022-05-10 08:11:15

MySQL技巧結構

2022-05-11 15:57:16

優化SQL

2023-02-26 17:24:53

8G內存線程

2023-02-27 09:03:23

JavaCAS

2023-11-15 18:46:49

HBase數據庫開源

2021-04-25 09:58:48

mmapJava面試

2021-03-17 15:54:32

IO零拷貝方式

2022-04-01 11:26:19

緩存數據庫讀寫策略

2011-05-05 14:32:10

微軟Exchange

2015-10-15 09:05:06

2021-09-08 07:58:58

字節系統雙寫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久国产日韩欧美 | 91夜夜夜| 亚洲国产精品人人爽夜夜爽 | 91玖玖| 免费一区二区 | 在线观看的av | 偷牌自拍 | 国产高清久久 | 激情91| 日韩视频一区二区 | 欧美精品一区二区蜜桃 | 一区二区三区小视频 | 亚洲一区二区视频 | 免费日韩av网站 | 99re99| 四虎影院欧美 | 日本又色又爽又黄又高潮 | 国产精品久久久久久婷婷天堂 | 午夜资源| 羞羞视频在线观免费观看 | 国产亚洲精品精品国产亚洲综合 | 草久久 | 成人在线一区二区三区 | 麻豆视频在线免费观看 | 草b视频 | 一区二区三区四区电影视频在线观看 | 91精品国产高清一区二区三区 | 日韩精品久久久 | 色av一区二区 | 成人一区二区三区在线观看 | www视频在线观看 | 中文字幕国产一区 | 亚州精品天堂中文字幕 | 免费欧美视频 | 欧美日韩中文在线观看 | 国产 欧美 日韩 一区 | 在线国产视频 | av在线播放一区二区 | 97色伦网 | 99热激情 | 在线国产一区二区三区 |