點(diǎn):第一節(jié)點(diǎn)102、第二節(jié)點(diǎn)104、第三節(jié)點(diǎn)106以及第四節(jié)點(diǎn)108。每個(gè)節(jié)點(diǎn)可以與其它節(jié)點(diǎn)通信。為了清楚起見(jiàn),圖示了四個(gè)節(jié)點(diǎn)。然而,實(shí)際上可以使用更多的節(jié)點(diǎn),包括多得多的節(jié)點(diǎn)。
[0026]分布式事務(wù)是對(duì)兩個(gè)或更多個(gè)網(wǎng)絡(luò)計(jì)算機(jī)系統(tǒng)執(zhí)行操作的事務(wù)。在一個(gè)實(shí)例中,用戶可以在第一節(jié)點(diǎn)102上開(kāi)始一個(gè)事務(wù),并且在本地訪問(wèn)數(shù)據(jù)。如果一個(gè)事務(wù)需要訪問(wèn)遠(yuǎn)程節(jié)點(diǎn)上、例如第二節(jié)點(diǎn)104上的數(shù)據(jù),那么可以使用分布式事務(wù)能力來(lái)全局地處理這個(gè)事務(wù)。在一個(gè)實(shí)例中,可以用一個(gè)集中式組件維持系統(tǒng)中的所有事務(wù)的狀態(tài)。系統(tǒng)中的每一事務(wù)在事務(wù)的開(kāi)始處獲得一個(gè)快照或者每一事務(wù)為事務(wù)內(nèi)的每個(gè)語(yǔ)句獲得快照。系統(tǒng)中的任何事務(wù)將對(duì)于快照的請(qǐng)求傳送到集中式組件,所述集中式組件向系統(tǒng)的單個(gè)節(jié)點(diǎn)提供快照。
[0027]盡管數(shù)據(jù)可以分散在系統(tǒng)上,但數(shù)據(jù)分布對(duì)于用戶是透明的。對(duì)于在一個(gè)節(jié)點(diǎn)處發(fā)起的事務(wù),如果需要非本地?cái)?shù)據(jù),那么節(jié)點(diǎn)透明地打開(kāi)遠(yuǎn)程節(jié)點(diǎn)上的相同事務(wù)的分支。另夕卜,原子性以及持久性可以通過(guò)使用隱式兩階段提交(2PC)協(xié)議來(lái)滿足,從而確保盡管在多個(gè)節(jié)點(diǎn)上修改并且訪問(wèn)數(shù)據(jù),但所有的工作單元在邏輯上與一個(gè)單元相關(guān)聯(lián)。在2PC中,通過(guò)事務(wù)管理器(TM)將全局事務(wù)ID分配給每個(gè)資源管理器(RM)。在一個(gè)實(shí)例中,其中發(fā)起父事務(wù)的節(jié)點(diǎn)變成TM,并且分支事務(wù)節(jié)點(diǎn)變成RM。根據(jù)特定的事務(wù),任何節(jié)點(diǎn)都可以是事務(wù)管理器或資源管理器。TM與每個(gè)RM協(xié)同決策提交或回滾事務(wù)。此外,每個(gè)RM會(huì)分配本地事務(wù)ID。TM將節(jié)點(diǎn)名稱(chēng)作為后綴添加到父事務(wù)ID上以獲得用于事務(wù)的所有分支的全局事務(wù)ID,從而確保全局事務(wù)ID是唯一的。例如,如果在第一節(jié)點(diǎn)102上開(kāi)始事務(wù),那么第一節(jié)點(diǎn)102變成TM。駐留在遠(yuǎn)程節(jié)點(diǎn)上的非本地訪問(wèn)的數(shù)據(jù)可以在新遠(yuǎn)程事務(wù)下執(zhí)行。這些新遠(yuǎn)程事務(wù)是相同父事務(wù)的分支。當(dāng)客戶端使用顯式提交時(shí),TM使用2PC協(xié)議以提交或回滾父事務(wù)的所有分支。
[0028]為了確保事務(wù)的隔離一致性,在一個(gè)實(shí)施例中,父事務(wù)從相關(guān)聯(lián)事務(wù)的所有遠(yuǎn)程節(jié)點(diǎn)收集快照信息。調(diào)和所有這些快照以消除任何不一致性,并且構(gòu)造新快照。此最新構(gòu)造的快照傳送給此事務(wù)的參與節(jié)點(diǎn),并被所有節(jié)點(diǎn)用于執(zhí)行該事務(wù)的語(yǔ)句。在一個(gè)實(shí)施例中,所有該事務(wù)涉及的系統(tǒng)可以看到相同的一致的數(shù)據(jù),并且所述實(shí)施例給定已提交讀隔離的級(jí)別。
[0029]圖2圖示了流程圖110,所述流程圖描繪了在MPP系統(tǒng)中執(zhí)行事務(wù)的一個(gè)實(shí)施例方法。首先,在步驟112中,開(kāi)始顯式父事務(wù)。隨后,在步驟114中,獲得下一語(yǔ)句,并且在步驟116中,確定操作類(lèi)型。如果操作類(lèi)型是提交操作,那么在步驟128中準(zhǔn)備所有分支,結(jié)束事務(wù),并且在步驟128中所述改變變得可見(jiàn)。然而,如果操作類(lèi)型是回滾,那么在步驟130中對(duì)所有分支執(zhí)行回滾,并且MPP系統(tǒng)返回到先前狀態(tài)。
[0030]另一方面,如果確定操作類(lèi)型是讀取,那么在步驟118中確定所述操作是否是單一節(jié)點(diǎn)本地的。如果操作是單一節(jié)點(diǎn)本地的,那么在步驟120執(zhí)行讀取操作,并且系統(tǒng)返回到步驟114。如果讀取操作是遠(yuǎn)程的或在遠(yuǎn)程以及在本地同時(shí)發(fā)生,那么在步驟122中,判定遠(yuǎn)程節(jié)點(diǎn)是否已經(jīng)是分支事務(wù)的一部分。如果遠(yuǎn)程節(jié)點(diǎn)已經(jīng)是分支事務(wù)的一部分,那么在步驟124中執(zhí)行分支事務(wù),并且系統(tǒng)返回到步驟114。然而,如果遠(yuǎn)程節(jié)點(diǎn)尚不是分支事務(wù)的一部分,那么在步驟126中在沒(méi)有事務(wù)的情況下執(zhí)行讀取命令,并且系統(tǒng)返回到步驟114。
[0031]類(lèi)似地,如果確定操作類(lèi)型是寫(xiě)入操作,那么在步驟132中,判定所述操作是否是單一節(jié)點(diǎn)本地的。如果操作是單一節(jié)點(diǎn)本地的,那么在步驟120執(zhí)行寫(xiě)入命令,并且系統(tǒng)返回到步驟114。然而,如果操作是遠(yuǎn)程的或是本地以及遠(yuǎn)程同時(shí)發(fā)生的,那么系統(tǒng)轉(zhuǎn)至步驟134,其中所述系統(tǒng)確定遠(yuǎn)程節(jié)點(diǎn)是否已經(jīng)是分支事務(wù)的一部分。如果遠(yuǎn)程節(jié)點(diǎn)已經(jīng)是分支事務(wù)的一部分,那么在步驟124中執(zhí)行分支事務(wù),并且系統(tǒng)返回到步驟114。然而,如果遠(yuǎn)程節(jié)點(diǎn)不是分支事務(wù)的一部分,那么在步驟136處開(kāi)始新分支事務(wù)。隨后,在步驟138中執(zhí)行新分支事務(wù),并且系統(tǒng)返回到步驟114。在步驟114中,系統(tǒng)獲得下一語(yǔ)句。系統(tǒng)繼續(xù)獲得新語(yǔ)句直到執(zhí)行提交或回滾。
[0032]圖3圖示了調(diào)和快照的一個(gè)實(shí)施例方法的流程圖140。首先,在步驟142中,TM判定是否可以在單一節(jié)點(diǎn)上執(zhí)行查詢。如果可以在單一節(jié)點(diǎn)上執(zhí)行查詢,那么在步驟144中,TM檢索節(jié)點(diǎn)的快照,并且在步驟146,TM使用所檢索的快照?qǐng)?zhí)行查詢。然而,如果不能在單一節(jié)點(diǎn)上執(zhí)行查詢,那么在步驟148中,TM從該事務(wù)所需的所有節(jié)點(diǎn)請(qǐng)求快照。隨后,在步驟150中,TM調(diào)和快照,并且在步驟152中,TM將調(diào)和快照傳送到其它節(jié)點(diǎn)。最后,在步驟154中,使用調(diào)和快照?qǐng)?zhí)行查詢。
[0033]圖4圖示了對(duì)用戶透明的隱式兩階段協(xié)議160。首先,第一節(jié)點(diǎn)102具有非共享數(shù)據(jù)A并且第二節(jié)點(diǎn)104具有非共享數(shù)據(jù)B??蛻舳诉B接落在第一節(jié)點(diǎn)102上,并且開(kāi)始事務(wù)ID為200的顯式事務(wù)txnl。接著,通過(guò)開(kāi)始命令啟動(dòng)事務(wù)。TxIil是父事務(wù),并且第一節(jié)點(diǎn)102是TM。在此實(shí)例中,父事務(wù)涉及修改并且訪問(wèn)數(shù)據(jù)A以及數(shù)據(jù)B。隨后執(zhí)行寫(xiě)入(A)命令,所述寫(xiě)入(A)命令在本地寫(xiě)入數(shù)據(jù)。寫(xiě)入(A)命令在第一節(jié)點(diǎn)102上的txnl的上下文中執(zhí)行。在寫(xiě)入(A)命令之后,執(zhí)行寫(xiě)入(B)命令,即在第二節(jié)點(diǎn)104中對(duì)數(shù)據(jù)B的寫(xiě)入操作。在第二節(jié)點(diǎn)104上執(zhí)行事務(wù)ID為102的隱式事務(wù)txn2。事務(wù)txn2是txnl的分支。接著,執(zhí)行讀取(A),所述讀取(A)是對(duì)本地?cái)?shù)據(jù)A的讀取操作。在第一節(jié)點(diǎn)102的本地事務(wù)的上下文txnl中執(zhí)行讀取(A)。隨后,對(duì)數(shù)據(jù)B執(zhí)行寫(xiě)入(B)操作,并且對(duì)數(shù)據(jù)B執(zhí)行讀?、遣僮?,所述操作均在第二節(jié)點(diǎn)104上執(zhí)行。這些命令在事務(wù)txn2中執(zhí)行,所述事務(wù)是已經(jīng)開(kāi)始的。最后,通過(guò)客戶端顯式地發(fā)布提交命令。第一節(jié)點(diǎn)102將自身認(rèn)作TM,并且提交的操作自動(dòng)轉(zhuǎn)換成兩階段提交(2PC)算法。第一節(jié)點(diǎn)102通過(guò)將節(jié)點(diǎn)的邏輯名稱(chēng)附加到事務(wù)ID上產(chǎn)生全局ID。當(dāng)事務(wù)跨越多個(gè)節(jié)點(diǎn)時(shí),產(chǎn)生全局ID。當(dāng)打開(kāi)分支事務(wù)時(shí),將全局ID連同請(qǐng)求傳送至其它節(jié)點(diǎn)以產(chǎn)生分支事務(wù)。例如,通過(guò)將節(jié)點(diǎn)名稱(chēng)nl添加到事務(wù)ID200上,全局ID將是Tnode-nl-200。保證全局ID在整個(gè)系統(tǒng)上是唯一的。隨后,使用全局ID Tnode-nl-200在2PC的第一階段中準(zhǔn)備事務(wù)、111以及txn2。最后,合并響應(yīng),并且通過(guò)第一節(jié)點(diǎn)102發(fā)布提交的第二階段。
[0034]圖5圖示了全局事務(wù)ID 170的產(chǎn)生,其中在遠(yuǎn)程節(jié)點(diǎn)上所涉及的事務(wù)的所有分支上維持全局事務(wù)ID。在一個(gè)實(shí)例中,每一事務(wù)通過(guò)唯一事務(wù)ID標(biāo)識(shí)。在另一實(shí)例中,每一事務(wù)被標(biāo)識(shí)為具有全局事務(wù)ID以及本地事務(wù)ID的事務(wù)對(duì)。本地事務(wù)ID是在本地產(chǎn)生的IDo隨后,通過(guò)將節(jié)點(diǎn)號(hào)附加到本地事務(wù)ID上產(chǎn)生全局事務(wù)ID。
[0035]在圖5中,通過(guò)客戶端連接在第一節(jié)點(diǎn)102上顯式地開(kāi)始事務(wù)。第一節(jié)點(diǎn)102是TM,并且分配有6364的本地事務(wù)ID。自動(dòng)產(chǎn)生的全局事務(wù)ID是1:6364,所述全局事務(wù)ID通過(guò)將節(jié)點(diǎn)號(hào)“I”附加到本地事務(wù)ID 6364上而創(chuàng)建。隨后,執(zhí)行寫(xiě)入(NI)命令,所述命令是在第一節(jié)點(diǎn)102上事務(wù)〈1:6364,6364〉的