專利名稱:圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法。
背景技術(shù):
通常在數(shù)據(jù)庫系統(tǒng)中,事務(wù)是工作的離散單位。例如,一個(gè)數(shù)據(jù)庫事務(wù)可以是修改一個(gè)用戶的帳戶平衡或庫存項(xiàng)的寫操作。聯(lián)機(jī)事務(wù)處理系統(tǒng)實(shí)時(shí)地采集處理與事務(wù)相連的數(shù)據(jù)以及共享數(shù)據(jù)庫和其它文件的地位的變化。在聯(lián)機(jī)事務(wù)處理中,事務(wù)是被立即執(zhí)行的。 在單一用戶、單一數(shù)據(jù)庫環(huán)境下執(zhí)行事務(wù)是簡單的,這是因?yàn)闆]有沖突問題或?qū)?shù)據(jù)庫間同步的需求。在一個(gè)分布式環(huán)境下,寫操作經(jīng)常并行地在多個(gè)數(shù)據(jù)庫服務(wù)器上發(fā)生。這樣的并發(fā)事務(wù)處理需要一個(gè)“卷回”機(jī)制,以保證在一次寫操作中系統(tǒng)失效的情況下,仍保證數(shù)據(jù)庫的完整性。事務(wù)要么一起確認(rèn),要么放棄。如果一個(gè)或多個(gè)與事務(wù)有關(guān)的系統(tǒng)響應(yīng)不一致,這意味著系統(tǒng)或通信可能出現(xiàn)了故障,因而就會(huì)放棄一個(gè)事務(wù)。可以看出,當(dāng)多個(gè)用戶試圖同時(shí)改變數(shù)據(jù)的同一塊時(shí),就出現(xiàn)了沖突問題。
發(fā)明內(nèi)容
為了解決上述問題,本發(fā)明提出了一種圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,以實(shí)現(xiàn)事務(wù)的回滾機(jī)制。本發(fā)明采用的技術(shù)方案如下一種圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于聯(lián)機(jī)事務(wù)處理自上而下分為三層最上層為暴露給外部調(diào)用程序的API ;中間層為事務(wù)邏輯控制層,按操作類別分為同步區(qū)與非同步區(qū),同步區(qū)意味著在同一時(shí)間只能有一個(gè)操作進(jìn)行,其他操作在進(jìn)入同步區(qū)之間均處于等待狀態(tài),該機(jī)制利用 Java語言的線程同步鎖定特性實(shí)現(xiàn),非同步區(qū)的操作則不受限制,在任何時(shí)間均可以進(jìn)行;最下層為存儲(chǔ)數(shù)據(jù)的DataSet操作抽象層,在DataSet中,保存有聯(lián)機(jī)事務(wù)自身的狀態(tài)信息,以及數(shù)據(jù)的事務(wù)狀態(tài)屬性信息;將圖形數(shù)據(jù)庫中聯(lián)機(jī)事務(wù)的狀態(tài)數(shù)據(jù)存儲(chǔ)在名稱為graphiC_db_tX_def的數(shù)據(jù)集Datakt中,該Datakt的數(shù)據(jù)結(jié)構(gòu)如下
權(quán)利要求
1. 一種圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于 聯(lián)機(jī)事務(wù)處理自上而下分為三層 最上層為暴露給外部調(diào)用程序的API ;中間層為事務(wù)邏輯控制層,按操作類別分為同步區(qū)與非同步區(qū),同步區(qū)意味著在同一時(shí)間只能有一個(gè)操作進(jìn)行,其他操作在進(jìn)入同步區(qū)之間均處于等待狀態(tài),該機(jī)制利用Java 語言的線程同步鎖定特性實(shí)現(xiàn),非同步區(qū)的操作則不受限制,在任何時(shí)間均可以進(jìn)行;最下層為存儲(chǔ)數(shù)據(jù)的DataSet操作抽象層,在DataSet中,保存有聯(lián)機(jī)事務(wù)自身的狀態(tài)信息,以及數(shù)據(jù)的事務(wù)狀態(tài)屬性信息;將圖形數(shù)據(jù)庫中聯(lián)機(jī)事務(wù)的狀態(tài)數(shù)據(jù)存儲(chǔ)在名稱為graphiC_db_tX_def的數(shù)據(jù)集 DataSet中,該Datakt的數(shù)據(jù)結(jié)構(gòu)如下列名稱數(shù)據(jù)類型說明tx—noNumber事務(wù)ID,全局唯一的IDis—commitNumber該列的值為1或一 1,用于標(biāo)識(shí)事務(wù)是否已提交,當(dāng)值為-ι時(shí)表示未提交,當(dāng)值為1時(shí)表示已提交。is—rollbackNumber該列的值為1或一 1,用于標(biāo)識(shí)事務(wù)是否已回滾,當(dāng)值為-ι時(shí)表示未回滾,當(dāng)值為1時(shí)表示已回滾。is_timeoutNumber該列的值為1或一 1,用丁·標(biāo)識(shí)事務(wù)是否已過期,當(dāng)值為-1時(shí)表示尚未過期,當(dāng)值為1時(shí)表示已過期。start_timeNumber用于記錄該事務(wù)最后一次進(jìn)行操作的時(shí)間,值為1970年1月1 日0時(shí)0分0秒到當(dāng)前時(shí)間的累計(jì)毫秒數(shù)。associate—nodeString該事務(wù)相關(guān)聯(lián)的Node,當(dāng)開啟事務(wù)后,在事務(wù)中對(duì)任何Node 進(jìn)行增、刪、改操作后,需將該Node的名稱記錄在當(dāng)前列表中,多個(gè)Node的名稱之間以逗號(hào)進(jìn)行分隔。processingNumber該列的值為1或一 1,用于標(biāo)識(shí)該事務(wù)是否有增、刪、改的操作正在進(jìn)行處理中,當(dāng)值為-ι時(shí)表示否,當(dāng)值為1時(shí)表示正在處理中。在同·事務(wù)中,同·吋間只允許處理·個(gè)操作。在圖形數(shù)據(jù)庫中每個(gè)Node均有一個(gè)數(shù)據(jù)集DatMet,該DatMet中缺省內(nèi)置如下兩個(gè)列列名稱數(shù)據(jù)類型說明_dirtyNumber該列的值為1或一 1,用于標(biāo)識(shí)該條記錄是否從屬于某個(gè)事務(wù), 當(dāng)值為-1時(shí)表示否,當(dāng)值為1時(shí)表示是。從屬于某一事務(wù)的數(shù)據(jù)為未確認(rèn)的數(shù)據(jù),稱之為“臟數(shù)據(jù)”。_tx_noString記錄該數(shù)據(jù)所從屬的事務(wù)編號(hào)。該列的值只有在—dirty列的值為1時(shí)才有意義。用Relation描述Node與Node之間的關(guān)系,每一個(gè)Relation均有一個(gè)全局唯一的名稱、一個(gè)源Node、一個(gè)目標(biāo)Node,由源Node到目標(biāo)Node的方向,稱之為正向,由目標(biāo)Node 到起始Node的方向稱之為反向,將每一個(gè)Relation的定義信息保存在名稱為graphic_db_ relation_def的DataSet中,該DataSet的數(shù)據(jù)結(jié)構(gòu)如下
2.如權(quán)利要求1所述的圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟2、中,檢查事務(wù)是否存在的方法是讀取名為graphiC_db_tX_def的 DataSet,查找tX_no列的值與API中傳入的tX_no值相等的記錄,如果記錄存在,則意味著當(dāng)前的圖形數(shù)據(jù)庫中存在該聯(lián)機(jī)事務(wù)。
3.如權(quán)利要求1所述的圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟幻中,檢查事務(wù)是否已過期的方法是讀取名為graphi c_db_tX_def 的DatMet,查找tx_n0列的值與API中傳入的tx_n0值相等的記錄,檢查該記錄中is_ timeout列的值,如果值為-1,則意味著在當(dāng)前的圖形數(shù)據(jù)庫中該聯(lián)機(jī)事務(wù)沒有過期。
4.如權(quán)利要求1所述的圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟4)中,檢查事務(wù)是否已提交的方法是讀取名為graphiC_db_tX_def的 DataSet,查找tx_no列的值與API中傳入的tx_no值相等的記錄,檢查該記錄中is_commit 列的值,如果值為-1,則意味著在當(dāng)前的圖形數(shù)據(jù)庫中該聯(lián)機(jī)事務(wù)沒有進(jìn)行提交。
5.如權(quán)利要求1所述的圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟5)中,檢查事務(wù)是否已標(biāo)記回滾的方法是查找tx_n0列的值與API中傳入的tX_no值相等的記錄,檢查該記錄中is_rollback列的值,如果值為-1,則意味著在當(dāng)前的圖形數(shù)據(jù)庫中該聯(lián)機(jī)事務(wù)沒有回滾。
6.如權(quán)利要求1所述的圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟6)中,檢查事務(wù)是否被鎖定的方法是讀取名為graphiC_db_tX_def 的DatMet,查找tx_n0列的值與API中傳入的tx_n0值相等的記錄,檢查該記錄中 processing列的值,如果值為-1,則意味著在當(dāng)前的圖形數(shù)據(jù)庫中該事務(wù)沒有被標(biāo)記鎖定。
7.如權(quán)利要求1所述的圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟7)中,標(biāo)記事務(wù)回滾狀態(tài)的方法是查詢graphiC_db_tX_def,查找tx_n0 列的值與API中傳入的tX_no值相等的記錄,將該條記錄is_rollback列的值置為1。
8.如權(quán)利要求1所述的圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟8)中,恢復(fù)事務(wù)鎖定的數(shù)據(jù)記錄的方法是查詢graphic_db_tx_def,查找tx_no列的值與API中傳入的tx_no值相等的記錄,讀取該條記錄的associate^ode列中的記錄,獲取當(dāng)前事務(wù)操作中相關(guān)聯(lián)的節(jié)點(diǎn)名稱,然后依次查找各關(guān)聯(lián)節(jié)點(diǎn)數(shù)據(jù)中_tX_no列的值與當(dāng)前事務(wù)記錄tX_no列中值相等,且_肚汁7 列值為-1的數(shù)據(jù)記錄,將這些記錄的_tX_no列的值設(shè)為null ;查詢graphic_db_relation_record_def,查找數(shù)據(jù)中_tx_no列的值與API中傳入的 tx_no值相等,且_dirty列值為-1的記錄,將這些記錄的_tX_no列的值設(shè)為null。
9.如權(quán)利要求1所述的圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟9)中,刪除臟數(shù)據(jù)的方法是查詢graphic_db_tx_def,查找tx_no列的值與API中傳入的tx_no值相等的記錄,讀取該條記錄的associate^ode列中的記錄,獲取當(dāng)前事務(wù)操作中相關(guān)聯(lián)的節(jié)點(diǎn)名稱,然后依次查找各關(guān)聯(lián)節(jié)點(diǎn)數(shù)據(jù)中_tX_no列的值與API中傳入的tX_no值相等,且_dirty列值為1的數(shù)據(jù)記錄,將這些記錄從DatMet中物理刪除;查詢graphic_db_relation_record_def,查找數(shù)據(jù)中_tx_no列的值與API中傳入的 tx_no值相等,且_dirty列值為_1的記錄,將這些記錄從DatMet中物理刪除。
10.如權(quán)利要求1所述的圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟10)中,刪除事務(wù)記錄的方法是查詢名稱為graphiC_db_tX_def的 DataSet中,查找tX_no列的值與API中傳入的tX_no值相等的記錄,將該條記錄刪除。
全文摘要
本發(fā)明涉及圖形數(shù)據(jù)庫聯(lián)機(jī)事務(wù)中事務(wù)回滾機(jī)制的實(shí)現(xiàn)方法,包括步驟客戶端程序調(diào)用圖形數(shù)據(jù)的API,傳入將要提交的事務(wù)編號(hào);檢查事務(wù)是否存在,事務(wù)是否已過期,事務(wù)是否已提交,檢查事務(wù)是否已回滾,檢查事務(wù)是否已被鎖定,標(biāo)記事務(wù)回滾狀態(tài);恢復(fù)事務(wù)鎖定的數(shù)據(jù)記錄;刪除臟數(shù)據(jù);刪除事務(wù)記錄。本發(fā)明提供了簡單可靠的數(shù)據(jù)回滾機(jī)制,在回滾與未回滾狀態(tài)之間不會(huì)出現(xiàn)第三種狀態(tài)。數(shù)據(jù)操作具有任意斷點(diǎn)持續(xù)性,事務(wù)回滾操作調(diào)用后,在數(shù)據(jù)恢復(fù)開始至完成的任意時(shí)間點(diǎn)的意外執(zhí)行中斷,均可在再次啟動(dòng)系統(tǒng)后繼續(xù)執(zhí)行,直至恢復(fù)完成。
文檔編號(hào)G06F17/30GK102193976SQ20111007288
公開日2011年9月21日 申請(qǐng)日期2011年3月25日 優(yōu)先權(quán)日2011年3月25日
發(fā)明者于洪方, 井衛(wèi)軍, 劉健, 蔣建平, 陳升, 陳晞 申請(qǐng)人:北京世紀(jì)互聯(lián)工程技術(shù)服務(wù)有限公司, 北京云快線軟件服務(wù)有限公司