Native XML數據庫技術詳解

作者:朱亮
XML技術從誕生之日就預示了它輝煌的未來,特別是隨着近一、兩年Web Service的蓬勃發展,XML越來越多地活躍在數據交換和存儲領域。

XML數據量指數級的增長,要求更有效的數據管理能力和更快、更精確的查詢。在傳統數據庫廠商宣佈支持XML的同時,一種新的數據庫技術,Native XML DBMS(NXD)也已嶄露頭角,打破了RDBMS傳統數據庫一統天下的局面,爲數據庫技術的研究提供了一次良好的發展契機。

本文將向您介紹XML和數據庫的關係,NXD的技術特點,傳統數據庫和NXD的比較和NXD的現狀和前景。

XML和數據庫的關係


XML是數據庫嗎?

XML文檔具有"可自描述"、"無限嵌套"、"樹形結構"等特點,因此在某種意義上,一個XML文檔就是一個數據庫或其中的一張表。

下面所示的XML文檔Student.xml,描述了一個學生的信息:學號、姓名等。我們可以很方便的將其對應於傳統RDBMS中一張二維表(table):標籤student爲行,標籤id、name等作爲列。

Student.xml

<student>
<id>19803001</id>
<name>
<lastname>Johnson</lastname>
<firstname>Jack</firstname>
</name>
<email>[email protected]</email>
...
</student>


我們可以把相關的XML文檔放在一個目錄下,利用文件系統來管理,提供查詢、更改、增刪操作。爲更好地支持XML,W3C還制定了一些相關技術,如:文檔模式(DTD、XML Schema),查詢語言(XPath、XQuery等),編程接口(DOM、SAX等),來方便開發應用程序。

但如果從更高的技術角度出發,就會發現,對XML文檔簡單的文件管理是遠遠不夠的:低效拇媧⒆櫓⑺饕檠際酰惶峁┦攣瘛踩指椿疲薹ūVな蕕耐暾院鴕恢灤裕揮脅⒎⒖刂啤⒁浦補ぞ叩取?

數據庫在XML應用中的角色

事實上,XML作爲數據交換的標準,更着重於統一數據格式,而不是提供數據庫的特性。因此在XML應用中,數據庫作爲數據管理的位置依然沒有改變。

XML數據本身的樹形結構不同於關係模型中的二維表結構,這種差別反映在數據庫產品處理XML數據的技術上,形成兩大陣營:XML-Enabled DBMS(XED)和Native XML DBMS(NXD)。

XED是在原有數據庫基礎上擴展了XML支持模塊,完成XML數據和數據庫之間的格式轉換和傳輸。從存儲粒度上,可以把整個XML文檔作爲RDBMS表中一行,或把XML文檔進行解析後,存儲到相應的表格中。爲了支持W3C的一些XML操作標準,如XPath,XED提供一些新的原語(如Oracle9iR2增加了一些數據包來操作XML數據等),並優化了XML處理模塊。

NXD則出現在XML數據處理領域內,一般採用層次數據存儲模型,保持XML文檔的樹形結構,省掉了XML文檔和傳統數據庫的數據轉換過程。詳見2。

兩種文檔類型

“以數據爲中心”(data-centric)

“以數據爲中心”的XML文檔着重於文檔中的數據,而非文檔格式,如航班信息、銷售定單、科學計算結果等。這種文檔的數據一般由機器產生,來源於傳統數據庫中的數據。主要應用在電子商務、ERP、EAI等領域,集成不同數據源的數據,交換信息。

“以數據爲中心”的XML文檔具有以下特點:

· 結構化的數據

· 數據粒度大小適中

· 很少或沒有混和內容(Mixed Content)

· 文檔順序(Document-order)不重要

student.xml就是一個典型的"以數據爲中心"的XML文檔,記錄了學生的信息。每個學生的信息都很規整,而且粒度合適,同級元素(element)間的順序不重要,交換兩個同級元素(element)並不會破壞文檔的可讀性。

“以文檔爲中心”(document-centric)

"以文檔爲中心"的XML文檔主要是用來表示人類自然語言描述的數據,如電子郵件、書和用戶手冊。這種文檔具有更復雜的結構,一般不是機器自動產生的。目前,Web上的大部分數據都可以表示成這種文檔。

"以文檔爲中心"的文檔具有以下特點:

· 半結構化或非結構化的數據

