摘 要:介紹了幾種XML數據庫的存儲策略,并對每種存儲策略進行了描述、分析,然后對幾種存儲策略進行了性能和優缺點的比較,并就XML數據庫未來發展方向進行展望。
關鍵詞:XML; 數據庫; 存儲策略
中圖分類號:TP311.131文獻標識碼:A文章編號:16723198(2010)01026902
1 XML數據庫的存儲策略
底層的存儲表達對上層的查詢處理和優化有著重要的影響,如何存儲XML文檔才是最好的方式已經成為一個重要問題。XML數據庫的存儲策略主要有幾種:利用文件系統的平面文件、成熟的RDBMS(Rdational Database Management System,關系數據庫管理系統)、對象管理器或OODBMS(ObjectOriented Database Management System,面向對象數據庫管理系)、采用全新的Native XML數據庫管理系統。
1.1 利用平面文件存儲 XML文檔
將每個XML文檔存儲成文本文件,并實現一個查詢引擎,當查詢被執行時,XML文件被解析成駐留在內存的一棵樹。一般解析的時間影響著查詢計算的時間,這種方法速度慢。為提高這種方法的可用性,必須建立索引。利用XML元素在文本文件中的偏移量作為id,建立從標記tag(parent_ offset,tag)映射到子偏移量child_offset的路徑索引以及從標記tag(child_offset,tag)映射到父偏移量parent_offset的反向路徑索引。這兩個索引有利于遍歷XML文檔或在XML文檔中進行導航。其他索引建立從標記值(tagname,value)或屬性值(attribute nam,attribute_value)到元素偏移量element_offset的映射,這些索引有助于計算查詢中的選擇條件(謂詞)。查詢引擎可以利用這些索引檢索與查詢相關的XML文件的片段,極大地減少了解析的時間。

1.2 傳統的關系數據庫系統方法
XML關系存儲的核心是XML文檔到RDB的模式映射(schema mapping)方法,包括模型映射和結構映射。為了下面敘述方便,圖1給出了示例所使用的XML文檔“Dept.xml”和 DTD文件“Dept.dtd”來說明它們的映射過程。也可用XML文檔的樹型結構來說明每一種方法是如何存儲XML數據的:XML文檔可以模型化為有向圖,圖中用結點表示XML元素、屬性和文本,利用有向邊表示父子關系,矩形框表示元素結點,而橢圓形表示屬性或文本結點等等。
(1)利用關系的DTD方法。
這種方法是共享內嵌法,而且需要相應DTD的支持。用一個獨立的表來捕獲具有相同標記的元素與其子元素集之間的包含關系。表中的每個元組都被賦予一個ID,而且該表還包含一個ParentlD列以標識該元組的父親結點。一個元素在描述它的元素表中只能出現一次,而且它的父結點內嵌為表的一列以便表示該元素的父親。
XML version= \"1.0\"?>
(2)利用關系的邊的方法。
將XML文檔的有向圖存儲在單個Edge表中。按照廣度優先的順序賦予有向圖中每個結點一個惟一的id。Edge表中的每個元組對應有向圖里的一條邊,并包含該條邊所連接的兩個結點的id值、目標結點的標記(tag)值以及一個順序號,該順序號表示同一結點與其多個子結點對應邊的順序編碼。當元素只有一個文本子結點時,文本內容就內嵌到以該元素結點為目標結點的邊所對應的元組里。
(3)利用關系的屬性方法。
“屬性”方法是按照Edge的Tag字段對邊表進行水平劃分,不同標記(指Tag字段的值)的元組存儲在各自不同的表里。這種方法以犧牲Edge表的重要的屬性Tag為代價而節省了存儲空間(不用存儲Tag字段)。對于屬性方法來說,查詢處理器需要DTD來決定哪些表包含子元素,因為子元素的標記沒有存儲在表中。需要注意的是,對于有很多XML文檔的一個大集,屬性方法可能導致大量的表。
1.3 Native XML數據庫
NativeXML數據庫是專門用來存儲XML文檔的和操作XML數據的數據庫,其數據可以通過XML和XPmh、XSLT、DOM、SAX等相關標準來訪問。具體使用什么形式
存儲數據并不重要,但底層數據表示形式必須維持完全的XML結構和相關的元數據。基本存儲單元是一個XML文檔,存儲數據時不需進行XML和數據庫的映射轉換。
2 存儲方法策略的性能及特征分析
平面文件是存儲XML文檔最簡單的機制,但一般不支持索引查詢,也不容易修改文檔。
關系型或面向對象數據庫按照一定的粒度來存儲XML文檔,這使得對XML文檔的訪問比較容易也比較靈活,同時也提高了查詢和修改XML文檔的效率,還可以方便地建立和維護各種索引。
在存儲XML文檔時,一般有三種不同的簇集策略:第一種是對應于現實世界的同一對象的元素簇集存儲,例將Student的ID和Name存儲在一起;第二種是將相同種類的元素一起簇集存儲,例把所有的Student元素存儲在一起;第三種是按照和原始XML文本文件一樣的順序(深度優先),將元素簇集存儲。
關系-DTD方法積極地使用了策略一和策略二,DTD信息有助于產生更緊湊的數據表示,但缺點是不能處理沒有DTD的XML文檔。利用關系數據庫系統還有其他優勢:可移植性和可擴展性。另外,一個重要的因素是當前Web上的數據都駐留在關系數據庫系統中,因此使用關系DBMS來存儲XML文檔使得查詢只有一個系統的數據類型和一種查詢語言成為可能。邊方法和屬性方法都采用了簇集策略二。當查詢須對相關的幾個子元素應用謂詞(條件)時,或是在構造結果文檔時,簇集策略二都導致了非常糟糕的性能。XML元素之間的父子關系是由SQL的連接(JOIN)運算捕獲的。對復雜的路徑表達式,這種策略產生了十幾個連接運算的復雜的SQL查詢,使得關系數據庫的查詢優化器很難產生正確的查詢執行。連接運算的數目也表明了這兩種方法對路徑表達式復雜性的敏感度。屬性方法比邊方法的數據表示更加緊湊。另一方面,為了重構一個元素,屬性方法必須要DTD的信息。而且其重構的代價比較高,原因就是需要更多的SQL查詢來獲取所有的子元素。
對象方法使用簇集策略三。由于在原始的XML文檔中,對應于一個現實世界對象的所有元素常被簇集在一起,所以策略三共享了策略一的好處。當重構查詢結果時,策略三提供了非常好的性能;而與 DTD方法比較起來,對象方法中相似的對象(具有相同標記名的元素)沒有被簇集在一起的事實顯著增加了查詢處理的開銷。另外,在面向對象數據庫基礎上實現 XML數據的存儲和查詢,而面向對象數據庫在查詢優化上存在的問題制約了XML數據的查詢分解和優化。
3 結語
XML數據庫的研究已從傳統的RDBMS轉向NXDBMS,這是XML數據庫研究的發展趨勢。由此也帶來了許多挑戰性的問題,如XML的節點編碼、x-代數、查詢優化、實現x-代數的各種高效算法、支持查詢優化的有效索引、XML的數據更新。這些問題給數據庫研究人員提供了廣闊的平臺和機遇。
參考文獻
[1]栗松濤編著,XML程序設計[M].北京:清華大學出版社,2001.
[2](美)Mark Graves著.尹志軍,等譯.XMI 數據庫設計[M].北京:機械工業出版社,2002.
[3]Tian Feng,DeWittD J,et a1.The Design and Performance Evaluation of Alternative XML Storage Strategies.SIGM0D Record,March 2002,31(1).