小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

數(shù)據(jù)庫同步有哪些方式?【怎么保障目標(biāo)和源數(shù)據(jù)一致性】

 曲鳥 2022-01-10

文章目錄

摘要

數(shù)據(jù)庫同步有3大難題:
1是如何保障目標(biāo)和源數(shù)據(jù)一致性;
2是異構(gòu)數(shù)據(jù)庫如何做數(shù)據(jù)類型轉(zhuǎn)換,導(dǎo)致數(shù)據(jù)同步失敗的原因常常是因?yàn)閿?shù)據(jù)類型不一樣;
3是在數(shù)據(jù)越實(shí)時(shí)越有價(jià)值的背景下,同步過程中能否做到實(shí)時(shí)同步。

一、幾種主流的數(shù)據(jù)庫同步方式

方式一:基于無侵入的日志模式(如Oracle redo、Mysql binlog)
基于日志的采集方式無需在源庫端部署任務(wù)代理程序(Agent)及建任何表,對(duì)源數(shù)據(jù)庫無侵入和影響壓力;

方式二:基于時(shí)間戳
同步過程通過特定屬性(如時(shí)間戳、自增序列)來識(shí)別新插入的數(shù)據(jù),該方式實(shí)現(xiàn)最簡(jiǎn)單,但無法記錄刪除和更新,也不具備實(shí)時(shí)的能力;

方式三:基于觸發(fā)器
基于數(shù)據(jù)庫的觸發(fā)器機(jī)制,當(dāng)執(zhí)行DML相關(guān)語句時(shí),執(zhí)行動(dòng)作來捕獲數(shù)據(jù),該方式會(huì)降低系統(tǒng)能,因此大多數(shù)場(chǎng)景下,生產(chǎn)系統(tǒng)不允許添加觸發(fā)器。

方式四:基于快照
基于快照的方式,可以通過比較源表和快照表來獲得數(shù)據(jù)變化,但需要消耗大量存儲(chǔ)空間和計(jì)算資源。

方式五:基于離線批處理
通過jdbc查詢來批量獲取數(shù)據(jù),會(huì)進(jìn)行數(shù)據(jù)表的大范圍掃描和數(shù)據(jù)提取,會(huì)對(duì)數(shù)據(jù)庫產(chǎn)生大量開銷。

本文主要探討無侵入的CDC模式,并以運(yùn)用這種模式的數(shù)據(jù)庫同步云工具 Tapdata Cloud 舉例,你要問我為啥用它舉例,原因只有一個(gè):永久免費(fèi)。

二、架構(gòu)及工作原理

Tapdata Cloud包含兩部分:

  1. Tapdata Cloud Manager,TCM是Tapdata Cloud的管理端,負(fù)責(zé)agent實(shí)例的安裝,同步任務(wù)的配置、分發(fā)、任務(wù)狀態(tài)監(jiān)測(cè)。
  2. Tapdata agent,是Tapdata Cloud數(shù)據(jù)同步服務(wù)的執(zhí)行實(shí)例,負(fù)責(zé)從TCM獲取任務(wù)信息,通過流式技術(shù)從源系統(tǒng)獲取數(shù)據(jù)、處理轉(zhuǎn)換數(shù)據(jù)并發(fā)送到目標(biāo)系統(tǒng),并在任務(wù)執(zhí)行過程中監(jiān)測(cè)并上報(bào)任務(wù)狀態(tài)至TCM。

在這里插入圖片描述

(Tapdata Cloud 工作原理圖)

有朋友可能會(huì)擔(dān)心這個(gè)云平臺(tái)會(huì)不會(huì)把我要同步的數(shù)據(jù)泄露出去?

