本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種XML文檔存儲(chǔ)方法及裝置。
背景技術(shù):
目前XML文檔以二進(jìn)制數(shù)據(jù)的形式存儲(chǔ)在以O(shè)racle,Postgresql為代表的傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)中,另外,XML文檔被分解為節(jié)點(diǎn)存儲(chǔ)在以Founder XML DB,berkeley XML DB為代表的專門為XML開發(fā)的數(shù)據(jù)庫(kù)中。
在Oracle數(shù)據(jù)庫(kù)中,XML文檔以整體形式存儲(chǔ),查找XML文檔中某一節(jié)點(diǎn)的時(shí)候需要通篇查找整個(gè)XML文檔,導(dǎo)致查找速度低;在Founder XML DB數(shù)據(jù)庫(kù)中,XML文檔以若干個(gè)節(jié)點(diǎn)的形式進(jìn)行存儲(chǔ),導(dǎo)致數(shù)據(jù)庫(kù)大量的存儲(chǔ)空間被占用。
現(xiàn)有技術(shù)中,XML文檔的存儲(chǔ)形式存在查找速度低、占用大量存儲(chǔ)空間的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種XML文檔存儲(chǔ)方法及裝置,以提高XML文檔的查找速度,節(jié)省存儲(chǔ)空間。
本發(fā)明實(shí)施例的一個(gè)方面是提供一種XML文檔存儲(chǔ)方法,包括:
將XML文檔分解為多個(gè)片段,所述片段包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的開始標(biāo)記和結(jié)束標(biāo)記在同一片段中;
對(duì)所述多個(gè)片段分別進(jìn)行存儲(chǔ),以使每個(gè)片段作為一個(gè)存儲(chǔ)空間;
從所述多個(gè)片段中查找目標(biāo)片段,并從所述目標(biāo)片段中查找目標(biāo)節(jié)點(diǎn)。
本發(fā)明實(shí)施例的另一個(gè)方面是提供一種XML文檔存儲(chǔ)裝置,包括:
分解模塊,用于將XML文檔分解為多個(gè)片段,所述片段包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的開始標(biāo)記和結(jié)束標(biāo)記在同一片段中;
存儲(chǔ)模塊,用于對(duì)所述多個(gè)片段分別進(jìn)行存儲(chǔ),以使每個(gè)片段作為一個(gè)存儲(chǔ)空間;
查找模塊,用于從所述多個(gè)片段中查找目標(biāo)片段,并從所述目標(biāo)片段中查找目標(biāo)節(jié)點(diǎn)。
本發(fā)明實(shí)施例提供的XML文檔存儲(chǔ)方法及裝置,通過將XML文檔分解為多個(gè)片段,每個(gè)片段包括多個(gè)節(jié)點(diǎn),并以片段為查詢單位,查找該片段中的目標(biāo)節(jié)點(diǎn),相比于通篇查找整個(gè)XML文檔提高了查找速度,相比于XML文檔以若干個(gè)節(jié)點(diǎn)的形式進(jìn)行存儲(chǔ),節(jié)省了大量的存儲(chǔ)空間。
附圖說明
圖1為本發(fā)明實(shí)施例提供的XML文檔存儲(chǔ)方法流程圖;
圖2為本發(fā)明實(shí)施例提供的XML文檔存儲(chǔ)裝置的結(jié)構(gòu)圖;
圖3為本發(fā)明另一實(shí)施例提供的XML文檔存儲(chǔ)裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
圖1為本發(fā)明實(shí)施例提供的XML文檔存儲(chǔ)方法流程圖。本發(fā)明實(shí)施例針對(duì)XML文檔的存儲(chǔ)形式存在查找速度低、占用大量存儲(chǔ)空間的問題,提供了XML文檔存儲(chǔ)方法,該方法具體步驟如下:
步驟S101、將XML文檔分解為多個(gè)片段,所述片段包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的開始標(biāo)記和結(jié)束標(biāo)記在同一片段中;
在本發(fā)明實(shí)施例中,將整個(gè)XML文檔分解為多個(gè)片段,每個(gè)片段包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的開始標(biāo)記和結(jié)束標(biāo)記不能分割到不同的兩個(gè)片段中,例如一個(gè)XML文檔包括<bid_tuple>……</bid_tuple>,則<bid_tuple>需要在一個(gè)片段中,</bid_tuple>也需要在一個(gè)片段中,不能出現(xiàn)<bid_在一個(gè)片段中,tuple>在另一個(gè)片段中。
步驟S102、對(duì)所述多個(gè)片段分別進(jìn)行存儲(chǔ),以使每個(gè)片段作為一個(gè)存儲(chǔ)空間;
以每個(gè)片段為存儲(chǔ)單元對(duì)所述多個(gè)片段分別進(jìn)行存儲(chǔ),以使每個(gè)片段作為一個(gè)存儲(chǔ)空間。
步驟S103、從所述多個(gè)片段中查找目標(biāo)片段,并從所述目標(biāo)片段中查找 目標(biāo)節(jié)點(diǎn)。
將XML文檔分解為多個(gè)片段后,對(duì)每個(gè)片段分配一個(gè)標(biāo)識(shí)號(hào),依據(jù)標(biāo)識(shí)號(hào)可查找到相應(yīng)的片段,具體的,將XML文檔的分片信息存儲(chǔ)到分片表中,即分片表中記錄有多個(gè)條目,每個(gè)條目包括一個(gè)片段的標(biāo)識(shí)號(hào)、片段的大小、片段的起始符號(hào)和結(jié)束符號(hào);依據(jù)目標(biāo)片段的標(biāo)識(shí)號(hào)可從分片表中搜索到目標(biāo)片段,對(duì)目標(biāo)片段進(jìn)行解析即可得到該目標(biāo)片段中的目標(biāo)節(jié)點(diǎn)。
本發(fā)明實(shí)施例通過將XML文檔分解為多個(gè)片段,每個(gè)片段包括多個(gè)節(jié)點(diǎn),并以片段為查詢單位,查找該片段中的目標(biāo)節(jié)點(diǎn),相比于通篇查找整個(gè)XML文檔提高了查找速度,相比于XML文檔以若干個(gè)節(jié)點(diǎn)的形式進(jìn)行存儲(chǔ),節(jié)省了大量的存儲(chǔ)空間。
在上述實(shí)施例的基礎(chǔ)上,所述將XML文檔分解為多個(gè)片段,包括:依據(jù)所述XML文檔的大小和用戶設(shè)定的片段大小將所述XML文檔平均分為多個(gè)片段。
在本發(fā)明實(shí)施例中,每個(gè)片段的大小依據(jù)用戶設(shè)定的片段大小確定,對(duì)XML文檔進(jìn)行分解后獲得的片段的個(gè)數(shù)根據(jù)XML文檔的大小和用戶設(shè)定的片段大小確定,具體的,片段的個(gè)數(shù)等于XML文檔的大小除以用戶設(shè)定的片段大小。另外,所述將XML文檔分解為多個(gè)片段之后,還包括:更新所述片段的內(nèi)容。
在本發(fā)明實(shí)施例中,若要更新XML文檔的內(nèi)容,只需更新該內(nèi)容所在的片段,而無需更新整個(gè)XML文檔。
所述將XML文檔分解為多個(gè)片段之后,還包括:為所述多個(gè)片段中的每個(gè)片段設(shè)置一個(gè)標(biāo)識(shí)號(hào)。
將XML文檔分解為多個(gè)片段之后,為所述每個(gè)片段設(shè)置一個(gè)標(biāo)識(shí)號(hào),即每個(gè)片段唯一對(duì)應(yīng)一個(gè)標(biāo)識(shí)號(hào)。
所述從所述多個(gè)片段中查找目標(biāo)片段,并從所述目標(biāo)片段中查找目標(biāo)節(jié)點(diǎn)包括:依據(jù)所述目標(biāo)片段對(duì)應(yīng)的標(biāo)識(shí)號(hào)從所述多個(gè)片段中查找目標(biāo)片段;對(duì)所述目標(biāo)片段進(jìn)行解析獲得所述目標(biāo)節(jié)點(diǎn)。
將XML文檔分解為多個(gè)片段后,對(duì)每個(gè)片段分配一個(gè)標(biāo)識(shí)號(hào),依據(jù)標(biāo)識(shí)號(hào)可查找到相應(yīng)的片段,具體的,將XML文檔的分片信息存儲(chǔ)到分片表中,即分片表中記錄有多個(gè)條目,每個(gè)條目包括一個(gè)片段的標(biāo)識(shí)號(hào)、片段的大小、 片段的起始符號(hào)和結(jié)束符號(hào);依據(jù)目標(biāo)片段的標(biāo)識(shí)號(hào)可從分片表中搜索到目標(biāo)片段,對(duì)目標(biāo)片段進(jìn)行解析即可得到該目標(biāo)片段中的目標(biāo)節(jié)點(diǎn)。
本發(fā)明實(shí)施例通過更新片段的內(nèi)容避免更新整個(gè)XML文檔,提高了對(duì)整個(gè)XML文檔的更新操作,通過為每個(gè)片段設(shè)置一個(gè)標(biāo)識(shí)號(hào),查找標(biāo)識(shí)號(hào)指示的片段中的目標(biāo)節(jié)點(diǎn),提高了查找效率。
圖2為本發(fā)明實(shí)施例提供的XML文檔存儲(chǔ)裝置的結(jié)構(gòu)圖。本發(fā)明實(shí)施例提供的XML文檔存儲(chǔ)裝置可以執(zhí)行XML文檔存儲(chǔ)方法實(shí)施例提供的處理流程,如圖2所示,XML文檔存儲(chǔ)裝置20包括分解模塊21、存儲(chǔ)模塊22和查找模塊23,其中,分解模塊21用于將XML文檔分解為多個(gè)片段,所述片段包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的開始標(biāo)記和結(jié)束標(biāo)記在同一片段中;存儲(chǔ)模塊22用于對(duì)所述多個(gè)片段分別進(jìn)行存儲(chǔ),以使每個(gè)片段作為一個(gè)存儲(chǔ)空間;查找模塊23用于從所述多個(gè)片段中查找目標(biāo)片段,并從所述目標(biāo)片段中查找目標(biāo)節(jié)點(diǎn)。
本發(fā)明實(shí)施例通過將XML文檔分解為多個(gè)片段,每個(gè)片段包括多個(gè)節(jié)點(diǎn),并以片段為查詢單位,查找該片段中的目標(biāo)節(jié)點(diǎn),相比于通篇查找整個(gè)XML文檔提高了查找速度,相比于XML文檔以若干個(gè)節(jié)點(diǎn)的形式進(jìn)行存儲(chǔ),節(jié)省了大量的存儲(chǔ)空間。
圖3為本發(fā)明另一實(shí)施例提供的XML文檔存儲(chǔ)裝置的結(jié)構(gòu)圖。在上述實(shí)施例的基礎(chǔ)上,分解模塊21具體用于依據(jù)所述XML文檔的大小和用戶設(shè)定的片段大小將所述XML文檔平均分為多個(gè)片段。
XML文檔存儲(chǔ)裝置20還包括更新模塊24,更新模塊24用于更新所述片段的內(nèi)容。
XML文檔存儲(chǔ)裝置20還包括標(biāo)識(shí)模塊25,標(biāo)識(shí)模塊25用于為所述多個(gè)片段中的每個(gè)片段設(shè)置一個(gè)標(biāo)識(shí)號(hào)。
查找模塊23具體用于依據(jù)所述目標(biāo)片段對(duì)應(yīng)的標(biāo)識(shí)號(hào)從所述多個(gè)片段中查找目標(biāo)片段;對(duì)所述目標(biāo)片段進(jìn)行解析獲得所述目標(biāo)節(jié)點(diǎn)。
本發(fā)明實(shí)施例提供的XML文檔存儲(chǔ)裝置可以具體用于執(zhí)行上述圖1所提供的方法實(shí)施例,具體功能此處不再贅述。
本發(fā)明實(shí)施例通過更新片段的內(nèi)容避免更新整個(gè)XML文檔,提高了對(duì)整個(gè)XML文檔的更新操作,通過為每個(gè)片段設(shè)置一個(gè)標(biāo)識(shí)號(hào),查找標(biāo)識(shí)號(hào)指示的片段中的目標(biāo)節(jié)點(diǎn),提高了查找效率。
綜上所述,本發(fā)明實(shí)施例通過將XML文檔分解為多個(gè)片段,每個(gè)片段包括多個(gè)節(jié)點(diǎn),并以片段為查詢單位,查找該片段中的目標(biāo)節(jié)點(diǎn),相比于通篇查找整個(gè)XML文檔提高了查找速度,相比于XML文檔以若干個(gè)節(jié)點(diǎn)的形式進(jìn)行存儲(chǔ),節(jié)省了大量的存儲(chǔ)空間;通過更新片段的內(nèi)容避免更新整個(gè)XML文檔,提高了對(duì)整個(gè)XML文檔的更新操作,通過為每個(gè)片段設(shè)置一個(gè)標(biāo)識(shí)號(hào),查找標(biāo)識(shí)號(hào)指示的片段中的目標(biāo)節(jié)點(diǎn),提高了查找效率。
在本發(fā)明所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用硬件加軟件功能單元的形式實(shí)現(xiàn)。
上述以軟件功能單元的形式實(shí)現(xiàn)的集成的單元,可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。上述軟件功能單元存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(Read-Only Memory,ROM)、隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
本領(lǐng)域技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分 配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的裝置的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。