JAVA后端開發——“全量同步”和“增量同步”

全量同步”和“增量同步”是數據處理、系統集成和數據庫領域中兩個基本概念。描述了兩種截然不同的數據同步策略,理解它們的區別對于設計任何數據系統都至關重要。

全量同步?

核心思想:全部替換,一步到位。

在技術上,全量同步通常意味著:

  1. 清空目標:將目標數據庫中的相關表完全清空 (TRUNCATE?或?DELETE)。

  2. 拉取全部:從源頭(如第三方API)獲取所有數據。

  3. 重新插入:將獲取到的所有數據全部插入到目標表中。

優點
  • 邏輯簡單:實現起來非常直觀,不需要復雜的判斷邏輯。

  • 數據強一致性:同步完成后,目標數據和源數據一定是完美匹配的。

缺點
  • 性能開銷巨大:無論數據是否變化,每次都要傳輸和處理全部數據,對網絡和數據庫造成巨大壓力。

  • 服務中斷:在“清空”和“完全插入”之間,存在一個數據服務不可用的時間窗口。數據量越大,中斷時間越長。

  • 不適合大數據量:當數據量達到百萬、千萬級別時,全量同步幾乎是不可行的。

增量同步?

在技術上,增量同步意味著:

  1. 識別變更:通過某種機制,找出自上次同步以來,源頭數據發生了哪些變化(新增、修改、刪除)。

  2. 應用變更:只對這些發生變化的數據,在目標數據庫中執行對應的?INSERT、UPDATE、DELETE?操作。

如何識別變更?

這通常需要源系統的支持,常見機制有:

  • 時間戳:基于記錄的?update_time?字段,只拉取時間戳晚于上次同步時間的數據。

  • 版本號/狀態位:通過版本號或一個專門的狀態字段來標記記錄是否被修改。

  • 日志/消息隊列:源系統將所有數據變更(增刪改)作為一個事件發送到消息隊列中,目標系統消費這些事件即可。

  • 比對:拉取全量數據在內存中與本地數據進行比對(效率較低,但有時是唯一選擇)。“標記-更新-清理”策略就是一種高級的比對方式。

優點
  • 性能極高:只傳輸和處理少量變更數據,網絡和數據庫開銷極小。

  • 服務無中斷:數據服務始終可用,用戶無感知。

  • 實時性強:可以實現非常高頻率的同步(例如每分鐘一次),甚至是準實時的。

缺點
  • 邏輯更復雜:需要精確地處理增、刪、改三種情況,尤其是“刪除”操作的識別往往比較棘手。

  • 可能依賴源系統:最高效的增量同步通常需要源數據表有良好的設計(如包含?update_time?字段)。

在任何需要長期、穩定運行的生產環境中,增量同步都是首選且專業的解決方案

“標記-更新-清理”策略詳解

“標記-更新-清理”是一種在源系統不提供增量變更日志的情況下,實現目標系統與源系統數據同步的高級策略。它通過一次全量數據的拉取和一次數據庫的?UPSERT?操作,在保證業務無中斷的前提下,以最小化的數據庫寫入開銷完成新增、更新和刪除的全流程同步。

第一階段:標記 (Mark)

在同步任務開始前,于應用程序內存中生成一個本次同步任務全局唯一同步標記(sync_marker),通常是一個UUID或時間戳。這個標記將作為識別“存活”數據的“通行證”。

第二階段:更新與應用標記 (UPSERT & Apply Mark)

此階段是策略的核心。程序會遍歷從源系統(API)獲取的全量數據集中的每一條記錄,并針對每一條記錄,向目標數據庫執行一條?UPSERT?SQL語句(在MySQL中即?INSERT ... ON DUPLICATE KEY UPDATE)。

這條?UPSERT?語句的構造至關重要:

  • INSERT?部分:包含了該記錄的所有業務字段以及本次任務的?sync_marker。

  • ON DUPLICATE KEY UPDATE?部分:同樣列出了所有可能需要更新的業務字段(用新值更新舊值),并且也必須包含對?sync_marker?字段的更新

  • UPSERT?這個詞本身是?UPDATE + INSERT?的組合,它的核心含義就是根據情況自動選擇執行?UPDATE?還是?INSERT。INSERT ... ON DUPLICATE KEY UPDATE?這個 SQL 語句正是?UPSERT?思想在 MySQL 中的具體實現。
  • INSERT ... ON DUPLICATE KEY UPDATE?是一個條件分支語句,這個分支判斷是由數據庫自動完成的,對我們寫代碼的人來說是透明的。

