專利名稱:圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法。
背景技術(shù):
通常在數(shù)據(jù)庫(kù)系統(tǒng)中,事務(wù)是工作的離散單位。例如,一個(gè)數(shù)據(jù)庫(kù)事務(wù)可以是修改一個(gè)用戶的帳戶平衡或庫(kù)存項(xiàng)的寫(xiě)操作。聯(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)境下,寫(xiě)操作經(jīng)常并行地在多個(gè)數(shù)據(jù)庫(kù)服務(wù)器上發(fā)生。這樣的并發(fā)事務(wù)處理需要一個(gè)“卷回”機(jī)制,以保證在一次寫(xiě)操作中系統(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ù)中查詢數(shù)據(jù)的控制方法,它可在圖形數(shù)據(jù)庫(kù)未開(kāi)啟事務(wù)時(shí)查詢數(shù)據(jù)。本發(fā)明采用的技術(shù)方案如下一種圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法,其特征在于非聯(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ù)中的每一個(gè)節(jié)點(diǎn)Node的定義信息保存在名稱為graphiC_db_n0de_ def的數(shù)據(jù)集DatMet中,該DatMet的數(shù)據(jù)結(jié)構(gòu)如下
權(quán)利要求
1. 一種圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法,其特征在于 非聯(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ù)中的每一個(gè)節(jié)點(diǎn)Node的定義信息保存在名稱為graphiC_db_n0de_def 的數(shù)據(jù)集DatMet中,該DatMet的數(shù)據(jù)結(jié)構(gòu)如下
2.如權(quán)利要求1所述的圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法,其特征在于 在所述步驟2、中,檢查目標(biāo)節(jié)點(diǎn)是否存在的方法是查詢名稱為graphiC_db_n0de_def的Datakt,查找該DataSet的name列中的值與API中傳入的node_name值相等的數(shù)據(jù)記錄,如果找到相應(yīng)記錄,則說(shuō)明目標(biāo)節(jié)點(diǎn)存在。
3.如權(quán)利要求2所述的圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法,其特征在于 在所述步驟3)中,檢查返回節(jié)點(diǎn)數(shù)據(jù)結(jié)果集的路徑表達(dá)式是否正確的詳細(xì)步驟如下 解析路徑表達(dá)式,以API中傳入的nodejame為起始點(diǎn),查詢名稱為graphic_db_relation_def的DataSet,根據(jù)關(guān)系表達(dá)式的方向不同,查找source_node列或target_ node列,與name列相匹配的數(shù)據(jù)記錄,如果記錄存在,說(shuō)明表達(dá)式正確。
4.如權(quán)利要求3所述的圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法,其特征在于 在所述步驟4)中,檢查過(guò)濾條件是否合法的詳細(xì)步驟如下如果過(guò)濾條件中包含路徑表達(dá)式,則進(jìn)行路徑表達(dá)式合法性的檢查,檢查過(guò)程與步驟 3)相同,然后獲取過(guò)濾條件中的列屬性名稱,查詢名為graphiC_db_n0de_def的DatMet, 查看路徑表達(dá)式中的最后一個(gè)節(jié)點(diǎn)是否包含該列,如果包含,則說(shuō)明過(guò)濾條件合法,否則不合法;如果過(guò)濾條件中不包含路徑表達(dá)式,則直接獲取過(guò)濾條件中的列屬性名稱,然后查詢名為graphic_db_node_def的DataSet,查看API中的傳入的node_name標(biāo)識(shí)的節(jié)點(diǎn)是否包含該列,如果包含,則說(shuō)明過(guò)濾條件合法,否則不合法。
5.如權(quán)利要求4所述的圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法,其特征在于在所述步驟6)中,基于路徑表達(dá)式的條件查詢的詳細(xì)步驟如下a.反轉(zhuǎn)路徑表達(dá)式,以過(guò)濾條件中路徑表達(dá)式的終點(diǎn)為起點(diǎn),以其起點(diǎn)為終點(diǎn),同時(shí)將關(guān)系的方向倒轉(zhuǎn);b.查詢反轉(zhuǎn)后的路徑表達(dá)式的起始節(jié)點(diǎn),按過(guò)濾條件獲取匹配的數(shù)據(jù)記錄,如果結(jié)果集中有的值為1的數(shù)據(jù),說(shuō)明該條記錄為臟數(shù)據(jù),將其從結(jié)果集中去除;c.以上一步查詢的結(jié)果集為起點(diǎn),依照反轉(zhuǎn)后的路徑表達(dá)式,通過(guò)查詢名稱為 graphic_db_relation_record_def的Datakt,遞歸獲取與之建立關(guān)系的記錄,如果記錄的drity列的值為1,則說(shuō)明該條記錄為臟數(shù)據(jù),忽略該條記錄;d.反轉(zhuǎn)路徑表達(dá)式終點(diǎn)節(jié)點(diǎn)的關(guān)聯(lián)記錄為當(dāng)前過(guò)濾條件的查詢結(jié)果。
6.如權(quán)利要求4所述的圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法,其特征在于在所述步驟7)中,簡(jiǎn)單查詢的詳細(xì)步驟如下查詢API中傳入的n0de_name參數(shù)指定的節(jié)點(diǎn),按過(guò)濾條件對(duì)其中的記錄進(jìn)行匹配,與過(guò)濾條件相符合,且列的值為-1的記錄是查詢的結(jié)果集。
全文摘要
本發(fā)明涉及圖形數(shù)據(jù)庫(kù)非聯(lián)機(jī)事務(wù)中查詢數(shù)據(jù)的控制方法,包括步驟1)客戶程序調(diào)用API;2)檢查欲查詢數(shù)據(jù)的目標(biāo)節(jié)點(diǎn)是否存在,存在則繼續(xù);3)檢查返回節(jié)點(diǎn)數(shù)據(jù)結(jié)果集的路徑表達(dá)式是否正確,正確則繼續(xù);4)檢查過(guò)濾條件是否合法,合法則繼續(xù);5)檢查過(guò)濾條件中是否包含路徑表達(dá)式,包含則進(jìn)行基于路徑表達(dá)式的查詢步驟6),否則進(jìn)行簡(jiǎn)單查詢步驟7);6)執(zhí)行基于路徑表達(dá)式的條件查詢;7)進(jìn)行簡(jiǎn)單查詢;8)將查詢后的結(jié)果集返回給API調(diào)用者,查詢結(jié)束。與聯(lián)機(jī)事務(wù)中的查詢操作相比較,非聯(lián)機(jī)事務(wù)的查詢會(huì)避免大量的數(shù)據(jù)鎖定檢測(cè),從而能夠獲取更高的查詢性能。非聯(lián)機(jī)事務(wù)的查詢操作不受聯(lián)機(jī)事務(wù)鎖定、提交、回滾的影響。
文檔編號(hào)G06F17/30GK102193979SQ20111007294
公開(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ù)有限公司