開源Xml數(shù)據(jù)庫(kù)評(píng)測(cè)
一、 xml數(shù)據(jù)庫(kù)的概念及分類
Xml雖然已出現(xiàn)很多年,但在前些年通常只被做為數(shù)據(jù)交換文件來(lái)使用,或作為軟件配置文件,較深層次的應(yīng)用較少。隨著xml數(shù)據(jù)使用的越來(lái)越多,迫切需要一種能夠直接處理xml數(shù)據(jù)的數(shù)據(jù)庫(kù)來(lái)管理這些結(jié)構(gòu)或半結(jié)構(gòu)化的數(shù)據(jù)。之前處理xml數(shù)據(jù)都是在作為文本存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中。由于xml數(shù)據(jù)格式是層次關(guān)系,而且同類文件格式也可能不同,用關(guān)系數(shù)據(jù)庫(kù)很難表示,更嚴(yán)重的是使用關(guān)系數(shù)據(jù)庫(kù)保存xml數(shù)據(jù)無(wú)法對(duì)xml數(shù)據(jù)中結(jié)點(diǎn)進(jìn)行檢索。使用新型存儲(chǔ)格式及檢索方式已是必然。隨著處理xml文件的一些方法被定義為標(biāo)準(zhǔn),例如XPath、XQuery等。Xml數(shù)據(jù)庫(kù)的應(yīng)用才越來(lái)越廣泛了。
Xml數(shù)據(jù)庫(kù)即使用xml文件作為數(shù)據(jù)存儲(chǔ)格式的數(shù)據(jù)庫(kù)。根據(jù)數(shù)據(jù)庫(kù)實(shí)現(xiàn)模式,xml數(shù)據(jù)庫(kù)分為:
1、可以使用xml文件的數(shù)據(jù)庫(kù)(Enable-XML Database):數(shù)據(jù)庫(kù)內(nèi)部含有處理xml數(shù)據(jù)的模塊,可以和xml數(shù)據(jù)文件交換數(shù)據(jù),即實(shí)現(xiàn)了xml數(shù)據(jù)的讀取,寫入,刪除,更新等操作,但數(shù)據(jù)庫(kù)本身并不是為xml數(shù)據(jù)設(shè)計(jì)的。
當(dāng)前比較流行的數(shù)據(jù)庫(kù)oracle,Ms SQL Sever,IBM DB2,Ms Access等都屬Enable-XML Database類型。目前大部分關(guān)系數(shù)據(jù)庫(kù)都支持xml數(shù)據(jù)。關(guān)于Enable-XML Dabase數(shù)據(jù)庫(kù)產(chǎn)品,可以參考“XML Database Products_ XML-Enabled Databases.pdf”文檔。
此類數(shù)據(jù)由于底層實(shí)現(xiàn)模塊中并不是專為xml數(shù)據(jù)設(shè)計(jì),所以在使用xml文件數(shù)據(jù)時(shí)必須通過(guò)使用類似ODBC、JDBC等接口程序進(jìn)行數(shù)據(jù)交換。接口程序把xml數(shù)據(jù)讀入數(shù)據(jù)庫(kù)并轉(zhuǎn)換成數(shù)據(jù)庫(kù)可以識(shí)別的數(shù)據(jù)格式后才能操作數(shù)據(jù),操作完的數(shù)據(jù)在通過(guò)接口程序轉(zhuǎn)換成xml數(shù)據(jù)格式,這使得執(zhí)行效率大幅降低。
2、純xml數(shù)據(jù)庫(kù)(Native-XML Database):滿足一下3個(gè)條件的就是純xml數(shù)據(jù)庫(kù):
1)、為xml文檔定義了一個(gè)邏輯模型,xml數(shù)據(jù)的存儲(chǔ)和查詢都基于這個(gè)模型。這個(gè)模型至少要包含元素、屬性以及PCDATA等,并保持文檔順序。
2)、將xml文檔作為邏輯存儲(chǔ)的基本單位,正如關(guān)系數(shù)據(jù)庫(kù)將行作為存儲(chǔ)的基本單位一樣。
3)、不要求只能使用某一特定的底層物理模型或某種專有的存儲(chǔ)格式。
數(shù)據(jù)以純xml文件格式保存,存儲(chǔ)在數(shù)據(jù)庫(kù)中的內(nèi)容與原xml文件格式可以保持一致,數(shù)據(jù)庫(kù)引擎直接操作xml數(shù)據(jù)文件,并通過(guò)XPath或XQuery檢索數(shù)據(jù)。相對(duì)于Enable-XML Database數(shù)據(jù)庫(kù),由于省去了數(shù)據(jù)轉(zhuǎn)換過(guò)程,在處理xml數(shù)據(jù)時(shí)相對(duì)效率較高。
目前純xml數(shù)據(jù)庫(kù)產(chǎn)品或單獨(dú)的xml數(shù)據(jù)庫(kù)引擎也有許多,較有代表性的產(chǎn)品有dbXml、Berkeley DB XML等。有代表性的xml數(shù)據(jù)庫(kù)引擎有eXist、Xindice等,本次所作的所有的分析與測(cè)試都是基于eXist與Xindice數(shù)據(jù)庫(kù)引擎。關(guān)于目前Native-XML Database數(shù)據(jù)庫(kù)產(chǎn)品的介紹可以參考“XML Database Products_ Native XML Databases.pdf”文件。
純Xml數(shù)據(jù)庫(kù)由于可以保持原xml文件的物理格式不變,并且可以按照原格式檢索,所以有時(shí)候純xml數(shù)據(jù)庫(kù)也被稱作原生態(tài)數(shù)據(jù)庫(kù)。如果當(dāng)前有許多xml文件但文件又格式不盡相同的話,使用xml數(shù)據(jù)庫(kù)是個(gè)不錯(cuò)的選擇,通過(guò)數(shù)據(jù)庫(kù)來(lái)管理這些xml文件。利用XPath和XQuery也能夠更方便的查找數(shù)據(jù)。但是由于目前用于xml數(shù)據(jù)庫(kù)的一些操作沒有明確的標(biāo)準(zhǔn)導(dǎo)致xml數(shù)據(jù)庫(kù)的引擎各有不同。
二、 純xml數(shù)據(jù)庫(kù)的優(yōu)缺點(diǎn)
純Xml數(shù)據(jù)庫(kù)應(yīng)用還不是很廣泛,這一點(diǎn)我們從目前市場(chǎng)上的主要數(shù)據(jù)庫(kù)產(chǎn)品就可以看出來(lái)。大型數(shù)據(jù)庫(kù)沒有使用純xml數(shù)據(jù)庫(kù)的。至少在上面提到的產(chǎn)品列表文件中沒有見到大型數(shù)據(jù)庫(kù)的身影。但是這也并不代表xml數(shù)據(jù)庫(kù)沒有優(yōu)勢(shì)。下面將對(duì)純xml數(shù)據(jù)庫(kù)和關(guān)系數(shù)據(jù)庫(kù)做個(gè)比較。
優(yōu)點(diǎn):
1、可以直接操作xml文件,對(duì)于處理大量xml文件,純xml數(shù)據(jù)庫(kù)有著先天的優(yōu)勢(shì):不必轉(zhuǎn)換數(shù)據(jù)。這樣就減少了系統(tǒng)資源消耗。普通的關(guān)系數(shù)據(jù)庫(kù)在處理xml數(shù)據(jù)時(shí)必須通過(guò)xml接口處理程序來(lái)轉(zhuǎn)換數(shù)據(jù)。這方面xml數(shù)據(jù)庫(kù)的處理效率明顯高于關(guān)系數(shù)據(jù)庫(kù)。
2、存儲(chǔ)在xml數(shù)據(jù)庫(kù)中文件可以保持原文件的物理格式不變。由于xml文件是自描述的,即文件內(nèi)部不僅包含了數(shù)據(jù)還包含了對(duì)這些數(shù)據(jù)的描述信息。比如數(shù)據(jù)結(jié)構(gòu)和類型。如果數(shù)據(jù)描述信息較多,關(guān)系數(shù)據(jù)庫(kù)就顯得力不從心了。
3、原生檢索方式,這時(shí)純xml數(shù)據(jù)庫(kù)獨(dú)有的特點(diǎn),即純xml數(shù)據(jù)庫(kù)允許用戶使用對(duì)未作任何格式轉(zhuǎn)變的數(shù)據(jù)直接檢索。這就使得同一檢索式可以同時(shí)檢索不同格式xml文件。原生檢索方式對(duì)于擁有大量不同格式的xml文件的用戶來(lái)說(shuō)是最好的檢索方式。
4、以分層的樹形結(jié)構(gòu)描述數(shù)據(jù),能夠檢索各個(gè)結(jié)點(diǎn)。
缺點(diǎn):
1、數(shù)據(jù)冗余度高,由于xml文件中帶有大量非數(shù)據(jù)的內(nèi)容,也許這些內(nèi)容比數(shù)據(jù)本身還要多,不僅占用大量的磁盤空間,還會(huì)給操作文件帶來(lái)困難。假如你需要在一個(gè)1GB的文件中間頻繁插入或刪除數(shù)據(jù)。
2、檢索效率低下,如果數(shù)據(jù)訪問(wèn)速度不高,檢索就可想而知了。前面提到的檢索效率高是指在xml數(shù)據(jù)庫(kù)中和關(guān)系數(shù)據(jù)庫(kù)中都只處理xml數(shù)據(jù)時(shí)。但相對(duì)于關(guān)系數(shù)據(jù)庫(kù)中的普通數(shù)據(jù)來(lái)說(shuō)。純xml數(shù)據(jù)庫(kù)還遠(yuǎn)達(dá)不到這樣的高效。這也是妨礙純xml數(shù)據(jù)廣泛應(yīng)用的的主要缺陷。曾有人使用eXist作過(guò)一些測(cè)試,測(cè)試過(guò)程中,如果在1GB大小的xml文件檢索一個(gè)數(shù)據(jù),所消耗的時(shí)間大概是煮一杯咖啡的時(shí)間。
3、純xml數(shù)據(jù)庫(kù)的XQuery語(yǔ)言標(biāo)準(zhǔn)不完善,現(xiàn)在XQuery語(yǔ)言的中不支持插入、刪除、更新操作,即使是部分xml數(shù)據(jù)庫(kù)廠家提供了類似功能,也不能得到廣泛的應(yīng)用,因?yàn)闆]有標(biāo)準(zhǔn)。它不能夠像SQL那樣功能強(qiáng)大。也由于這個(gè)缺陷給開發(fā)基于xml數(shù)據(jù)庫(kù)的應(yīng)用程序帶來(lái)更多風(fēng)險(xiǎn),只能針對(duì)某種數(shù)據(jù)庫(kù)開發(fā),而且許多本應(yīng)由XQuery本身提供的功能,比如插入、刪除、更新功能不得不由應(yīng)用程序開發(fā)人員開發(fā)。
三、 本次測(cè)試中所使用的純xml數(shù)據(jù)庫(kù)介紹
本次測(cè)試中所使用的純xml數(shù)據(jù)庫(kù)有兩個(gè),分別是eXist 1.0版和Xindice 1.1B4版,都是目前最高版本。關(guān)于它們?nèi)绾伟惭b使用請(qǐng)參考文檔“eXist數(shù)據(jù)庫(kù).doc”和“Xindice數(shù)據(jù)庫(kù).doc”。這里只對(duì)最后測(cè)試結(jié)果作一簡(jiǎn)單的介紹。
| eXist | Xindice |
安裝方便程度 | 方便 | 一般 |
使用方便程度 | 方便 | 一般 |
程序穩(wěn)定性 | 不穩(wěn)定 | 不穩(wěn)定 |
在 | 少于1秒 | 堆棧溢出 |
| 索引前20秒,索引后3秒 | 堆棧溢出 |
| 堆棧溢出 | 堆棧溢出 |
| 堆棧溢出 | 堆棧溢出 |
| 堆棧溢出 | 堆棧溢出 |
| 堆棧溢出 | 堆棧溢出 |
| 堆棧溢出 | 堆棧溢出 |
| | |
測(cè)試總結(jié):
這兩個(gè)數(shù)據(jù)庫(kù)引擎非常不穩(wěn)定,而且性能不好。
四、 選擇純xml數(shù)據(jù)庫(kù)還是關(guān)系數(shù)據(jù)庫(kù)?
這是一個(gè)比較重要的問(wèn)題,雖然它們都是數(shù)據(jù)庫(kù),但是除了數(shù)據(jù)庫(kù)本身有許多不同之外,在使用上也是大不相同。在項(xiàng)目中使用哪種數(shù)據(jù)庫(kù)還需要慎重考慮,根據(jù)上面的數(shù)據(jù)庫(kù)的對(duì)比分析,大體可以總結(jié)一下在何種情況下使用哪種數(shù)據(jù)庫(kù):
1、 如果當(dāng)前有許多xml文件,并且xml文件的格式不統(tǒng)一或者用表格的方法難以表示,那么這時(shí)最好選用純xml數(shù)據(jù)庫(kù)。
2、 如果在以后的工作中會(huì)產(chǎn)生大量格式或半格式的xml文件,那么選用純xml數(shù)據(jù)庫(kù)較合適。
3、 如果經(jīng)常使用xml文件作為數(shù)據(jù)交換格式,則選擇純xml數(shù)據(jù)庫(kù)較好。
4、 如果你的數(shù)據(jù)之間有較多的關(guān)聯(lián),就最好選用關(guān)系數(shù)據(jù)庫(kù)。純xml數(shù)據(jù)庫(kù)只能表示簡(jiǎn)單的數(shù)據(jù)關(guān)系。
5、 如果對(duì)數(shù)據(jù)庫(kù)的性能要求較高的話,最好使用關(guān)系數(shù)據(jù)庫(kù),關(guān)系數(shù)據(jù)庫(kù)已發(fā)展成熟,而純xml數(shù)據(jù)庫(kù)目前發(fā)展還不完善,比如,插入,刪除、更新操作還未有標(biāo)準(zhǔn)。
聯(lián)系客服