當這條“萬能”的?UPSERT?語句作用于數據庫中的一條已存在記錄時:

  1. 應用程序不會也無需在執行前對數據進行任何比對。它發送的指令,意圖上是要求更新所有業務字段和標記字段。

  2. 決策的復雜性被完全委托給了數據庫的存儲引擎(如InnoDB)。引擎在收到更新指令后,會先讀取記錄的當前值,然后逐個字段地將新值與舊值進行內部比對

  • 如果僅?sync_marker?字段的值不同,而所有業務字段的值均相同,引擎會識別出這幾乎是一次“空更新”。它只會執行一次輕量級更新,物理上僅修改?sync_marker?這個短字段,產生的I/O和日志開銷極小。
  • 如果業務字段和?sync_marker?字段的值都發生了變化,引擎則會執行一次重度更新,記錄并修改所有發生變更的字段。

因此,該策略通過發送一條統一的、看似復雜的更新指令,巧妙地利用了數據庫底層的優化機制,自動地、高效地完成了對不同變更情況的差異化處理,而無需增加應用層的代碼復雜度

第三階段:清理 (Sweep & Delete)

在所有源數據都完成?UPSERT?操作后,目標數據表中所有“存活”的記錄都已被標記上了新的?sync_marker。此時,執行一條簡單的?DELETE?語句:

DELETE FROM target_table WHERE sync_marker IS NULL OR sync_marker != 'current_sync_marker_value';

這條語句可以精準、高效地刪除掉那些在本次同步中未被“觸碰”(即在源系統中已不存在)的過時記錄。

與全量同步的區別

“標記-更新-清理”策略雖然在網絡層面與全量同步一樣需要拉取全量數據,但它通過將比對的復雜性下推給數據庫引擎,實現了在業務無中斷的前提下,對數據庫的寫入操作進行最小化,從而在可用性、性能、數據一致性上,全面超越了傳統的“先刪后插”式全量同步。它是一種用中等實現復雜度換取系統在生產環境中穩定、高效運行的專業解決方案。

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

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

相關文章

修改CentOS的SSH登錄端口(22端口)

要修改CentOS系統的SSH服務默認端口(22端口),請按照以下步驟操作: 備份SSH配置文件 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak編輯SSH配置文件 sudo vi /etc/ssh/sshd_config查找并修改端口設置 找到以下行(大約在第13行左右):…

python導包機制-更優方式

在學習某個大模型應用的后端時,發現: xxx |-----src |------\---modules |------\------\------b.py |-----app.py在app.py中可以使用src.modules.b來進行導入。之前我導入時是形如.modules.b這種形式(前面有.),但是當…

檢索召回率優化探究一:基于 LangChain 0.3集成 Milvus 2.5向量數據庫構建的智能問答系統

背景 基于 LangChain 0.3集成 Milvus 2.5向量數據庫構建的 NFRA(National Financial Regulatory Administration,國家金融監督管理總局)政策法規智能問答系統,第一個版本的檢索召回率是 79.52%,尚未達到良好、甚至是優…

《整合Spring Cache:本地緩存、Redis與Caffeine對比實踐》

🚀 整合Spring Cache:本地緩存、Redis與Caffeine對比實踐 📌 前言 在高并發、高性能的系統設計中,緩存始終扮演著不可替代的角色。Spring Cache 作為 Spring 框架原生提供的緩存抽象層,極大簡化了緩存接入的復雜度。…

easyexcel填充方式導出-合并單元格并設置邊框

