国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ù)同步的方法的評論 (共 條)

分享到微博請遵守國家法律
收藏| 高青县| 淮安市| 滦平县| 哈尔滨市| 凉山| 祥云县| 泰宁县| 景谷| 伽师县| 永福县| 临沭县| 霍城县| 云龙县| 潜山县| 岫岩| 尚志市| 乌兰浩特市| 鄂伦春自治旗| 蕉岭县| 屯留县| 五华县| 五指山市| 绥芬河市| 永丰县| 华宁县| 平遥县| 平定县| 永川市| 股票| 霞浦县| 临颍县| 马公市| 秦安县| 阿尔山市| 汉川市| 绥阳县| 吐鲁番市| 庆云县| 浦北县| 安多县|