本發(fā)明涉及分布式,尤其涉及一種數(shù)據(jù)定義語言的處理方法、裝置、設備及介質(zhì)。
背景技術:
1、分布式數(shù)據(jù)庫的數(shù)據(jù)定義語言(data?definition?language,ddl)是用于定義、修改和刪除分布式數(shù)據(jù)庫中各種對象的結構和屬性的語言集合,但需要考慮分布式環(huán)境下數(shù)據(jù)的分布、節(jié)點間的協(xié)調(diào)以及數(shù)據(jù)一致性等特殊因素,以確保數(shù)據(jù)庫對象在多個節(jié)點上的正確創(chuàng)建、變更和維護,從而支持分布式數(shù)據(jù)庫系統(tǒng)的高效運行和數(shù)據(jù)管理。
2、在普通的單機數(shù)據(jù)庫上,執(zhí)行數(shù)據(jù)定義語言可以很好的保證原子性,原子性可以指事務里面的語句僅為一起成功或一起失敗,不存在部分失敗部分成功的中間態(tài)。
3、然而,在分布式數(shù)據(jù)庫中,針對一條指令,可能在某些節(jié)點上執(zhí)行成功了,在某些節(jié)點上執(zhí)行失敗了。在此種情況下,為了保障原子性,可以選擇將失敗節(jié)點進行重試,從而保證所有節(jié)點都成功,或者選擇對成功節(jié)點進行回滾,讓所有節(jié)點都失敗。但是,數(shù)據(jù)定義語言在修改表結構時,很難去對已經(jīng)執(zhí)行成功的ddl語句進行回滾,從而達到讓所有節(jié)點都失敗的效果。
4、在分布式數(shù)據(jù)庫修改表結構時,可能會對表加部分時段的表鎖,但在分布式數(shù)據(jù)庫中很難保證每個節(jié)點上的表鎖都是一致的,甚至大部分時間這些節(jié)點的表鎖都是不一致的,那么一條ddl語句就很可能在部分節(jié)點上執(zhí)行成功,在申請不到表鎖的節(jié)點上執(zhí)行失敗,從而導致無法保證各節(jié)點之間的原子性。
技術實現(xiàn)思路
1、本發(fā)明提供了一種數(shù)據(jù)定義語言的處理方法、裝置、設備及介質(zhì),能夠保證執(zhí)行數(shù)據(jù)定義語言時各數(shù)據(jù)節(jié)點的原子性,避免了多節(jié)點之間的元數(shù)據(jù)不一致問題。
2、根據(jù)本發(fā)明的一方面,提供了一種數(shù)據(jù)定義語言的處理方法,由分布式數(shù)據(jù)庫系統(tǒng)中的計算節(jié)點以及數(shù)據(jù)節(jié)點配合執(zhí)行,包括:
3、通過計算節(jié)點,在接收到應用側發(fā)送的ddl指令之后,向分布式數(shù)據(jù)庫系統(tǒng)中的各數(shù)據(jù)節(jié)點發(fā)送準備請求,并在確定滿足第二階段或第三階段啟動條件時,向各數(shù)據(jù)節(jié)點下發(fā)鎖獲取請求或提交請求;
4、通過數(shù)據(jù)節(jié)點,當接收到所述準備請求時,進入第一階段操作,并將第一階段的操作結果發(fā)送至計算節(jié)點;
5、通過數(shù)據(jù)節(jié)點,當接收到所述鎖獲取請求時,申請目標表的寫鎖,并在寫鎖申請成功之后,向計算節(jié)點發(fā)送第二階段完成消息;
6、通過數(shù)據(jù)節(jié)點,當接收到所述提交請求時,執(zhí)行目標表的提交操作,并在完成提交之后,向計算節(jié)點發(fā)送第三階段完成消息。
7、根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)定義語言的處理裝置,由分布式數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)節(jié)點執(zhí)行,包括:
8、請求下發(fā)模塊,用于通過計算節(jié)點,在接收到應用側發(fā)送的ddl指令之后,向分布式數(shù)據(jù)庫系統(tǒng)中的各數(shù)據(jù)節(jié)點發(fā)送準備請求,并在確定滿足第二階段或第三階段啟動條件時,向各數(shù)據(jù)節(jié)點下發(fā)鎖獲取請求或提交請求;
9、第一階段執(zhí)行模塊,用于通過數(shù)據(jù)節(jié)點,當接收到所述準備請求時,進入第一階段操作,并將第一階段的操作結果發(fā)送至計算節(jié)點;
10、第二階段執(zhí)行模塊,用于通過數(shù)據(jù)節(jié)點,當接收到所述鎖獲取請求時,申請目標表的寫鎖,并在寫鎖申請成功之后,向計算節(jié)點發(fā)送第二階段完成消息;
11、第三階段執(zhí)行模塊,用于通過數(shù)據(jù)節(jié)點,當接收到所述提交請求時,執(zhí)行目標表的提交操作,并在完成提交之后,向計算節(jié)點發(fā)送第三階段完成消息。
12、根據(jù)本發(fā)明的另一方面,提供了一種電子設備,所述電子設備包括:
13、至少一個處理器;以及
14、與所述至少一個處理器通信連接的存儲器;其中,
15、所述存儲器存儲有可被所述至少一個處理器執(zhí)行的計算機程序,所述計算機程序被所述至少一個處理器執(zhí)行,以使所述至少一個處理器能夠執(zhí)行本發(fā)明任一實施例所述的數(shù)據(jù)定義語言的處理方法。
16、根據(jù)本發(fā)明的另一方面,提供了一種計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)存儲有計算機指令,所述計算機指令用于使處理器執(zhí)行時實現(xiàn)本發(fā)明任一實施例所述的數(shù)據(jù)定義語言的處理方法。
17、本發(fā)明實施例的技術方案,通過利用計算節(jié)點,在接收到應用側發(fā)送的ddl指令之后,向分布式數(shù)據(jù)庫系統(tǒng)中的各數(shù)據(jù)節(jié)點發(fā)送準備請求,并在確定滿足第二階段或第三階段啟動條件時,向各數(shù)據(jù)節(jié)點下發(fā)鎖獲取請求或提交請求,利用數(shù)據(jù)節(jié)點,當接收到所述準備請求時,進入第一階段操作,并將第一階段的操作結果發(fā)送至計算節(jié)點,當接收到所述鎖獲取請求時,申請目標表的寫鎖,并在寫鎖申請成功之后,向計算節(jié)點發(fā)送第二階段完成消息,當接收到所述提交請求時,執(zhí)行目標表的提交操作,并在完成提交之后,向計算節(jié)點發(fā)送第三階段完成消息的方式,能夠在執(zhí)行ddl執(zhí)行的過程中,不干擾數(shù)據(jù)節(jié)點申請表鎖,當數(shù)據(jù)節(jié)點申請不到表鎖時,不強行申請表鎖,避免對業(yè)務產(chǎn)生影響,但仍能保證分布式數(shù)據(jù)庫中的原子性,在每一階段均保證全局一致性,避免了多節(jié)點之間的元數(shù)據(jù)不一致問題。
18、應當理解,本部分所描述的內(nèi)容并非旨在標識本發(fā)明的實施例的關鍵或重要特征,也不用于限制本發(fā)明的范圍。本發(fā)明的其它特征將通過以下的說明書而變得容易理解。
1.一種數(shù)據(jù)定義語言的處理方法,由分布式數(shù)據(jù)庫系統(tǒng)中的計算節(jié)點以及數(shù)據(jù)節(jié)點配合執(zhí)行,其特征在于,包括:
2.根據(jù)權利要求1所述的方法,其特征在于,通過數(shù)據(jù)節(jié)點,當接收到所述準備請求時,進入第一階段操作,并將第一階段的操作結果發(fā)送至計算節(jié)點,包括:
3.根據(jù)權利要求2所述的方法,其特征在于,在通過數(shù)據(jù)節(jié)點,當接收到所述準備請求時,申請目標表的寫鎖,當確定成功申請寫鎖時,向計算節(jié)點返回第一完成消息之后,還包括:
4.根據(jù)權利要求1-3任一項所述的方法,其特征在于,還包括:
5.根據(jù)權利要求4所述的方法,其特征在于,在通過數(shù)據(jù)節(jié)點,當接收到所述鎖獲取請求時,申請目標表的寫鎖,并在寫鎖申請成功之后,向計算節(jié)點發(fā)送第二階段完成消息之后,還包括:
6.根據(jù)權利要求5所述的方法,其特征在于,在通過數(shù)據(jù)節(jié)點,當接收到所述提交請求時,執(zhí)行目標表的提交操作,并在完成提交之后,向計算節(jié)點發(fā)送第三階段完成消息之后,還包括下述任一項:
7.根據(jù)權利要求1所述的方法,其特征在于,在通過數(shù)據(jù)節(jié)點,當接收到所述準備請求時之后,還包括:
8.一種數(shù)據(jù)定義語言的處理裝置,由分布式數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)節(jié)點執(zhí)行,其特征在于,包括:
9.一種電子設備,其特征在于,所述電子設備包括:
10.一種計算機可讀存儲介質(zhì),其特征在于,所述計算機可讀存儲介質(zhì)存儲有計算機指令,所述計算機指令用于使處理器執(zhí)行時實現(xiàn)權利要求1-7中任一項所述的數(shù)據(jù)定義語言的處理方法。