Spring 分批處理 + 冷熱數據分離:歷史訂單高效遷移與數據清理實戰

在實際業務中,隨著時間推移,訂單量持續增長,若未及時進行數據治理,會造成數據庫膨脹、查詢緩慢、性能下降等問題。為了實現數據分層管理和系統高性能運行,我們在項目中采用了“冷熱數據分離 + 分批遷移 + 數據清理”的綜合方案。

本文將圍繞以下幾個核心點展開:

  • ? 為什么要進行冷熱數據分離?

  • ? 如何用分批分頁遷移歷史訂單?

  • ? 如何在遷移完成后安全刪除同步表數據?


🔍 一、為什么要冷熱數據分離?

隨著訂單業務增長,即使采用分庫分表,數據總量依舊快速膨脹。對歷史訂單的訪問熱度遠遠低于進行中訂單。因此我們有必要:

  • 熱數據(15日內未完成訂單)保存在主訂單表,供高頻訪問;

  • 冷數據(15日前完成訂單)歸檔到歷史訂單表,減少主庫壓力;

  • 提升整體系統性能和數據庫查詢效率。

?注意:雖然阿里云 OSS 等對象存儲價格低,但不支持復雜查詢操作(如 SQL 聚合、分頁、統計),無法滿足用戶和運營的歷史訂單檢索與分析需求,因此必須選擇支持查詢的數據庫,如分布式數據庫 TiDB。


🔄 二、分批分頁遷移:保證性能和穩定性

? 核心思想:

  • 一次遷移 1000 條數據,控制內存和 SQL 壓力;

  • 使用 offset + limit 實現分頁;

  • 按天定時遷移前一天完成的訂單;

  • 保證數據完整性,支持失敗重試。

🔧 遷移代碼示例:

@Override
public void migrate() {log.debug("歷史訂單遷移開始...");int offset = 0, perNum = 1000;LocalDateTime startTime = DateUtils.getDayStartTime(DateUtils.now().minusDays(1));LocalDateTime endTime = DateUtils.getDayEndTime(DateUtils.now().minusDays(1));Integer total = historyOrdersSyncService.countBySortTime(startTime, endTime);if (total <= 0) return;while (offset < total) {baseMapper.migrate(startTime, endTime, offset, perNum);offset += perNum;}log.debug("歷史訂單遷移結束。");
}

🧹 三、遷移完成后,如何安全刪除同步表數據?

在實現冷熱分離過程中,我們使用中間同步表(用于異步遷移),為避免數據重復、節省空間,遷移完成后需及時刪除同步表中已處理的數據。

為了防止誤刪或未遷移完全,我們加入了刪除前校驗機制

🛡 刪除邏輯及校驗示例:

@Override
public void deleteMigrated() {LocalDateTime startTime = DateUtils.getDayStartTime(DateUtils.now().minusDays(1));LocalDateTime endTime = DateUtils.getDayEndTime(DateUtils.now().minusDays(1));// 1. 檢查是否存在可刪除數據Integer totalOfDelete = historyOrdersServeSyncService.countBySortTime(startTime, endTime);if (totalOfDelete <= 0) {log.debug("無遷移服務單數據需要刪除");return;}// 2. 校驗遷移是否完整Integer totalMigrated = lambdaQuery().between(HistoryOrdersServe::getSortTime, startTime, endTime).count();if (NumberUtils.null2Zero(totalMigrated) <= 0 || totalOfDelete > totalMigrated) {log.error("服務單未完全遷移,同步數據刪除失敗");return;}// 3. 刪除同步表中已遷移數據historyOrdersServeSyncService.deleteBySortTime(startTime, endTime);
}

?? 刪除保障機制:

校驗項描述
數量比對同步表中“待刪除數量”必須 ≤ 歷史表中“已遷移數量”
分時間段刪除與遷移都按天執行,避免大批量誤刪
日志記錄失敗及時報警,便于排查

🧠 四、架構補充說明

🔗 為什么不直接刪除主表而使用同步表?

  • 避免直接影響主庫性能;

  • 支持異步、可重試的遷移策略;

  • 可配合 binlog + MQ 實現實時同步機制。

💽 使用 TiDB 存儲歷史數據的優勢:

  • 支持 MySQL 協議,易于對接;

  • 同時支持 OLTP 和 OLAP 查詢(HTAP);

  • 分布式架構,水平擴展,適合大規模數據歸檔。


? 總結

歷史訂單遷移不僅是技術優化,更是數據治理的關鍵環節。

