[摘要] XML廣泛應(yīng)用于WEB數(shù)據(jù)的表示和交換,而海量XML數(shù)據(jù)的存儲、處理對傳統(tǒng)數(shù)據(jù)庫提出了嚴(yán)峻的挑戰(zhàn),Native XML數(shù)據(jù)庫應(yīng)運(yùn)而生,本文重點(diǎn)討論了NXD數(shù)據(jù)庫數(shù)據(jù)存儲的幾個方面,指出其有待進(jìn)一步研究的問題。
[關(guān)鍵詞] XML Native XML Database 數(shù)據(jù)庫
隨著Internet進(jìn)入社會生活的各個方面,電子商務(wù)等的廣泛應(yīng)用,關(guān)系型數(shù)據(jù)庫在處理信息的復(fù)雜化,多樣化,差異化,靈活性,可讀性等方面的不足日益明顯。特別是目前Web Service的蓬勃發(fā)展,XML越來越多地活躍在數(shù)據(jù)交換和存儲領(lǐng)域,其數(shù)據(jù)量指數(shù)級的增長,要求更有效的數(shù)據(jù)管理能力和更快、更精確的查詢,而這是傳統(tǒng)關(guān)系型數(shù)據(jù)庫領(lǐng)域所沒有涉及到的,可以說是數(shù)據(jù)庫發(fā)展的一個分水嶺。NXD(Native XML Database)技術(shù)的出現(xiàn)給數(shù)據(jù)庫研究界帶來了巨大的機(jī)會,如何高效存儲管理XML數(shù)據(jù)也自然成為研究的熱點(diǎn)。
一、XML和XML數(shù)據(jù)庫
XML是The Extensible Markup Language(可擴(kuò)展標(biāo)識語言)的簡寫, 具有擴(kuò)展性、自描述性、自相容性等優(yōu)點(diǎn),成為Internet上數(shù)據(jù)表示和數(shù)據(jù)交換的標(biāo)準(zhǔn)。
對XML文檔進(jìn)行存取管理和查詢的XML數(shù)據(jù)庫分為兩類:支持XML數(shù)據(jù)庫管理系統(tǒng)(XED)和純XML數(shù)據(jù)庫管理系統(tǒng)(NXD)。XED(XML Enabled Database)是在原有關(guān)系數(shù)據(jù)庫基礎(chǔ)上擴(kuò)展了XML支持模塊,通過適當(dāng)?shù)腦ML API對XML文檔進(jìn)行查詢和修改,完成XML數(shù)據(jù)和關(guān)系數(shù)據(jù)庫之間的格式轉(zhuǎn)換和傳輸。NXD(Native XML Database)則出現(xiàn)在XML數(shù)據(jù)處理領(lǐng)域內(nèi),是專門設(shè)計(jì)用于存儲和管理XML文檔的數(shù)據(jù)庫,它以XML文檔作為數(shù)據(jù)庫的存儲單元進(jìn)行操作和管理,保持XML文檔的樹形結(jié)構(gòu),省掉了XML文檔和傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)換過程。
二、NXD的概述
1.NXD定義
RonaldBourret在“XMLandDatabases”一文中給出有關(guān)NXD的定義。一個純XML數(shù)據(jù)庫是指:(1)相對于XML文檔中的數(shù)據(jù),定義了XML文檔的邏輯模型,并且按照該模型來存儲和檢索文檔。這樣的模型至少應(yīng)該包括元素、屬性、PCDATA以及文檔順序。(2)就像關(guān)系數(shù)據(jù)庫以行作為表的邏輯存儲基本單位一樣,NXDBMS以XML文檔作為NXD的邏輯存儲基本單位。(3)不要求有任何特殊的基本物理存儲模型,它可以建立在關(guān)系的、層次的或面向?qū)ο髷?shù)據(jù)庫之上,或者使用諸如索引文件、壓縮文件此類的專門存儲格式。
但在很多方面,XML應(yīng)不同于關(guān)系模型和面向?qū)ο竽P偷葦?shù)據(jù)模型,將XML映射到另一種數(shù)據(jù)模型常常引起“阻抗失配”,并導(dǎo)致功能和性能上的局限。因此,業(yè)界提出NXD必須直接存儲和處理XML數(shù)據(jù)。
2.NXD特性
純XML數(shù)據(jù)庫的特性有:(1)文件集(Document Collections):支持集合(Collection)的概念,集合級別上的查詢,修改操作都會反映到集合內(nèi)的每個文檔中。(2)查詢語言(Query Languages):目前主流的是XPath,但其存在不能分組,排序和連接等缺陷,因此 XQuery作為Xpath的替代品,有希望成為純XML數(shù)據(jù)庫的專用語言。(3)更新和刪除(Updates and Deletes):NXD 絕大多數(shù)產(chǎn)品在這方面仍是薄弱環(huán)節(jié)。(4)事務(wù)、鎖定和并發(fā)(Transactions,Locking,and Concurrency);支持事務(wù)處理。鎖定通常是對整個文檔的,所以多用戶并發(fā)性相對較低。(5)純XML數(shù)據(jù)庫提供良好的編程接口。(6)能夠高效而精確的還原XML文檔。
三、NXD數(shù)據(jù)存儲結(jié)構(gòu)
1.物理存儲
將元數(shù)據(jù)、XML數(shù)據(jù)、索引和統(tǒng)計(jì)數(shù)據(jù)如何放置在物理磁盤上永遠(yuǎn)是一個挑戰(zhàn)性的問題,因?yàn)榈讓拥拇鎯Ρ磉_(dá)對上層的查詢處理和優(yōu)化有著重要的性能影響。
純XMl數(shù)據(jù)庫在物理上存儲XML文檔主要有三種方案:
(1)字節(jié)流方式:即將XML數(shù)據(jù)轉(zhuǎn)換為字節(jié)流,這種方式將文檔轉(zhuǎn)換為字節(jié)流,然后將其存儲在文件系統(tǒng)的文本文件中或存儲為數(shù)據(jù)庫的BLOB字段中,然后在這些文件或字段上面加一些索引,通過這種方式來提供某些數(shù)據(jù)的功能,當(dāng)存儲和檢索整個文檔時,這種方式效率較高,并且能夠精確地再現(xiàn)原來的XML文檔,但缺點(diǎn)在于任何一次查詢文檔時都必須通過分析器處理后才能獲得結(jié)構(gòu)信息。
(2)元模型方式:即按照某種物理模型存儲XML文檔,這里模型的不同,分為兩種方案,一種是采用現(xiàn)有的關(guān)系數(shù)據(jù)庫或面向?qū)ο髷?shù)據(jù)庫作為XML數(shù)據(jù)的存儲庫,在重組文檔片段或不同文檔時比較快,但在邏輯層和物理層的數(shù)據(jù)需要經(jīng)過轉(zhuǎn)換,因而會降低處理效率。另一種是為XMl數(shù)據(jù)庫設(shè)計(jì)專有的存儲方案,如 INFONYTEDB采用的PDOM方式就是首先將文檔轉(zhuǎn)化為DOM結(jié)構(gòu),然將其映射到一些特殊的文件中。這種方案能夠以一種比較自然的方式來存儲XML數(shù)據(jù),避免物理層和邏輯層數(shù)據(jù)之間轉(zhuǎn)換,但由于采用全新的存儲方案,技術(shù)不夠成熟。
(3)混合型,這種方式又可以細(xì)分為兩種類型:冗余型和雜交型。冗余型是指每份數(shù)據(jù)保持兩份副本,一份基于文本方式存儲,一份基于模型存儲。這樣可以同時利用兩種方式的優(yōu)點(diǎn),但是兩份數(shù)據(jù)很可能處于不一致的狀態(tài),且更新效率較低。雜交型存儲方式中規(guī)定一個數(shù)據(jù)單元,粒度大于數(shù)據(jù)單元的部分以元模型方式存儲,否則以字節(jié)流方式存儲。
在實(shí)際的純XML數(shù)據(jù)庫中用的比較多的是基于元模型的方式和雜交方式 。
2.數(shù)據(jù)模式
在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,模式嚴(yán)格地約束著數(shù)據(jù)的類型、操作和結(jié)構(gòu),數(shù)據(jù)完全對應(yīng)于模式,數(shù)據(jù)的插入、查詢、更新和存儲都必須遵循模式的定義。而XML數(shù)據(jù)具有半結(jié)構(gòu)化的特征,數(shù)據(jù)與模式信息之間并不具有完全對應(yīng)的關(guān)系,此時模式僅僅是作為查詢或者了解數(shù)據(jù)的一個說明,并不具有約束數(shù)據(jù)的功能。因此,如何在純XML數(shù)據(jù)庫中發(fā)揮XML模式的作用是一個需要研究的問題。
3.存儲粒度
XML數(shù)據(jù)是一棵由各種節(jié)點(diǎn)組成的樹,常見的節(jié)點(diǎn)包括元素(Element)節(jié)點(diǎn)、屬性(Attribute)節(jié)點(diǎn)和文本(Text)節(jié)點(diǎn)。但是NXD中,一條記錄所對應(yīng)的子樹有多大、包含多少個什么樣的節(jié)點(diǎn),這是NXD的存儲粒度問題。記錄的粒度分為三種:(1)結(jié)點(diǎn)級:一個結(jié)點(diǎn)就是一條記錄。(2)子樹級:XML文檔的一個片段(一個子樹)對應(yīng)一個記錄。目前,有兩種劃分子樹的方法:①根據(jù)物理塊大小,使子樹的大小與物理塊大小相近,不需要文檔模式信息的支持;②根據(jù)邏輯意義劃分子樹,使子樹成為一個比較完整的邏輯單位,需要文檔模式信息的支持。(3)文檔級:一個XML文檔是一條記錄,文檔是作為一個整體來操作的,不需要有DTD或XMLSchema等模式信息的支持。
不同的粒度對存儲空間和查詢的支持各不相同。對同一個XML文檔來說,記錄的粒度越小,記錄的數(shù)目就越多,記錄之間的指針就越多,存儲空間需要的也越多,從而記錄的存儲效率較低,但小粒度的存儲方法使每個元素和屬性,包括文本都可以被單獨(dú)查詢、修改或刪除,且對其他文檔結(jié)構(gòu)影響最小,具有最大的靈活性,也無須利用文檔的模式信息。記錄的粒度越大,為了讀取某一個節(jié)點(diǎn)需要讀進(jìn)的節(jié)點(diǎn)數(shù)就越多,更新時效率就越低,但是大粒度的存儲方法不需要存儲過多的邏輯指針和物理指針,能夠節(jié)省存儲空間,且重構(gòu)整個文檔會比較快一些。因此,根據(jù)查詢的要求如何確定XML數(shù)據(jù)的存儲粒度也是一個挑戰(zhàn)性的問題。
4.存儲順序
如果NXD中存儲XML文檔的記錄粒度是狹義的節(jié)點(diǎn)或者子樹,那么這些記錄在物理空間中的組織方式就是記錄的存儲順序問題,存儲順序是指記錄在物理上的相鄰關(guān)系。記錄的存儲順序一般有以下幾種:(1)深度優(yōu)先順序存儲,這是最常見的存儲順序。(2)廣度優(yōu)先順序存儲。(3)按某個條件簇集存儲,將滿足某個條件的所有記錄存儲在同一個物理塊內(nèi)或物理上相鄰的物理塊內(nèi)。對于XML文檔來說,將記錄的節(jié)點(diǎn)按類型相同的記錄簇集存儲,雖然在物理存儲上破壞了節(jié)點(diǎn)的順序,但有利于數(shù)據(jù)查詢和更新。
根據(jù)存儲粒度和存儲順序,將會產(chǎn)生以下幾種具體的存儲方法:①基于元素的深度優(yōu)先(DEB)方法;②基于子樹的深度優(yōu)先(DSB)方法;③基于元素的廣度優(yōu)先(BEB)方法;④基于子樹的深度優(yōu)先(BSB)方法;⑤基于元素的同類簇集(CEB)方法;⑥基于子樹的同類簇集(CSB)方法。
如何確定NXD中記錄的存儲順序,以及如何針對不同的應(yīng)用選取不同的存儲方法,或者是針對不同的查詢選擇不同的存儲方法,這些都是挑戰(zhàn)性的問題。
四、 應(yīng)用
Natix有著良好的存儲系統(tǒng),其記錄內(nèi)部的結(jié)點(diǎn)不完全是以字節(jié)流方式存儲的文本。存儲粒度上,Natix有自己獨(dú)特的劃分子樹的方式和分裂子樹的算法 ,且記錄子樹的大小是可以動態(tài)確定的。物理上,XML文檔映射成樹的結(jié)構(gòu),在樹結(jié)構(gòu)中包含三種結(jié)點(diǎn):(1)聚集結(jié)點(diǎn):指樹的內(nèi)部結(jié)點(diǎn)。(2)文字結(jié)點(diǎn):指頁結(jié)點(diǎn),內(nèi)容可以是字符,圖形,聲音和視頻等。(3)代理結(jié)點(diǎn):實(shí)際上是記錄之間聯(lián)系的橋梁。下面以一個XML文檔實(shí)例進(jìn)行說明,見圖1。XML文檔映射的樹狀結(jié)構(gòu)見圖2。物理樹的存儲結(jié)構(gòu)見圖3。
如:
綜上所述,純XML數(shù)據(jù)庫雖然在解決XML數(shù)據(jù)存儲,高效處理和查詢等方面較傳統(tǒng)數(shù)據(jù)庫有一定的優(yōu)勢,但是目前仍然存在很多具有挑戰(zhàn)性的問題,這些問題給數(shù)據(jù)庫研究人員提供了廣闊的平臺,也為我國在數(shù)據(jù)庫研究方面趕超世界先進(jìn)水平提供了機(jī)遇。相信隨著XML更為廣泛的應(yīng)用于醫(yī)療、金融、電子政務(wù)、制造業(yè)及電子商務(wù)等領(lǐng)域, Native XML數(shù)據(jù)庫的明天更美好。
參考文獻(xiàn):
[1]Amer-Yahia S,Cho S,Lakshmanan L V S,et al.Minimization of Tree Pattern Queries.In:Mehrotra S et al Eds.Proceedings of the 20th ACM SIGMOD International Conference on Management of Data. Santa Barbara,California,USE.May 21-24,2001.New York:ACM Press,2001.497-508
[2]萬常選:XML數(shù)據(jù)庫技術(shù)[M].北京:清華大學(xué)出版社,2005 50-51