從Tapdata Cloud 工作原理上可以看出:

  1. 同步實(shí)例節(jié)點(diǎn)單向連接管控端運(yùn)行服務(wù)。 Tapdata agent實(shí)例節(jié)點(diǎn)對(duì)外不主動(dòng)暴露網(wǎng)絡(luò)信息,只會(huì)連接 TCM管理端服務(wù),獲取任務(wù)信息、上報(bào)狀態(tài)信息。
  2. 用戶部署的Tapdata agent實(shí)例節(jié)點(diǎn)和 TCM 通信鏈路采用 HTTPS 協(xié)議。
  3. 自建模式下,所有數(shù)據(jù)流轉(zhuǎn)均發(fā)生在受用戶管理的服務(wù)器和網(wǎng)絡(luò)環(huán)境。
    可見,數(shù)據(jù)同步過程中數(shù)據(jù)泄露的問題大可不必?fù)?dān)憂。

三、全量同步和實(shí)時(shí)增量同步機(jī)制

Tapdata Cloud 這款云同步工具支持全量同步和實(shí)時(shí)增量同步,實(shí)現(xiàn)的過程如下圖所示:
在這里插入圖片描述


四、源和目標(biāo)

據(jù) Tapdata Cloud 最新版本,目前支持了:

數(shù)據(jù)庫版本作為源作為目標(biāo)是否可用
mysql5.x,8.x支持支持
oracle9i, 10g, 11g, 12c支持支持
sqlsever2005, 2008, 2012, 2014, 2016, 2017支持支持
mongodb3.2, 3.4, 3.6, 4.0, 4.2支持支持
PostgreSQL9.x, 10.x,11.x,12.x,13.x支持支持
Elastic5.x, 6.x, 7.x暫不支持支持
達(dá)夢(mèng)數(shù)據(jù)庫7,8支持支持
Kafka2.3.x及以上暫不支持支持
Redis2.x, 3.x, 4.x暫不支持支持即將上線
DB29.7 LUW版本支持支持即將上線
SybaseSybase ASE 15.7 及以上支持支持即將上線
Gbase支持支持即將上線

五、舉例:Oracle 數(shù)據(jù)實(shí)時(shí)同步到 Elasticsearch

一般需要做全文檢索的時(shí)候,會(huì)將 Oracle 數(shù)據(jù)實(shí)時(shí)同步到 Elasticsearch。

第一步:配置 Oracle 連接

  1. 點(diǎn)擊 Tapdata Cloud 操作后臺(tái)左側(cè)菜單欄的【連接管理】,然后點(diǎn)擊右側(cè)區(qū)域【連接列表】右上角的【創(chuàng)建連接】按鈕,打開連接類型選擇頁面,然后選擇Oracle
    在這里插入圖片描述

  1. 在打開的連接信息配置頁面依次輸入需要的配置信息
    在這里插入圖片描述

【連 接 名 稱】:設(shè)置連接的名稱,多個(gè)連接的名稱不能重復(fù)
【數(shù)據(jù)庫地址】:數(shù)據(jù)庫 IP / Host
【端 口】:數(shù)據(jù)庫端口
【數(shù)據(jù)庫名稱】:tapdata 數(shù)據(jù)庫連接是以一個(gè) db 為一個(gè)數(shù)據(jù)源。這里的 db 是指一個(gè)數(shù)據(jù)庫實(shí)例中的 database,而不是一個(gè) schema。
【賬 號(hào)】:可以訪問數(shù)據(jù)庫的賬號(hào)
【密 碼】:數(shù)據(jù)庫賬號(hào)對(duì)應(yīng)的密碼
【時(shí) 間 時(shí) 區(qū)】:默認(rèn)使用該數(shù)據(jù)庫的時(shí)區(qū);若指定時(shí)區(qū),則使用指定后的時(shí)區(qū)設(shè)置

第二步:配置 Elasticsearch 連接

  1. 同第一步操作,點(diǎn)擊左側(cè)菜單欄的【連接管理】,然后點(diǎn)擊右側(cè)區(qū)域【連接列表】右上角的【創(chuàng)建連接】按鈕,打開連接類型選擇頁面,然后選擇Elasticsearch
    在這里插入圖片描述

  1. 在打開的連接信息配置頁面依次輸入需要的配置信息,配置完成后測(cè)試連接保存即可。
    在這里插入圖片描述

