跨數(shù)據(jù)庫分布式事務(wù)的實(shí)現(xiàn)方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本申請涉及分布式事務(wù)處理領(lǐng)域,具體涉及一種跨數(shù)據(jù)庫分布式事務(wù)的實(shí)現(xiàn)方 法。本申請同時提供一種跨數(shù)據(jù)庫分布式事務(wù)的實(shí)現(xiàn)裝置。
【背景技術(shù)】
[0002] 隨著互聯(lián)網(wǎng)的發(fā)展和用戶需求的不斷變化,各種應(yīng)用業(yè)務(wù)越來越復(fù)雜。為了給業(yè) 務(wù)提供更好的支撐,底層系統(tǒng)越來越多,服務(wù)越來越集中,層次也越來越深。對于一次業(yè)務(wù) 請求,不再是通過訪問某一個業(yè)務(wù)子系統(tǒng)中的數(shù)據(jù)庫就可以完成,通常需要兩個或者兩個 以上的業(yè)務(wù)子系統(tǒng)的協(xié)作,而不同的子系統(tǒng)使用不同的數(shù)據(jù)庫,也就是說,在一次請求中, 可能需要訪問多個目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù),而且要求訪問操作滿足高實(shí)時性的需求。
[0003] 在多個跨數(shù)據(jù)庫業(yè)務(wù)請求并發(fā)的情況下,如果采用非同步操作的方式,容易導(dǎo)致 整個目標(biāo)數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)的不一致,為了解決這一問題,通常需要在中間層的系統(tǒng)中設(shè)計(jì) 重試機(jī)制來保證數(shù)據(jù)一致和完整性,不僅降低了業(yè)務(wù)請求的處理效率,同時也增加了成本。 在這樣的背景下,為了滿足多業(yè)務(wù)跨數(shù)據(jù)庫的并發(fā)訪問需求,出現(xiàn)了分布式事務(wù)的概念。
[0004] 所謂事務(wù),是數(shù)據(jù)庫中的一個操作單元,在該操作單元中所有的操作要么都成功, 要么都失敗,執(zhí)行結(jié)果不可逆轉(zhuǎn),事務(wù)具備四個基本的特性:原子性、一致性、隔離性、持久 性,也簡稱為事務(wù)的ACID特性。而分布式事務(wù)則是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資 源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點(diǎn)之上。因?yàn)榉植际绞聞?wù)跨 多個數(shù)據(jù)庫資源,故要求分布式事務(wù)滿足ACID屬性對于維護(hù)所有數(shù)據(jù)庫資源上的數(shù)據(jù)一 致性是很重要的,因此評價事務(wù)是否支持分布式調(diào)用,主要看其分布式調(diào)用過程中是否滿 足事務(wù)的ACID原則。
[0005] 為了實(shí)現(xiàn)分布式事務(wù),現(xiàn)有技術(shù)通常使用兩階段提交協(xié)議。階段一:事務(wù)協(xié)調(diào)者 詢問所有的事務(wù)參與者(例如:各個目標(biāo)數(shù)據(jù)庫)是否可以提交各自的操作,各個事務(wù)參與 者根據(jù)自己的資源狀況,向事務(wù)協(xié)調(diào)者發(fā)送是否可以提交的應(yīng)答。階段二:當(dāng)所有事務(wù)參 與者在第一階段反饋的都是肯定應(yīng)答,那么協(xié)調(diào)者才會發(fā)起本階段,即,通知所有事務(wù)參與 者正式提交事務(wù),所有參與者提交完畢會再次通知協(xié)調(diào)者。為了實(shí)現(xiàn)分布式事務(wù),必須使 用一種協(xié)議在分布式事務(wù)的各個參與者之間傳遞事務(wù)上下文信息,例如=IIOP(Internet Inter-ORBProtocol互聯(lián)網(wǎng)內(nèi)部對象請求代理協(xié)議)協(xié)議,不同開發(fā)商開發(fā)的事務(wù)參與者 也必須支持同一種標(biāo)準(zhǔn)協(xié)議,才能實(shí)現(xiàn)分布式的事務(wù)。
[0006] 具體到實(shí)現(xiàn),現(xiàn)有技術(shù)通常米用CORBA(CommonObjectRequestBroker Architecture,公共對象請求代理體系結(jié)構(gòu))制定的一種標(biāo)準(zhǔn)的面向?qū)ο蟮膽?yīng)用程序體系 規(guī)范,解決分布式處理環(huán)境中軟件系統(tǒng)的互聯(lián)。CORBA標(biāo)準(zhǔn)主要分為三個部分:接口定義語 言(IDL)、對象請求代理(ORB)以及ORB之間的互操作協(xié)議II0P。采用CORBA體系結(jié)構(gòu),在 異構(gòu)分布環(huán)境下為不同機(jī)器上的應(yīng)用提供了互操作性,并無縫地集成了多種對象系統(tǒng),通 過將分布式對象技術(shù)與事務(wù)處理技術(shù)結(jié)合起來,利用兩階段提交協(xié)議和恢復(fù)日志等技術(shù), 從而保證分布式事務(wù)的ACID性質(zhì)。
[0007] 上述現(xiàn)有技術(shù)采用的分布式事務(wù)框架,需要搭建較為復(fù)雜的分布式處理中心,而 且要求分布式處理中心和目標(biāo)服務(wù)器或目標(biāo)數(shù)據(jù)庫系統(tǒng)必須配置用于實(shí)現(xiàn)分布式操作的 各類復(fù)雜協(xié)議,一方面比較臃腫,不利于維護(hù)和使用,另一方面也無法為不同的業(yè)務(wù)提供輕 量級的可定制化的服務(wù)。
【發(fā)明內(nèi)容】
[0008] 本申請?zhí)峁┮环N跨數(shù)據(jù)庫分布式事務(wù)的實(shí)現(xiàn)方法,以解決現(xiàn)有分布式事務(wù)的實(shí)現(xiàn) 框架過于復(fù)雜、不便于維護(hù)的問題。本申請另外提供一種跨數(shù)據(jù)庫分布式事務(wù)的實(shí)現(xiàn)裝置。
[0009] 本申請?zhí)峁┮环N跨數(shù)據(jù)庫分布式事務(wù)的實(shí)現(xiàn)方法,包括:
[0010] 接收分布式事務(wù)的啟動請求,并為所述分布式事務(wù)分配事務(wù)標(biāo)識;
[0011] 接收被分配事務(wù)標(biāo)識的分布式事務(wù)的針對數(shù)據(jù)庫操作的操作請求或操作請求集 合;
[0012] 針對每個操作請求,獲取所述數(shù)據(jù)庫操作的目標(biāo)數(shù)據(jù)庫信息,并遵循ACID原則將 所述數(shù)據(jù)庫操作發(fā)送到所述目標(biāo)數(shù)據(jù)庫執(zhí)行;
[0013] 待所有的數(shù)據(jù)庫操作執(zhí)行完畢,清除所述分布式事務(wù)。
[0014] 可選的,所述獲取所述數(shù)據(jù)庫操作的目標(biāo)數(shù)據(jù)庫信息具體是指,根據(jù)所述數(shù)據(jù)庫 操作指定的目標(biāo)數(shù)據(jù)庫和/或表的名稱,查找預(yù)先設(shè)置的數(shù)據(jù)庫描述信息,從中獲取與所 述目標(biāo)數(shù)據(jù)庫和/或表的名稱對應(yīng)的目標(biāo)數(shù)據(jù)庫信息。
[0015] 可選的,所述遵循ACID原則將所述數(shù)據(jù)庫操作發(fā)送到所述目標(biāo)數(shù)據(jù)庫執(zhí)行,包 括:
[0016] 獲取所述數(shù)據(jù)庫操作的類型;
[0017] 解析所述數(shù)據(jù)庫操作,獲取所述數(shù)據(jù)庫操作影響的行標(biāo)識;
[0018] 獲取所述行標(biāo)識對應(yīng)的行的當(dāng)前訪問狀態(tài);
[0019] 根據(jù)所述行標(biāo)識對應(yīng)的行的當(dāng)前訪問狀態(tài)和所述數(shù)據(jù)庫操作的類型,判斷是否需 要等待所述行標(biāo)識對應(yīng)的行的訪問結(jié)束;若是,則執(zhí)行等待,等到所述行標(biāo)識對應(yīng)的行的訪 問結(jié)束,再執(zhí)行下述步驟;若否,繼續(xù)執(zhí)行下述步驟;
[0020] 根據(jù)所述數(shù)據(jù)庫操作的類型,判斷是否需要獲取對所述行標(biāo)識對應(yīng)的行的訪問控 制,若是,則為所述行標(biāo)識對應(yīng)的行添加訪問控制后執(zhí)行下述步驟;若否,執(zhí)行下述步驟; [0021 ] 將所述數(shù)據(jù)庫操作發(fā)送給所述目標(biāo)數(shù)據(jù)庫執(zhí)行;
[0022] 向所述分布式事務(wù)的請求方返回所述數(shù)據(jù)庫操作的執(zhí)行結(jié)果。
[0023] 可選的,執(zhí)行所述將所述數(shù)據(jù)庫操作發(fā)送給所述目標(biāo)數(shù)據(jù)庫執(zhí)行的步驟后,如果 沒有在預(yù)先設(shè)定的時間內(nèi)收到目標(biāo)數(shù)據(jù)庫返回的執(zhí)行結(jié)果,則通過主動訪問目標(biāo)數(shù)據(jù)庫的 方式獲取所述數(shù)據(jù)庫操作的執(zhí)行結(jié)果。
[0024] 可選的,所述數(shù)據(jù)庫操作的類型包括:新增操作、更新操作、刪除操作或查詢操作。
[0025] 可選的,所述解析所述數(shù)據(jù)庫操作,獲取所述數(shù)據(jù)庫操作影響的行標(biāo)識,包括:
[0026] 如果所述數(shù)據(jù)庫操作的類型為新增操作,則為所述新增操作分配一個唯一標(biāo)識該 行的行標(biāo)識,并將所述行標(biāo)識添加到新增操作中;
[0027] 否則,執(zhí)行下述步驟:
[0028] 將所述數(shù)據(jù)庫操作解析為采用相同條件的獲取行標(biāo)識的查詢操作;
[0029] 將所述查詢操作發(fā)送給所述目標(biāo)數(shù)據(jù)庫執(zhí)行;
[0030] 接收所述目標(biāo)數(shù)據(jù)庫返回的行標(biāo)識,將返回的行標(biāo)識作為所述數(shù)據(jù)庫操作影響的 行標(biāo)識。
[0031] 可選的,所述根據(jù)所述行標(biāo)識對應(yīng)的行的當(dāng)前訪問狀態(tài)和所述數(shù)據(jù)庫操作的類 型,判斷是否需要等待所述行標(biāo)識對應(yīng)的行的訪問結(jié)束,具體是指:
[0032] 如果所述數(shù)據(jù)庫操作的類型是新增操作或者查詢操作,則判定為不需要等待所述 行標(biāo)識對應(yīng)的行的訪問結(jié)束;
[0033] 如果所述數(shù)據(jù)庫操作的類型是更新操作或者刪除操作,則進(jìn)一步判斷所述行標(biāo)識 對應(yīng)的行當(dāng)前是否沒有被當(dāng)前分布式事務(wù)之外的事務(wù)所訪問,或者雖被當(dāng)前分布式事務(wù)之 外的事務(wù)訪問但沒有被鎖定,若是,則判定為不需要等待所述行標(biāo)識對應(yīng)的行的訪問結(jié)束; 否則,判定為需要等待所述行標(biāo)識對應(yīng)的行的訪問結(jié)束。
[0034] 可選的,所述根據(jù)所述數(shù)據(jù)庫操作的類型,判斷是否需要獲取對所述行標(biāo)識對應(yīng) 的行的訪問控制,具體是指:
[0035] 如果所述數(shù)據(jù)庫操作的類型為新增操作、更新操作或者刪除操作,則判定為需要 獲取對所述行標(biāo)識對應(yīng)的行的訪問控制。
[0036] 相應(yīng)的,所述為所述行標(biāo)識對應(yīng)的行添加訪問控制,具體是指,為所述行標(biāo)識對應(yīng) 的行添加允許執(zhí)行查詢操作但不允許執(zhí)行新增操作、更新操作和刪除操作的過程鎖。
[0037] 可選的,在所述將所述數(shù)據(jù)庫操作發(fā)送給所述目標(biāo)數(shù)據(jù)庫執(zhí)行的步驟之前,執(zhí)行 下述操作:如果所述數(shù)據(jù)庫操作的類型為查詢操作,并且所述行標(biāo)識中存在被當(dāng)前分布式 事務(wù)之外的事務(wù)鎖定的行,則采用下述步驟重新構(gòu)造查詢操作:
[0038] 獲取所述被鎖定的行當(dāng)前執(zhí)行的數(shù)據(jù)庫操作的類型;
[0039] 如果所述被鎖定的行當(dāng)前執(zhí)行的數(shù)據(jù)庫操作的類型為新增操作,將所述被鎖定的 行標(biāo)記為不滿足查詢條件;
[0040] 如果所述被鎖定的行當(dāng)前執(zhí)行的數(shù)據(jù)庫操作的類型為更新操作或者刪除操作,則 進(jìn)一步判斷所述被鎖定的行在執(zhí)行當(dāng)前的更新操作或者刪除操作之前是否滿足所述查詢 操作的條件,若是,則記錄滿足所述查詢操作的條件的行;否則,將所述被鎖定的行標(biāo)記為 不滿足查詢條件;
[0041] 生成剔除了所述不滿足查詢條件的行標(biāo)識的查詢操作;
[0042] 相應(yīng)的,所述將所述數(shù)據(jù)庫操作發(fā)送給所述目標(biāo)數(shù)據(jù)庫執(zhí)行是指,將重新構(gòu)造的 查詢操作發(fā)送給所述目標(biāo)數(shù)據(jù)庫執(zhí)行。
[0043] 相應(yīng)的,所述向所述分布式事務(wù)的請求方返回所述數(shù)據(jù)庫操作的執(zhí)行結(jié)果是指, 將所述查詢操作的執(zhí)行結(jié)果,與已記錄的滿足所述查詢操作的條件的行合并,并將合并后 的結(jié)果返回給所述分布式事務(wù)的請求方。
[0044] 可選的,所述方法還包括:
[0045] 將所述分布式事務(wù)