變更數(shù)據(jù)捕獲(CDC)技術(shù)
一種用于捕獲源數(shù)據(jù)庫中數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)(也稱為模式)的增量變更,并將這些變更近乎實(shí)時(shí)地傳播到其他數(shù)據(jù)庫或應(yīng)用程序的技術(shù)。
變更數(shù)據(jù)捕獲(Change Data Capture,簡稱CDC)是一種用于捕獲源數(shù)據(jù)庫中數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)(也稱為模式)的增量變更,并將這些變更近乎實(shí)時(shí)地傳播到其他數(shù)據(jù)庫或應(yīng)用程序的技術(shù)。它在高速數(shù)據(jù)流通環(huán)境中,特別是在各種關(guān)系型數(shù)據(jù)庫、云端數(shù)據(jù)庫以及數(shù)據(jù)倉庫之間,提供了低延遲、高可靠性且可擴(kuò)展式數(shù)據(jù)復(fù)制的理想化解決方案。
CDC的主要優(yōu)勢(shì)在于,它僅發(fā)送增量的變更,從而降低了通過網(wǎng)絡(luò)傳輸數(shù)據(jù)的成本。此外,CDC還可以幫助用戶根據(jù)最新的數(shù)據(jù)做出更快、更準(zhǔn)確的決策。
在SQL Server中,CDC的實(shí)現(xiàn)依賴于事務(wù)日志。當(dāng)對(duì)表啟用CDC時(shí),系統(tǒng)會(huì)生成一個(gè)與該表結(jié)構(gòu)類似的副本。當(dāng)對(duì)源表進(jìn)行插入、更新和刪除操作時(shí),這些操作的信息會(huì)被記錄在事務(wù)日志中。CDC代理使用異步進(jìn)程讀取這些事務(wù)日志,并將相關(guān)操作結(jié)果應(yīng)用到副本表(捕獲實(shí)例表)中,從而實(shí)現(xiàn)了對(duì)源表操作的記錄跟蹤。
值得注意的是,CDC并非適用于所有情況。它僅在SQL Server的特定版本(如Enterprise Edition、Developer Edition和Evaluation Edition)中可用,并且需要SQL Agent服務(wù)的支持。此外,執(zhí)行CDC的用戶需要具有sysadmin角色權(quán)限。
CDC極大的提高了數(shù)據(jù)集成效率,消除了批量的高延時(shí)問題。CDC解決方案最常發(fā)生在數(shù)據(jù)倉庫環(huán)境中,因?yàn)椴东@和保存數(shù)據(jù)的跨時(shí)的狀態(tài)是數(shù)據(jù)倉庫的核心功能之一。CDC主要面向關(guān)系數(shù)據(jù)庫、遺留系統(tǒng)、大型機(jī)以及基于文件的數(shù)據(jù)庫等數(shù)據(jù)源。CDC廣泛應(yīng)用于數(shù)據(jù)倉庫實(shí)時(shí)數(shù)據(jù)供給、實(shí)時(shí)商務(wù)智能、跨越多種異構(gòu)數(shù)據(jù)庫和操作系統(tǒng)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)同步、主數(shù)據(jù)同步、數(shù)據(jù)備份與容災(zāi),數(shù)據(jù)庫升級(jí)和移植,雙業(yè)務(wù)中心等多種業(yè)務(wù)場(chǎng)景。
CDC平臺(tái)核心組件描述如下:
管理和監(jiān)控(Management&Monitor),管理監(jiān)控組件用于維護(hù)和配置數(shù)據(jù)捕獲與分發(fā)流程
捕捉 (Capture),用于訪問源端數(shù)據(jù)庫讀取在線日志或歸檔日志,提取其中數(shù)據(jù)的變更如增、刪、改等DML操作,以及ALTER,DROP,TRUNCATE等DDL操作
解析 (Parser),用于將原始SQL語句解析成原始java對(duì)象,并表示對(duì)象的操作類型,如(INSERT/UPDATE/DELETE/ALTER…)
過濾 (Filter),用于將數(shù)據(jù)合并為順序的事務(wù),通過系統(tǒng)內(nèi)置過濾規(guī)則,將未提交的數(shù)據(jù)過濾,通過系統(tǒng)配置過濾規(guī)則,過濾大事務(wù)、長事務(wù)、提交人過濾等
格式化 (Formater),用于將原始的SQL數(shù)據(jù)格式化為標(biāo)準(zhǔn)的java 統(tǒng)一格式對(duì)象
持久化 (Persister),用于將數(shù)據(jù)存儲(chǔ)至持久化至數(shù)據(jù)存儲(chǔ)區(qū)
任務(wù)(Job,Tipic, Scheduler),用于編排Capture、Parser、Filter、Formater、Persister等執(zhí)行流程和規(guī)則,定義數(shù)據(jù)同步主題以及調(diào)度程序
發(fā)布(Publisher),發(fā)布組件,用于將分析的數(shù)據(jù)發(fā)布至數(shù)據(jù)應(yīng)用業(yè)務(wù)接口
訂閱(Subscriter),提供數(shù)據(jù)訂閱接口,供數(shù)據(jù)應(yīng)用業(yè)務(wù)訂閱
分發(fā) (Deliver),接收格式化進(jìn)程提供的數(shù)據(jù),將數(shù)據(jù)依據(jù)事務(wù)順序和操作分發(fā)至目標(biāo)數(shù)據(jù)應(yīng)用系統(tǒng)
元數(shù)據(jù)(Metadata),元數(shù)據(jù)模塊是基礎(chǔ)模塊,用于定義數(shù)據(jù)字典模型,配置期定義捕獲業(yè)務(wù)以及運(yùn)行期數(shù)據(jù)格式轉(zhuǎn)換等功能
數(shù)據(jù)存儲(chǔ)區(qū)(Stage Area),用于存儲(chǔ)變更的數(shù)據(jù),可作為臨時(shí)數(shù)據(jù)緩沖區(qū),也同時(shí)可以作為數(shù)據(jù)共享區(qū)被其他業(yè)務(wù)系統(tǒng)訪問
元數(shù)據(jù)庫(Metadata Repository),用于存儲(chǔ)系統(tǒng)內(nèi)所有配置信息,包括任務(wù)配置信息、數(shù)據(jù)源信息、數(shù)據(jù)字典信息以及系統(tǒng)參數(shù)以及運(yùn)行日志等信息
CDC的數(shù)據(jù)復(fù)制過程如下:
捕捉進(jìn)程(Capture)在源端數(shù)據(jù)庫讀取在線日志或歸檔日志,然后進(jìn)行解析,提取其中數(shù)據(jù)的變更如增、刪、改等DML操作,以及ALTER,DROP,TRUNCATE等DDL操作,并將解析的原始SQL語句傳送到解析進(jìn)程數(shù)據(jù)隊(duì)列
解析進(jìn)程(Parser)接收捕獲進(jìn)程提供的數(shù)據(jù),將原始SQL語句解析成原始java對(duì)象,并表示對(duì)象的操作類型,如(INSERT/UPDATE/DELETE/ALTER…),并將對(duì)象傳送至過濾進(jìn)程數(shù)據(jù)隊(duì)列
過濾進(jìn)程(Filter)接收解析進(jìn)程提供的數(shù)據(jù),將數(shù)據(jù)合并為順序的事務(wù),通過系統(tǒng)內(nèi)置過濾規(guī)則,將未提交的數(shù)據(jù)過濾,通過系統(tǒng)配置過濾規(guī)則,過濾大事務(wù)、長事務(wù)、用戶名過濾等,并將合格的數(shù)據(jù)傳送至格式化進(jìn)程數(shù)據(jù)隊(duì)列
格式化進(jìn)程(Formater)接收過濾進(jìn)程提供的數(shù)據(jù),將原始的SQL數(shù)據(jù)格式化為統(tǒng)一的java對(duì)象,并將數(shù)據(jù)傳送至持久化進(jìn)程或分發(fā)進(jìn)程數(shù)據(jù)隊(duì)列
持久化進(jìn)程(Persister)是可選進(jìn)程,接收格式化進(jìn)程提供的數(shù)據(jù),將數(shù)據(jù)存儲(chǔ)至持久化隊(duì)列供其他系統(tǒng)訂閱
分發(fā)進(jìn)程(Deliver),接收格式化進(jìn)程提供的數(shù)據(jù),將數(shù)據(jù)依據(jù)事務(wù)順序和操作分發(fā)至目標(biāo)數(shù)據(jù)應(yīng)用系統(tǒng)
捕獲進(jìn)程(Capture)在每次讀完日志中的數(shù)據(jù)變更并將數(shù)據(jù)通過分發(fā)進(jìn)程(Deliver)傳送到目標(biāo)系統(tǒng)后,會(huì)記錄檢查點(diǎn),記錄當(dāng)前完成捕捉的日志位置,檢查點(diǎn)的存在可以使捕捉進(jìn)程在中止并恢復(fù)后仍可從原來日志位置繼續(xù)復(fù)制,分發(fā)進(jìn)程提交到數(shù)據(jù)庫成功后更新自己的檢查點(diǎn),記錄已經(jīng)完成復(fù)制的位置,數(shù)據(jù)的復(fù)制過程最終完成。
主要功能
基于數(shù)據(jù)庫歸檔/在線日志實(shí)時(shí)捕獲與同步變更數(shù)據(jù)
支持不同廠商硬件(主機(jī)、存儲(chǔ))之間數(shù)據(jù)庫的數(shù)據(jù)復(fù)制
支持實(shí)時(shí)捕獲Oracle,Oracle RAC數(shù)據(jù)庫變更數(shù)據(jù)
支持將數(shù)據(jù)同步至主流的關(guān)系型數(shù)據(jù)庫、GBase數(shù)據(jù)庫、Gemfire、Hbase等
支持多對(duì)一和一對(duì)多的復(fù)制
支持?jǐn)帱c(diǎn)自動(dòng)恢復(fù),斷網(wǎng)自動(dòng)識(shí)別與恢復(fù),斷電重啟后支持自動(dòng)恢復(fù)
支持復(fù)制DDL(ALTER,DROP,TRUNCATE)
支持基于指定的時(shí)間點(diǎn)、時(shí)間段同步數(shù)據(jù)
支持配置變更自動(dòng)生效
支持部署在中間平臺(tái)上,不影響業(yè)務(wù)數(shù)據(jù)源服務(wù)器
異構(gòu)數(shù)據(jù)源雙向復(fù)制數(shù)據(jù)
僅對(duì)提交后的事務(wù)進(jìn)行同步,按事務(wù)提交順序復(fù)制數(shù)據(jù)
支持事務(wù)過濾,支持對(duì)長事務(wù)、大事務(wù)以及按提交用戶名進(jìn)行過濾
支持將數(shù)據(jù)落地成文件
支持表復(fù)制,可以選擇特定字段同步,支持異構(gòu)數(shù)據(jù)源映射配置與字段級(jí)校驗(yàn)
基于瀏覽器的管理與實(shí)時(shí)性能監(jiān)控監(jiān)控?cái)?shù)據(jù)捕獲過程和結(jié)果,統(tǒng)一調(diào)度、監(jiān)控管理和日志管理等功能圖形化管理操作界面,支持展現(xiàn)、啟動(dòng)、停止、恢復(fù)數(shù)據(jù)同步任務(wù)
支持系統(tǒng)異常情況告警功能,支持通過Log,Email等告警形式,對(duì)設(shè)備、事務(wù)、應(yīng)用的故障能夠?qū)⑿畔l(fā)送至告警接口,實(shí)現(xiàn)自動(dòng)報(bào)警并記錄日志,提供擴(kuò)展接口可擴(kuò)展任意的告警方式
數(shù)據(jù)復(fù)制后一致性校驗(yàn),提供兩端數(shù)據(jù)對(duì)比工具,能夠?qū)υ磾?shù)據(jù)庫和目標(biāo)數(shù)據(jù)中的數(shù)據(jù)內(nèi)容進(jìn)行對(duì)比,以查找出來兩邊數(shù)據(jù)表中內(nèi)容的差異
支持多進(jìn)程并行復(fù)制
支持定時(shí)啟動(dòng)、停止數(shù)據(jù)同步任務(wù)
有很好的集成性和開放性和可定制性,包括可以將被變化的數(shù)據(jù)發(fā)布至擴(kuò)展程序
