一種異構(gòu)數(shù)據(jù)復(fù)合對(duì)象的事務(wù)一致性達(dá)成方法與系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及一種異構(gòu)數(shù)據(jù)復(fù)合對(duì)象的事務(wù)一致性達(dá)成方法與系統(tǒng)。
【背景技術(shù)】
[0002 ]現(xiàn)有的技術(shù)的復(fù)合對(duì)象的事務(wù)一致性的方法,不能實(shí)現(xiàn)異構(gòu)數(shù)據(jù)復(fù)合對(duì)象的事務(wù)一致性。
[0003]事務(wù)是訪問(wèn)或更新各種數(shù)據(jù)項(xiàng)的程序執(zhí)行單元,事務(wù)提交時(shí)數(shù)據(jù)必須是一致的;事務(wù)具有ACID (Atomi city 原子性、Consi stency—致性、I so Iat 1n 獨(dú)立性、Durabi Iity持久性)的特點(diǎn);事務(wù)由若干個(gè)任務(wù)組成
異構(gòu)數(shù)據(jù)復(fù)合對(duì)象:指由不同類型的數(shù)據(jù)源管理的數(shù)據(jù)構(gòu)成的對(duì)象,可能同時(shí)包括事務(wù)型數(shù)據(jù)源和非事務(wù)型數(shù)據(jù)源。
[0004]事務(wù)型數(shù)據(jù)源是指像關(guān)系型數(shù)據(jù)庫(kù)一樣讀寫操作都是事務(wù)的數(shù)據(jù)源,具有ACID特點(diǎn),在對(duì)事務(wù)型數(shù)據(jù)源進(jìn)行處理的過(guò)程中,事務(wù)中的每一項(xiàng)都成功才算事務(wù)成功,此時(shí)需要提交,事務(wù)中任意一項(xiàng)不成功時(shí)事務(wù)失敗,需要執(zhí)行回滾操作。
[0005]非事務(wù)型數(shù)據(jù)源指像非關(guān)系型數(shù)據(jù)庫(kù)、文件系統(tǒng)、索引這種沒有事務(wù)的特性,對(duì)數(shù)據(jù)操作即執(zhí)行,自動(dòng)提交,沒有回滾功能的數(shù)據(jù)源。
[0006]而異構(gòu)數(shù)據(jù)復(fù)合對(duì)象同時(shí)包括事務(wù)型數(shù)據(jù)源和非事務(wù)型數(shù)據(jù)源,由多個(gè)不同類型的存儲(chǔ)系統(tǒng)協(xié)同實(shí)現(xiàn),在事務(wù)的處理中易造成數(shù)據(jù)的不一致。,如:非事務(wù)型數(shù)據(jù)源已經(jīng)處理完成,事務(wù)型數(shù)據(jù)源中某項(xiàng)處理失敗了,非事務(wù)型數(shù)據(jù)源并不知道事務(wù)型數(shù)據(jù)源中失敗,所以不會(huì)對(duì)之前修改的數(shù)據(jù)恢復(fù),這樣就造成了數(shù)據(jù)的不一致。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種異構(gòu)數(shù)據(jù)復(fù)合對(duì)象的事務(wù)一致性達(dá)成方法與系統(tǒng),將事務(wù)的所有數(shù)據(jù)來(lái)源進(jìn)行統(tǒng)一管理,只有當(dāng)所有的進(jìn)程都成功才提交改變數(shù)據(jù)來(lái)源中存放的數(shù)據(jù),若任意一個(gè)進(jìn)程不成功,都要讓其他的數(shù)據(jù)源回滾,恢復(fù)這個(gè)事務(wù)中改變了的數(shù)據(jù),維護(hù)了數(shù)據(jù)的一致性。
[0008]本發(fā)明的目的是通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn)的:一種異構(gòu)數(shù)據(jù)復(fù)合對(duì)象的事務(wù)一致性達(dá)成方法,其特征在于:包括開始步驟S1、準(zhǔn)備步驟S2和執(zhí)行步驟S3;
所述的開始步驟SI包括以下子步驟:
511.發(fā)起事務(wù)請(qǐng)求:提供多種不同類型的數(shù)據(jù)源,請(qǐng)求對(duì)數(shù)據(jù)源進(jìn)行事務(wù)處理;
512.設(shè)置待處理事務(wù)的基本信息,基本信息包括事務(wù)編號(hào)、事務(wù)類型和最長(zhǎng)響應(yīng)時(shí)間;事務(wù)類型中包含的待處理的數(shù)據(jù)源類型和數(shù)目;
所述準(zhǔn)備步驟S2包括以下子步驟:
521.事務(wù)預(yù)處理:分別對(duì)事務(wù)的每一個(gè)數(shù)據(jù)源進(jìn)行數(shù)據(jù)更改,得到初步處理結(jié)果;
522.保存事務(wù)的進(jìn)程信息:獲取事務(wù)處理過(guò)程中的每一個(gè)進(jìn)程的信息,并進(jìn)行保存,事務(wù)的每一個(gè)進(jìn)程對(duì)應(yīng)著對(duì)一個(gè)數(shù)據(jù)源的數(shù)據(jù)更改; 所述的執(zhí)行步驟S3包括以下子步驟:
531.依次檢查事務(wù)所有的進(jìn)程狀態(tài);
532.判斷是否滿足所有事務(wù)進(jìn)程均成功:
(1)滿足所有事務(wù)進(jìn)程均成功,發(fā)送最終數(shù)據(jù)提交命令,跳轉(zhuǎn)至步驟S33;
(2)不滿足所有事務(wù)進(jìn)程均成功,發(fā)送最終數(shù)據(jù)回滾命令,并跳轉(zhuǎn)至步驟S34;
533.在數(shù)據(jù)源中進(jìn)行數(shù)據(jù)最終修改和提交,本次操作結(jié)束;
534.在數(shù)據(jù)源中進(jìn)行數(shù)據(jù)回滾。
[0009]所述的步驟S21包括以下子步驟:
S211.將數(shù)據(jù)源分為三類:事務(wù)型數(shù)據(jù)源、A類非事務(wù)型數(shù)據(jù)源和B類非事務(wù)型數(shù)據(jù)源;A類非事務(wù)型數(shù)據(jù)源為只具有插入或者刪除操作的非事務(wù)性數(shù)據(jù)源;B類非事務(wù)性數(shù)據(jù)源為具有更新操作的非事務(wù)型數(shù)據(jù)源。
[0010]S212.對(duì)每一個(gè)事務(wù)型數(shù)據(jù)源直接進(jìn)行數(shù)據(jù)更改;
5213.在每一個(gè)A類非事務(wù)型數(shù)據(jù)源中,對(duì)需要進(jìn)行刪除的數(shù)據(jù)M添加刪除標(biāo)記m;將需要插入的數(shù)據(jù)H寫入數(shù)據(jù)源中,并為H添加寫入標(biāo)記h;
5214.將每一個(gè)B類非事務(wù)型數(shù)據(jù)源的操作語(yǔ)句記錄在各自的備用數(shù)據(jù)庫(kù)中。
[0011]所述的步驟S32包括以下子步驟:
5321.對(duì)事務(wù)中每一個(gè)數(shù)據(jù)源的進(jìn)程信息進(jìn)行檢查,判斷是否出現(xiàn)進(jìn)程失敗的狀態(tài);
(1)如果事務(wù)的進(jìn)程出現(xiàn)失敗的狀態(tài),不滿足所有事務(wù)進(jìn)程均成功,發(fā)送最終數(shù)據(jù)回滾命令,并跳轉(zhuǎn)至步驟S34;
(2)如果事務(wù)的進(jìn)程中未出現(xiàn)失敗的狀態(tài),跳轉(zhuǎn)至步驟S322;
5322.在事務(wù)操作時(shí)間達(dá)到最長(zhǎng)響應(yīng)時(shí)間后,統(tǒng)計(jì)事務(wù)的進(jìn)程數(shù),并比較進(jìn)程數(shù)與事務(wù)類型中記錄的數(shù)據(jù)源數(shù)目:
(1)事務(wù)的進(jìn)程數(shù)小于事務(wù)類型中記錄的數(shù)據(jù)源數(shù)目,表示存在還未執(zhí)行的進(jìn)程,不滿足所有事務(wù)進(jìn)程均成功,發(fā)出最終數(shù)據(jù)回滾命令;
(2)事務(wù)的進(jìn)程數(shù)等于事務(wù)類型中記錄的數(shù)據(jù)源數(shù)目,滿足所有事務(wù)進(jìn)程均成功,發(fā)出最終數(shù)據(jù)提交命令。
[0012]所述的步驟S33包括以下子步驟:
5331.對(duì)事務(wù)型數(shù)據(jù)源的數(shù)據(jù)直接進(jìn)行提交;
5332.將A類非事務(wù)型數(shù)據(jù)源中存在刪除標(biāo)記m的數(shù)據(jù)M進(jìn)行刪除,清除寫入標(biāo)記h,并進(jìn)行提交;
5333.按照備用數(shù)據(jù)庫(kù)中記錄的操作語(yǔ)句對(duì)B類非事務(wù)型數(shù)據(jù)源進(jìn)行操作,并提交。
[0013]所述的步驟S34包括以下子步驟:
5341.對(duì)事務(wù)型數(shù)據(jù)源的數(shù)據(jù)直接進(jìn)行回滾;
5342.將A類非事務(wù)型數(shù)據(jù)源中的刪除標(biāo)記m清除,并刪除具有寫入標(biāo)記h的數(shù)據(jù)H,實(shí)現(xiàn)回滾;
5343.將B類非事務(wù)型數(shù)據(jù)源在備用數(shù)據(jù)庫(kù)中記錄的操作語(yǔ)句進(jìn)行刪除,實(shí)現(xiàn)回滾。
[0014]—種異構(gòu)數(shù)據(jù)復(fù)合對(duì)象的事務(wù)一致性達(dá)成系統(tǒng),包括一致性參與模塊和一致性控制豐旲塊;
所述的一致性參與模塊包括數(shù)據(jù)源存儲(chǔ)單元、數(shù)據(jù)源驅(qū)動(dòng)單元、中間過(guò)程處理單元和數(shù)據(jù)源代理單元;一致性控制模塊包括一致性管理服務(wù)單元、一致性過(guò)程日志處理單元、關(guān)系型數(shù)據(jù)庫(kù)和過(guò)程檢查器;
所述的數(shù)據(jù)源存儲(chǔ)單元用于存儲(chǔ)多種不同類型的待處理數(shù)據(jù)源;
所述的中間過(guò)程處理單元用于對(duì)數(shù)據(jù)存儲(chǔ)單元中多種不同的數(shù)據(jù)源進(jìn)行數(shù)據(jù)更改的預(yù)處理;
所述的數(shù)據(jù)源代理單元用于與一致性管理服務(wù)單元交互,向一致性管理服務(wù)單元發(fā)送數(shù)據(jù)源的預(yù)處理進(jìn)程信息,并從一致性管理服務(wù)單元獲取最終提交/回滾的請(qǐng)求;
所述的一致性服務(wù)管理單元用于與數(shù)據(jù)源代理單元交互,從數(shù)據(jù)源代理單元獲取數(shù)據(jù)源的預(yù)處理進(jìn)程信息,并向數(shù)據(jù)源代理單元發(fā)送最終提交/回滾的請(qǐng)求;
所述的一致性過(guò)程日志處理單元用于獲取數(shù)據(jù)源預(yù)處理過(guò)程中每一個(gè)進(jìn)程的信息,并將進(jìn)程信息存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)中;
所述的關(guān)系型數(shù)據(jù)庫(kù)用于存儲(chǔ)日志中記錄的信息;
所述的過(guò)程檢查器用于檢查日志中記錄的事務(wù)的每一個(gè)進(jìn)程進(jìn)行檢查,并將檢查結(jié)果傳輸給一致性服務(wù)管理單元。
[0015]所述的一致性參與模塊還包括數(shù)據(jù)源驅(qū)動(dòng)單元,數(shù)據(jù)源存儲(chǔ)單元通過(guò)數(shù)據(jù)源驅(qū)動(dòng)單元與中間過(guò)程處理單元交互,并通過(guò)數(shù)據(jù)源驅(qū)動(dòng)單元接收來(lái)來(lái)自于數(shù)據(jù)源代理單元的最終提交或最終回滾命令。
[0016]本發(fā)明的有益效果是:(I)將事務(wù)的所有數(shù)據(jù)來(lái)源進(jìn)行統(tǒng)一管理,只有當(dāng)所有的進(jìn)程都成功才提交改變數(shù)據(jù)來(lái)源中存放的數(shù)據(jù),若任意一個(gè)進(jìn)程不成功,都要讓其他的數(shù)據(jù)源回滾,恢復(fù)這個(gè)事務(wù)中改變了的數(shù)據(jù),維護(hù)了數(shù)據(jù)的一致性。
[0017](2)在事務(wù)預(yù)處理過(guò)程中,將非事務(wù)型數(shù)據(jù)源的數(shù)據(jù)轉(zhuǎn)換成了事務(wù)型數(shù)據(jù)源的數(shù)據(jù),嚴(yán)格保證了異構(gòu)數(shù)據(jù)復(fù)合對(duì)象中也能夠?qū)崿F(xiàn)事務(wù)的一致性。
【附圖說(shuō)明】
[0018]圖1為本發(fā)明的方法流程圖。
[0019]圖2為本發(fā)明的系統(tǒng)原理框圖。
[0020]圖3為實(shí)施例一的原理示意圖。
【具體實(shí)施方式】
[0