最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一種元數(shù)據(jù)同步的方法

2023-04-03 11:06 作者:KaiwuDB  | 我要投稿

一、技術(shù)背景

在面向數(shù)字能源領(lǐng)域,KaiwuDB 就元數(shù)據(jù)同步存在以下應(yīng)用場景:源端執(zhí)行元數(shù)據(jù)操作語句,同時對應(yīng)源端元數(shù)據(jù)變化;這些元數(shù)據(jù)需要在目標的一端進行同步,而實現(xiàn)這一目標的方法是通過數(shù)據(jù)復制同步模塊來完成。


元數(shù)據(jù)復制同步可以分為兩個部分:

  • 元數(shù)據(jù)回放表的復制模塊;

  • 元數(shù)據(jù)回放模塊。


本文主要介紹整個元數(shù)據(jù)同步模塊中的后半部分,即元數(shù)據(jù)回放(metadata backfill)模塊的技術(shù)實現(xiàn)。

二、技術(shù)基礎(chǔ)

1. 元數(shù)據(jù)回放表
此表用于記錄源端元數(shù)據(jù)操作 SQL 語句:

表 1:元數(shù)據(jù)回放表


2. 表級別的復制
表級別的復制是元數(shù)據(jù)回放的基礎(chǔ)。通過復制語法可以將源端的元數(shù)據(jù)回放記錄表復制到目標端,在源端通過 DDL 對元數(shù)據(jù)進行操作的語句,將會由表級別的復制發(fā)送到目標端,完成對元數(shù)據(jù)記錄表的復制操作。元數(shù)據(jù)回放模塊在此表的同步基礎(chǔ)上,進行兩端的元數(shù)據(jù)回放并達到元數(shù)據(jù)同步的目的。
元數(shù)據(jù)模塊由表級別的復制調(diào)用觸發(fā)。在表級別的復制過程中,存在將數(shù)據(jù)寫入元數(shù)據(jù)表的操作。選擇在數(shù)據(jù)寫入到目標端的回放表時,觸發(fā)回放模塊,進行檢索并實現(xiàn)元數(shù)據(jù)回放。

三、實現(xiàn)流程

圖 1:回放流程


1.?記錄元數(shù)據(jù)操作語句

我們在執(zhí)行元數(shù)據(jù)操作的 SQL 語句時,在執(zhí)行流程中調(diào)用回放表寫入接口,將 SQL 語句等其他參數(shù)記錄在元數(shù)據(jù)回放表中。


寫入此表的數(shù)據(jù)中,生成的主鍵為當前的 portal_id(portal_id 和源端綁定,每個端的 portal_id 是不同的)和生成的 rowid 聯(lián)合主鍵。因此,縱使多個源端的語句也可以在同一目標端聚合在同一張回放表中,不會產(chǎn)生主鍵沖突問題。默認記錄的 SQL 語句的回放狀態(tài)為未回放狀態(tài)。


2.?放模塊的啟動

回放模塊的啟動是基于啟動服務(wù)時拉起一個協(xié)程。通過啟動一個回放協(xié)程,協(xié)程中會檢測信號 signal 作為回放模塊的觸發(fā)機制。


若 signal 接收到信號,就觸發(fā)回放模塊的執(zhí)行。啟動后的回放模塊,等待復制模塊的觸發(fā)信號,進而觸發(fā)回放。


3.?放模塊的觸發(fā)

復制模塊通過復制表將源端記錄表復制到目標端。隨著不斷的 SQL?記錄寫入回放表,表級別的復制可以將后續(xù)的 SQL 語句記錄發(fā)送到目標端。


在目標端上,寫入回放表時通過向 signal 賦值,即向回放協(xié)程模塊發(fā)送觸發(fā)信號,就可以在回放模塊中觸發(fā)回放模塊。觸發(fā)回放模塊后,就可以進行到下一步回放模塊的執(zhí)行。


4. 回放模塊的執(zhí)行

圖 2:回放執(zhí)行模塊


1)獲取回放語句
通過對復制過來的源端的回放表的查詢,通過篩選查出回放表的未回放語句,查找對應(yīng) SQL 記錄的回放狀態(tài),從而拿到需要回放的待回放語句。


從回放表拿到的語句解析為待執(zhí)行的字符串語句,這些語句就是待同步在目標端執(zhí)行的語句,將其傳入回放模塊的下一階段,執(zhí)行回放語句。


2)執(zhí)行回放語句

將獲取的待回放語句傳入執(zhí)行回訪模塊,利用執(zhí)行模塊對獲取到的語句進行執(zhí)行,完成元數(shù)據(jù)在目標端的同步執(zhí)行。


執(zhí)行完語句后,需要修改此條語句的回放狀態(tài),進入更新語句的回放狀態(tài)模塊。


3)更新回放狀態(tài)

回放成功的語句,需要進入更新回放狀態(tài)模塊,將記錄的語句執(zhí)行成功的更新狀態(tài)為 true 已執(zhí)行,下次重新獲取的語句就會跳過已經(jīng)被回放過的語句。


4)事務(wù)控制

回放模塊的執(zhí)行中,選擇將執(zhí)行回放語句模塊放入同一個事務(wù)執(zhí)行,若語句回放失敗,則不進行更新狀態(tài);若更新回放狀態(tài)失敗,則回退回放語句的執(zhí)行。放在同一個事務(wù)中,保證回放狀態(tài)和是否成功執(zhí)行回放語句保持一致。

四、總結(jié)優(yōu)化

基于復制的技術(shù)基礎(chǔ),回放模塊啟動后,觸發(fā)和執(zhí)行回放模塊,在源端執(zhí)行的元數(shù)據(jù)操作 SQL 語句,同步到目標端進行回放,從而達到元數(shù)據(jù)的同步。本文講述的是一個基礎(chǔ)的實現(xiàn)思路,未來仍將有很大的優(yōu)化空間。


一種元數(shù)據(jù)同步的方法的評論 (共 條)

分享到微博請遵守國家法律
马山县| 胶南市| 上栗县| 昭苏县| 客服| 米泉市| 中卫市| 宝鸡市| 布拖县| 阳山县| 高密市| 长宁区| 教育| 雅安市| 新密市| 青田县| 万全县| 乌鲁木齐市| 宜兰县| 东安县| 泽州县| 墨脱县| 利津县| 阿克| 内乡县| 肃南| 平泉县| 昌图县| 阆中市| 凌源市| 准格尔旗| 盐津县| 博罗县| 长子县| 兴宁市| 宁河县| 汤阴县| 安龙县| 顺义区| 无棣县| 华蓥市|