· 較多的混和內容(Mixed Content)

· 文檔順序(Document-order)重要

下面的products.xml就是典型的一個"以文檔爲中心"的XML文檔。

products.xml

<Product>
   <Intro>
   The <ProductName>IPEDO Native XMLDB</ProductName> from
<Developer> Ipedo,Inc.</Developer> is <Summary>like a true native XML
Database, ...</Summary>
   </Intro>
...
</Product>


對於"以數據爲中心"的XML文檔,XED可以方便地將其中的數據抽取,存儲在傳統數據庫中,但對於 "以文檔爲中心"的XML文檔則顯得力不從心了。NXD由於無需在兩種模型之間轉換數據,因此在處理"以文檔爲中心"的XML文檔就很有優勢。

NXD的技術特點


NXD是專門爲存儲XML文檔設計,也兼有一般數據庫的特性,例如支持事務,併發控制,查詢語言,安全機制,二次開發接口等。唯一的不同之處在於其內部存儲模型是基於XML文檔樹形結構,而非關係模型。

Ronald Bourret在其"XML and Databases"一文中,對NXD有如下定義:

“NXD的邏輯模型建立在XML文檔,而非文檔中的數據之上,並根據它來存取數據。該模型至少包括元素(element)、屬性(Attribute)、PCDATA和文檔順序,例如XPath的數據模型……NXD的最小存儲單位是XML文檔,……”

一般認爲,NXD應該具有以下幾個特性:文檔集合(Document Collection),查詢、更新,事務、鎖和併發控制、二次開發接口等。

文檔集合

很多NXD產品都支持“文檔集合”的概念,就像文件系統中的一個目錄或RDBMS中的一張表,一個“文檔集合”把一類文檔聚集在一起,方便用戶操作。集合級別上的查詢、修改操作都會反映到集合內的每個文檔。

一般說來,一個“文檔集合”關聯一種模式。將文檔加入到有模式的"文檔集合"時,會對要加入的文檔進行模式檢查。只有符合"文檔集合"模式的文檔纔可以加入。

不同於RDBMS中表必須具有模式,NXD還提供"無模式"的文檔集合,即將一個文檔放入該集合中時,不必檢查該文檔的模式。"無模式"的文檔集合大大方便了用戶存儲格式很難統一,半結構化的XML文檔。

查詢語言

XPath和XQuery是W3C推薦的針對XML文檔的查詢語言。目前大部分NXD產品都支持XPath,。另外還有一些NXD提供專有的查詢語言。

XPath是基於XML文檔樹形模型,給出從某個結點起的查詢路徑,搜索文檔。目前,XPath作爲數據庫查詢語言還有不少缺陷:不能分組、排序、連接等。

而XQuery更像一種編程語言,支持循環等邏輯,支持分組、排序、連接等。相對於傳統數據庫的標準SQL語句, XQuery在對XML數據的查詢方面,是一種功能更強大、更易於編程的方法。

事務、鎖和併發控制

幾乎所有的NXD都支持事務處理。但是,鎖的粒度通常比較大,對整個文檔的而不是對文檔片斷(Fragment)的,所以多用戶併發性的支持相對較低。具體的併發程度取決於應用程序以及"文檔"的構成。

二次開發接口

幾乎所有NXD都提供編程接口:提供數據庫連接、瀏覽元數據、執行查詢和返回結果的方法。返回結果通常是XML字符串、DOM樹、返回文檔的SAX解析器。如果查詢返回結果是多個文檔或文檔片斷(Fragment)的話,通常都會提供枚舉這些結果的方法。對於以Client/Server模式運行的數據庫產品,還可以將結果通過網絡協議(如HTTP)回傳給客戶端。

Round-tripping

NXD一個重要特性是它爲XML文檔提供了Round-tripping:可以將XML文檔存放在NXD中,而且再取回"同樣的"文檔。對於以"文檔爲中心"的應用程序來說非常重要,因爲易被XED忽略的CDATA部分、實體應用、註釋和處理指令是這些文檔不可缺少的組成部分。特別是對於法律和醫學領域中格式不允許隨意竄改的數據文檔。

所有NXD都能夠在元素(element)、屬性(Attribute)、CDATA和文件順序的級別上爲文檔提供Round-tripping,能達到的具體程度取決於數據庫產品。


更新和可持久化的DOM

