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>jack@ipedo.com</email> ... </student> |
我們可以把相關的XML文檔放在一個目錄下,利用文件系統來管理,提供查詢、更改、增刪操作。為更好地支持XML,W
但如果從更高的技術角度出發,就會發現,對XML文檔簡單的文件管理是遠遠不夠的:低效拇媧⒆櫓⑺饕檠際酰惶峁┦攣瘛踩指椿疲薹ūVな蕕耐暾院鴕恢灤裕揮脅⒎⒖刂啤⒁浦補ぞ叩取?
數據庫在XML應用中的角色
事實上,XML作為數據交換的標準,更著重于統一數據格式,而不是提供數據庫的特性。因此在XML應用中,數據庫作為數據管理的位置依然沒有改變。
XML數據本身的樹形結構不同于關系模型中的二維表結構,這種差別反映在數據庫產品處理XML數據的技術上,形成兩大陣營:XML-Enabled DBMS(XED)和Native XML DBMS(NXD)。
XED是在原有數據庫基礎上擴展了XML支持模塊,完成XML數據和數據庫之間的格式轉換和傳輸。從存儲粒度上,可以把整個XML文檔作為RDBMS表中一行,或把XML文檔進行解析后,存儲到相應的表格中。為了支持W
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是W
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等技術有較深研究,可以通過leon@ipedo.com與他聯系。
posted on 2009-08-18 21:16 肥仔 閱讀(936) 評論(0) 編輯 收藏 引用 所屬分類: 數據庫