(1.西南交通大學 a.信息科學與技術學院; b.軟件學院, 成都 610031; 2.四川省計算機研究院, 成都 610041)
摘 要:
NativeXML數據庫是一種專門設計用于存儲和管理XML數據的新型數據庫技術。首先簡要介紹了NativeXML數據庫的定義和特點,然后著重討論了采用平面文件作為基本存儲結構的NativeXML數據庫在存儲模型、存儲粒度等方面的策略選擇,最后結合實際項目分析了基于平面文件的NativeXML數據庫在Web開發方面的可行性及其應用前景。
關鍵詞:NativeXML; 數據庫; 平面文件; 存儲策略; 存儲模型; 存儲粒度
中圖分類號:TP311.13 文獻標志碼: A
文章編號:10013695(2008)12363903
Research of storage strategies for NativeXML database based on flat files
HU Zheng1a,2, SU Bin1b, LIU Ying2
(1a.School of Information Science Technology,
b.School of Software, Southwest Jiaotong University, Chengdu 610031, China;
2. Sichuan Academy of Computers Science, Chengdu 610041, China)
Abstract:
NativeXML database is a new database technology which is specifically devised for storing and managing XML data. First, this paper simply introduced the definition of a NativeXML database and its characteristics, then put forward the NativeXML database using flat files as its storage structure. After that, discussed the choices of strategies on storage models and granularitis in detail. At last, the paper gave a practical application to analyze the feasibility and the prospect of using NativeXML database based on flat files to develop Web applications.
Key words:NativeXML; database; flat file; storage strategy; storage model; storage granularity
0 引言
XML(extensible markup language,可擴展標記語言)是W3C組織根據SGML(standard generalized markup language,標準通用標記語言)設計的一個優化子集,以開放的、自描述的方式定義了數據結構,略去了SGML中繁雜和不常用的內容,在描述數據內容的同時突出了對結構的描述,從而使得編程簡化、易理解、易于在 Web上的傳輸和交互以及數據信息的采集和提取。
XML基于純文本的結構具有天然的跨平臺、跨語言特性,因此非常適于Web上的異種數據交換,以XML為基礎的Web應用正在成為主流。同時,由于XML文檔具有多層次嵌套的結構特點,能便捷地構建多維數據模型,比傳統的關系型數據庫更有彈性,更容易體現現實世界中的多維、多層次結構,將XML技術從Web數據交換領域擴展到數據存儲領域,直接采用XML文檔作為存儲方案的NativeXML database(即原生XML數據庫)研究也正在興起。
1 NativeXML數據庫
XML數據庫是多個XML文檔及其部件的集合,是利用一個管理系統實現對XML文檔進行存取管理和查詢的數據庫。XML數據庫目前主要有兩大類,即XML使能數據庫(XMLenabled database,XED)和原生XML數據庫(NativeXML database,NXD)。XED是在傳統數據庫的基礎上增加對XML的支持以便操作XML數據;NXD則是專門設計用于存儲和管理XML文檔的數據庫,其基本存儲單元是XML文檔,通過XML相關的標準和技術完成數據的存儲和其他操作。這種數據庫維持原有XML文檔的數據結構和相關的元數據,容易實現XML文檔的roundtripping(往返存取)[1]功能,即可以將XML文檔存放在NXD中,然后再取回同樣的文檔,這對于法律、醫學等不允許隨意竄改數據的領域顯得格外重要。
目前較為公認的NativeXML數據庫的定義[1]是由XML:DB mailing list的一位成員給出的,即只有滿足三個特征的XML數據庫才能稱為 NativeXML數據庫:a)為XML文檔定義了一個邏輯模型,并且根據該模型存取文檔;b)以XML文檔為基本邏輯存儲單元,正如關系數據庫將表中的行作為存儲的基本單元一樣;c)對底層的物理存儲模型沒有特殊要求,既可以建立在關系型、層次型或面向對象的數據庫之上,也可以使用專用的存儲格式,如索引或壓縮文件。
2 基于平面文件的NativeXML數據庫的存儲模型
從上面的NativeXML數據庫定義c)可以看到,原生XML數據庫并不關心具體的物理存儲模型,它只要求保持XML文檔原本的樹型結構,對數據庫的查詢、修改和刪除等操作由數據庫應用層提供支持。目前常見的NativeXML數據庫的存儲模型主要有:a)基于平面文件(flat file)的存儲模型;b)基于關系數據庫的存儲模型;c)基于面向對象數據庫的存儲模型。
其中,b)和c)這兩種存儲模式將XML文檔分片存儲到關系型數據庫或是面向對象數據庫中,可以充分利用已有的數據庫成熟技術,其查詢、修改效率均比較高,但是在實際應用中需要Web網站主機提供關系型數據庫或是面向對象數據庫的支持,其使用受到一定的條件限制。本文主要討論基于平面文件的存儲模型。
基于平面文件的存儲是NativeXML數據庫中最簡單、最靈活的存儲方式,一般無須考慮存儲模型(如關系型數據庫的文件塊及映射結構),只需根據存儲粒度的需求分割XML文檔并映射為由操作系統管理的文件目錄結構和文本文件即可。由于這種文件體積一般比存儲設備上的單個文件塊大,且隨數據容量變動頻繁,在搜索和存取時其速度要慢一些。基于平面文件存儲的NativeXML數據庫一般均需要使用索引,使得查詢引擎能較快地定位XML文檔內的任意節點,提高數據庫的查詢速度。其存儲模型如圖1所示。
圖1中,數據文件以行為單位存儲數據記錄,并且不包含數據間任何結構的(關系、層次)信息,數據的字段之間可以用空格、制表符、逗號或其他特殊符號間隔以便識別;結構文件存儲數據間的關系信息和層次信息,可以直接用XML格式書寫,其標簽和數據文件內的數據字段一一對應,用于將從數據文件中讀出的數據重構為完整的XML文檔樹;索引文件針對數據文件的行信息建立索引,使數據存取可以直接定位到特定行,無須對整個文件進行讀寫,加快數據庫的訪問速度。
基于平面文件的存儲方式的優點是簡單小巧,可以很容易被其他文本編輯工具(如記事本、寫字板等)構建和維護,同時可根據應用環境變換的需要使用不用編程語言用標準的DOM或SAX技術訪問;其缺點是還缺乏成熟的安全保護措施,索引結構的維護比較困難,不提供完整的數據鎖、災難恢復等機制,不適合大型的Web應用。
3 基于平面文件的NativeXML數據庫的存儲粒度
XML文檔是一棵由各種節點組成的樹,包括元素節點(element node)、屬性節點(attribute node)和文本節點(text node)等。在存儲XML文檔樹時,根據存儲的是整個XML文檔還是某個子樹甚至只包含一個節點,可以有三種存儲粒度:
a)粗粒度存儲。整個XML文檔作為一個完整的邏輯單元來存取,是一種基于文檔的存儲策略。這種存儲粒度是最簡單的,優點是方便存儲和檢索整個文檔,提供完全的往返存取支持,適合比較小的XML文檔;其缺點是所有數據保存在同一個平面文件中,在文件比較大時存取時間較長,且難以維護。
b)細粒度存儲。將XML文檔的每一個結構單元(元素、屬性、CDATA等)單獨存儲,由文件目錄結構實現結構單元之間的層次關系,是一種基于元素的存儲策略。這種存儲方案具備了最大的靈活性,每一個結構單元均能夠被獨立地訪問、修改和刪除,并且基本不影響其他文檔結構;其缺點是除了存儲文檔本身的數據外還要維護大量的物理指針和邏輯指針,占用了較多的存儲空間,并且重組生成原文檔很耗時,不完全支持往返存取特性。
c)中粒度存儲。它是細粒度和粗粒度存儲的一個折中,即把XML文檔分割成片段(子樹)再存儲,是一種基于子樹的存儲策略。中粒度方案在存儲和檢索XML文檔方面比細粒度方案要好,對資源的占用也比粗粒度方案小。實現中粒度存儲的關鍵問題是如何合理地確定XML文檔的分割點,一般有兩種方法:(a)根據物理塊大小,使子樹的大小與物理塊大小相近;(b)根據邏輯意義劃分子樹,使子樹成為一個比較完整的邏輯單位。
在設計基于平面文件的NativeXML數據庫時,確定哪些信息由文件目錄結構獲取,哪些信息由XML文檔獲取,即決定XML數據的存儲粒度是一個在實際應用中必須解決的問題。
4基于平面文件的NativeXML數據庫在Web應用中的存儲策略
目前互聯網上的各種動態頁面技術普遍使用傳統的關系型數據庫(如MySQL、Access、SQL server等)存儲數據,而把XML文檔作為數據交換標準使用。然而近年來XML已經迅速發展成為新一代的Web設計語言,可以直接通過XSLT(extensible stylesheet language transformation)樣式表或網頁編程語言(如PHP、JSP等)將XML文檔數據輸出到頁面。如果在基于XML的Web應用中仍然使用傳統的關系型數據庫存儲數據,僅僅把XML文檔作為數據處理的中間環節,就必然涉及到XML數據與關系型數據之間的來回轉換,增加了開發難度和系統消耗。
本文所討論的基于平面文件的NativeXML數據庫直接使用平面文件作為Web數據庫來存儲數據,數據不僅可以通過專有數據庫應用層訪問,還可以結合XSLT樣式表技術直接生成Web頁面供用戶瀏覽,簡化了系統設計,也提高了建站的靈活性。系統模型如圖2所示。
圖3是一個簡化了的Web網站結構,文章是該應用的核心,并且其數量隨著時間推移越來越多。如果采用粗粒度(基于文檔)的策略將所有數據都寫入一個平面文件,隨著該文檔體積的逐漸增加,不僅耗用的服務器資源會越來越多,而且響應時間也會越來越長,給用戶瀏覽造成不便。如果采用細粒度(基于元素)的策略建立文章、欄目、用戶等文件目錄,再將其他子結構單元如文章標題、文章作者等單獨寫入某個目錄下的平面文件,雖然任一結構單元生成的平面文件體積均不會太大,但是整體目錄的邏輯結構將越來越復雜,給后期的維護造成極大的不便。
在實際應用中采用了基于子樹的中粒度存儲策略,將用戶、廣告、欄目、文章、評論等子樹按邏輯意義分割寫入單獨的平面文件。文章子樹的存儲結構如下:
a)articles.data(數據文件)
1|1|IDC分析師仍堅信雅虎終將被微軟收購|微軟,雅虎,收購|憶苦|據國外媒體報道……|47,78
2|3|LG推出反射式LCD兩面可顯示不同內容|LG,反射式,LCD|Alright|據悉在2008 SID國際研討會上,LG介紹了一種新型反射式LCD面板……|24,37,59。
b)articles.stru(結構文件)
〈? xml version=\"1.0\" encoding=\"utf8\" ?〉
〈articles〉
〈article id=\"\"〉
〈cid /〉
〈title /〉
〈keywords /〉
〈author /〉
〈content /〉
〈commentID/〉
〈/article〉
〈/articles〉
c)articles.id.idx(文章ID索引文件)
這里以按文章ID進行索引為例,索引格式為:文章ID|起始位置|長度|是否已刪除,行結束符為Windows和DOS下的“\\r\”。
1|0|405|1
2|408|724|0
數據庫接口程序首先按照查詢條件從索引文件中取出數據的位置、長度以及其他索引信息,然后直接在數據文件中定位并讀取所需數據,再將各字段數據提取出來(本例中的字段分隔符為\"|\"),最后使用結構文件將數據格式化為標準的XML文檔:
〈? xml version=\"1.0\" encoding=\"utf8\" ?〉
〈articles〉
〈article id=\"2\"〉
〈cid〉3〈/cid〉
〈title〉LG推出反射式LCD兩面可顯示不同內容〈/title〉
〈keywords〉LG,反射式,LCD〈/keywords〉
〈author〉Alright〈/author〉
〈content〉據悉在2008 SID國際研討會上……〈/content〉
〈commentID〉24,37,59〈/commentID〉
〈/article〉
〈/articles〉
5 結束語
NativeXML數據庫的存儲策略(包括存儲模型、存儲粒度以及相關的索引結構等)從底層影響著整個數據庫系統的功能、性能和可伸縮性,對建立在該數據庫之上的Web應用系統的性能也起著舉足輕重的作用。在實際開發應用中,往往需要在整個數據庫系統的安全、速度、效率以及靈活性等多方面進行權衡和選擇。
在當前互聯網的快速發展中可以明顯地看到,眾多中小網站集體的力量提供了互聯網的大多數內容。這些中小網站大多采用租用虛擬主機的方式獲取網絡存儲空間,其主機環境千差萬別,有的提供數據庫支持(Access或MySQL等),有的不提供。如果能夠為這類網站提供一個跨平臺、跨語言,無須特定關系型數據庫支持的基于平面文件的NativeXML數據庫解決方案,滿足這類網站對輕量級、微型數據庫的需求,將極大地降低建站環境需求,提高建站的靈活性和便捷性,促進中小網站的發展。
參考文獻:
[1]BOURRET R. XML and database[EB/OL].(2005).http://www.rpbourret.com/xml.
[2] GRAVES M. XML數據庫設計[M].尹志軍,等譯.北京:機械工業出版社,2002.
[3] 盛惠娟.NativeXML數據庫存儲模型研究[D].西安:西安電子科技大學,2005.
[4] 王震江.基于XML數據庫的Web應用研究[J].計算機應用研究,2005, 22 (12):215217.
[5] 門愛華,馮建華,周立柱.XML數據庫存儲策略綜述[J].計算機科學,2005, 32 (9):1317.
[6] 李驥,陳福生.NativeXML數據庫綜述[J].計算機工程與設計,2004, 25 (6):932960.
[7] 渠本哲,王潛平.NativeXML數據庫關鍵技術綜述[J].計算機工程與設計,2007, 28 (1):2428.
[8] 馮建華,錢乾,廖雨果,等.純XML數據庫研究綜述[J].計算機應用研究,2006, 23 (6):17.