專利名稱:圖形數(shù)據(jù)庫(kù)聯(lián)機(jī)事務(wù)中事務(wù)提交機(jī)制的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種圖形數(shù)據(jù)庫(kù)聯(lián)機(jī)事務(wù)中事務(wù)提交機(jī)制的實(shí)現(xiàn)方法。
背景技術(shù):
通常在數(shù)據(jù)庫(kù)系統(tǒng)中,事務(wù)是工作的離散單位。例如,一個(gè)數(shù)據(jù)庫(kù)事務(wù)可以是修改一個(gè)用戶的帳戶平衡或庫(kù)存項(xiàng)的寫操作。聯(lián)機(jī)事務(wù)處理系統(tǒng)實(shí)時(shí)地采集處理與事務(wù)相連的數(shù)據(jù)以及共享數(shù)據(jù)庫(kù)和其它文件的地位的變化。在聯(lián)機(jī)事務(wù)處理中,事務(wù)是被立即執(zhí)行的。 在單一用戶、單一數(shù)據(jù)庫(kù)環(huán)境下執(zhí)行事務(wù)是簡(jiǎn)單的,這是因?yàn)闆](méi)有沖突問(wèn)題或?qū)?shù)據(jù)庫(kù)間同步的需求。在一個(gè)分布式環(huán)境下,寫操作經(jīng)常并行地在多個(gè)數(shù)據(jù)庫(kù)服務(wù)器上發(fā)生。這樣的并發(fā)事務(wù)處理需要一個(gè)“卷回”機(jī)制,以保證在一次寫操作中系統(tǒng)失效的情況下,仍保證數(shù)據(jù)庫(kù)的完整性。事務(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)了沖突問(wèn)題。
發(fā)明內(nèi)容
為了解決上述問(wèn)題,本發(fā)明提出了一種圖形數(shù)據(jù)庫(kù)聯(lián)機(jī)事務(wù)中事務(wù)提交機(jī)制的實(shí)現(xiàn)方法,以實(shí)現(xiàn)事務(wù)的提交機(jī)制。本發(fā)明采用的技術(shù)方案如下一種圖形數(shù)據(jù)庫(kù)聯(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語(yǔ)言的線程同步鎖定特性實(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ù)庫(kù)中聯(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ù)庫(kù)聯(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 語(yǔ)言的線程同步鎖定特性實(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ù)庫(kù)中聯(lián)機(jī)事務(wù)的狀態(tài)數(shù)據(jù)存儲(chǔ)在名稱為graphiC_db_tX_def的數(shù)據(jù)集 DataSet中,該Datakt的數(shù)據(jù)結(jié)構(gòu)如下
2.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)聯(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ù)庫(kù)中存在該聯(lián)機(jī)事務(wù)。
3.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)聯(lián)機(jī)事務(wù)中事務(wù)提交機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟幻中,檢查事務(wù)是否已過(guò)期的方法是讀取名為graphi c_db_tX_def 的DatMet,查找tx_n0列的值與API中傳入的tx_n0值相等的記錄,檢查該記錄中is_ timeout列的值,如果值為-1,則意味著在當(dāng)前的圖形數(shù)據(jù)庫(kù)中該聯(lián)機(jī)事務(wù)沒(méi)有過(guò)期。
4.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)聯(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ù)庫(kù)中該聯(lián)機(jī)事務(wù)沒(méi)有進(jìn)行提交。
5.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)聯(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ù)庫(kù)中該聯(lián)機(jī)事務(wù)沒(méi)有回滾。
6.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)聯(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ù)庫(kù)中該事務(wù)沒(méi)有被標(biāo)記鎖定。
7.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)聯(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_COmmit列的值置為1。
8.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)聯(lián)機(jī)事務(wù)中事務(wù)提交機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟8)中,刪除事務(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ù)記錄,將這些記錄從DatMet中物理刪除;查詢graphic_db_relation_record_def,查找數(shù)據(jù)中_tx_no列的值與API中傳入的 tx_no值相等,且_dirty列值為_(kāi)1的記錄,將這些記錄從DatMet中物理刪除。
9.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)聯(lián)機(jī)事務(wù)中事務(wù)提交機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟9)中,更改臟數(shù)據(jù)狀態(tài)的方法是查詢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ù)記錄,將這些記錄的_tX_no列的值設(shè)為null,同時(shí)將dirty列的值設(shè)為_(kāi)1 ;查詢graphic_db_relation_record_def,查找數(shù)據(jù)中_tx_no列的值與API中傳入的 tx_no值相等,且_dirty列值為-1的記錄,將這些記錄的_tX_no列的值設(shè)為null,同時(shí)將 _dirty列的值設(shè)為-1。
10.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)聯(lián)機(jī)事務(wù)中事務(wù)提交機(jī)制的實(shí)現(xiàn)方法,其特征在于在所述步驟10)中,刪除事務(wù)記錄的方法是查詢名稱為graphiC_db_tX_def的 DataSet中,查找tX_no列的值與API中傳入的tX_no值相等的記錄,將該條記錄刪除。
全文摘要
本發(fā)明涉及圖形數(shù)據(jù)庫(kù)聯(lián)機(jī)事務(wù)中事務(wù)提交機(jī)制的實(shí)現(xiàn)方法,包括步驟1)客戶端程序調(diào)用圖形數(shù)據(jù)的API,傳入將要提交的事務(wù)編號(hào);2)檢查事務(wù)是否存在;3)檢查事務(wù)是否已過(guò)期;4)檢查事務(wù)是否已提交;5)檢查事務(wù)是否已回滾;6)檢查事務(wù)是否已被鎖定;7)標(biāo)記事務(wù)提交狀態(tài);8)刪除事務(wù)鎖定的數(shù)據(jù)記錄;9)更改臟數(shù)據(jù)狀態(tài);10)刪除事務(wù)記錄。本發(fā)明提供了簡(jiǎn)單、可靠的數(shù)據(jù)事務(wù)提交機(jī)制,提交操作具有不可分割的“原子操作”特性,在提交與未提交狀態(tài)之間,不會(huì)出現(xiàn)第三種狀態(tài)。本發(fā)明的數(shù)據(jù)操作具有任意斷點(diǎn)持續(xù)性,事務(wù)提交操作調(diào)用后,在數(shù)據(jù)更新開(kāi)始至完成的任意時(shí)間點(diǎn)的意外執(zhí)行中斷,均可在再次啟動(dòng)系統(tǒng)后繼續(xù)執(zhí)行,直至更新完成。
文檔編號(hào)G06F17/30GK102193975SQ20111007287
公開(kāi)日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ù)有限公司