【工作中場景以及解決方案系列二】沒有終態的資料狀態的批處理修改
前言
該系列的上一篇文章講解了有終態的資料狀態的批處理修改,萬物皆如此,有黑就有白,又反就有正,那麼有終態就會有沒有終態。小夥伴們再看完上一篇文章想到這種場景了沒?如果沒有就細細看一下這篇文章哦~
場景解釋(無終態的資料狀態的批處理修改)
有終態的場景,現實邏輯中有很多,因為有開始就有介紹嘛,比如一個專案的結束,一場電影的結束。。。。
那麼無終態的場景呢?相信大家都會或多或少在玩遊戲或者其他涉及到賬號相關的時候會遇到封號或者賬號過期失效再啟用的場景,對於這樣的賬號來說,有賬號終態嗎?是啟用?還是失效?顯然都不是,他們是一個迴圈,會不斷的變更狀態我這樣去說相信大家應該領悟到無終態的資料狀態的批處理修改的場景了吧
場景示例
身份證實名資訊同步:因為身份證有有效期,而且可能會進行修改名字,同時也不排除身份證號的修改,所以是沒有終態;
賬號的凍結和解凍;
解決方案
相對於有終態的資料,無終態不會出現多次重複執行的情況,但是出現了大資料量分批執行如何在保證執行一遍不會重複執行前面資料,譬如:一共5000條資料,我一次執行500條資料,我下一次的執肯定不能包括這次執行的500條資料,也就是說我全部執行完要10次。
顯然我們在上一篇文章中用資料庫的一個執行狀態位是不能解決的,有人會說為啥不能解決呢,我執行完一組資料就修改這一組的執行狀態表示這批次的資料已經執行完畢,等全部資料執行完以後,發現沒可執行的資料了,再把所有資料的執行狀態修改為未執行,不可否認,這種方案可行,但是面對千萬級別的資料量,所有資料修改一次狀態所消耗的io資源是多少,會不會因為頻繁的刷表,機器完全扛不住呢?
這時又有人會說,我可以記錄一個update的時間,每次通過時間去判斷是否執行過,雖然相對於上一種方法減少了一次的修改狀態的操作,但是你全部執行完一遍也是需要全部修改一遍資料的,我們都知道,對於這樣資料我們應該只對有修改的資料進行update,沒有修改就直接continue了。那這也不行,那也不行,那你說怎麼辦吧。
首先我們看一下這個需求的關鍵點是什麼呢?其實就是如何標記已經執行過的資料,而且還不影響下一輪的執行。無非需要一個標識位罷了。
這裡我引入了快取,我用的是redis,你們也可以用一個資料庫的標識,常亮標識都行。我首先對要處理的資料進行排序,用主鍵ID,每次執行一批次資料,然後記錄最後一個ID(我用的是升序),下次在執行大於這個ID的一批次資料,在最後一次執行發現執行數量小於我一批次要執行的數量,ID置0,不就解決了嘛= ̄ω ̄=
總結
總結一下我為啥要用快取,因為Redis快取可以在服務叢集部署或者是多執行緒的執行保證標識位的修改是原子性的,也就不會出現沒有執行或者多執行的情況。也同時想為後面的分享做一點基礎,讓大家先了解一下快取和叢集的概念。
相關文章
- 工作流從無狀態切換到有狀態的好處
- 行業動態 | 每日處理2500萬事務資料的IoT解決方案行業
- sqlsever處理資料庫的恢復掛起狀態SQL資料庫
- [ARM] ARM處理器的7種工作模式和2種工作狀態模式
- 億萬級資料處理的高效解決方案
- 解決Mybatisplus中沒有Db類靜態工具的方案--提高版本MyBatis
- SQLServer資料庫處於恢復掛起狀態的解決辦法SQLServer資料庫
- Android透明狀態列解決方案Android
- 介面異常狀態統一處理方案在 Firefox 下無效的原因和解決方案Firefox
- 處理物件的多種狀態及其相互轉換——狀態模式(五)物件模式
- 處理物件的多種狀態及其相互轉換——狀態模式(四)物件模式
- 處理物件的多種狀態及其相互轉換——狀態模式(一)物件模式
- 有沒有動態建立資料表的輪子?
- 單元件多UI形態的終極解決方案(React)元件UIReact
- 叢集故障處理之處理思路以及健康狀態檢查(三十二)
- 有狀態和無狀態的區別
- Elasticsearch上建立的index是yellow健康狀態的解決方案ElasticsearchIndex
- informix CKPT REQ 狀態處理!ORM
- 5 個處理狀態列的函式函式
- 巧用狀態值處理複雜的 TableViewView
- RAC中unknown 狀態的處理方式
- Jtti:SQLServer資料庫處於恢復掛起狀態的解決辦法JttiSQLServer資料庫
- 淺談前端的狀態管理,以及anguar的狀態管理庫前端
- mock以及特殊場景下對mock資料的處理Mock
- 資料管理方案Portworx是如何幫助有狀態應用做容災的?
- 關於有狀態和無狀態會話bean的解釋 (轉)會話Bean
- 結合具體場景,聊聊 React 的狀態管理方案React
- Tree元件的快速定位更新節點的狀態,以及修改節點的資料屬性等操作元件
- WebRTC ICE 狀態與提名處理Web
- [20170425]變態的windows批處理1.txtWindows
- [20170425]變態的windows批處理2.txtWindows
- Oracle資料庫的靜默狀態和掛起狀態Oracle資料庫
- 監控Nginx的工作狀態Nginx
- 工作混沌狀態
- 形態學影像處理(二)
- 介面異常狀態統一處理方案:優先業務端處理,再按需統一處理。
- 用設計模式去掉沒必要的狀態變數 —— 狀態模式設計模式變數
- 有狀態Stateful,富含資料的CI/CD怎麼做?