考查Native XML DBMS中......
本來的首選是Tamino,網(wǎng)上只能找到4.1.4.1版本的評估版,而據(jù)說現(xiàn)在的4.2.1版本較之前版做了較大的修改,但是又下載不到,加之這是一個商業(yè)軟件:(賣錢的),即使Tamino在業(yè)界名頭不小,還是決定先試用其它軟件。接下來考慮的是Apache的Xindice,一個開源的Native XML DBMS(在成本上似乎很有吸引力:)
使用過程開始頗為順利,但是當我試圖把我的20m的xml文件存入Xindice時,數(shù)據(jù)庫直接返回ERROR,沒有任何其它提示,即使把分配給jvm的內(nèi)存調(diào)整到512m,還是報錯。不解......
翻閱Xindice的文檔才發(fā)現(xiàn),原來Xindice對于大型的XML文件并沒有很好的支持,這在它的FAQ中提及了,下面特意將Xindice的FAQ草譯如下:
1, Xindice是什么?
Xindice是一個開源的原生(Native)XML數(shù)據(jù)庫。它存儲并索引壓縮的XML文檔,使可以用較小的服務器端代價來為客戶端程序提供數(shù)據(jù)。Xindice同時也提供面向XML數(shù)據(jù)的獨有功能,這些功能往往由關(guān)系型數(shù)據(jù)庫較難實現(xiàn)。
2, Xindice不是什么?
Xindice不是一個持久化的DOM實現(xiàn)。Xindice不是用來存儲和管理單個的超大文檔的,在這里,一個文檔被看作是一組迷你文檔的集合。Xindice是專門為管理大量的中小型文檔而設(shè)計的。
3, 為什么不使用關(guān)系型數(shù)據(jù)庫?
XML文檔是以樹型結(jié)構(gòu)組織的。關(guān)系型數(shù)據(jù)庫以一種扁平的,表格方式組織數(shù)據(jù),它使用關(guān)系連接來揭示數(shù)據(jù)之間的層次約束。雖然從關(guān)系數(shù)據(jù)庫將數(shù)據(jù)映射到XML中非常容易,但是很不幸,將XML中的數(shù)據(jù)映射到關(guān)系數(shù)據(jù)庫中是意想不到的復雜,而且隨意性很高,往往會帶來語義的損耗。
4, 為什么不使用一個對象數(shù)據(jù)庫?
對象數(shù)據(jù)庫和它所服務的應用是緊密耦合的,一般不被考慮用來做c/s架構(gòu)應用的數(shù)據(jù)庫。特別是,它所管理的對象往往只能被創(chuàng)建這個對象的程序語言所反串行化。當對象數(shù)據(jù)庫可以將一些類似于DOM Tree的對象圖持久化時,一個龐大的XML文件所產(chǎn)生的眾多的對象就會成為一個嚴重的性能和資源的瓶頸(While object graphs like DOM trees can be persisted in object databases, the number of objects that are produced for a large collection of XML documents can become a serious performance and resource bottleneck.)
5, 為什么不使用一個全文檢索引擎?
全文檢索引擎對于一組文檔的大范圍查詢是非常快速而有效的。在XML應用中使用全文檢索的缺點是創(chuàng)建一個逆序的索引會使你喪失文檔的上下文,它需要大量的后續(xù)處理來將正在操作的文檔節(jié)點獨立出來。Xindice提供了有效的元素和屬性值索引,此外還可以管理和返回聚合后的文檔片斷。
6, 支持什么查詢語言?
Xindice支持XPath和XUpdate。XPath是W 3C的標準XML路徑語言,是一種非常強大的從文檔集合中查詢節(jié)點集的語言。XUpdate是XML:DB Initiative的更新語言,是一種符合XPath標準定義的,具有比較靈活的更新文檔集合的能力的語言。
7, 你的XPath實現(xiàn)是否是完全兼容的?
我們所采用的XPath實現(xiàn)是Apache軟件基金的Xalan庫。Xindice提供了索引機制和查詢優(yōu)化功能以增加集合級別的XPath查詢的表現(xiàn),但是Xalan對查詢具有最終解釋權(quán)。(but Xalan ultimately has the final say in any query.)
8, 我應該使用哪一個版本的JDK?
我們推薦使用Sun的SDK for Java 1.4或者1.3。Xindice不支持SDK 1.2或更早的版本。當使用1.3的時候,注意 1.3.1在一些Linux版本上存在一些已知的問題,但是1.3.0和1.4.2應該沒有問題。
9, XML:DB API少了一些接口,我應該怎么做?
XML:DB API是XML:DB Initiative設(shè)計的,所以它的接口和類由他們預先定義。如果你有任何問題或者希望可以幫助增加定義一些XML數(shù)據(jù)庫的標準接口,請訪問http://xmldb-org.sourceforge.net
10, 我的5兆大的文件把命令行窗口崩潰了,怎么辦?
回顧一下問題2,Xindice不使為管理大型文檔設(shè)計的,相反,它是為管理中小型文檔的集合而設(shè)計的。最好的辦法是重新審視一下你的5兆大的文檔,然后決定將它分割為一系列的小文檔的集合是否是一個可以考慮的方案。如果是這樣的話,你可以將分割的文檔抽取出來,一個一個地存入Xindice集合。下面是一個非常大型的文檔:
<cars>
<car>
<make>Boyoda</make>
<model>Cordova</model>
<year>1989</year>
</car>
<car>
<make>Frod</make>
<model>Tortorus</model>
<year>1990</year>
</car>
...
</cars>
在這里把它分成一個一個的<car/>文檔而不是一個巨大的<cars/>文檔看來更為合理
11, XML解析器沖突
org/w 3c/dom/DOMException
at org.Xindice.xml.dom.NodeImpl.<clinit>(NodeImpl.java:86)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at org.apache.xerces.parsers.DOMParser.setDocumentClassNa
這是一個經(jīng)常容易碰到的錯誤,常常是由于你的CLASSPATH里面有多個版本的Xerces XML解析器造成的。在運行Xindice和其它客戶端程序之前,確保Xindice所提供的Xerces.jar被放在了CLASSPATH的最前面
12, 我的數(shù)據(jù)庫在哪里?
從Xindice1.1開始,數(shù)據(jù)庫開始運行在一個應用服務器下。數(shù)據(jù)庫的配置是在[your webapps directory]/xindice/WEB-INF/system.xml(假設(shè)你的war包已經(jīng)被容器解壓縮)
Xindice的配置默認使用“./db”作為數(shù)據(jù)庫的位置,這是相對于web應用的 /WEB-INF位置,這意味著通常數(shù)據(jù)庫位于[your webapps directory]/xindice/WEB-INF/db。
這可以通過兩種方式被改寫:編輯/WEB-INF/system.xml并設(shè)置一個絕對路徑作為”root-collection”標簽的”dbroot”屬性,或者設(shè)置”Xindice.db.home”的java屬性中”./db”的父目錄。舉例來說,通過命令行設(shè)置屬性值(-Dxindice.db.home=/var/xindice)意味著數(shù)據(jù)庫將會保存在/var/xindice/db。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=544390