本方案通過以下幾個方面保證效率與穩定:

  • 使用分頁遷移,避免性能瓶頸;

  • 同步表中間態設計,解耦遷移流程;

  • 增加數據完整性校驗與清理邏輯;

  • 結合 定時任務 實現每日自動遷移與清理;

  • 歷史數據存儲選擇 支持 SQL 的分布式數據庫(如 TiDB),滿足查詢與統計需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78189.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

新手SEO優化核心步驟

內容概要 對于SEO新手而言&#xff0c;建立系統化的優化框架是突破入門瓶頸的關鍵。SEO的核心在于通過技術手段與內容策略的結合&#xff0c;提升網站在搜索引擎中的可見性與用戶價值。具體而言&#xff0c;新手需優先掌握關鍵詞研究&#xff0c;明確目標用戶的搜索意圖&#…

C++ 之 【list的簡介、list 的構造函數、iterator、容量操作、元素訪問、增刪查改與迭代器失效】

目錄 1.list的介紹 2.list的使用 2.1 構造函數 2.2 iterator 的使用 2.3 容量操作 2.4 元素訪問 2.5 增刪查改 2.5.1頭插頭刪與尾插尾刪 2.5.2 insert 、erase 函數 2.5.3 clear、swap函數 2.5.4 關于find函數 3.迭代器失效 1.list的介紹 (1)list的底層通常實現為帶…

Laravel Octane 項目加速與靜態資源優化指南

Laravel Octane 項目加速與靜態資源優化指南 一、Octane 核心加速配置 擴展安裝與環境配置 composer require laravel/octane # 安裝核心擴展?php artisan octane:install # 生成配置文件&#xff08;選擇 Swoole/RoadRunner 等服務器&#xff09;?服務器參數調優? …

高露潔牙膏是哪個國家的品牌?高露潔牙膏哪一款最好?

高露潔是來自于美國一個比較有知名度的品牌&#xff0c;在1806年的時候創立。總部是在美國紐約公園大道&#xff0c;在1873年時&#xff0c;高露潔就已經開始銷售罐裝牙膏。 在1896年時期推出可折疊管牙膏&#xff0c;在口腔護理產品發展的過程中擁有著不容忽視的地位。在1992…

【Python爬蟲詳解】第八篇:突破反爬體系的工程實踐

當矛與盾的較量進入白熱化&#xff0c;突破反爬需要的不只是技巧&#xff0c;更是一套完整的工程化解決方案——本文將揭示對抗現代反爬體系的九大核心戰術。 一、JavaScript混淆的深度破解 1. AST&#xff08;抽象語法樹&#xff09;解混淆 案例&#xff1a;某電商平臺商品價…

【Linux調整FTP端口】

Linux調整FTP端口 一、確保新端口未被占用在修改端口之前&#xff0c;可以使用以下命令檢查端口是否被占用&#xff1a; 二、修改vsftpd配置文件1. 打開vsftpd配置文件2. 找到并修改端口配置3. 保存并退出4. 重啟vsftpd服務 三、配置防火墻 在Linux系統中修改FTP端口&#xff0…

npm打包內存不足- JavaScript heap out of memory

直接貼出報錯信息 <--- Last few GCs --->[30904:0000010F60FE58E0] 22090 ms: Scavenge 2037.4 (2069.4) -> 2036.4 (2074.2) MB, 2.5 / 0.0 ms (average mu 0.228, current mu 0.216) allocation failure [30904:0000010F60FE58E0] 22101 ms: Scavenge 2…

AI大語言模型破譯“未知未知”的密鑰:開源情報、被動收入與智能體協作的深層機理與實踐

在人類認識世界的漫長征程中&#xff0c;信息與知識的獲取和運用一直是核心驅動力。我們從“一無所知”的狀態&#xff0c;逐漸積累“已知已知”&#xff0c;并在此基礎上識別“已知未知”&#xff0c;設定目標去探索解答。然而&#xff0c;真正能夠帶來范式轉變、顛覆現有格局…

kubelet 清理資源以緩解磁盤壓力

kubelet 資源清理緩解磁盤壓力指南 在 Kubernetes 集群中&#xff0c;當節點磁盤壓力過大時&#xff0c;可通過以下幾種方式利用 kubelet 清理資源&#xff0c;從而緩解磁盤壓力。 一、鏡像垃圾回收 自動回收 kubelet 內置了鏡像垃圾回收機制&#xff0c;其行為由配置參數控…