大多數NXD對XML文檔的更新是通過其提供的API調用完成的,或者簡單的替換整個文檔來實現的。某些NXD還提供了可持久化的DOM(Persistent DOM,PDOM):在某種持久性存儲介質上實現了DOM模型,對PDOM所作的改變直接反映在數據庫中。由於PDOM樹是"現場"的,數據庫通常和應用程序在同一個進程空間。

傳統數據庫與NXD的比較


XED依靠傳統數據庫技術二三十年的積累,在與NXD競爭的前期,佔據了XML應用市場的很大份額:在Intellor公司2001年3月份的調查報告中,XED的市場份額將近是NXD的3倍,約12億美元。NXD雖然出場較晚,但市場份額增長速度卻非常強勁,在短短的3年中,已經由1999年的2,300萬美元發展到2001年的3.9億美元,並在今後兩年內將保持200%的增長率。目前,NXD主要應用在製造業、生物醫藥、電信等領域。

通過對比XED和NXD技術,我們可以更清楚地看到二者的差別,特別是反映到應用領域。這一點對那些需要選擇數據庫開發XML應用的用戶非常有意義。

XED存取XML數據的技術特點

XED中這部分工作是由XML網關模塊完成,它處於用戶邏輯模塊和數據庫邏輯模塊之間,將傳統數據庫包裝起來,給用戶提供了一個透明的XML數據源。

XED存取XML文檔面臨以下幾個技術難點:

XML文檔模式和XED模式的映射爲了把XML文檔存到XED中,我們必須將XML文檔的模式(DTD或XML Schema)映射到數據庫模式。同樣,將數據從XED取出來重新組合成XML文檔,要完成相反的操作。這種轉化發生在元素(element),屬性(attribute)和文本(text)上。由於XED注重的是數據而非格式,所以在這個過程中,XML文檔的大部分物理結構(CDATA、實體等)和一部分邏輯結構(處理指令、註釋等)都被忽略,而數據被保存。這種轉換可能會丟失信息,一個XML文檔存到XED裏後再取出來,可能會變成另外一種格式。相對於NXD提供的Round-tripping,XED只能在數據層面實現信息的保留。

對XML數據的查詢支持

由於XML文檔模式和XED模式很難保持一致,所以在存取過程中經常用XSLT完成轉換。但XSLT非常耗時,這會對查詢性能造成很大影響。所以較好的解決方法是XED提供一種查詢語言來返回XML文檔。

目前已經有很多XED產品提供了這種語言,主要分三類:

基於模板(Template-Based)的查詢

這是目前RDBMS XED最流行的方法,將SQL語句嵌入到已寫好的XML文檔模板中,在實際查詢時候用結果替換。

基於SQL(SQL-Based)的查詢

通過在SQL語句的實現中增加對XML的支持,完成對XML數據的查詢。例如Oracle9iR2中,增加了XMLTYPE類型和一些新的函數包以支持XMLDB。

XML查詢

包括XPath和XQuery。與上面兩種不同,這種查詢是建立在XML文檔模型上。也就是說,如果XED要支持這種查詢方式,必須提供虛擬的XML文檔。基本上目前的XED只支持XPath。

數據類型、空值,字符集等

在XML文檔和XED的轉換過程中,還會遇到數據類型的匹配、空值和字符集處理等問題。

XML文檔中除了不被解析的一些實體外,所有數據的類型都以文本(text)來表示。在轉換過程中,可能會遇到類型不匹配的問題,諸如受到JDBC驅動模塊的限制、日期的不同國際化表示。

XML文檔以靈活的方式來支持空值,如省略某個元素(element)、零長度的元素(element)和屬性(Attribute)等。而這些在XED中則有不同的意義。

同樣問題還出現在字符集、二進制數據、對XML文檔標籤的處理上。

XED和NXD的比較

- XED的優、劣勢

優勢:

用戶不需要將傳統數據庫中原有數據重新移植到新系統中,只是稍加改變,就可以支持XML應用。

傳統數據庫技術,例如併發控制、事務等,已經很成熟

傳統數據庫知識和經驗依然有效,用戶不需要爲了應用XML而再去學習一套新的數據庫技術

劣勢:

XML文檔存入到數據庫時需要將其"打碎",取出時需要"組合",不僅耗時,而且文檔的格式可能會不同

XML文檔和數據庫之間的模式轉換複雜,在前期開發階段需要投入很大

