簡述
SAP HANA 是一款列式存儲的內(nèi)存數(shù)據(jù)庫系統(tǒng)贤旷,相比傳統(tǒng)的硬盤存儲數(shù)據(jù)庫,數(shù)據(jù)處理速度更快伍玖,支持聯(lián)機分析處理(OLAP)和聯(lián)機事務處理(OLTP)享幽,常常用于實時分析處理、應用程序開發(fā)等場景譬猫。
MySQL 是一款開源的關(guān)系型數(shù)據(jù)庫讯檐,歷史悠久,運行穩(wěn)定可靠染服,簡便易用别洪,靈活可擴展,因而受到許多組織的青睞柳刮。常用于數(shù)據(jù)存儲挖垛、Web 應用程序開發(fā)、企業(yè)資源規(guī)劃(ERP)系統(tǒng)的數(shù)據(jù)庫等秉颗。
本篇文章主要介紹如何使用 CloudCanal 構(gòu)建一條 HANA 到 MySQL 的數(shù)據(jù)同步鏈路痢毒。
技術(shù)點
數(shù)據(jù)同步整體流程
CloudCanal 實現(xiàn) HANA 源端增量數(shù)據(jù)同步,主要使用其觸發(fā)器捕獲變更事件蚕甥。整體流程如下:
- 安裝觸發(fā)器闸准,通過觸發(fā)器捕獲增量變更數(shù)據(jù)
- 記錄位點,記錄增量數(shù)據(jù)同步的起點
- 執(zhí)行全量數(shù)據(jù)遷移
- 執(zhí)行增量數(shù)據(jù)同步
表級別 CDC 表
CloudCanal 實現(xiàn)了表級別的 CDC 表設(shè)計梢灭,每張源表都對應一張 CDC 表夷家,CDC 表的結(jié)構(gòu)僅在原表結(jié)構(gòu)的基礎(chǔ)上增加了幾個位點字段,用于增量同步敏释。
相比于所有數(shù)據(jù)寫入單一 CDC 表库快,表級別的 CDC 表更加獨立,方便多次訂閱表钥顽。此外义屏,觸發(fā)器只需要執(zhí)行 INSERT 語句,因此對于字段較多的表也能夠快速執(zhí)行蜂大。掃描消費 CDC 數(shù)據(jù)時闽铐,不需要做額外的處理,消費更簡單奶浦。
原表:
CREATE COLUMN TABLE "SYSTEM"."TABLE_TWO_PK" (
"ORDERID" INTEGER NOT NULL ,
"PRODUCTID" INTEGER NOT NULL ,
"QUANTITY" INTEGER,
CONSTRAINT "FANQIE_pkey_for_TA_171171268" PRIMARY KEY ("ORDERID", "PRODUCTID")
)
CDC 表:
CREATE COLUMN TABLE "SYSTEM"."SYSTEMDB_FANQIE_TABLE_TWO_PK_CDC_TABLE" (
"ORDERID" INTEGER,
"PRODUCTID" INTEGER,
"QUANTITY" INTEGER,
"__$DATA_ID" BIGINT NOT NULL ,
"__$TRIGGER_ID" INTEGER NOT NULL ,
"__$TRANSACTION_ID" BIGINT NOT NULL ,
"__$CREATE_TIME" TIMESTAMP,
"__$OPERATION" INTEGER NOT NULL
);
-- other index
觸發(fā)器 (INSERT):
CREATE TRIGGER "FANQIE"."CLOUD_CANAL_ON_I_TABLE_TWO_PK_TRIGGER_104" AFTER INSERT ON "SYSTEM"."TABLE_TWO_PK" REFERENCING NEW ROW NEW FOR EACH ROW
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN END;
IF 1=1 THEN
INSERT INTO "SYSTEM"."SYSTEMDB_FANQIE_TABLE_TWO_PK_CDC_TABLE" (__$DATA_ID, __$TRIGGER_ID, __$TRANSACTION_ID, __$CREATE_TIME, __$OPERATION, "ORDERID","PRODUCTID","QUANTITY")
VALUES(
"SYSTEM"."CC_TRIGGER_SEQ".NEXTVAL,
433,
CURRENT_UPDATE_TRANSACTION(),
CURRENT_UTCTIMESTAMP,
2,
:NEW."ORDERID" ,
:NEW."PRODUCTID" ,
:NEW."QUANTITY"
);
END IF;
END;
表級別任務位點
在表級別 CDC 表模式下兄墅,同步增量數(shù)據(jù)時,每個表都有自己的位點澳叉,原有的單一位點無法滿足這種同步需求隙咸。
因此五督,CloudCanal 引入了表級別的增量同步位點,確保每個表能夠消費各自對應的增量同步位點。位點的具體體現(xiàn)為:
[
{
"db": "SYSTEMDB",
"schema": "FANQIE",
"table": "TABLE_TWO_PK",
"dataId": 352,
"txId": 442441,
"timestamp": 1715828416114
},
{
"db": "SYSTEMDB",
"schema": "FANQIE",
"table": "TABLE_TWO_PK_2",
"dataId": 97,
"txId": 11212,
"timestamp": 1715828311123
},
...
]
這樣的設(shè)計有以下好處:
位點精細控制:每個表都有自己的增量同步位點慈鸠,在增量任務中可以重新消費特定表中的增量數(shù)據(jù)譬巫,而無需消費所有表的數(shù)據(jù)芦昔,實現(xiàn)更加精細的控制,減少不必要的數(shù)據(jù)傳輸和處理,提高同步效率。
數(shù)據(jù)并行處理:由于每個表有自己的位點,可以實現(xiàn)表級別的并行處理。不同表的增量數(shù)據(jù)可以同時處理,避免了單一位點導致的串行處理瓶頸,從而加快了同步速度氮块。
操作示例
步驟 1: 安裝 CloudCanal
請參考 全新安裝(Docker Linux/MacOS),下載安裝 CloudCanal 私有部署版本蝠引。
步驟 2: 添加數(shù)據(jù)源
登錄 CloudCanal 控制臺阳谍,點擊 數(shù)據(jù)源管理 > 新增數(shù)據(jù)源 。
步驟 3: 創(chuàng)建任務
點擊 同步任務 > 創(chuàng)建任務螃概。
-
配置源和目標數(shù)據(jù)源矫夯。
- 選擇源和目標實例,并分別點擊 測試連接吊洼。
- 在目標實例下方 高級配置 中選擇源端 CDC 表模式:單 CDC 表 / 表級 CDC 表训貌。
選擇 數(shù)據(jù)同步 并勾選 全量初始化。
選擇需要同步的表冒窍。
-
選擇表對應的列递沪。
如果需要選擇同步的列豺鼻,可先行在對端創(chuàng)建好表結(jié)構(gòu)。
-
點擊 確認創(chuàng)建区拳。
任務創(chuàng)建過程將會進行一系列操作拘领,點擊 同步設(shè)置 > 異步任務,找到任務的創(chuàng)建記錄并點擊 詳情 即可查看樱调。
HANA 源端的任務創(chuàng)建會有以下幾個步驟:
- 結(jié)構(gòu)遷移
- 初始化 HANA CDC 表以及對應觸發(fā)器
- 分配任務執(zhí)行機器
- 創(chuàng)建任務狀態(tài)機
- 完成任務創(chuàng)建
-
等待任務自動流轉(zhuǎn)。
當任務創(chuàng)建完成届良,CloudCanal 會自動進行任務流轉(zhuǎn)笆凌,其中的步驟包括:
- 結(jié)構(gòu)遷移: HANA 源端的表定義將會遷移到對端,如果同名表在對端已經(jīng)存在士葫,則會忽略乞而。
- 全量數(shù)據(jù)遷移: 已存在的存量數(shù)據(jù)將會完整遷移到對端。
- 增量數(shù)據(jù)同步: 增量數(shù)據(jù)將會持續(xù)地同步到對端數(shù)據(jù)庫慢显,并且保持實時(秒級別延遲)爪模。
總結(jié)
本文簡單介紹了如何使用 CloudCanal 進行 HANA 到 MySQL 數(shù)據(jù)遷移同步,打通數(shù)據(jù)流動的渠道荚藻,實現(xiàn)端到端的精準數(shù)據(jù)傳輸屋灌。