本申請(qǐng)涉及分布式數(shù)據(jù)庫,尤其涉及一種ddl原子性問題的修復(fù)方法、裝置以及電子設(shè)備。
背景技術(shù):
1、分布式數(shù)據(jù)庫中,數(shù)據(jù)存儲(chǔ)在多個(gè)數(shù)據(jù)節(jié)點(diǎn),業(yè)務(wù)應(yīng)用在進(jìn)行數(shù)據(jù)庫操作(ddl(data?defi?niti?on?language,數(shù)據(jù)定義語言)/dml(data?manipu?l?at?ion?language,數(shù)據(jù)操作語言)等)時(shí),各數(shù)據(jù)節(jié)點(diǎn)上數(shù)據(jù)庫對(duì)象定義必須保持一致,才能保證各數(shù)據(jù)庫操作在所有數(shù)據(jù)節(jié)點(diǎn)上正常執(zhí)行。為了保持所有數(shù)據(jù)節(jié)點(diǎn)上數(shù)據(jù)庫對(duì)象定義一致,當(dāng)業(yè)務(wù)應(yīng)用執(zhí)行ddl操作新增、修改、刪除數(shù)據(jù)庫對(duì)象定義時(shí),需要在所有數(shù)據(jù)節(jié)點(diǎn)都能保持相同的執(zhí)行結(jié)果,即:要么全部執(zhí)行成功,把數(shù)據(jù)庫對(duì)象定義修改為目標(biāo)態(tài);要么全部執(zhí)行失敗,保持?jǐn)?shù)據(jù)庫對(duì)象原有定義不變。如果出現(xiàn)部分?jǐn)?shù)據(jù)節(jié)點(diǎn)ddl操作成功、部分?jǐn)?shù)據(jù)節(jié)點(diǎn)ddl操作失敗,就會(huì)導(dǎo)致各數(shù)據(jù)節(jié)點(diǎn)數(shù)據(jù)庫對(duì)象定義不一致,進(jìn)而使整個(gè)分布式數(shù)據(jù)庫無法正常執(zhí)行數(shù)據(jù)庫操作。分布式數(shù)據(jù)庫下ddl操作在所有數(shù)據(jù)庫節(jié)點(diǎn)要么全部執(zhí)行成功,要么全部執(zhí)行失敗,稱為ddl原子性。然而現(xiàn)有技術(shù)中缺少一種可以解決分布式數(shù)據(jù)庫ddl原子性問題的方案。
技術(shù)實(shí)現(xiàn)思路
1、本申請(qǐng)?zhí)峁┝艘环Nddl原子性問題的修復(fù)方法、裝置以及電子設(shè)備,以解決分布式數(shù)據(jù)庫出現(xiàn)ddl原子性問題的技術(shù)問題。
2、第一方面,本申請(qǐng)?zhí)峁┝艘环Nddl原子性問題的修復(fù)方法,包括:在分布式數(shù)據(jù)庫執(zhí)行完ddl操作指令之后,檢測上述分布式數(shù)據(jù)庫是否存在ddl原子性問題;在上述分布式數(shù)據(jù)庫的目標(biāo)數(shù)據(jù)節(jié)點(diǎn)存在上述ddl原子性問題的情況下,根據(jù)上述ddl操作指令生成對(duì)應(yīng)的ddl修復(fù)指令,并將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的計(jì)算節(jié)點(diǎn),其中,上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)為上述分布式數(shù)據(jù)庫的任意一個(gè)或多個(gè)數(shù)據(jù)節(jié)點(diǎn);控制上述計(jì)算節(jié)點(diǎn)將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的每一個(gè)數(shù)據(jù)節(jié)點(diǎn),以使上述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都執(zhí)行上述ddl修復(fù)指令并返回執(zhí)行結(jié)果;在上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行成功的情況下,完成對(duì)上述ddl原子性問題的修復(fù)。
3、第二方面,本申請(qǐng)?zhí)峁┝艘环Nddl原子性問題的修復(fù)裝置,包括:檢測模塊,用于在分布式數(shù)據(jù)庫執(zhí)行完ddl操作指令之后,檢測上述分布式數(shù)據(jù)庫是否存在ddl原子性問題;發(fā)送模塊,用于在上述分布式數(shù)據(jù)庫的目標(biāo)數(shù)據(jù)節(jié)點(diǎn)存在上述ddl原子性問題的情況下,根據(jù)上述ddl操作指令生成對(duì)應(yīng)的ddl修復(fù)指令,并將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的計(jì)算節(jié)點(diǎn),其中,上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)為上述分布式數(shù)據(jù)庫的任意一個(gè)或多個(gè)數(shù)據(jù)節(jié)點(diǎn);第一控制模塊,用于控制上述計(jì)算節(jié)點(diǎn)將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的每一個(gè)數(shù)據(jù)節(jié)點(diǎn),以使上述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都執(zhí)行上述ddl修復(fù)指令并返回執(zhí)行結(jié)果;確定模塊,用于在上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行成功的情況下,完成對(duì)上述ddl原子性問題的修復(fù)。
4、作為一種可選的示例,上述檢測模塊包括:第一檢測單元,用于上述ddl操作指令為將上述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)的對(duì)象定義修改為目標(biāo)態(tài),檢測上述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)的對(duì)象定義是否都達(dá)到上述目標(biāo)態(tài);第一確定單元,用于在上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的對(duì)象定義未達(dá)到上述目標(biāo)態(tài)的情況下,確定上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)存在上述ddl原子性問題;第二確定單元,用于在所述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)的對(duì)象定義都達(dá)到所述目標(biāo)態(tài)的情況下,確定所述分布式數(shù)據(jù)庫不存在所述ddl原子性問題。
5、作為一種可選的示例,上述發(fā)送模塊包括:第三確定單元,用于將上述ddl操作指令確定為上述ddl修復(fù)指令;或在上述上述ddl操作指令中添加修復(fù)標(biāo)識(shí),得到上述ddl修復(fù)指令。
6、作為一種可選的示例,上述確定模塊包括:第二檢測單元,用于在上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行成功的情況下,檢測上述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)的對(duì)象定義是否都達(dá)到目標(biāo)態(tài);第四確定單元,用于在上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的對(duì)象定義都達(dá)到上述目標(biāo)態(tài)的情況下,確定上述ddl原子性問題已經(jīng)成功修復(fù)。
7、作為一種可選的示例,上述裝置還包括:第二控制模塊,用于在控制上述計(jì)算節(jié)點(diǎn)將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的每一個(gè)數(shù)據(jù)節(jié)點(diǎn),以使上述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都執(zhí)行上述ddl修復(fù)指令并返回執(zhí)行結(jié)果之后,在上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行失敗的情況下,繼續(xù)控制上述計(jì)算節(jié)點(diǎn)將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的每一個(gè)數(shù)據(jù)節(jié)點(diǎn),以使上述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都執(zhí)行上述ddl修復(fù)指令并返回執(zhí)行結(jié)果,直到上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行成功。
8、作為一種可選的示例,上述裝置還包括:輸出模塊,用于在上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行失敗的情況下,繼續(xù)控制上述計(jì)算節(jié)點(diǎn)將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的每一個(gè)數(shù)據(jù)節(jié)點(diǎn),以使上述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都執(zhí)行上述ddl修復(fù)指令并返回執(zhí)行結(jié)果之后,在發(fā)送次數(shù)大于目標(biāo)次數(shù)且上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為未執(zhí)行成功得情況下,輸出上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的修復(fù)失敗報(bào)告,其中,上述發(fā)送次數(shù)為控制上述計(jì)算節(jié)點(diǎn)將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的每一個(gè)數(shù)據(jù)節(jié)點(diǎn)的次數(shù)。
9、作為一種可選的示例,上述裝置還包括:第三檢測單元,用于在上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行成功的情況下,完成對(duì)上述ddl原子性問題的修復(fù)之后,檢查上述計(jì)算節(jié)點(diǎn)上是否存在未釋放的鎖;生成單元,用于在上述計(jì)算節(jié)點(diǎn)上存在未釋放的鎖的情況下,生成釋放指令;釋放單元,用于將上述釋放指令發(fā)送至上述計(jì)算節(jié)點(diǎn),以使上述計(jì)算節(jié)點(diǎn)上的鎖被釋放。
10、第三方面,本申請(qǐng)?zhí)峁┝艘环N存儲(chǔ)介質(zhì),該存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)程序,其中,該計(jì)算機(jī)程序被處理器運(yùn)行時(shí)執(zhí)行上述ddl原子性問題的修復(fù)方法。
11、第四方面,本申請(qǐng)還提供了一種電子設(shè)備,包括存儲(chǔ)器和處理器,上述存儲(chǔ)器中存儲(chǔ)有計(jì)算機(jī)程序,上述處理器被設(shè)置為通過所述計(jì)算機(jī)程序執(zhí)行上述的ddl原子性問題的修復(fù)方法。
12、在本申請(qǐng)實(shí)施例中,采用了在分布式數(shù)據(jù)庫執(zhí)行完ddl操作指令之后,檢測上述分布式數(shù)據(jù)庫是否存在ddl原子性問題;在上述分布式數(shù)據(jù)庫的目標(biāo)數(shù)據(jù)節(jié)點(diǎn)存在上述ddl原子性問題的情況下,根據(jù)上述ddl操作指令生成對(duì)應(yīng)的ddl修復(fù)指令,并將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的計(jì)算節(jié)點(diǎn),其中,上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)為上述分布式數(shù)據(jù)庫的任意一個(gè)或多個(gè)數(shù)據(jù)節(jié)點(diǎn);控制上述計(jì)算節(jié)點(diǎn)將上述ddl修復(fù)指令發(fā)送至上述分布式數(shù)據(jù)庫的每一個(gè)數(shù)據(jù)節(jié)點(diǎn),以使上述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都執(zhí)行上述ddl修復(fù)指令并返回執(zhí)行結(jié)果;在上述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行成功的情況下,完成對(duì)上述ddl原子性問題的修復(fù)的方法,由于在上述方法中,通過生成ddl修復(fù)指令,并將ddl修復(fù)指令發(fā)送到每一個(gè)數(shù)據(jù)節(jié)點(diǎn),以使得每個(gè)數(shù)據(jù)節(jié)點(diǎn)執(zhí)行ddl修復(fù)指令并返回執(zhí)行結(jié)果,若存在ddl原子性問題的數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為“執(zhí)行成功”,則完成了對(duì)ddl原子性問題的修復(fù),從而實(shí)現(xiàn)了有效地檢測并修復(fù)分布式數(shù)據(jù)庫中的ddl原子性問題,確保數(shù)據(jù)庫系統(tǒng)的穩(wěn)定性和可靠性的目的,進(jìn)而解決了分布式數(shù)據(jù)庫出現(xiàn)ddl原子性問題的技術(shù)問題。
1.一種ddl原子性問題的修復(fù)方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述ddl操作指令為將所述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)的對(duì)象定義修改為目標(biāo)態(tài),所述在分布式數(shù)據(jù)庫執(zhí)行完ddl操作指令之后,檢測所述分布式數(shù)據(jù)庫是否存在ddl原子性問題包括:
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述ddl操作指令生成對(duì)應(yīng)的ddl修復(fù)指令包括:
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述在所述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行成功的情況下,完成對(duì)所述ddl原子性問題的修復(fù)包括:
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,在控制所述計(jì)算節(jié)點(diǎn)將所述ddl修復(fù)指令發(fā)送至所述分布式數(shù)據(jù)庫的每一個(gè)數(shù)據(jù)節(jié)點(diǎn),以使所述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都執(zhí)行所述ddl修復(fù)指令并返回執(zhí)行結(jié)果之后,所述方法還包括:
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,在所述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行失敗的情況下,繼續(xù)控制所述計(jì)算節(jié)點(diǎn)將所述ddl修復(fù)指令發(fā)送至所述分布式數(shù)據(jù)庫的每一個(gè)數(shù)據(jù)節(jié)點(diǎn),以使所述每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都執(zhí)行所述ddl修復(fù)指令并返回執(zhí)行結(jié)果之后,所述方法還包括:
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述目標(biāo)數(shù)據(jù)節(jié)點(diǎn)的執(zhí)行結(jié)果為執(zhí)行成功的情況下,完成對(duì)所述ddl原子性問題的修復(fù)之后,所述方法還包括:
8.一種ddl原子性問題的修復(fù)裝置,其特征在于,包括:
9.一種計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)程序,其特征在于,所述計(jì)算機(jī)程序被處理器運(yùn)行時(shí)執(zhí)行所述權(quán)利要求1至7任一項(xiàng)中所述的方法。
10.一種電子設(shè)備,包括存儲(chǔ)器和處理器,其特征在于,所述存儲(chǔ)器中存儲(chǔ)有計(jì)算機(jī)程序,所述處理器被設(shè)置為通過所述計(jì)算機(jī)程序執(zhí)行所述權(quán)利要求1至7任一項(xiàng)中所述的方法。