對"以文檔爲中心"、格式複雜的XML文檔處理性能較差

在採納XML技術標準方面較落後

- NXD的優、劣勢

優勢:

XML文檔存取無需模式轉換,存取速度快

對格式複雜的XML文檔支持比XED要好

支持大部分的最新的XML技術標準

劣勢:

在傳統數據庫技術方面比較薄弱,沒有經過時間的考驗

知識比較新,相應的支持人員和文檔資源都比較少

應用範圍僅侷限在XML應用領域中

事實上,兩者的優劣並沒有統一的答案,而是和具體的應用相關。在開發格式較簡單、數據內容比格式更重要的應用時,XED是不錯的選擇,特別是在已有的傳統數據庫上要提供XML的訪問接口的情況下。相反,如果XML文檔格式複雜,數據本身就有層次性關係,或是隻有XML數據的時候,就可以考慮NXD,因爲它提供更好的性能,對XML標準有更完備的支持。另外,由於NXD在事務、數據恢復等傳統數據庫技術方面還未得到時間的檢驗,因此對數據安全要求較高的一些應用,如銀行、金融系統的數據庫,建立在傳統數據庫上的XED相對來說更有優勢。

NXD的現狀和前景


在3、4年前IT業界還在爲應該選用NXD還是傳統數據庫爭的不可開交時候,就已經有一些公司悄悄地投入到NXD的開發中。到今天,已有了十多種NXD產品。IBM,Microsoft和Oracle等傳統數據庫廠商,也正在踏入NXD的領域。

但走在NXD隊伍前面的卻是一些"小"公司。PC Magazine在2002年6月份,針對市場上的4種主流產品做了詳細評測,包括性能、安全、易用性和對新技術的支持等。這4種產品是eXcelon的Extensible Information Server 3.1,Ipedo的Ipedo XML Database 3.0,NeoCore的NeoCore XMS 2.0和Software AG的Tamino XML Server 3.1,其中Ipedo XML Database 3.0以滿分5分獲"Editor Choice"獎。下面我們以Ipedo XML Database 3.0(IXD3)爲例,窺探一下NXD技術的現狀。

IXD3支持

· 事務、併發控制,提供可靠的數據恢復機制

· 支持XPath和XQuery兩種查詢和In-memory的高速索引

· 基於圖形和命令行的用戶界面,並提供了各種工具,如導入/導出,備份等

· 支持XML文檔的多版本控制

· 支持DOM、SOAP、COM、EJB和Java API多種數據庫訪問協議和開發接口

· 多種平臺:Windows,Linux和Solaris;

在去年7月份發佈的IXD3.1版本中,還提供基於ACL的安全控制、WEB_DAV等新功能,並集成了內容管理模塊,爲基於Web Service等新技術的應用提供了一整套解決方案。詳細介紹請參閱[2]。

可見,NXD發展到今天,技術已經日趨成熟,不僅提供傳統數據庫絕大部分功能,而且支持XML的最新技術標準,非常方便XML開發人員進行開發。最近在對Ipdeo XMLDB3.1、Tarmino3.0和Oracle9iR2內嵌的XMLDB的測試過程中,筆者發現NXD在開發XML應用方面不僅開發速度快,而且提供了更爲豐富的API接口。

同時我們也應該看到,NXD技術發展時間相對傳統數據庫來說還很短,技術基礎還不是很牢固。在某些XML應用方面,NXD並不具有比XED很明顯的優勢,特別是在對數據安全要求很高的數據庫應用領域。

但NXD在處理XML數據時擁有傳統數據庫所不能比擬的天生優勢,已促使越來越多的目光聚焦到它上面。隨着時間的推移,相信NXD也會得到檢驗。面對未來幾年巨大的市場份額,以及它每年200%的增長速度,我們沒有理由不爲它的前景看好。

參考資料:

關於XML數據庫的資料:http://www.rpbourret.com/xml/XMLDBLinks.htm

Oracle XML數據庫的資料:http://www.oracle.com/ip/index.html?xmldb_intro.html

Ipedo數據庫的介紹:http://www.ipedo.com 或 http://www.ipedo.com.cn

關於作者

朱亮,現任Ipedo中國(上海)研發中心高級軟件工程師,從事IPEDO Native XML數據庫的開發。對數據庫、XML、WebService等技術有較深研究,可以通過[email protected]與他聯繫。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章