SPOJ 11576 TRIP2 - A Famous King’s Trip 【Tarjan+歐拉回路】

自我吐槽 &#xff08;哭 題目傳送門 SPOJ 洛谷 題目大意 讓你在簡單無向圖上刪去2條邊&#xff0c;使該圖聯通并存在歐拉回路 輸出字典序最小的一對邊 思路 考慮到存在歐拉回路的充要條件&#xff0c;即 i n x ≡ 0 ( m o d 2 ) ? i ( 1 ≤ i ≤ n ) in_x\equiv 0 (\m…

藏文情感分析器入門學習實踐

&#x1f3af; 項目目標&#xff1a; 輸入一段藏文短句。自動分析這句話的情感傾向&#xff1a;積極&#xff08;正面&#xff09;/消極&#xff08;負面&#xff09;/中立。 &#x1f50d; 技術原理簡介 情感分析是什么&#xff1f; 情感分析&#xff08;Sentiment Analysi…

雙指針(5)——有效三角形個數

題目&#xff1a; 這道題我們首先可能會想到暴力解法&#xff0c;三個for循環然后進行check&#xff08;&#xff09;。時間復雜度肯定是不允許的。 同時&#xff0c;驗證可以組成三角形的條件是任意兩邊之和大于第三邊&#xff0c;這就意味著我們每組要進行三次比較。但也有捷…

書生實戰營之沐曦專場

一&#xff1a;實驗環境進入和啟動實驗容器(D.run平臺) 1.1首先進入平臺進行注冊 D.run平臺https://console.d.run/ 注冊和登錄環節就跳過了。 1.2 啟動實驗容器--詳細步驟如下 1.2.1選擇容器的名稱、區域、鏡像&#xff08;注意鏡像必須選擇Dlinfer&#xff09; 1.2.2可以選…

內置類型成員變量的初始化詳解

在 C 中&#xff0c;內置類型&#xff08;如 int、float、double、char、指針等&#xff09;的初始化方式與類類型&#xff08;如 std::string、自定義類&#xff09;不同。由于內置類型沒有構造函數&#xff0c;它們的初始化行為由編譯器直接處理。以下是詳細解析&#xff1a;…

對第三方軟件開展安全測評,如何保障其安全使用?

對第三方軟件開展安全測評&#xff0c;能夠精準找出軟件存在的各類安全隱患&#xff0c;進而為軟件的安全使用給予保障。此次會從漏洞發現、風險評估、測試環境等多個方面進行具體說明。 漏洞發現情況 在測評過程中&#xff0c;我們借助專業技術與工具&#xff0c;對第三方軟…

11.Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文檔

Spring Boot 3.1.5 中使用 SpringDoc OpenAPI&#xff08;替代 Swagger&#xff09;生成 API 文檔 1. 項目結構 假設項目名為 springboot-openapi-demo&#xff0c;以下是項目的基本結構&#xff1a; springboot-openapi-demo/ ├── src/ │ ├── main/ │ │ ├─…

python入門(1)變量與輸入輸出

一、變量 使用規則 變量名值例子 a13變量名規則 變量名可以用大小寫字母、數字、下劃線。 數字、下劃線不可開頭 例子 name name1 1name name_first _first 二、輸入輸出 輸出print print(*objects,sep"",end"\n") objects:多個要輸出的值 sep:每個…

TS 安裝

TS較JS優勢 1 TS靜態類型編程語言。編譯時發現錯誤 2 類型系統 強化變量類型概念 3 支持新語法 4 類型推斷機制 可以和React框架中的各種hook配合 5 任何地方都有代碼提示 tsc 命令 將TS轉為JS 1 tsc 文件.ts 生成 js文件 2 執行JS代碼

Linux-常用監控工具

以下是對 Linux 系統中常用監控工具&#xff08;netstat、ss、dmesg&#xff09;的系統性介紹&#xff0c;涵蓋其核心功能、典型用法及實際應用場景&#xff0c;幫助您分析系統狀態和內核參數調整后的效果&#xff1a; 1. netstat -s&#xff1a;網絡協議棧統計監控 功能 net…

Linux系統:詳解文件描述符與重定向原理以及相關接口(open,read,write,dup2)

本節重點 從狹義與廣義角度理解文件理解文件描述符掌握open,write,read系統調用理解重定向的概念與原理掌握重定向的指令操作stdout與stderr的比較為什么存在stderr&#xff1f; 一、理解“文件” 1.1 狹義角度 在狹義層面&#xff0c;Linux文件是磁盤或存儲設備上連續或分…