數(shù)據(jù)庫(kù)實(shí)時(shí)同步利器

CDC的使用場(chǎng)景有哪些呢?
CDC技術(shù)的應(yīng)用場(chǎng)景非常廣泛,包括:
→數(shù)據(jù)分發(fā):將一個(gè)數(shù)據(jù)源的數(shù)據(jù)分發(fā)給多個(gè)下游業(yè)務(wù)系統(tǒng),常用于業(yè)務(wù)解耦、微服務(wù)系統(tǒng)。
→數(shù)據(jù)采集:面向數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)湖的ETL數(shù)據(jù)集成,消除數(shù)據(jù)孤島,便于后續(xù)的分析。
→數(shù)據(jù)同步:常用于數(shù)據(jù)備份、容災(zāi)等。
常見(jiàn)的變化數(shù)據(jù)捕獲方法
→基于查詢(xún)的CDC
這種方法中,需要不斷的查詢(xún)?cè)磾?shù)據(jù)庫(kù)表中的數(shù)據(jù),以獲取更改的數(shù)據(jù)記錄;查詢(xún)過(guò)程中需要通過(guò)某些列來(lái)判斷那些數(shù)據(jù)是變更的;常見(jiàn)的有時(shí)間戳列、自增序列列,可以通過(guò)保存創(chuàng)建時(shí)間列、修改時(shí)間列來(lái)表示插入、變更的記錄,自增列也很容易識(shí)別出新插入的記錄。
→基于觸發(fā)器的CDC
在這個(gè)方法中,當(dāng)業(yè)務(wù)系統(tǒng)執(zhí)行插入、更新、刪除這些SQL時(shí),以激活數(shù)據(jù)庫(kù)的觸發(fā)器,使其對(duì)數(shù)據(jù)記錄進(jìn)行變更捕獲,并將數(shù)據(jù)保存在一個(gè)臨時(shí)表中,最后在將變更數(shù)據(jù)從臨時(shí)表中抽取到數(shù)據(jù)倉(cāng)庫(kù)中。
→基于快照的CDC
如果上述的觸發(fā)器以及增加列查詢(xún)的方式都不被允許的情況下,就可以使用快照表等方式進(jìn)行變更數(shù)據(jù)的捕獲;其實(shí)現(xiàn)思路就是通過(guò)比較源表和快照表的方式,獲取數(shù)據(jù)的變更信息,通過(guò)快照的方式可以檢測(cè)到插入、更新以及刪除的數(shù)據(jù)記錄。
→基于日志的CDC
當(dāng)數(shù)據(jù)庫(kù)表完成一個(gè)的新的DML(insert,update,delete)操作后,數(shù)據(jù)庫(kù)都會(huì)將它實(shí)時(shí)記錄到日志文件中;通過(guò)解析數(shù)據(jù)庫(kù)操作日志的方式,可以將插入、更新、刪除的數(shù)據(jù)更改操作都可以捕獲,發(fā)送下游系統(tǒng)。
上述4種CDC的實(shí)現(xiàn)方式中,基于日志方式的CDC是最優(yōu)的實(shí)現(xiàn)方式,其實(shí)時(shí)性高、無(wú)侵入性,并且能將所有的更改捕獲;如果無(wú)法獲取并解析數(shù)據(jù)庫(kù)日志文件,則可以選擇其他三種方式進(jìn)行CDC;基于快照的方式雖然可以捕獲所有的變更記錄,但是其有個(gè)明顯的缺點(diǎn)就是需要大量的存儲(chǔ)空間來(lái)保存快照數(shù)據(jù),且實(shí)時(shí)性低;基于觸發(fā)器的方式因?yàn)橐黾佑|發(fā)器,則對(duì)變更數(shù)據(jù)進(jìn)行多次寫(xiě)入操作,有一定的侵入性;基于查詢(xún)的方式則需要在數(shù)據(jù)表上進(jìn)行時(shí)間列、自增列的添加,侵入性強(qiáng),且無(wú)法獲取刪除操作,因此很少使用。
CDC變更日志流
前邊我們已經(jīng)對(duì)CDC有了初步的了解,CDC的核心思想是進(jìn)行數(shù)據(jù)更改的捕獲和識(shí)別,并將其發(fā)送下游系統(tǒng),那數(shù)據(jù)的變更過(guò)程是以什么樣的形式發(fā)送下游系統(tǒng)的呢,那就是CDC變更日志流。
CDC程序?qū)ú迦搿⒏隆h除的數(shù)據(jù)操作通過(guò)進(jìn)行解析處理轉(zhuǎn)換,形成統(tǒng)一規(guī)范的變更消息傳遞給下游的系統(tǒng),這些消息流包括INSERT(+I),UPDATE_BEFORE(-U),UPDATE_AFTER(+U),DELETE(-D)四種消息狀態(tài)語(yǔ)義:
→INSERT(+I):新插入的數(shù)據(jù)記錄行
→UPDATE_BEFORE(-U):數(shù)據(jù)記錄行被更新前的數(shù)據(jù)
→UPDATE_AFTER(+U):數(shù)據(jù)記錄行被更新后的數(shù)據(jù)
→DELETE(-D):刪除的數(shù)據(jù)記錄行
下面我們以一張人員信息表的業(yè)務(wù)數(shù)據(jù)變化過(guò)程為例,進(jìn)行CDC變更日志流的解釋。人員表有人員ID(id),姓名(name),年齡(age)等字段,對(duì)其進(jìn)行如下插入、更新、刪除的數(shù)據(jù)記錄事務(wù)操作:
→在人員表中插入一條人員信息,ID為1,姓名為小明,18歲。
→再向人員表中插入一條人員信息,ID為2,姓名為李華,32歲。
→修改小明的年齡為20歲。
→從人員表中將李華刪除。
→最后向人員表中插入一條人員信息,ID為3,姓名為麗麗,年齡為8歲。
上述人員表的CDC變更日志流如下:
+I{id: 1, name: '小明', age: 18}
+I{id: 2, name: '李華', age: 32}
-U{id: 1, name: '小明', age: 18}
+U{id: 1, name: '小明', age: 20}
-D{id: 2, name: '李華', age: 32}
+I{id: 3, name: '麗麗', age: 8}
最終的人員表數(shù)據(jù)如下:
User(人員信息表) id(人員ID) name(姓名) age(年齡) 1 小明 20 3 麗麗 8 除過(guò)上述示例中的變更日志流的表示方式外,還可以通過(guò)其他格式進(jìn)行表示,只要準(zhǔn)確描述上述4中更改消息語(yǔ)義即可。
CDC變更日志流可以記錄整張表的數(shù)據(jù)變更記錄,使得我們可以通過(guò)執(zhí)行變更流,在任意位置停止,而將CDC表的數(shù)據(jù)恢復(fù)到任何時(shí)刻,這比定時(shí)備份更加可靠及節(jié)省空間。
在Tempo數(shù)據(jù)工廠中如何進(jìn)行CDC
Tempo數(shù)據(jù)工廠是集海量數(shù)據(jù)集成、實(shí)時(shí)數(shù)據(jù)加工、離線數(shù)據(jù)處理、自定義組件擴(kuò)展、一體化監(jiān)控運(yùn)維五大核心功能的大數(shù)據(jù)開(kāi)發(fā)平臺(tái),為企業(yè)用戶降低了多源異構(gòu)數(shù)據(jù)的融合成本,賦能全鏈路數(shù)據(jù)開(kāi)發(fā),讓數(shù)據(jù)更好發(fā)揮價(jià)值。在Tempo數(shù)據(jù)工廠平臺(tái)中,用戶可以通過(guò)拖拉拽的方式快速配置完成一個(gè)實(shí)時(shí)自助流程進(jìn)行業(yè)務(wù)數(shù)據(jù)的CDC,并且可以進(jìn)行后續(xù)的計(jì)算處理,最終將數(shù)據(jù)寫(xiě)入目標(biāo)源中,一個(gè)完整的CDC業(yè)務(wù)數(shù)據(jù)流,如下圖:
我們可以將左側(cè)輸入節(jié)點(diǎn)中的MySQL CDC拖入右側(cè)畫(huà)布中,雙擊打開(kāi)節(jié)點(diǎn)配置面板,通過(guò)選擇已經(jīng)配置好的MySQL數(shù)據(jù)源,選擇需要進(jìn)行CDC的庫(kù)表,節(jié)點(diǎn)自動(dòng)讀取表的列信息展示,最后點(diǎn)擊右上角的應(yīng)用按鈕,這樣一個(gè)MySQL數(shù)據(jù)源表的CDC輸入節(jié)點(diǎn)就配置完成了,配置如下圖:
目前Tempo數(shù)據(jù)工廠支持的可進(jìn)行CDC的數(shù)據(jù)庫(kù)列表如下:
Oracle 版本: 12c, 19c, 21c MySQL 版本: 5.7, 8.0.x PostgreSQL 版本: 10, 11, 12, 13, 14
插件: decoderbufs, pgoutput SQL Server(孵化中) 版本: 2017, 2019 Db2(孵化中) 版本: 11.5 如果大家在實(shí)際的業(yè)務(wù)數(shù)據(jù)分析過(guò)程中,想要提高數(shù)據(jù)的時(shí)效性,降低處理數(shù)據(jù)變更的難度,可以嘗試使用CDC進(jìn)行實(shí)時(shí)數(shù)據(jù)同步,而Tempo數(shù)據(jù)工廠可以讓您更快的應(yīng)用它。
[免責(zé)聲明]
原文標(biāo)題: 數(shù)據(jù)庫(kù)實(shí)時(shí)同步利器
本文由作者原創(chuàng)發(fā)布于36氪企服點(diǎn)評(píng);未經(jīng)許可,禁止轉(zhuǎn)載。




