專利名稱:圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guā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ù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的方法,它可在圖形數(shù)據(jù)庫未開啟事務(wù)時(shí)增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系。本發(fā)明采用的技術(shù)方案如下一種圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guā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)行;最下層為存儲數(shù)據(jù)的DataSet操作抽象層,在DatMet中,保存有聯(lián)機(jī)事務(wù)自身的狀態(tài)信息,以及數(shù)據(jù)的事務(wù)狀態(tài)屬性信息;將圖形數(shù)據(jù)庫中的每一個(gè)節(jié)點(diǎn)Node的定義信息保存在名稱為graphiC_db_n0de_ def的數(shù)據(jù)集DatMet中,該DatMet的數(shù)據(jù)結(jié)構(gòu)如下
權(quán)利要求
1. 一種圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guā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)行;最下層為存儲數(shù)據(jù)的DataSet操作抽象層,在DataSet中,保存有聯(lián)機(jī)事務(wù)自身的狀態(tài)信息,以及數(shù)據(jù)的事務(wù)狀態(tài)屬性信息;將圖形數(shù)據(jù)庫中的每一個(gè)節(jié)點(diǎn)Node的定義信息保存在名稱為graphiC_db_n0de_def 的數(shù)據(jù)集DatMet中,該DatMet的數(shù)據(jù)結(jié)構(gòu)如下列名稱數(shù)據(jù)類型說明node—idNumber全局唯一的IDnameString用于保存Node的名稱用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)如下列名稱數(shù)據(jù)類型說明relationidNumber全局唯一的IDnameString用于保存Relation的名稱source—nodeNumber源Node的IDtarget—nodeNumber目標(biāo)Node的ID兩個(gè)通過Relation連接的Node中的數(shù)據(jù)可以建立連接,將所有數(shù)據(jù)的連接信息保存在名稱為 graphic_db_relation_record_def 的 DataSet 中,該 DataSet 的數(shù)據(jù)結(jié)構(gòu)如下
2.如權(quán)利要求1所述的圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的方法,其特征在于在所述步驟1)中,API傳入如下參數(shù) source_node_name,源節(jié)點(diǎn)名禾爾; target_node_name,目標(biāo)節(jié)點(diǎn)名禾爾; relatior^name,指定將要建立的關(guān)系名稱; source_record_RID,指定源節(jié)點(diǎn)數(shù)據(jù)的RID ; target_record_RID,指定目標(biāo)節(jié)點(diǎn)數(shù)據(jù)的RID ; source_node_RID,源節(jié)點(diǎn)定義數(shù)據(jù)的RID ; target_node_RID,目標(biāo)節(jié)點(diǎn)定義數(shù)據(jù)的RID。
3.如權(quán)利要求2所述的圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的方法,其特征在于在所述步驟幻中,檢查源節(jié)點(diǎn)數(shù)據(jù)是否被事務(wù)鎖定的詳細(xì)步驟如下通過API參數(shù)source_node_name確定源節(jié)點(diǎn),根據(jù)API中傳入的source_record_RID查詢源節(jié)點(diǎn)中的數(shù)據(jù),檢查該數(shù)據(jù)中列_tX_no的值是否為空,如果不為空,則意味著該記錄被事務(wù)鎖定。
4.如權(quán)利要求2所述的圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的方法,其特征在于在所述步驟4)中,檢查目標(biāo)節(jié)點(diǎn)數(shù)據(jù)是否被事務(wù)鎖定的詳細(xì)步驟如下 通過API參數(shù)target_node_name確定目標(biāo)節(jié)點(diǎn),根據(jù)API中傳入的target_record_ RID查詢目標(biāo)節(jié)點(diǎn)中的數(shù)據(jù),檢查該數(shù)據(jù)中列_tX_no的值是否為空,如果不為空,則意味著該記錄被事務(wù)鎖定。
5.如權(quán)利要求2所述的圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的方法,其特征在于在所述步驟幻中,檢查與源節(jié)點(diǎn)數(shù)據(jù)相關(guān)的Relation是否被事務(wù)鎖定的詳細(xì)步驟如下查詢名稱為 graphic_db_relation_record_def 的 DataSet,過濾獲取所有 source_ record或target_record列的值與API傳入的source_record_RID相等的記錄,依次檢查這些記錄的_tX_no字段,如果有任何一條記錄_tX_no列的值不為空,則意味著相關(guān)數(shù)據(jù)的 Relation存在被其他事務(wù)鎖定的情況。
6.如權(quán)利要求2所述的圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的方法,其特征在于在所述步驟6)中,檢查與目標(biāo)節(jié)點(diǎn)數(shù)據(jù)相關(guān)的Relation是否被事務(wù)鎖定的詳細(xì)步驟如下查詢名稱為 graphic_db_relation_record_def 的 DataSet,過濾獲取所有 source_ record或target_record列的值與API傳入的target_record_RID相等的記錄,依次檢查這些記錄的_tX_no字段,如果有任何一條記錄_tX_no列的值不為空,則意味著相關(guān)數(shù)據(jù)的 Relation存在被其他事務(wù)鎖定的情況。
7.如權(quán)利要求2所述的圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的方法,其特征在于在所述步驟7)中,新建關(guān)系詳細(xì)分為如下步驟查詢名稱為graphic_db_re 1 ation_def的DataSet,查找列name的值與API值入的參數(shù)relation_name值相同的記錄,獲取該記錄的Relation RID ;向名稱為graphic_db_relation_record_def的Datakt中插入新的記錄,該記錄 relation_id列的值為剛才查詢獲得的Relation RID, source_node列的值為API傳入的 source_node_RID, target_ _node列的值為API傳入的target_ node RID, source record 列的值為 API 傳入的 source_record_RID, target_record 列的值為 API 傳入的 target_ record_RID, _dirty 列的值為 false,_tx_no 列的值為空。
全文摘要
本發(fā)明涉及圖形數(shù)據(jù)庫非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的方法,包括步驟1)客戶程序調(diào)用API;2)進(jìn)入同步區(qū);3)檢查源節(jié)點(diǎn)數(shù)據(jù)是否被事務(wù)鎖定,鎖定則轉(zhuǎn)步驟9),否則繼續(xù);4)檢查目標(biāo)節(jié)點(diǎn)數(shù)據(jù)是否被事務(wù)鎖定,鎖定則轉(zhuǎn)步驟9),否則繼續(xù);5)檢查與源節(jié)點(diǎn)數(shù)據(jù)相關(guān)的Relation是否被事務(wù)鎖定,鎖定則轉(zhuǎn)步驟9),否則繼續(xù);6)檢查與目標(biāo)節(jié)點(diǎn)數(shù)據(jù)相關(guān)的Relation是否被事務(wù)鎖定,鎖定則轉(zhuǎn)步驟9),否則繼續(xù);7)新建關(guān)系;8)退出同步區(qū),程序結(jié)束;9)等待一段時(shí)間;10)操作是否超時(shí),若超時(shí)則退出執(zhí)行邏輯,否則轉(zhuǎn)步驟2)再次進(jìn)入同步區(qū)。本發(fā)明的優(yōu)點(diǎn)是與聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的操作相比較,非聯(lián)機(jī)事務(wù)中增加節(jié)點(diǎn)數(shù)據(jù)關(guān)系的操作避免了大量的數(shù)據(jù)鎖定檢查,從而執(zhí)行效率更高。
文檔編號G06F17/30GK102193977SQ20111007293
公開日2011年9月21日 申請日期2011年3月25日 優(yōu)先權(quán)日2011年3月25日
發(fā)明者于洪方, 井衛(wèi)軍, 劉健, 蔣建平, 陳升, 陳晞 申請人:北京世紀(jì)互聯(lián)工程技術(shù)服務(wù)有限公司, 北京云快線軟件服務(wù)有限公司