背景技術(shù):
在事務處理、數(shù)據(jù)庫和計算機聯(lián)網(wǎng)中,兩階段提交協(xié)議是原子提交協(xié)議的類型。原子提交可以被描述為將不同改變的集合應用為單個操作的操作。原子提交可以被表示為在改變被應用的情況下已經(jīng)成功,并且如果在原子提交可能完成之前存在故障,則原子提交中完成的所有改變被反轉(zhuǎn)。在原子提交中完成的所有改變的該反轉(zhuǎn)方面可以確保系統(tǒng)在故障的情況下保持處于一致狀態(tài)。原子提交進一步包括其中在任何給定時間處理一個原子提交的隔離的屬性。例如,原子提交可以在數(shù)據(jù)庫系統(tǒng)、修訂控制系統(tǒng)和其他這樣的領(lǐng)域中使用。
附圖說明
本公開的特征通過示例的方式圖示,并且不限于(一個或多個)以下各圖,其中相同的附圖標記指示相同的元件,在附圖中:
圖1圖示了根據(jù)本公開的示例的用于分布式事務的兩階段提交協(xié)議混合的裝置的布局;
圖2圖示了根據(jù)本公開的示例的用于圖1的用于分布式事務的兩階段提交協(xié)議混合的裝置的環(huán)境;
圖3圖示了根據(jù)本公開的示例的用于實現(xiàn)圖1的用于分布式事務的兩階段提交協(xié)議混合的裝置的方法的流程圖;
圖4圖示了根據(jù)本公開的示例的用于實現(xiàn)圖1的用于分布式事務的兩階段提交協(xié)議混合的裝置的方法的另一流程圖;
圖5圖示了根據(jù)本公開的示例的用于實現(xiàn)圖1的用于分布式事務的兩階段提交協(xié)議混合的裝置的方法的另一流程圖;以及
圖6圖示了根據(jù)本公開的示例的計算機系統(tǒng)。
具體實施方式
為了簡化和說明的目的,通過主要參考示例來描述本公開。在下面的描述中,闡述了許多特定細節(jié),以便于提供對本公開的全面理解。然而,將容易地顯而易見的是,可以在不限于這些特定細節(jié)的情況下實踐本公開。在其他情況下,一些方法和結(jié)構(gòu)尚未被詳細描述,以免不必要地模糊本公開。
貫穿本公開,術(shù)語“一”和“一個”旨在表示特定元件中的至少一個。如本文中使用的,術(shù)語“包含”意為包括但不限于,術(shù)語“包括”意為包括但不限于。術(shù)語“基于”意為至少部分地基于。
在事務處理、數(shù)據(jù)庫、計算機聯(lián)網(wǎng)以及其他這樣的領(lǐng)域中,兩階段提交協(xié)議是可以被描述為機器可讀指令的分布式集合的原子提交協(xié)議的類型,其中,兩階段提交協(xié)議協(xié)調(diào)參與關(guān)于提交還是中止(即,回滾)事務的分布式原子事務的所有過程。兩階段提交協(xié)議實現(xiàn)其提交事務的目標,甚至在臨時系統(tǒng)故障的許多情況下,例如涉及關(guān)聯(lián)的過程、網(wǎng)絡節(jié)點、通信等的故障。為了適應從故障恢復,兩階段提交協(xié)議的參與方可以使用兩階段提交協(xié)議的狀態(tài)的登記(logging)。在這方面,可以通過兩階段提交協(xié)議的恢復過程來使用日志記錄。
使用兩階段提交協(xié)議的解決方案可以包括數(shù)據(jù)操縱語言階段(例如,階段0),其中執(zhí)行所有的事務插入、更新和刪除操作。在使用鎖定管理(例如,通過鎖定管理模塊實現(xiàn))的實現(xiàn)方式中,鎖定可以在階段0期間被獲得和積累。進一步關(guān)于階段0,兩階段提交協(xié)議的操作可以包括提交請求階段(本文也作為投票階段、準備階段或階段1)和提交階段(本文也稱為階段2)。對于實現(xiàn)如本文中公開的推定準備好協(xié)議的參與方,每個數(shù)據(jù)操縱語言操作可以被評估為包括暗示的提交請求階段(即,階段1),使得事務可在任何時刻提交,只要沒有數(shù)據(jù)操縱語言請求返回錯誤。關(guān)于數(shù)據(jù)操縱語言請求的任何錯誤(在合適的重試之后,在適用的情況下)可能導致中止。
鎖定可被描述為防止其他并發(fā)事務在當前事務正在進行的同時修改底層數(shù)據(jù)的機制。作為鎖定的替代或附加,數(shù)據(jù)庫可以使用樂觀并發(fā)控制,并且如果檢測到?jīng)_突則中止。鎖定可以繼續(xù)被保持,直至如本文公開的階段2的結(jié)束,在所有數(shù)據(jù)操縱語言操作被執(zhí)行并安全存儲在審計尾跡(audittrail)中之后。
描述數(shù)據(jù)修改的審計記錄可以被置于審計服務高速緩存中的審計緩沖器中,但是這些審計緩沖器可能沒有被刷新(flush),或?qū)徲嬘涗浛梢栽陔A段0期間被安全存儲在例如盤上。審計尾跡可以提供在數(shù)據(jù)庫中的數(shù)據(jù)持久性的實現(xiàn)。在事務完成如本文公開的階段2之前,可以例如通過盤、固態(tài)驅(qū)動(ssd)、非易失性隨機存取存儲器(ram)、n副本等來使審計記錄持久,使得在未計劃的中斷的情況下,審計記錄本身可以用于重建未應用的事務并且使數(shù)據(jù)庫一致。在某些兩階段提交協(xié)議中,審計記錄沒有被刷新到磁盤并且被保持在存儲器中,直到準備階段(即階段1)之后為止。在如本文所公開的推定準備好的情況下,在每個數(shù)據(jù)操縱語言操作之后,可以使得審計記錄持久,從而使得準備消息對于實現(xiàn)假定準備好協(xié)議(presumedpreparedprotocol)的那些參與方是過時的。
在提交請求階段(如本文公開的階段1)中,協(xié)調(diào)器過程可以嘗試準備事務的所有參與過程(表示為參與方、同伴或工作方)以采取用于提交或中止事務的所需要的步驟,以及進行投票,“是”(即,提交(如果事務參與方的本地部分執(zhí)行已經(jīng)適當?shù)亟Y(jié)束))或“否”(即,中止(如果已經(jīng)檢測到事務參與方的本地部分執(zhí)行的問題)。在這方面,當事務要被提交時,事務可以進入階段1,由此事務管理模塊(例如,包括如本文所公開的協(xié)調(diào)器過程)首先將準備消息發(fā)送到事務的(事務參與方的)所有參與資源管理模塊。替代地,當要提交事務時,事務可以進入階段1,由此事務管理模塊(例如,包括如本文所公開的協(xié)調(diào)器過程)首先將準備消息發(fā)送到?jīng)]有實現(xiàn)如本文公開的假定準備好協(xié)議的事務的(事務參與方的)那些參與資源管理模塊。對于階段1,每個資源管理模塊對事務的結(jié)果進行投票。資源管理模塊中的每一個可以嘗試使其自己準備好進行提交,使得事務在故障的情況下將是耐久的。沒有鎖定管理模塊的實現(xiàn)方式可以將當前事務的修改與用于其他事務的修改作比較,以確定事務之間的沖突是否存在。如果沖突存在,則資源管理模塊可以用中止事務的投票來回復回到事務管理模塊。如果不存在沖突,則資源管理模塊可以通過創(chuàng)建的準備好的審計記錄,將審計記錄置于審計緩沖器中來確保審計對磁盤是安全的,并且強制刷新審計緩沖器高速緩存。鎖定管理模塊實現(xiàn)方式不包括沖突檢測組件,并且刷新審計記錄以用于對持久存儲器進行的修改。在該階段,資源管理模塊可以被指定為“準備好”,并且資源管理模塊可以向事務管理模塊回復回其準備好提交。
在提交階段(如本文所公開的階段2)中,基于參與方的投票,協(xié)調(diào)器過程決定提交(如果所有參與方已經(jīng)投票“是”)還是中止事務(其他情況),并且將結(jié)果通知給所有參與方。然后,參與方可以用其本地事務資源(也表示為可恢復資源;例如數(shù)據(jù)庫數(shù)據(jù))遵循所需要的動作(即,提交或中止)。在這方面,在所有資源管理模塊已經(jīng)從準備消息對事務管理模塊進行了回復之后,事務管理模塊可以觸發(fā)階段2。如果任何資源管理模塊已經(jīng)出于任何原因而投票要中止事務,則該事務將被事務管理模塊中止,并且事務管理模塊將中止消息發(fā)送到所有資源管理模塊。如果所有資源管理模塊已經(jīng)投票要提交,則將向資源管理模塊驅(qū)動提交。在階段2期間,資源管理模塊將釋放鎖定(如果任何被保持),并且清理事務所保持的資源。
根據(jù)示例,“假定中止”協(xié)議可以被實現(xiàn),由此在如本文公開的故障的情況下在恢復期間,發(fā)現(xiàn)用于事務的審計記錄但是沒有“準備好的”審計記錄的資源管理模塊將假設事務將被中止。在某些實現(xiàn)方式中,資源管理模塊可以回滾這樣的事務,并且在其他實現(xiàn)方式中,資源管理模塊可以等待事務管理模塊告知資源管理模塊中止事務。具有處于準備好的狀態(tài)的事務的資源管理模塊要等待事務管理模塊重新驅(qū)動提交或中止以完成階段2。
如果資源管理模塊在事務完成階段1之前故障,則整個事務將被中止。這是由于在資源管理模塊故障之前由資源管理模塊生成的所有需要的審計在插入、更新和刪除操作期間是否被刷新到盤的不確定性而導致的。
關(guān)于假定準備好協(xié)議,可以假設所有參與方執(zhí)行假定準備好協(xié)議。假定準備好協(xié)議可以提供在事務從階段0過渡到階段1時對階段1處理的消除,如本文所公開,并且消除了對從事務管理模塊發(fā)送到所有資源管理模塊的階段1消息的需要。在這方面,每個資源管理模塊可以維持永久準備好狀態(tài)。當插入、更新和刪除請求被資源管理模塊接收時,資源管理模塊可以針對每個操作執(zhí)行階段0和階段1任務二者,即,如果實現(xiàn)了鎖定管理模塊,則獲得鎖定,或者如果沒有,則資源管理模塊執(zhí)行沖突檢測,并且可以使得審計記錄對于審計存儲區(qū)是持久的。對于該實現(xiàn)方式,鎖定管理模塊可以被實現(xiàn)以使得鎖定被獲得并在事務的持續(xù)時間內(nèi)被保持以防止沖突,并且如果鎖定沒有被保持,則沖突將在數(shù)據(jù)修改時被檢測,使得資源管理模塊可以通知事務管理模塊中止事務。在每個插入、更新和刪除操作之后,資源管理模塊可以回復回指示操作完成的客戶端,并且所有資源管理模塊除了插入、更新和刪除操作在進行時之外常年處于假定準備好狀態(tài)。當客戶端完成對于事務所需要的所有插入、更新和刪除操作時,并且如果沒有資源管理模塊回復以錯誤,則事務管理模塊可以立即進行階段2處理,從而避免先前需要的所有階段1消息業(yè)務。
在這方面,根據(jù)示例,本文公開了用于分布式事務的兩階段提交協(xié)議混合的裝置和用于分布式事務的兩階段提交協(xié)議混合的方法。根據(jù)示例,本文公開的裝置和方法可以提供假定準備好協(xié)議與其他兩階段協(xié)議的混合以實現(xiàn)兩階段提交過程。例如,事務可以橫跨兩個單獨的數(shù)據(jù)庫,由此一個數(shù)據(jù)庫(或在一個數(shù)據(jù)庫中的一些參與方)實現(xiàn)假定準備好協(xié)議,并且另一個數(shù)據(jù)庫不實現(xiàn)。根據(jù)示例,本文公開的裝置和方法可以允許協(xié)調(diào)器過程在可用時利用假定準備好協(xié)議,并且仍然確保事務的所有分支是一致和耐久的。即使在相同數(shù)據(jù)庫內(nèi),一些部分可以具有不同的復制方案或駐留在地理上遠程的位置,其中一些附加消息的成本可能是昂貴的。根據(jù)示例,本文公開的裝置和方法可以允許用戶指示哪個協(xié)議是優(yōu)選的及用于哪些數(shù)據(jù)。
根據(jù)示例,本文公開的裝置和方法可以提供用于在不需要在階段1中發(fā)送準備消息的情況下(例如當所有的參與方實現(xiàn)如本文公開的假定準備好協(xié)議時)向多個參與方提交分布式事務的機制。本文公開的裝置和方法可以在各種環(huán)境中使用,諸如例如包括多個參與方的環(huán)境以及其中消息業(yè)務已經(jīng)高得使得附加遠程過程調(diào)用的邊際成本高的環(huán)境。
根據(jù)示例,本文公開的裝置和方法可以提供一些參與方使用假定準備好協(xié)議,而其他參與方不使用。該方面可能是有益的,例如,在事務橫跨多個域的情況下,其中一個域使假定準備好協(xié)議實現(xiàn),而其他域不會。
根據(jù)示例,本文公開的裝置和方法可以提供一種用于混合用于分布式事務的不同兩階段提交協(xié)議的機制。例如,關(guān)于協(xié)議的混合,本文公開的裝置和方法可以例如通過避免提交請求(準備)消息和/或基于參與方中的一些(與沒有相對)實現(xiàn)假定準備好協(xié)議來提供有效性的增加。根據(jù)示例,事務可以橫跨不同的集群以及不同的表。關(guān)于橫跨不同集群和表的事務,隨著針對全球客戶的數(shù)據(jù)量變得越來越大,客戶可能不會將其所有數(shù)據(jù)存儲在一個數(shù)據(jù)庫、一個數(shù)據(jù)中心或一個國家中。通常,客戶可能需要更新或查詢來自多個遙遠區(qū)域的數(shù)據(jù)。對于遙遠的參與方,消息業(yè)務的成本可能超過附加本地操作的成本,以使假定準備好協(xié)議操作。例如,基于如本文中公開的假定準備好協(xié)議的使用,本文公開的裝置和方法可以提供提交和更具彈性的分布式事務的實現(xiàn),并且允許事務的不同分支使用不同的協(xié)議。根據(jù)示例,對于本文所公開的裝置和方法,事務中的所有參與分支可以受益于由假定準備好協(xié)議提供的附加的彈性,即使特定分支本身沒有使用假定準備好協(xié)議。
根據(jù)示例,本文公開的裝置和方法可以提供在全異數(shù)據(jù)庫之間的互操作性,其中例如一個數(shù)據(jù)庫已經(jīng)實現(xiàn)了假定準備好協(xié)議,而另一數(shù)據(jù)庫尚未實現(xiàn)假定準備好協(xié)議。在全異數(shù)據(jù)庫之間的互操作性的該方面可以促進在用戶從一個數(shù)據(jù)庫供應商轉(zhuǎn)移到另一個時的遷移策略的實現(xiàn),并且用于提供用于橫跨多個系統(tǒng)的事務的優(yōu)化的兩階段提交策略。
根據(jù)示例,對于本文公開的裝置和方法,當事務在更多參與方實現(xiàn)假定準備好協(xié)議時變得對資源管理模塊故障更有彈性時,即使一些參與方參與假定準備好協(xié)議,整個事務也可以包括增加的彈性,因為較少的事務分支在代表事務完成其工作之后容易受到崩潰的影響。
根據(jù)示例,對于本文所公開的裝置和方法,關(guān)于假定準備好協(xié)議的使用,事務不需要簡單地被中止,因為參與資源管理模塊在事務處理期間故障。如果故障的資源管理模塊所擁有的事務的分支完成并且已經(jīng)完成了其插入、更新和刪除操作,則事務可以繼續(xù),如同資源管理模塊仍然是活動的一樣。事務管理模塊可以假設對相同資源管理模塊的后續(xù)插入、更新和刪除操作將遇到發(fā)送插入、更新和刪除請求的錯誤,或者遇到在連接斷開時在回復中的錯誤。如果錯誤發(fā)生,則客戶端可以告知事務管理模塊并且事務終止。如果沒有錯誤發(fā)生,則事務可以進行到階段2。盡管事務管理模塊將接收到向故障的資源管理模塊發(fā)送階段2提交消息的錯誤,但是每當資源管理模塊在沒有數(shù)據(jù)丟失的風險的情況下被重新啟動/回復時,事務管理模塊可以重新驅(qū)動階段2提交,因為受影響的資源管理模塊已經(jīng)處于準備狀態(tài)。
圖1圖示了根據(jù)本公開的示例的用于分布式事務的兩階段提交協(xié)議混合的裝置(下文中還稱為“裝置100”)的布局。圖2圖示了根據(jù)本公開的示例的裝置100的環(huán)境200。
參考圖1和圖2,裝置100可以包括事務管理模塊102,其用于針對包括多個關(guān)聯(lián)的參與方106的事務104來確定是否所有參與方106實現(xiàn)、是否一些參與方106實現(xiàn)或者是否沒有參與方實現(xiàn)了假定準備好協(xié)議。響應于由事務管理模塊102確定了所有參與方106實現(xiàn)、一些參與方106實現(xiàn)或者沒有參與方實現(xiàn)假定準備好協(xié)議,事務管理模塊102可以結(jié)合參與方106的資源管理模塊108來進行操作,以相應地實現(xiàn)來自用于包括提交請求階段(例如,階段1)和提交階段(例如,階段2)的兩階段提交過程的多個可用過程的不同的過程,以提交事務。
根據(jù)示例,事務管理模塊102可以通過以下來針對包括多個關(guān)聯(lián)的參與方106的事務104來確定是否所有參與方106實現(xiàn)、是否一些參與方106實現(xiàn)或者是否沒有參與方實現(xiàn)假定準備好協(xié)議:分析對來自多個參與方106的每個參與方的用于加入事務104的登記請求的響應,以及基于對來自多個參與方106的每個參與方的用于加入事務104的登記請求的響應的分析來確定是否所有參與方106實現(xiàn)、是否一些參與方106實現(xiàn)或者是否沒有參與方實現(xiàn)假定準備好協(xié)議。
根據(jù)示例,響應于由事務管理模塊102確定了所有參與方106實現(xiàn)假定準備好協(xié)議,事務管理模塊102可以結(jié)合參與方106的資源管理模塊102來進行操作以通過以下來實現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的所有參與方繞過兩階段提交過程的提交請求階段,以及對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應于由事務管理模塊102確定了一些參與方106實現(xiàn)假定準備好協(xié)議,事務管理模塊102可以結(jié)合參與方106的資源管理模塊108來操作以通過以下來實現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的一些參與方繞過兩階段提交過程的提交請求階段,向多個參與方106中的除了所述一些參與方之外的其余參與方發(fā)送準備請求,所述其余參與方不實現(xiàn)假定準備好協(xié)議以對于其余參與方實現(xiàn)兩階段提交過程的提交請求階段,以及對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應于由事務管理模塊102確定了沒有參與方實現(xiàn)假定準備好協(xié)議,事務管理模塊102可以結(jié)合參與方106的資源管理模塊108來操作,以通過以下來實現(xiàn)用于兩階段提交過程的多個可用過程的過程:向所有參與方發(fā)送準備請求以對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交請求階段,以及對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,與參與方106相關(guān)聯(lián)的鎖定管理模塊110可以在提交請求階段和提交階段之前執(zhí)行數(shù)據(jù)操縱語言階段(例如,階段0)。與事務104相關(guān)的事務插入、更新和刪除操作可以在數(shù)據(jù)操縱語言階段執(zhí)行。
裝置100的模塊和其他元件可以是存儲在非瞬時計算機可讀介質(zhì)上的機器可讀指令。在這方面,裝置100可以包括或者可以是非瞬時計算機可讀介質(zhì)。此外或替代地,裝置100的模塊和其他元件可以是硬件或機器可讀指令和硬件的組合。
裝置100可以提供事務管理模塊102以確定哪個協(xié)議由參與方106中的每一個實現(xiàn)。如果參與方實現(xiàn)并且使用假定準備好協(xié)議,則參與方可以在參與方加入事務104時在對登記(例如參與)請求的回復中指示假定準備好協(xié)議的使用。
事務管理模塊102可以保持跟蹤其對于每個事務所具有的參與方106的類型(例如,使用假定準備好協(xié)議的參與方和不使用假定準備好協(xié)議的參與方)。
當客戶端嘗試提交事務104并且進入階段1時,如果所有參與方106實現(xiàn)假定準備好協(xié)議,則事務管理模塊102可以立即進入階段2,因為假設每個參與方106已經(jīng)完成沖突檢測、刷新并且投票以提交。關(guān)于投票,在每個數(shù)據(jù)操縱語言操作的結(jié)束時,參與方向客戶端返回回復。如果有錯誤,則這假設是中止請求,或者如果沒有錯誤,則這是“準備好提交”回復?;谒袛?shù)據(jù)操縱語言操作的成功完成,可以在任何時間進入階段2?;趨⑴c方106的投票,事務管理模塊102可以決定提交(如果所有參與方投票“是”)還是中止事務(其他情況),并將結(jié)果通知給所有參與方106。然后,參與方106可以以其本地資源管理模塊遵循所需要的動作(即,提交或中止)。
如果沒有參與方106已經(jīng)指示其正在實現(xiàn)假定準備好協(xié)議,則事務管理模塊102可以首先進入階段1,并且向參與方106中的每一個發(fā)送準備請求。在這方面,事務管理模塊102可以嘗試使事務104的所有參與方106準備采取用于提交或中止事務所需要的步驟,并進行投票,“是”(即,提交(如果事務參與方的本地部分執(zhí)行已經(jīng)適當?shù)亟Y(jié)束))或“否”(即,中止(如果已經(jīng)檢測到事務參與方的本地部分執(zhí)行的問題)。此后,處理可以進行到階段2,如本文公開的。
如果參與方106中的一些使用假定準備好協(xié)議而其他參與方不使用,則事務管理模塊102可以繞過實現(xiàn)假定準備好協(xié)議的一個或多個參與方,由于其已經(jīng)準備好,并且向不使用假定準備好協(xié)議且以其他方式使用不同的兩階段提交協(xié)議的參與方發(fā)送準備請求。以該方式,已知所有參與方106在事務進入階段2之前已經(jīng)準備好并刷新。
圖3-5分別圖示了與用于以上詳細描述了其構(gòu)造的用于分布式事務的兩階段提交協(xié)議混合的裝置100的示例相對應的用于實現(xiàn)用于分布式事務的兩階段提交協(xié)議混合的方法300、400和500的流程圖。方法300、400和500可以通過示例而非限制的方式在參考圖1和圖2的用于分布式事務的兩階段提交協(xié)議混合的裝置100上實現(xiàn)。方法300、400和500可以在其他裝置中實踐。圖4的示例可以表示在包括處理器602(參見圖6)和存儲器606(參見圖6)的裝置100上實現(xiàn)的方法,存儲器606存儲機器可讀指令,所述機器可讀指令當由處理器執(zhí)行時使得處理器執(zhí)行方法400。圖5的示例可以表示非瞬時計算機可讀介質(zhì),其上存儲有用于實現(xiàn)用于分布式事務的兩階段提交協(xié)議混合的機器可讀指令,所述機器可讀指令在被執(zhí)行時使得處理器(例如,圖6的處理器602)執(zhí)行方法500。
參考圖1-3,對于方法300,在框302處,該方法可以包括針對包括多個關(guān)聯(lián)的參與方106的事務104來識別多個參與方106中的哪些參與方實現(xiàn)假定準備好協(xié)議。
在框304處,該方法可以包括基于所述識別來確定是否所有參與方實現(xiàn)、是否一些參與方實現(xiàn)或者是否沒有參與方實現(xiàn)假定準備好協(xié)議。
在框306處,響應于所有參與方實現(xiàn)、一些參與方實現(xiàn)、或者沒有參與方實現(xiàn)假定準備好協(xié)議的確定,該方法可以包括相應地實現(xiàn)來自用于包括提交請求階段和提交階段的兩階段提交過程的多個可用過程的不同過程以提交事務。
根據(jù)示例,方法300可以包括,在提交請求階段和提交階段之前執(zhí)行數(shù)據(jù)操縱語言階段,其中,與事務104相關(guān)的事務插入、更新和刪除操作在數(shù)據(jù)操縱語言階段被執(zhí)行。
根據(jù)示例,對于方法300,基于識別來確定是否所有參與方實現(xiàn)、是否一些參與方實現(xiàn)或是否沒有參與方實現(xiàn)假定準備好協(xié)議可以進一步包括分析對來自多個參與方106中的每一個參與方的用于加入事務104的登記請求的響應,并且基于對來自多個參與方106中的每一個參與方的用于加入事務104的登記請求的響應的分析而確定是否所有參與方實現(xiàn)、是否一些參與方實現(xiàn)或是否沒有參與方實現(xiàn)假定準備好協(xié)議。
根據(jù)示例,響應于所有參與方實現(xiàn)假定準備好協(xié)議的確定,該方法可以包括,通過以下來實現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的所有參與方繞過兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應于一些參與方實現(xiàn)假定準備好協(xié)議的確定,方法300可以包括通過以下來實現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的一些參與方繞過兩階段提交過程的提交請求階段,向多個參與方106中的除了所述一些參與方之外的其余參與方發(fā)送準備請求,所述其余參與方不實現(xiàn)假定準備好協(xié)議以對于其余參與方實現(xiàn)兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應于沒有參與方實現(xiàn)假定準備好協(xié)議的確定,方法300可以包括,通過以下來實現(xiàn)用于兩階段提交過程的多個可用過程的過程:向所有參與方發(fā)送準備請求以對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
參考圖4,對于方法400,在框402處,該方法可以包括,對于包括多個關(guān)聯(lián)的參與方106的事務104確定是否所有參與方實現(xiàn)、是否一些參與方實現(xiàn)或者是否沒有參與方實現(xiàn)假定準備好協(xié)議。
在框404處,響應于所有參與方實現(xiàn)、一些參與方實現(xiàn)、或者沒有參與方實現(xiàn)假定準備好協(xié)議的確定,該方法可以包括相應地實現(xiàn)來自用于包括提交請求階段和提交階段的兩階段提交過程的多個可用過程的不同過程以提交事務。
根據(jù)示例,對于方法400,針對包括多個關(guān)聯(lián)的參與方106的事務104確定是否所有參與方實現(xiàn)、是否一些參與方實現(xiàn)或是否沒有參與方實現(xiàn)假定準備好協(xié)議可以進一步包括分析對來自多個參與方106中的每一個參與方的用于加入事務104的登記請求的響應,以及基于對來自多個參與方106中的每一個參與方的用于加入事務104的登記請求的響應的分析來確定是否所有參與方實現(xiàn)、是否一些參與方實現(xiàn)或是否沒有參與方實現(xiàn)假定準備好協(xié)議。
根據(jù)示例,響應于所有參與方實現(xiàn)假定準備好協(xié)議的確定,方法400可以進一步包括,通過以下來實現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的所有參與方繞過兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應于一些參與方實現(xiàn)假定準備好協(xié)議的確定,方法400可以進一步包括,通過以下來實現(xiàn)用于兩階段提交過程的多個可用過程中的過程:對于多個參與方106中的一些參與方繞過兩階段提交過程的提交請求階段,向多個參與方106中的除了所述一些參與方之外的其余參與方發(fā)送準備請求,所述其余參與方不實現(xiàn)假定準備好協(xié)議以對于其余參與方實現(xiàn)兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應于沒有參與方實現(xiàn)假定準備好協(xié)議的確定,方法400可以進一步包括,通過以下來實現(xiàn)用于兩階段提交過程的多個可用過程的過程:向所有參與方發(fā)送準備請求以對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
參考圖5,對于方法500,在框502處,該方法可以包括針對包括多個關(guān)聯(lián)的參與方106的事務104,確定是否所有參與方實現(xiàn)、是否一些參與方實現(xiàn)、或者是否沒有參與方實現(xiàn)假定準備好協(xié)議。
在框504處,響應于所有參與方實現(xiàn)、一些參與方實現(xiàn)或沒有參與方實現(xiàn)假定準備好協(xié)議的確定,該方法可以包括從多個可用過程中選擇要被實現(xiàn)用于包括提交請求階段和提交階段的兩階段提交過程的過程,以提交事務104。
在框506處,該方法可以包括實現(xiàn)用于兩階段提交過程的所選過程。
根據(jù)示例,響應于所有參與方實現(xiàn)假定準備好協(xié)議的確定,實現(xiàn)兩階段提交過程的所選過程可以進一步包括,對于多個參與方106中的所有參與方繞過兩階段提交過程的提交請求階段,并且對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應于一些參與方實現(xiàn)假定準備好協(xié)議的確定,方法500可以進一步包括通過以下來實現(xiàn)兩階段提交過程的所選過程:對于多個參與方106中的所述一些參與方繞過兩階段提交過程的提交請求階段,向多個參與方106中的除了所述一些參與方之外的其余參與方發(fā)送準備請求,所述其余參與方不實現(xiàn)假定準備好協(xié)議以對于其余參與方實現(xiàn)兩階段提交過程的提交請求階段,并且響應于對來自其余參與方的提交的授權(quán),對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
根據(jù)示例,響應于沒有參與方實現(xiàn)假定準備好協(xié)議的確定,方法500可以進一步包括通過以下來實現(xiàn)兩階段提交過程的所選過程:向所有參與方發(fā)送準備請求以對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交請求階段,并且響應于對來自所有參與方的提交的授權(quán),對于多個參與方106中的所有參與方實現(xiàn)兩階段提交過程的提交階段。
圖6示出了可以與本文描述的示例一起使用的計算機系統(tǒng)600。計算機系統(tǒng)600可以表示通用平臺,其包括可以在服務器或另一個計算機系統(tǒng)中的組件。計算機系統(tǒng)600可以用作用于裝置100的平臺。計算機系統(tǒng)600可以通過處理器(例如,單個或多個處理器)或其他硬件處理電路來執(zhí)行本文描述的方法、功能和其他過程。這些方法、功能和其他過程可以被體現(xiàn)為存儲在計算機可讀介質(zhì)上的機器可讀指令,所述計算機可讀介質(zhì)可以非瞬時的,諸如硬件存儲設備(例如,ram、rom、eprom、eeprom、硬驅(qū)動器和閃速存儲器)。
計算機系統(tǒng)600可以包括處理器602,其可以實現(xiàn)或執(zhí)行機器可讀指令,所述機器可讀指令執(zhí)行本文描述的方法、功能和其他過程中的一些或全部。來自處理器602的命令和數(shù)據(jù)可以通過通信總線604來傳送。計算機系統(tǒng)還可以包括:主存儲器606,諸如ram,其中用于處理器602的機器可讀指令和數(shù)據(jù)可以在運行時期間駐留;以及輔數(shù)據(jù)儲存器608,其可以是非易失性的并且存儲機器可讀指令和數(shù)據(jù)。存儲器和數(shù)據(jù)儲存器是計算機可讀介質(zhì)的示例。存儲器606可以包括用于分布式事務的兩階段提交協(xié)議混合的實現(xiàn)模塊620,其包括在運行時期間駐留在存儲器606中并且由處理器602執(zhí)行的計算機可讀指令。用于分布式事務的兩階段提交協(xié)議混合的實現(xiàn)模塊620可以包括在圖1和2中所示的裝置100的模塊。
計算機系統(tǒng)600可以包括i/o設備610,諸如鍵盤、鼠標、顯示器等。計算機系統(tǒng)可以包括用于連接到網(wǎng)絡的網(wǎng)絡接口612。其他已知的電子組件可以在計算機系統(tǒng)中被添加或被取代。
本文已經(jīng)描述和圖示了示例連同其一些變型。本文使用的術(shù)語、描述和附圖僅通過說明的方式被闡述,并且不意味著作為限制。在主題的精神和范圍內(nèi)許多變型是可能的,這旨在通過下述權(quán)利要求(及其等同物)來限定,其中所有的術(shù)語意在其最廣泛的合理意義上,除非另外指示。