SAP HANA 到 MySQL 數(shù)據(jù)遷移同步

簡述

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)建任務

  1. 點擊 同步任務 > 創(chuàng)建任務螃概。

  2. 配置源和目標數(shù)據(jù)源矫夯。

    1. 選擇源和目標實例,并分別點擊 測試連接吊洼。
    2. 在目標實例下方 高級配置 中選擇源端 CDC 表模式:單 CDC 表 / 表級 CDC 表训貌。
  3. 選擇 數(shù)據(jù)同步 并勾選 全量初始化

  4. 選擇需要同步的表冒窍。

  5. 選擇表對應的列递沪。

    如果需要選擇同步的列豺鼻,可先行在對端創(chuàng)建好表結(jié)構(gòu)。

  6. 點擊 確認創(chuàng)建区拳。

    任務創(chuàng)建過程將會進行一系列操作拘领,點擊 同步設(shè)置 > 異步任務,找到任務的創(chuàng)建記錄并點擊 詳情 即可查看樱调。

    HANA 源端的任務創(chuàng)建會有以下幾個步驟:

    • 結(jié)構(gòu)遷移
    • 初始化 HANA CDC 表以及對應觸發(fā)器
    • 分配任務執(zhí)行機器
    • 創(chuàng)建任務狀態(tài)機
    • 完成任務創(chuàng)建
  1. 等待任務自動流轉(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ù)傳輸屋灌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市应狱,隨后出現(xiàn)的幾起案子共郭,更是在濱河造成了極大的恐慌,老刑警劉巖疾呻,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件除嘹,死亡現(xiàn)場離奇詭異,居然都是意外死亡岸蜗,警方通過查閱死者的電腦和手機尉咕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來璃岳,“玉大人年缎,你說我怎么就攤上這事》溃” “怎么了晦款?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長枚冗。 經(jīng)常有香客問我缓溅,道長,這世上最難降的妖魔是什么赁温? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任坛怪,我火速辦了婚禮淤齐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袜匿。我一直安慰自己更啄,他們只是感情好,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布居灯。 她就那樣靜靜地躺著祭务,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怪嫌。 梳的紋絲不亂的頭發(fā)上义锥,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音岩灭,去河邊找鬼拌倍。 笑死,一個胖子當著我的面吹牛噪径,可吹牛的內(nèi)容都是我干的柱恤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼找爱,長吁一口氣:“原來是場噩夢啊……” “哼梗顺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缴允,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤荚守,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后练般,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矗漾,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年薄料,在試婚紗的時候發(fā)現(xiàn)自己被綠了敞贡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡摄职,死狀恐怖誊役,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谷市,我是刑警寧澤蛔垢,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站迫悠,受9級特大地震影響鹏漆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一艺玲、第九天 我趴在偏房一處隱蔽的房頂上張望括蝠。 院中可真熱鬧,春花似錦饭聚、人聲如沸忌警。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽法绵。三九已至,卻和暖如春端幼,著一層夾襖步出監(jiān)牢的瞬間礼烈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工婆跑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庭呜。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓滑进,卻偏偏與公主長得像,于是被迫代替她去往敵國和親募谎。 傳聞我的和親對象是個殘疾皇子扶关,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容