本技術(shù)涉及但不限于計(jì)算機(jī),尤其涉及一種數(shù)據(jù)同步方法、系統(tǒng)、電子設(shè)備、存儲介質(zhì)。
背景技術(shù):
1、數(shù)據(jù)倉庫需要從不同類型的數(shù)據(jù)源中提取數(shù)據(jù),經(jīng)過清洗、轉(zhuǎn)換和整合后,存儲在一個(gè)統(tǒng)一的位置,這一過程稱為數(shù)據(jù)倉庫的etl(extract-transform-load,抽取-轉(zhuǎn)換-加載)過程。在etl過程中,當(dāng)業(yè)務(wù)變更導(dǎo)致上游表結(jié)構(gòu)更新,需要先暫停etl進(jìn)程,將下游表的結(jié)構(gòu)修改為與上游源表結(jié)構(gòu)一致的最新結(jié)構(gòu),再恢復(fù)etl進(jìn)程,并且在etl停止期間,上游表和下游表都必須暫停服務(wù),無法正常提供服務(wù);并且,如果由于業(yè)務(wù)需求而經(jīng)常需要調(diào)整表結(jié)構(gòu),則需要反復(fù)停止數(shù)據(jù)同步,從而帶來巨大的運(yùn)維成本。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)實(shí)施例提供了一種數(shù)據(jù)同步方法、系統(tǒng)、電子設(shè)備、存儲介質(zhì),能夠使得系統(tǒng)在不中斷etl過程的前提下實(shí)現(xiàn)表結(jié)構(gòu)變更的數(shù)據(jù)同步,保障系統(tǒng)正常服務(wù)功能的同時(shí)降低系統(tǒng)運(yùn)維成本。
2、第一方面,本技術(shù)實(shí)施例提供了一種數(shù)據(jù)同步方法,應(yīng)用于數(shù)據(jù)同步系統(tǒng),所述數(shù)據(jù)同步系統(tǒng)包括上游數(shù)據(jù)庫、第一消息集成模塊、模式注冊中心、消息隊(duì)列、第二消息集成模塊和下游數(shù)據(jù)庫,所述方法包括:
3、所述第一消息集成模塊從所述上游數(shù)據(jù)庫中集成上游數(shù)據(jù),當(dāng)檢測到所述上游數(shù)據(jù)庫的表結(jié)構(gòu)發(fā)生變更,獲取變更后的表結(jié)構(gòu)對應(yīng)的第一模式信息,并將所述第一模式信息注冊到所述模式注冊中心,其中,所述第一模式信息用于描述所述變更后的表結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu);
4、所述第一消息集成模塊序列化所述上游數(shù)據(jù)得到第一消息記錄,并將所述第一消息記錄保存至所述消息隊(duì)列,其中,所述第一消息記錄攜帶有第一模式標(biāo)識,所述第一模式標(biāo)識用于唯一標(biāo)識所述第一消息記錄對應(yīng)的所述上游數(shù)據(jù)庫的表結(jié)構(gòu)的第一模式信息,所述消息隊(duì)列中還包括排序位于所述第一消息記錄之前的第二消息記錄,所述第二消息記錄攜帶有表結(jié)構(gòu)變更前的模式標(biāo)識;
5、當(dāng)所述第二消息集成模塊監(jiān)聽到所述模式注冊中心注冊了新的模式信息,從所述模式注冊中心中獲取所述第一模式信息,將所述第一模式信息保存至模式隊(duì)列,其中,所述第一模式信息為所述模式注冊中心中注冊時(shí)長最短的模式信息,所述模式隊(duì)列中還包括排序位于所述第一模式信息之前的第二模式信息;
6、所述第二消息集成模塊從所述消息隊(duì)列中獲取攜帶有參考模式標(biāo)識的參考消息記錄,從所述模式隊(duì)列中獲取與所述參考模式標(biāo)識對應(yīng)的目標(biāo)模式信息,其中,所述參考消息記錄為所述第一消息記錄或所述第二消息記錄;
7、所述第二消息集成模塊基于所述目標(biāo)模式信息解析所述參考消息記錄,得到目標(biāo)dml語句,其中,所述目標(biāo)dml語句用于修改所述下游數(shù)據(jù)庫中的數(shù)據(jù);
8、所述第二消息集成模塊基于所述目標(biāo)模式信息生成目標(biāo)ddl語句,其中,所述目標(biāo)ddl語句用于修改所述下游數(shù)據(jù)庫的表結(jié)構(gòu);
9、所述第二消息集成模塊將所述目標(biāo)dml語句或所述目標(biāo)ddl語句發(fā)送至所述下游數(shù)據(jù)庫;
10、所述下游數(shù)據(jù)庫執(zhí)行所述目標(biāo)dml語句,完成與所述上游數(shù)據(jù)庫的數(shù)據(jù)同步,或執(zhí)行所述目標(biāo)ddl語句,完成與所述上游數(shù)據(jù)庫的表結(jié)構(gòu)變更同步。
11、在一些實(shí)施例中,所述第二消息集成模塊從所述消息隊(duì)列中獲取攜帶有參考模式標(biāo)識的參考消息記錄,從所述模式隊(duì)列中獲取與所述參考模式標(biāo)識對應(yīng)的目標(biāo)模式信息,包括:
12、獲取所述模式隊(duì)列中位于隊(duì)頭位置的參考模式信息;
13、當(dāng)所述參考模式信息與所述參考模式標(biāo)識不對應(yīng),刪除所述模式隊(duì)列中的所述參考模式信息,重新獲取所述模式隊(duì)列中位于隊(duì)頭位置的新的參考模式信息,直至所述新的參考模式信息與所述參考模式標(biāo)識相對應(yīng),將所述新的參考模式信息確定為所述目標(biāo)模式信息。
14、在一些實(shí)施例中,所述第二消息集成模塊從所述消息隊(duì)列中獲取攜帶有參考模式標(biāo)識的參考消息記錄,從所述模式隊(duì)列中獲取與所述參考模式標(biāo)識對應(yīng)的目標(biāo)模式信息,包括:
15、獲取所述模式隊(duì)列中位于隊(duì)頭位置的參考模式信息;
16、當(dāng)所述參考模式信息為所述模式隊(duì)列中唯一的模式信息,并且所述參考模式信息與所述參考模式標(biāo)識不對應(yīng),丟棄所述參考消息記錄和所述參考模式信息,不提交消費(fèi)偏移量至所述消息隊(duì)列;
17、當(dāng)獲取到所述模式隊(duì)列中位于隊(duì)頭位置的新的參考模式信息,并且所述新的參考模式信息與所述參考模式標(biāo)識相對應(yīng),提交所述消費(fèi)偏移量至所述消息隊(duì)列,并將所述新的參考模式信息確定為所述目標(biāo)模式信息。
18、在一些實(shí)施例中,所述第二消息集成模塊還包括反序列化器、sql構(gòu)造器和模式解析器,所述第二消息集成模塊基于所述目標(biāo)模式信息解析所述參考消息記錄,得到目標(biāo)dml語句,包括:
19、所述反序列化器基于所述目標(biāo)模式信息對所述參考消息記錄進(jìn)行反序列化,得到中間消息記錄,并將所述中間消息記錄發(fā)送至所述sql構(gòu)造器;
20、所述sql構(gòu)造器基于所述中間消息記錄生成所述目標(biāo)dml語句;
21、所述第二消息集成模塊基于所述目標(biāo)模式信息生成目標(biāo)ddl語句,包括:
22、所述模式解析器基于所述目標(biāo)模式信息和預(yù)設(shè)的數(shù)據(jù)類型映射表得到目標(biāo)數(shù)據(jù)映射關(guān)系,其中,所述目標(biāo)數(shù)據(jù)映射關(guān)系用于指示所述目標(biāo)模式信息分別與所述上游數(shù)據(jù)庫對應(yīng)的表字段類型和所述下游數(shù)據(jù)庫對應(yīng)的表字段類型之間的映射關(guān)系;
23、所述模式解析器基于所述目標(biāo)模式信息和預(yù)設(shè)的表結(jié)構(gòu)緩存空間中的參考表結(jié)構(gòu)得到目標(biāo)變更信息,其中,所述參考表結(jié)構(gòu)為當(dāng)前所述下游數(shù)據(jù)庫的表結(jié)構(gòu);
24、所述模式解析器將所述目標(biāo)數(shù)據(jù)映射關(guān)系和所述目標(biāo)變更信息發(fā)送至所述sql構(gòu)造器;
25、所述sql構(gòu)造器基于所述目標(biāo)數(shù)據(jù)映射關(guān)系和所述目標(biāo)變更信息生成所述目標(biāo)ddl語句。
26、第二方面,本技術(shù)實(shí)施例還提供了一種數(shù)據(jù)同步系統(tǒng),所述數(shù)據(jù)同步系統(tǒng)包括上游數(shù)據(jù)庫、第一消息集成模塊、模式注冊中心、消息隊(duì)列、第二消息集成模塊和下游數(shù)據(jù)庫,所述第一消息集成模塊包括第一數(shù)據(jù)處理模塊和第二數(shù)據(jù)處理模塊,所述第二消息集成模塊包括第三數(shù)據(jù)處理模塊、第四數(shù)據(jù)處理模塊和第五數(shù)據(jù)處理模塊;
27、所述第一數(shù)據(jù)處理模塊用于從所述上游數(shù)據(jù)庫中集成上游數(shù)據(jù),當(dāng)檢測到所述上游數(shù)據(jù)庫的表結(jié)構(gòu)發(fā)生變更,獲取變更后的表結(jié)構(gòu)對應(yīng)的第一模式信息,并將所述第一模式信息注冊到所述模式注冊中心,其中,所述第一模式信息用于描述所述變更后的表結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu);
28、所述第二數(shù)據(jù)處理模塊用于序列化所述上游數(shù)據(jù)得到第一消息記錄,并將所述第一消息記錄保存至所述消息隊(duì)列,其中,所述第一消息記錄攜帶有第一模式標(biāo)識,所述第一模式標(biāo)識用于唯一標(biāo)識所述第一消息記錄對應(yīng)的所述上游數(shù)據(jù)庫的表結(jié)構(gòu)的第一模式信息,所述消息隊(duì)列中還包括排序位于所述第一消息記錄之前的第二消息記錄,所述第二消息記錄攜帶有表結(jié)構(gòu)變更前的模式標(biāo)識;
29、所述第三數(shù)據(jù)處理模塊用于當(dāng)監(jiān)聽到所述模式注冊中心注冊了新的模式信息,從所述模式注冊中心中獲取所述第一模式信息,將所述第一模式信息保存至模式隊(duì)列,其中,所述第一模式信息為所述模式注冊中心中注冊時(shí)長最短的模式信息,所述模式隊(duì)列中還包括排序位于所述第一模式信息之前的第二模式信息;
30、所述第四數(shù)據(jù)處理模塊用于從所述消息隊(duì)列中獲取攜帶有參考模式標(biāo)識的參考消息記錄,從所述模式隊(duì)列中獲取與所述參考模式標(biāo)識對應(yīng)的目標(biāo)模式信息,其中,所述參考消息記錄為所述第一消息記錄或所述第二消息記錄;
31、所述第五數(shù)據(jù)處理模塊用于基于所述目標(biāo)模式信息解析所述參考消息記錄,得到目標(biāo)dml語句,基于所述目標(biāo)模式信息生成目標(biāo)ddl語句,并將所述目標(biāo)dml語句或所述目標(biāo)ddl語句發(fā)送至所述下游數(shù)據(jù)庫,其中,所述目標(biāo)dml語句用于修改所述下游數(shù)據(jù)庫中的數(shù)據(jù),所述目標(biāo)ddl語句用于修改所述下游數(shù)據(jù)庫的表結(jié)構(gòu);
32、所述下游數(shù)據(jù)庫用于執(zhí)行所述目標(biāo)dml語句,完成與所述上游數(shù)據(jù)庫的數(shù)據(jù)同步,或執(zhí)行所述目標(biāo)ddl語句,完成與所述上游數(shù)據(jù)庫的表結(jié)構(gòu)變更同步。
33、在一些實(shí)施例中,所述第四數(shù)據(jù)處理模塊包括:
34、第一數(shù)據(jù)獲取模塊,用于獲取所述模式隊(duì)列中位于隊(duì)頭位置的參考模式信息;
35、第一目標(biāo)模式信息確定模塊,用于當(dāng)所述參考模式信息與所述參考模式標(biāo)識不對應(yīng),刪除所述模式隊(duì)列中的所述參考模式信息,重新獲取所述模式隊(duì)列中位于隊(duì)頭位置的新的參考模式信息,直至所述新的參考模式信息與所述參考模式標(biāo)識相對應(yīng),將所述新的參考模式信息確定為所述目標(biāo)模式信息。
36、在一些實(shí)施例中,所述第四數(shù)據(jù)處理模塊包括:
37、第二數(shù)據(jù)獲取模塊,用于獲取所述模式隊(duì)列中位于隊(duì)頭位置的參考模式信息;
38、第六數(shù)據(jù)處理模塊,用于當(dāng)所述參考模式信息為所述模式隊(duì)列中唯一的模式信息,并且所述參考模式信息與所述參考模式標(biāo)識不對應(yīng),丟棄所述參考消息記錄和所述參考模式信息,不提交消費(fèi)偏移量至所述消息隊(duì)列;
39、第二目標(biāo)模式信息確定模塊,用于當(dāng)獲取到所述模式隊(duì)列中位于隊(duì)頭位置的新的參考模式信息,并且所述新的參考模式信息與所述參考模式標(biāo)識相對應(yīng),提交所述消費(fèi)偏移量至所述消息隊(duì)列,并將所述新的參考模式信息確定為所述目標(biāo)模式信息。
40、在一些實(shí)施例中,所述第二消息集成模塊還包括反序列化器、sql構(gòu)造器和模式解析器,所述模式解析器包括映射關(guān)系確定模塊、變更信息獲取模塊和數(shù)據(jù)發(fā)送模塊;
41、所述反序列化器用于基于所述目標(biāo)模式信息對所述參考消息記錄進(jìn)行反序列化,得到中間消息記錄,并將所述中間消息記錄發(fā)送至所述sql構(gòu)造器;
42、所述映射關(guān)系確定模塊用于基于所述目標(biāo)模式信息和預(yù)設(shè)的數(shù)據(jù)類型映射表得到目標(biāo)數(shù)據(jù)映射關(guān)系,其中,所述目標(biāo)數(shù)據(jù)映射關(guān)系用于指示所述目標(biāo)模式信息分別與所述上游數(shù)據(jù)庫對應(yīng)的表字段類型和所述下游數(shù)據(jù)庫對應(yīng)的表字段類型之間的映射關(guān)系;
43、所述變更信息獲取模塊用于基于所述目標(biāo)模式信息和預(yù)設(shè)的表結(jié)構(gòu)緩存空間中的參考表結(jié)構(gòu)得到目標(biāo)變更信息,其中,所述參考表結(jié)構(gòu)為當(dāng)前所述下游數(shù)據(jù)庫的表結(jié)構(gòu);
44、所述數(shù)據(jù)發(fā)送模塊用于將所述目標(biāo)數(shù)據(jù)映射關(guān)系和所述目標(biāo)變更信息發(fā)送至所述sql構(gòu)造器;
45、所述sql構(gòu)造器用于基于所述中間消息記錄生成所述目標(biāo)dml語句,以及基于所述目標(biāo)數(shù)據(jù)映射關(guān)系和所述目標(biāo)變更信息生成所述目標(biāo)ddl語句。
46、第三方面,本技術(shù)實(shí)施例提供了一種電子設(shè)備,包括至少一個(gè)控制處理器和用于與所述至少一個(gè)控制處理器通信連接的存儲器;所述存儲器存儲有可被所述至少一個(gè)控制處理器執(zhí)行的指令,所述指令被所述至少一個(gè)控制處理器執(zhí)行,以使所述至少一個(gè)控制處理器能夠執(zhí)行如第一方面所述的數(shù)據(jù)同步方法。
47、第四方面,本技術(shù)實(shí)施例還提供了一種計(jì)算機(jī)可讀存儲介質(zhì),存儲有計(jì)算機(jī)可執(zhí)行指令,所述計(jì)算機(jī)可執(zhí)行指令用于執(zhí)行如第一方面所述的數(shù)據(jù)同步方法。
48、本技術(shù)實(shí)施例提供了一種數(shù)據(jù)同步方法、系統(tǒng)、電子設(shè)備、存儲介質(zhì),方法包括:所述第一消息集成模塊從所述上游數(shù)據(jù)庫中集成上游數(shù)據(jù),當(dāng)檢測到所述上游數(shù)據(jù)庫的表結(jié)構(gòu)發(fā)生變更,獲取變更后的表結(jié)構(gòu)對應(yīng)的第一模式信息,并將所述第一模式信息注冊到所述模式注冊中心,其中,所述第一模式信息用于描述所述變更后的表結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu);所述第一消息集成模塊序列化所述上游數(shù)據(jù)得到第一消息記錄,并將所述第一消息記錄保存至所述消息隊(duì)列,其中,所述第一消息記錄攜帶有第一模式標(biāo)識,所述第一模式標(biāo)識用于唯一標(biāo)識所述第一消息記錄對應(yīng)的所述上游數(shù)據(jù)庫的表結(jié)構(gòu)的第一模式信息,所述消息隊(duì)列中還包括排序位于所述第一消息記錄之前的第二消息記錄,所述第二消息記錄攜帶有表結(jié)構(gòu)變更前的模式標(biāo)識;當(dāng)所述第二消息集成模塊監(jiān)聽到所述模式注冊中心注冊了新的模式信息,從所述模式注冊中心中獲取所述第一模式信息,將所述第一模式信息保存至模式隊(duì)列,其中,所述第一模式信息為所述模式注冊中心中注冊時(shí)長最短的模式信息,所述模式隊(duì)列中還包括排序位于所述第一模式信息之前的第二模式信息;所述第二消息集成模塊從所述消息隊(duì)列中獲取攜帶有參考模式標(biāo)識的參考消息記錄,從所述模式隊(duì)列中獲取與所述參考模式標(biāo)識對應(yīng)的目標(biāo)模式信息,其中,所述參考消息記錄為所述第一消息記錄或所述第二消息記錄;所述第二消息集成模塊基于所述目標(biāo)模式信息解析所述參考消息記錄,得到目標(biāo)dml語句,其中,所述目標(biāo)dml語句用于修改所述下游數(shù)據(jù)庫中的數(shù)據(jù);所述第二消息集成模塊基于所述目標(biāo)模式信息生成目標(biāo)ddl語句,其中,所述目標(biāo)ddl語句用于修改所述下游數(shù)據(jù)庫的表結(jié)構(gòu);所述第二消息集成模塊將所述目標(biāo)dml語句或所述目標(biāo)ddl語句發(fā)送至所述下游數(shù)據(jù)庫;所述下游數(shù)據(jù)庫執(zhí)行所述目標(biāo)dml語句,完成與所述上游數(shù)據(jù)庫的數(shù)據(jù)同步,或執(zhí)行所述目標(biāo)ddl語句,完成與所述上游數(shù)據(jù)庫的表結(jié)構(gòu)變更同步。本技術(shù)能夠在不中斷etl過程情況下實(shí)時(shí)感知到上游數(shù)據(jù)庫表結(jié)構(gòu)的變更,并自動(dòng)化實(shí)現(xiàn)目標(biāo)庫表結(jié)構(gòu)變更的同步,保障系統(tǒng)正常服務(wù)功能的同時(shí)降低系統(tǒng)運(yùn)維成本。