本技術(shù)涉及計(jì)算機(jī),尤其涉及一種實(shí)時(shí)數(shù)據(jù)同步的處理方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)。
背景技術(shù):
1、隨著信息技術(shù)的飛速發(fā)展,數(shù)據(jù)庫(kù)在現(xiàn)代企業(yè)和社會(huì)中扮演著至關(guān)重要的角色。數(shù)據(jù)同步作為數(shù)據(jù)庫(kù)管理中的一個(gè)重要環(huán)節(jié),對(duì)于保障數(shù)據(jù)的一致性和完整性具有重大意義。然而,傳統(tǒng)的數(shù)據(jù)同步方法無(wú)法適用于實(shí)時(shí)的數(shù)據(jù)更新場(chǎng)景。
2、為了克服傳統(tǒng)數(shù)據(jù)同步方法的局限性,基于數(shù)據(jù)庫(kù)日志的實(shí)時(shí)數(shù)據(jù)同步技術(shù)應(yīng)運(yùn)而生。這種技術(shù)通過(guò)監(jiān)聽(tīng)數(shù)據(jù)庫(kù)產(chǎn)生的binlog日志,將數(shù)據(jù)變更實(shí)時(shí)地封裝并轉(zhuǎn)發(fā)到目標(biāo)端,從而實(shí)現(xiàn)高效的數(shù)據(jù)同步。
3、然而,在分布式環(huán)境下,一次數(shù)據(jù)變更包括多個(gè)操作步驟,而基于binlog的日志同步只能反應(yīng)數(shù)據(jù)變化,不能保證多個(gè)操作的順序性,使得下游的數(shù)據(jù)一致性無(wú)法保證,容易造成數(shù)據(jù)丟失。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)實(shí)施例提供一種實(shí)時(shí)數(shù)據(jù)同步的處理方法、裝置、設(shè)備及存儲(chǔ)介質(zhì),用以補(bǔ)償了下游系統(tǒng)可能出現(xiàn)的數(shù)據(jù)缺失問(wèn)題,保證了下游系統(tǒng)的數(shù)據(jù)一致性。
2、第一方面,本技術(shù)實(shí)施例提供一種實(shí)時(shí)數(shù)據(jù)同步的處理方法,包括:
3、在數(shù)據(jù)同步過(guò)程中,根據(jù)日志變更信息更新事務(wù)步驟表和用戶操作表,其中,所述事務(wù)步驟表中存儲(chǔ)有事務(wù)標(biāo)識(shí)和所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的操作信息,所述操作信息包括至少一個(gè)操作步驟以及操作執(zhí)行順序,所述用戶操作表中存儲(chǔ)有所述事務(wù)標(biāo)識(shí)和數(shù)據(jù)更新指令;所述事務(wù)標(biāo)識(shí)用于指示當(dāng)次事務(wù)的事務(wù)類型,所述事務(wù)類型為刪除數(shù)據(jù)、插入數(shù)據(jù)或更新數(shù)據(jù),所述操作執(zhí)行順序包括至少一個(gè)操作步驟的先后執(zhí)行順序,所述操作步驟為刪除步驟或插入步驟。
4、獲取事務(wù)步驟表中屬于同一事務(wù)標(biāo)識(shí)的兩個(gè)操作步驟,根據(jù)所述事務(wù)標(biāo)識(shí)和所述操作執(zhí)行順序,判斷所述操作執(zhí)行順序是否滿足預(yù)設(shè)順序;若操作執(zhí)行順序不滿足預(yù)設(shè)順序,根據(jù)所述事務(wù)標(biāo)識(shí)在所述用戶操作表中獲取目標(biāo)數(shù)據(jù)更新指令。
5、根據(jù)所述目標(biāo)數(shù)據(jù)更新指令生成第一數(shù)據(jù)補(bǔ)償指令,并向分布式節(jié)點(diǎn)發(fā)送所述第一數(shù)據(jù)補(bǔ)償指令,所述第一數(shù)據(jù)補(bǔ)償指令用于補(bǔ)償所述數(shù)據(jù)同步過(guò)程中至少一個(gè)所述操作步驟的操作執(zhí)行順序錯(cuò)誤造成的數(shù)據(jù)缺失。
6、在一種可能的實(shí)施方式中,若所述事務(wù)類型為更新數(shù)據(jù),則所述事務(wù)類型對(duì)應(yīng)刪除和插入兩個(gè)步驟;所述獲取事務(wù)步驟表中屬于同一事務(wù)標(biāo)識(shí)的兩個(gè)操作步驟,根據(jù)所述事務(wù)標(biāo)識(shí)和所述操作執(zhí)行順序,判斷所述操作執(zhí)行順序是否滿足預(yù)設(shè)順序,包括:獲取所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)步驟組,所述目標(biāo)步驟組中包括兩個(gè)所述操作步驟的正確執(zhí)行順序;其中,所述正確執(zhí)行順序?yàn)橄葎h除再插入。
7、判斷所述操作執(zhí)行順序是否與所述正確執(zhí)行順序一致,若一致,則確定所述操作執(zhí)行順序滿足預(yù)設(shè)順序。
8、在一種可能的實(shí)施方式中,所述數(shù)據(jù)更新指令為sql語(yǔ)句,所述根據(jù)所述目標(biāo)數(shù)據(jù)更新指令生成第一數(shù)據(jù)補(bǔ)償指令,包括:獲取所述目標(biāo)數(shù)據(jù)更新指令的關(guān)鍵詞,所述關(guān)鍵詞指示了所述目標(biāo)數(shù)據(jù)更新指令的更新類型;所述更新類型用于指示更新數(shù)據(jù)表屬性或更新數(shù)據(jù)表中的數(shù)據(jù)內(nèi)容。
9、根據(jù)所述關(guān)鍵詞獲取目標(biāo)代碼模板,并根據(jù)所述目標(biāo)數(shù)據(jù)更新指令和所述目標(biāo)代碼模板生成所述第一數(shù)據(jù)補(bǔ)償指令,其中,不同的更新類型,對(duì)應(yīng)不同的目標(biāo)代碼模板。
10、在一種可能的實(shí)施方式中,所述根據(jù)日志變更信息更新事務(wù)步驟表和用戶操作表,包括:針對(duì)日志變更信息中的binlog變更信息,對(duì)所述binlog變更信息進(jìn)行解析,獲取json格式的數(shù)據(jù)。
11、根據(jù)預(yù)設(shè)的步驟信息提取規(guī)則提取所述json格式的數(shù)據(jù)中的事務(wù)標(biāo)識(shí)和操作步驟,并將所述事務(wù)標(biāo)識(shí)和所述操作步驟及操作步驟的操作執(zhí)行順序存儲(chǔ)至所述事務(wù)步驟表中。
12、針對(duì)日志變更信息中的操作數(shù)據(jù)變更信息,根據(jù)預(yù)設(shè)的操作數(shù)據(jù)提取規(guī)則提取所述操作數(shù)據(jù)變更信息中的所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的所述數(shù)據(jù)更新指令,并將所述事務(wù)標(biāo)識(shí)和所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的所述數(shù)據(jù)更新指令存儲(chǔ)至所述用戶操作表中。
13、在一種可能的實(shí)施方式中,所述根據(jù)日志變更信息更新事務(wù)步驟表和用戶操作表之前,所述方法還包括:監(jiān)聽(tīng)binlog日志并獲取binlog變更信息,其中,所述binlog變更信息用于指示數(shù)據(jù)同步過(guò)程中記錄在所述binlog日志中的一個(gè)操作步驟。
14、按照預(yù)設(shè)時(shí)間間隔獲取操作數(shù)據(jù)變更信息,其中,所述操作數(shù)據(jù)變更信息用于指示執(zhí)行所述數(shù)據(jù)同步過(guò)程的操作指令;根據(jù)所述binlog變更信息和所述操作數(shù)據(jù)變更信息獲取日志變更信息。
15、在一種可能的實(shí)施方式中,所述事務(wù)步驟表中還包括所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的數(shù)據(jù)主鍵,所述方法還包括:接收數(shù)據(jù)異常刪除指令,所述異常刪除指令中攜帶數(shù)據(jù)主鍵;根據(jù)所述數(shù)據(jù)主鍵查找所述事務(wù)步驟表中的事務(wù)標(biāo)識(shí);根據(jù)所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的操作信息,生成第二數(shù)據(jù)補(bǔ)償指令,并向所述分布式節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)補(bǔ)償指令,所述第二數(shù)據(jù)補(bǔ)償指令用于補(bǔ)償不滿足理論數(shù)據(jù)造成的數(shù)據(jù)異常。
16、在一種可能的實(shí)施方式中,所述用戶操作表中還包括行數(shù),所述行數(shù)用于指示數(shù)據(jù)庫(kù)執(zhí)行所述目標(biāo)數(shù)據(jù)更新指令時(shí)涉及的數(shù)據(jù)條數(shù),所述方法還包括:針對(duì)所述行數(shù)超過(guò)預(yù)設(shè)閾值的異常數(shù)據(jù)更新指令,獲取所述異常數(shù)據(jù)更新指令的目標(biāo)操作用戶;將所述異常數(shù)據(jù)更新指令和對(duì)應(yīng)的目標(biāo)操作用戶存儲(chǔ)至異常數(shù)據(jù)更新表中,并將所述異常數(shù)據(jù)更新表反饋給目標(biāo)用戶終端。
17、第二方面,本技術(shù)實(shí)施例提供一種實(shí)時(shí)數(shù)據(jù)同步的處理裝置,包括:
18、更新模塊,用于在數(shù)據(jù)同步過(guò)程中,根據(jù)日志變更信息更新事務(wù)步驟表和用戶操作表,其中,所述事務(wù)步驟表中存儲(chǔ)有事務(wù)標(biāo)識(shí)和所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的操作信息,所述操作信息包括至少一個(gè)操作步驟以及操作執(zhí)行順序,所述用戶操作表中存儲(chǔ)有所述事務(wù)標(biāo)識(shí)和數(shù)據(jù)更新指令;所述事務(wù)標(biāo)識(shí)用于指示當(dāng)次事務(wù)的事務(wù)類型,所述事務(wù)類型為刪除數(shù)據(jù)、插入數(shù)據(jù)或更新數(shù)據(jù),所述操作執(zhí)行順序包括至少一個(gè)操作步驟的先后執(zhí)行順序,所述操作步驟為刪除步驟或插入步驟。
19、判斷模塊,用于獲取事務(wù)步驟表中屬于同一事務(wù)標(biāo)識(shí)的兩個(gè)操作步驟,根據(jù)所述事務(wù)標(biāo)識(shí)和所述操作執(zhí)行順序,判斷所述操作執(zhí)行順序是否滿足預(yù)設(shè)順序。
20、所述判斷模塊,還用于若所述操作執(zhí)行順序不滿足預(yù)設(shè)順序,根據(jù)所述事務(wù)標(biāo)識(shí)在所述用戶操作表中獲取目標(biāo)數(shù)據(jù)更新指令。
21、補(bǔ)償模塊,用于根據(jù)所述目標(biāo)數(shù)據(jù)更新指令生成第一數(shù)據(jù)補(bǔ)償指令,并向分布式節(jié)點(diǎn)發(fā)送所述第一數(shù)據(jù)補(bǔ)償指令,所述第一數(shù)據(jù)補(bǔ)償指令用于補(bǔ)償所述數(shù)據(jù)同步過(guò)程中至少一個(gè)所述操作步驟的操作執(zhí)行順序錯(cuò)誤造成的數(shù)據(jù)缺失。
22、在一種可能的實(shí)施方式中,若所述事務(wù)類型為更新數(shù)據(jù),則所述事務(wù)類型對(duì)應(yīng)刪除和插入兩個(gè)步驟,所述判斷模塊具體用于:獲取所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)步驟組,所述目標(biāo)步驟組中包括兩個(gè)所述操作步驟的正確執(zhí)行順序;其中,所述正確執(zhí)行順序?yàn)橄葎h除再插入。
23、判斷所述操作執(zhí)行順序是否與所述正確執(zhí)行順序一致,若一致,則確定所述操作執(zhí)行順序滿足預(yù)設(shè)順序。
24、在一種可能的實(shí)施方式中,數(shù)據(jù)更新指令為sql語(yǔ)句,所述補(bǔ)償模塊具體用于:獲取所述目標(biāo)數(shù)據(jù)更新指令的關(guān)鍵詞,所述關(guān)鍵詞指示了所述目標(biāo)數(shù)據(jù)更新指令的更新類型;所述更新類型用于指示更新數(shù)據(jù)表屬性或更新數(shù)據(jù)表中的數(shù)據(jù)內(nèi)容。
25、根據(jù)所述關(guān)鍵詞獲取目標(biāo)代碼模板,并根據(jù)所述目標(biāo)數(shù)據(jù)更新指令和所述目標(biāo)代碼模板生成所述第一數(shù)據(jù)補(bǔ)償指令,其中,不同的更新類型,對(duì)應(yīng)不同的目標(biāo)代碼模板。
26、在一種可能的實(shí)施方式中,所述更新模塊具體用于:針對(duì)日志變更信息中的binlog變更信息,對(duì)所述binlog變更信息進(jìn)行解析,獲取json格式的數(shù)據(jù)。
27、根據(jù)預(yù)設(shè)的步驟信息提取規(guī)則提取所述json格式的數(shù)據(jù)中的事務(wù)標(biāo)識(shí)和操作步驟,并將所述事務(wù)標(biāo)識(shí)和所述操作步驟及操作步驟的操作執(zhí)行順序存儲(chǔ)至所述事務(wù)步驟表中。
28、針對(duì)日志變更信息中的操作數(shù)據(jù)變更信息,根據(jù)預(yù)設(shè)的操作數(shù)據(jù)提取規(guī)則提取所述操作數(shù)據(jù)變更信息中的所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的所述數(shù)據(jù)更新指令,并將所述事務(wù)標(biāo)識(shí)和所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的所述數(shù)據(jù)更新指令存儲(chǔ)至所述用戶操作表中。
29、在一種可能的實(shí)施方式中,所述更新模塊還用于:監(jiān)聽(tīng)binlog日志并獲取binlog變更信息,其中,所述binlog變更信息用于指示數(shù)據(jù)同步過(guò)程中記錄在所述binlog日志中的一個(gè)操作步驟。
30、按照預(yù)設(shè)時(shí)間間隔獲取操作數(shù)據(jù)變更信息,其中,所述操作數(shù)據(jù)變更信息用于指示執(zhí)行所述數(shù)據(jù)同步過(guò)程的操作指令;根據(jù)所述binlog變更信息和所述操作數(shù)據(jù)變更信息獲取日志變更信息。
31、在一種可能的實(shí)施方式中,所述事務(wù)步驟表中還包括所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的數(shù)據(jù)主鍵,所述補(bǔ)償模塊還用于:接收數(shù)據(jù)異常刪除指令,所述異常刪除指令中攜帶數(shù)據(jù)主鍵;根據(jù)所述數(shù)據(jù)主鍵查找所述事務(wù)步驟表中的事務(wù)標(biāo)識(shí);根據(jù)所述事務(wù)標(biāo)識(shí)對(duì)應(yīng)的操作信息,生成第二數(shù)據(jù)補(bǔ)償指令,并向所述分布式節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)補(bǔ)償指令,所述第二數(shù)據(jù)補(bǔ)償指令用于補(bǔ)償不滿足理論數(shù)據(jù)造成的數(shù)據(jù)異常。
32、在一種可能的實(shí)施方式中,所述用戶操作表中還包括行數(shù),所述行數(shù)用于指示數(shù)據(jù)庫(kù)執(zhí)行所述目標(biāo)數(shù)據(jù)更新指令時(shí)涉及的數(shù)據(jù)條數(shù),所述補(bǔ)償模塊還用于:針對(duì)所述行數(shù)超過(guò)預(yù)設(shè)閾值的異常數(shù)據(jù)更新指令,獲取所述異常數(shù)據(jù)更新指令的目標(biāo)操作用戶;將所述異常數(shù)據(jù)更新指令和對(duì)應(yīng)的目標(biāo)操作用戶存儲(chǔ)至異常數(shù)據(jù)更新表中,并將所述異常數(shù)據(jù)更新表反饋給目標(biāo)用戶終端。
33、第三方面,本技術(shù)實(shí)施例提供一種實(shí)時(shí)數(shù)據(jù)同步的處理設(shè)備,包括:存儲(chǔ)器,處理器;
34、所述存儲(chǔ)器存儲(chǔ)計(jì)算機(jī)執(zhí)行指令;
35、所述處理器執(zhí)行所述存儲(chǔ)器存儲(chǔ)的計(jì)算機(jī)執(zhí)行指令,使得所述處理器執(zhí)行如上第一方面和/或第一方面各種可能的實(shí)施方式。
36、第四方面,本技術(shù)實(shí)施例提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)執(zhí)行指令,所述計(jì)算機(jī)執(zhí)行指令被處理器執(zhí)行時(shí)用于實(shí)現(xiàn)如上第一方面和/或第一方面各種可能的實(shí)施方式。
37、第五方面,本技術(shù)實(shí)施例提供一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序,該計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上第一方面和/或第一方面各種可能的實(shí)施方式。
38、本技術(shù)實(shí)施例提供的實(shí)時(shí)數(shù)據(jù)同步的處理方法、裝置、設(shè)備及存儲(chǔ)介質(zhì),通過(guò)在數(shù)據(jù)同步過(guò)程中,根據(jù)日志變更信息更新事務(wù)步驟表和用戶操作表,其中,事務(wù)步驟表中存儲(chǔ)有事務(wù)標(biāo)識(shí)和事務(wù)標(biāo)識(shí)對(duì)應(yīng)的操作信息,操作信息包括至少一個(gè)操作步驟以及操作執(zhí)行順序,用戶操作表中存儲(chǔ)有事務(wù)標(biāo)識(shí)和數(shù)據(jù)更新指令;獲取事務(wù)步驟表中屬于同一事務(wù)標(biāo)識(shí)的兩個(gè)操作步驟,根據(jù)事務(wù)標(biāo)識(shí)和操作執(zhí)行順序,判斷操作執(zhí)行順序是否滿足預(yù)設(shè)順序;若不滿足,根據(jù)事務(wù)標(biāo)識(shí)在用戶操作表中獲取目標(biāo)數(shù)據(jù)更新指令;根據(jù)目標(biāo)數(shù)據(jù)更新指令生成第一數(shù)據(jù)補(bǔ)償指令,并向分布式節(jié)點(diǎn)發(fā)送第一數(shù)據(jù)補(bǔ)償指令,補(bǔ)償了下游系統(tǒng)在數(shù)據(jù)同步過(guò)程中由于至少一個(gè)操作步驟的操作執(zhí)行順序錯(cuò)誤造成的數(shù)據(jù)缺失問(wèn)題,保證了下游系統(tǒng)的數(shù)據(jù)一致性。