專(zhuān)欄作家 Kevin Williams 從正反兩面討論了使用 Native-XML 數據庫存儲結構化信息。他概述了使用結構化數據的常見(jiàn)需求,并討論了 Native-XML 數據庫在滿(mǎn)足這些需求方面做的如何。
該專(zhuān)欄文章討論了所謂的 Native-XML 數據庫。我經(jīng)常聽(tīng)到的關(guān)于 XML 數據的問(wèn)題之一是“我們真的需要 Native-XML 數據庫嗎?”在這篇專(zhuān)欄文章里,我的任務(wù)是分析何時(shí)把結構化數據存儲到這些專(zhuān)門(mén)的數據庫里是有意義的。
到底什么是 Native-XML 數據庫?
毫無(wú)特別,Native-XML 數據庫是以 XML 格式存儲信息的數據庫。同樣,這些數據庫創(chuàng )建一些索引,并將這些索引與 XML 文檔一起存到資源庫中,以支持快速搜索資源庫來(lái)查找包特定信息的文檔。就在作者寫(xiě)本文的同時(shí),有數家公司在競爭這一市場(chǎng),其中包括 Ixiasoft(它們的產(chǎn)品是 TextML)、Software AG(Tamino)以及 XYZFind。但是這時(shí)還不能拋棄關(guān)系數據庫!讓我們看看這些工具的長(cháng)處和短處。
結構化數據資源庫應該做什么?
當使用結構化數據工作時(shí),(粗略地講)需要執行四種不同功能:向資源庫添加結構化信息、從資源庫檢索信息、在資源庫中搜索信息以及從資源庫聚合信息。在這些功能方面,Native-XML 數據庫做的怎么樣呢?
用于數據的 Native-XML 數據庫?
|
存儲
在資源庫中存儲信息很簡(jiǎn)單。如果希望存儲的信息已經(jīng)是 XML 格式,那么可以直接把它添加進(jìn)資源庫。這也許聽(tīng)起來(lái)不錯。畢竟在不斷創(chuàng )新的 Web 服務(wù)世界中,將要到來(lái)的多數信息將使用嵌入在 SOAP 消息中的 XML 片段格式。然而,把 XML 文檔分解并保存到關(guān)系數據庫一點(diǎn)也不困難;當開(kāi)始查看希望支持的其它功能時(shí),這種作法會(huì )有一些好處。同樣許多本 Native-XML 數據庫供應商所鼓吹的一個(gè)好處是 Native-XML 數據庫能夠存儲和查詢(xún)異種的文檔結構。再說(shuō),對于結構化數據問(wèn)題在于:您真的希望信息的結構千變萬(wàn)化嗎?對于使用 XML 文檔時(shí)具有的這種優(yōu)勢,當使用結構化數據時(shí)就算不上是一種優(yōu)勢了。
檢索
初看上去,從 Native-XML 數據庫檢索信息似乎也是一個(gè)好處:以信息的原始 XML 格式檢索它,而不需任何附加的編碼,并且可以使信息以一定的樣式顯示。然而,結構化數據檢索的性質(zhì)使得這種明顯的優(yōu)勢實(shí)際上變成了劣勢。如果信息更新量巨大(例如,接收單個(gè)數兆字節大小 XML 文檔的股票系統的夜間更新),一些 Native-XML 平臺需要從數據庫返回整個(gè)文檔 ― 即使您只對文檔的很小一部分感興趣(譬如某個(gè)特定股票的變化過(guò)程)。 其它 Native-XML 平臺在將 XML 文檔保存到資源庫之前進(jìn)行分解,但是如果具有復雜的文檔結構(正如許多結構化 XML 文檔傾向于具有這種結構)時(shí),這樣做就顯得有點(diǎn)笨拙。無(wú)論如何,許多關(guān)系數據庫供應商目前正在實(shí)現瘦 XML 序列化器包裝器以便支持在需要時(shí)從關(guān)系數據生成 XML 文檔。這使得程序員可以容易地獲得完成特定任務(wù)所恰好需要的信息,這些信息具有某種格式,這種格式具有所需樣式、或者可以發(fā)送給其它能識別 XML 的目標。
搜索
搜索 Native-XML 數據庫有兩種常規解決方法可用,選取哪種取決于數據庫供應商。一些 Native-XML 數據庫需要選擇哪些元素或屬性用于索引,如同在關(guān)系數據庫里選擇哪些列用于索引。然后,這個(gè)信息被用于建立索引,以便搜索機制能用來(lái)快速定位相匹配的文檔。在文檔被添加到資源庫時(shí),其它 Native-XML 數據庫就是對文檔內的所有信息建索引,可以想象這將導致存儲空間需求飛速上升(想象一下在關(guān)系數據庫中對所有列建索引?。?。由于這些數據庫以文檔為中心的性質(zhì),搜索將返回一組 XML 文檔;然后如有必要,調用程序還得對這些文檔做進(jìn)一步處理。 很遺憾的是,這意味著(zhù)更復雜的搜索,是很不方便的。例如,要找出那個(gè)對某一特定部分提交最高訂單的顧客,以為在中間環(huán)節要處理很多事情。在指向關(guān)系方面 Native-XML 數據庫做的也不好。結果是,如果數據結構不是純粹層次結構的,則對您而言,Native-XML 數據庫就不是恰當的解決方案。大多數 Native-XML 數據庫具有這一功效強大的特性 ― 執行完善的全文搜索的能力,包括整個(gè)同義字支持、字根(匹配一個(gè)字的所有形式:現在時(shí)、過(guò)去時(shí)和進(jìn)行時(shí))以及相近搜索(DTD NEAR XML Schema)。此外,在使用傳統文檔時(shí),這些特性是不可缺少的,其中上下文在含意上起著(zhù)重要的作用,而當使用結構化數據時(shí),就遠沒(méi)有那么重要了。
聚合
使用關(guān)系數據工作時(shí),聚合是所需要的最重要功能之一,事實(shí)上它處于聯(lián)機分析處理的核心(OLAP)。Native-XML 數據庫在執行聚合任務(wù)方面表現得特別差。因為信息要么被保持在文檔這一層,要么一般被分割成節點(diǎn),所以把信息匯集起來(lái)以及集中處理它(求和、平均數等等)就很困難,此外,還必須在中間環(huán)節增加附加代碼。如果結構化數據應用程序需要任何一種分析處理 ― 我打賭它會(huì )需要 ― Native-XML 數據庫將會(huì )使您失望。
結束語(yǔ)
該專(zhuān)欄文章對 Native-XML 數據庫及其能力評價(jià)不高。盡管那些數據庫在觀(guān)念上很適合面向文檔信息(非結構化或半結構化的數據)管理,但對于結構化數據的使用,它們沒(méi)有什么意義。如果需要結構化信息作為 XML 來(lái)訪(fǎng)問(wèn),則利用關(guān)系數據庫供應商所提供的 XML 支持,這樣情況會(huì )好一些。
| 關(guān)于作者 Kevin Williams 是 Equient(Veridian 專(zhuān)門(mén)從事信息管理系統的 XML 設計的一個(gè)部門(mén))的首席 XML 設計師。他還與他人合著(zhù)了幾本關(guān)于 XML 的書(shū)籍(由 Wrox Press 出版)。在他的網(wǎng)站 www.realworldxml.com上時(shí)不時(shí)地可以找到一些 XML 想法、技巧、竅門(mén)和極自負的激昂演說(shuō)?,F在這些已經(jīng)完成了百分之十左右!您可以通過(guò) kevin@realworldxml.com與他聯(lián)系。 |
聯(lián)系客服