第三步:建立同步任務(wù),以全量+增量同步舉例
進(jìn)入Tapdata Cloud 操作后臺(tái)任務(wù)管理頁面,點(diǎn)擊添加任務(wù)按鈕進(jìn)入任務(wù)設(shè)置流程
在這里插入圖片描述


根據(jù)剛才建好的連接,選定源端與目標(biāo)端。
在這里插入圖片描述


根據(jù)數(shù)據(jù)需求,選擇需要同步的庫、表,如果你對(duì)表名有修改需要,可以通過頁面中的表名批量修改功能對(duì)目標(biāo)端的表名進(jìn)行批量設(shè)置.
在這里插入圖片描述


在以上選項(xiàng)設(shè)置完畢后,點(diǎn)擊下方的全量+增量選項(xiàng)并點(diǎn)擊確定按鈕即可完成本次全量同步任務(wù)的配置,在點(diǎn)擊確定后將自動(dòng)返回任務(wù)管理頁面,在任務(wù)管理頁面中,點(diǎn)擊右側(cè)的啟動(dòng)按鈕即可使Tapdata Agent 開始執(zhí)行本次任務(wù)。在全量任務(wù)執(zhí)行完畢后,Tapdata Agent 會(huì)自動(dòng)進(jìn)入增量同步狀態(tài)。在該狀態(tài)中,Tapdata Agent 會(huì)持續(xù)監(jiān)聽源端的數(shù)據(jù)變化(包括:寫入、更新、刪除),并實(shí)時(shí)的將這些數(shù)據(jù)變化寫入目標(biāo)端。

在這里插入圖片描述


點(diǎn)擊任務(wù)監(jiān)控可以打開任務(wù)執(zhí)行詳情頁面,可以查看任務(wù)執(zhí)行的具體信息。
在這里插入圖片描述


同理,其他數(shù)據(jù)庫的同步操作也跟上面步驟一致,比如幾個(gè)常用的場(chǎng)景是:
· 從業(yè)務(wù)數(shù)據(jù)庫到緩存數(shù)據(jù)庫的實(shí)時(shí)同步
· 不停機(jī)遷移數(shù)據(jù)庫
· 將主業(yè)務(wù)中心的數(shù)據(jù)實(shí)時(shí)同步至次業(yè)務(wù)中心
· 構(gòu)建只讀實(shí)例
· 構(gòu)建異地災(zāi)備中心
· 構(gòu)建異地多活


六、目標(biāo)和源數(shù)據(jù)一致性

很多人都擔(dān)心同步的數(shù)據(jù)可能沒法和源數(shù)據(jù)一致,Tapdata Cloud 提供了數(shù)據(jù)校驗(yàn)功能,包括快速count校驗(yàn)、表全字段值校驗(yàn)和關(guān)聯(lián)字段值校驗(yàn)三種校驗(yàn)方式。
· 快速count:僅對(duì)源表和目標(biāo)表的行數(shù)進(jìn)行count校驗(yàn),速度極快,但是不會(huì)展示差異的具體字段內(nèi)容。
· 全表字段值校驗(yàn):會(huì)對(duì)源表和目標(biāo)表的全部字段進(jìn)行逐行校驗(yàn),能查出所有字段的差異,但是速度慢。
· 關(guān)聯(lián)字段值校驗(yàn):只對(duì)源表和目標(biāo)表的關(guān)聯(lián)字段的值進(jìn)行比對(duì)校驗(yàn),速度快于全表字段值校驗(yàn)?zāi)J健?br> 校驗(yàn)操作步驟
進(jìn)入數(shù)據(jù)校驗(yàn)菜單,點(diǎn)擊新建校驗(yàn)任務(wù)創(chuàng)建數(shù)據(jù)校驗(yàn)。
【選擇任務(wù)】:選擇一個(gè)歷史同步任務(wù)
【校驗(yàn)類型】:可選 快速count校驗(yàn)、表全字段值校驗(yàn)和關(guān)聯(lián)字段值校驗(yàn)
【校驗(yàn)任務(wù)名】:默認(rèn)與選擇的同步任務(wù)名字一樣
【校驗(yàn)頻次】:設(shè)置您的校驗(yàn)的執(zhí)行頻次
【單次校驗(yàn)】:只執(zhí)行一次校驗(yàn)
【重復(fù)校驗(yàn)】:設(shè)置校驗(yàn)任務(wù)重復(fù)執(zhí)行,支持設(shè)置校驗(yàn)執(zhí)行的起止時(shí)間和校驗(yàn)間隔
【錯(cuò)誤數(shù)據(jù)保存條數(shù)】:當(dāng)出現(xiàn)校驗(yàn)不一致的數(shù)據(jù)時(shí),不一致數(shù)據(jù)保存的最大條數(shù)。該數(shù)值會(huì)影響到差異校驗(yàn),當(dāng)錯(cuò)誤數(shù)據(jù)條數(shù)超出設(shè)置的保存條數(shù)時(shí),將無法進(jìn)行差異校驗(yàn)。
【校驗(yàn)條件】:添加需要進(jìn)行校驗(yàn)的表。點(diǎn)擊自動(dòng)添加會(huì)自動(dòng)將任務(wù)下的所有表全部添加進(jìn)來。