填充的模板最后導出效果實體 /*** 賬戶實體類* author test* date 2025-07-28*/ Getter Setter class Test {/*** 賬戶類型*/private String accType;/*** 賬戶余額*/private String money; }導出邏輯 /*** 導出文件邏輯*/ public void exportReport(List<Test> data) { …

Jenkins + SonarQube 從原理到實戰一:基于 K8s 部署與使用(含中文插件與 Python 掃描)

前言 公司開發部門希望在 Jenkins 構建過程中自動集成 C/C 的代碼掃描&#xff0c;正好我也沒接觸過 SonarQube&#xff0c;于是記錄下從零開始部署 SonarQube 服務并集成到 CI/CD 的過程&#xff0c;供后來者參考。 一、SonarQube 原理與工作機制詳解 1.1 什么是 SonarQube&…

Linux(Centos 7.6)命令詳解:sz

1.命令作用使用ZMODEM/YMODEM/XMODEM協議發送文件(Send file(s) with ZMODEM/YMODEM/XMODEM protocol)注意: 需要yum install lrzsz (yum provides sz可以查看rz命令是什么rpm包提供的)2.命令語法Usage: sz [options] file ...or: sz [options] -{c|i} COMMAND3.參數詳解OPTION…

智能運維中的數據轉換

《智能運維實踐 蘇娜 孫琳 王鴿著 人工智能技術叢書 自然語言處理的常用算法 日志異常檢測 根因定位 網絡流量異常檢測 清華大學出版社》【摘要 書評 試讀】- 京東圖書 數據轉換是數據預處理中的關鍵步驟&#xff0c;用于將數據從原始格式轉換為適合分析和建模的形式。這一過程…

IAR編輯器如何讓左側的工具欄顯示出來?

在IAR編輯器中恢復左側工具欄顯示&#xff0c;可通過以下方法操作&#xff1a; 一、通過菜單欄啟用工具欄 ?進入視圖菜單? 點擊頂部菜單欄的 ?"View"? → 在彈出列表中勾選 ?"Workspace"? 若工具欄仍不顯示&#xff0c;查看菜單欄右側是否有 ?"…

ADB+Python控制(有線/無線) Scrcpy+按鍵映射(推薦)

要實現電腦通過鍵盤控制安卓平板屏幕點擊的功能&#xff0c;可以采用以下方案&#xff1a; 方案一&#xff1a;ADBPython控制&#xff08;有線/無線&#xff09; 準備工具&#xff1a; 安卓平板開啟開發者模式&#xff08;設置→關于平板→連續點擊版本號&#xff09;啟用USB調…

同態濾波算法詳解:基于頻域變換的光照不均勻校正

&#x1f3ad; 同態濾波&#xff1a;圖像頻域的調音師技術“如同調音師在音頻處理中分離并調節不同頻率成分&#xff0c;同態濾波能夠在圖像頻域中精確分離光照與細節信息。”&#x1f3af; 圖像頻域調音的技術挑戰 在數字圖像處理中&#xff0c;光照不均勻問題如同音頻中的混響…

Ubuntu簡述及部署系統

1.什么是Ubuntu1.1概述Ubuntu屬于Debian系列&#xff0c;Debian是社區類Linux的典范&#xff0c;是迄今為止最遵循GNU規范的Linux系統。Debain最早由lan Murdock于1993年創建&#xff0c;分為三個版本分支&#xff08;branch&#xff09;&#xff1a;stable&#xff0c;testing…

Claude Code安裝部署

1??安裝 Node.js&#xff08;已安裝可跳過&#xff09; 確保 Node.js 版本 ≥ 18.0 # Ubuntu / Debian 用戶 curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo bash - sudo apt-get install -y nodejs node --version# macOS 用戶 sudo xcode-select --install /b…

MATLAB近紅外光譜分析技術及實踐技術應用

專題一、MATLAB編程基礎與進階&#xff08;一&#xff09;1、MATLAB 安裝、版本歷史與編程環境2、MATLAB 基礎操作&#xff08;矩陣操作、邏輯與流程控制、函數與腳本文件&#xff09;3、MATLAB文件讀寫&#xff08;mat、txt、xls、csv、jpg、wav、avi等格式&#xff09;專題二…

SQLFluff

一、SQLFluff 是什么&#xff1f; SQLFluff 是一個??開源的 SQL 代碼質量工具??&#xff0c;專注于通過自動化方式提升 SQL 代碼的可讀性、一致性和規范性。其核心功能包括&#xff1a; ??代碼格式化??&#xff1a;自動調整縮進、空格、換行等格式問題&#xff0c;支…

盲盒抽卡機小程序系統開發:連接線上線下娛樂新橋梁

在互聯網技術的推動下&#xff0c;線上線下融合已經成為娛樂行業發展的必然趨勢。盲盒抽卡機&#xff0c;這一原本在線下備受歡迎的娛樂項目&#xff0c;通過小程序系統的開發&#xff0c;成功實現了線上線下的無縫對接&#xff0c;成為連接線上線下娛樂的新橋梁。盲盒抽卡機小…

【SSL證書校驗問題】通過 monkey-patch 關掉 SSL 證書校驗

標簽&#xff1a;Python、SSL、monkey-patch、httpx、aiohttp、requests、OpenAI 1 為什么會有這篇文章&#xff1f; 在本地調試 OpenAI 代理、數據抓取、私有服務、訪問外網 時&#xff0c;經常會碰到如下報錯&#xff1a; SSLCertVerificationError: [SSL: CERTIFICATE_VER…

VMWARE -ESXI-ntp時間同步無法啟動異常處理

從服務界面查看NTP服務是停止的&#xff08;手動啟動無效&#xff09;嘗試到系統-時間設置-添加服務-網絡時間協議&#xff0c;添加阿里云NTP服務器&#xff08;網絡可達&#xff09; ntp.aliyun.com 點擊確定報錯-無法更改主機配置出現上面的情況多半是DNS沒有設置ssh登錄到服…

yolo11分類一鍵訓練工具免安裝環境windows版使用教程

這個是windows上用于yolo11分類訓練工具&#xff0c;不需要寫代碼只需要按照要求擺放好分類圖片文件夾就可以訓練。軟件內置cuda和python模塊&#xff0c;因此不需要安裝python環境和cuda就可以使用。注意需要電腦配備有nvidia顯卡才能使用。要求顯存>4GB。首先我們打開軟件…

2025年-ClickHouse 高性能實時分析數據庫(大綱版)

告別等待&#xff0c;秒級響應&#xff01;這不只是教程&#xff0c;這是你駕馭PB級數據的超能力&#xff01;我的ClickHouse視頻課&#xff0c;凝練十年實戰精華&#xff0c;從入門到精通&#xff0c;從單機到集群。點開它&#xff0c;讓數據處理速度快到飛起&#xff0c;讓你…