快速count校驗(yàn)

創(chuàng)建快速count校驗(yàn)時(shí)只需要選擇到要校驗(yàn)的表,無需設(shè)置關(guān)聯(lián)條件。
在這里插入圖片描述


表全字段值校驗(yàn)

除了要選擇待校驗(yàn)表外,還需要針對(duì)每一個(gè)表設(shè)置索引字段。
在這里插入圖片描述


在進(jìn)行表全字段值校驗(yàn)時(shí),還支持進(jìn)行高級(jí)校驗(yàn)。通過高級(jí)校驗(yàn)可以添加JS校驗(yàn)邏輯,對(duì)源和目標(biāo)的數(shù)據(jù)進(jìn)行校驗(yàn)。

在這里插入圖片描述


完整示例:以MongoDB查詢示例

JavaScript

function validate(sourceRow){
    // 第1步
    var targetRow = target.executeQuery({database: "target",collection: "USER",filter: {USER_ID: sourceRow.USER_ID}});
    // 第2步
    if(sourceRow.USER_ID === targetRow[0].USER_ID){
        // 第3步
        return {result: 'passed',message: "",data: ""}
    }else{
        return {result: 'failed',message: "記錄不一致",data: targetRow}
    }
}

在這里插入圖片描述


關(guān)聯(lián)字段值校驗(yàn)

創(chuàng)建關(guān)聯(lián)字段值校驗(yàn)時(shí),除了要選擇待校驗(yàn)表外,還需要針對(duì)每一個(gè)表設(shè)置索引字段。
在這里插入圖片描述

七、異構(gòu)數(shù)據(jù)類型轉(zhuǎn)換

在異構(gòu)數(shù)據(jù)庫之間做同步,類型轉(zhuǎn)換是一大難題,也是導(dǎo)致數(shù)據(jù)同步失敗的重要原因,Tapdata Cloud 類型映射功能,在系統(tǒng)推演的基礎(chǔ)上,提供了人工調(diào)整的能力,這一點(diǎn)比其他數(shù)據(jù)同步工具都更方便使用。
在這里插入圖片描述


八、總結(jié)

為了達(dá)到數(shù)據(jù)實(shí)時(shí)要求,并且不對(duì)源庫造成干擾,首選 CDC 模式。
現(xiàn)在市面上已經(jīng)陸續(xù)出現(xiàn)了一些數(shù)據(jù)同步工具,完全沒有必要自己擼代碼了,免費(fèi)的用起來不香嗎?
希望上文的實(shí)操圖文,對(duì)你的數(shù)據(jù)庫同步有幫助,有數(shù)據(jù)庫相關(guān)的問題可以隨時(shí)跟我交流!

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多