XML數據庫探討
發表時間:2024-02-05 來源:明輝站整理相關軟件相關文章人氣:
[摘要]存儲 在資源庫中存儲信息很簡單。如果希望存儲的信息已經是 XML 格式,那么可以直接把它添加進資源庫。這也許聽起來不錯。畢竟在不斷創新的 Web 服務世界中,將要到來的多數信息將使用嵌入在 SOAP 消息中的 XML 片段格式。然而,把 XML 文檔分解并保存到關系數據庫一點也不困難;當開始查看希...
存儲
在資源庫中存儲信息很簡單。如果希望存儲的信息已經是 XML 格式,那么可以直接把它添加進資源庫。這也許聽起來不錯。畢竟在不斷創新的 Web 服務世界中,將要到來的多數信息將使用嵌入在 SOAP 消息中的 XML 片段格式。然而,把 XML 文檔分解并保存到關系數據庫一點也不困難;當開始查看希望支持的其它功能時,這種作法會有一些好處。同樣許多本 Native-XML 數據庫供應商所鼓吹的一個好處是 Native-XML 數據庫能夠存儲和查詢異種的文檔結構。再說,對于結構化數據問題在于:您真的希望信息的結構千變萬化嗎?對于使用 XML 文檔時具有的這種優勢,當使用結構化數據時就算不上是一種優勢了。
檢索
初看上去,從 Native-XML 數據庫檢索信息似乎也是一個好處:以信息的原始 XML 格式檢索它,而不需任何附加的編碼,并且可以使信息以一定的樣式顯示。然而,結構化數據檢索的性質使得這種明顯的優勢實際上變成了劣勢。如果信息更新量巨大(例如,接收單個數兆字節大小 XML 文檔的股票系統的夜間更新),一些 Native-XML 平臺需要從數據庫返回整個文檔 — 即使您只對文檔的很小一部分感興趣(譬如某個特定股票的變化過程)。 其它 Native-XML 平臺在將 XML 文檔保存到資源庫之前進行分解,但是如果具有復雜的文檔結構(正如許多結構化 XML 文檔傾向于具有這種結構)時,這樣做就顯得有點笨拙。無論如何,許多關系數據庫供應商目前正在實現瘦 XML 序列化器包裝器以便支持在需要時從關系數據生成XML 文檔。這使得程序員可以容易地獲得完成特定任務所恰好需要的信息,這些信息具有某種格式,這種格式具有所需樣式、或者可以發送給其它能識別 XML 的目標。
搜索
搜索 Native-XML 數據庫有兩種常規解決方法可用,選取哪種取決于數據庫供應商。一些 Native-XML 數據庫需要選擇哪些元素或屬性用于索引,如同在關系數據庫里選擇哪些列用于索引。然后,這個信息被用于建立索引,以便搜索機制能用來快速定位相匹配的文檔。在文檔被添加到資源庫時,其它 Native-XML 數據庫就是對文檔內的所有信息建索引,可以想象這將導致存儲空間需求飛速上升(想象一下在關系數據庫中對所有列建索引!)。由于這些數據庫以文檔為中心的性質,搜索將返回一組 XML 文檔;然后如有必要,調用程序還得對這些文檔做進一步處理。 很遺憾的是,這意味著更復雜的搜索,是很不方便的。例如,要找出那個對某一特定部分提交最高訂單的顧客,以為在中間環節要處理很多事情。在指向關系方面 Native-XML 數據庫做的也不好。結果是,如果數據結構不是純粹層次結構的,則對您而言,Native-XML 數據庫就不是恰當的解決方案。大多數 Native-XML 數據庫具有這一功效強大的特性 — 執行完善的全文搜索的能力,包括整個同義字支持、字根(匹配一個字的所有形式:現在時、過去時和進行時)以及相近搜索(DTD NEAR XML Schema)。此外,在使用傳統文檔時,這些特性是不可缺少的,其中上下文在含意上起著重要的作用,而當使用結構化數據時,就遠沒有那么重要了。
聚合
使用關系數據工作時,聚合是所需要的最重要功能之一,事實上它處于聯機分析處理的核心(OLAP)。Native-XML 數據庫在執行聚合任務方面表現得特別差。因為信息要么被保持在文檔這一層,要么一般被分割成節點,所以把信息匯集起來以及集中處理它(求和、平均數等等)就很困難,此外,還必須在中間環節增加附加代碼。如果結構化數據應用程序需要任何一種分析處理 — 我打賭它會需要 — Native-XML 數據庫將會使您失望。
相關主題在前面已經發了兩篇文章了。雖然也有不少人閱讀(心中竊喜),卻罕有評論。甚感遺憾。不管是西紅柿還是臭雞蛋,我都喜歡。很多東西,都是越辨越明的。下面接著寫我的一些想法(研究成果說不上,就當想法吧):
據我分析,現有的native-XML數據庫,又過分強調了對XML文檔的處理,而忽視了數據庫本身的作用:對客觀事物的描述和存儲。所以在處理傳統的關系型數據庫所涉及的業務領域,并沒有顯示出多大的優勢,反而會有這樣或者那樣的不足。
針對以上的敘述,計劃中的XMLDB應該首要實現一下目標(彌補普通數據庫的不足和解決一般native-XML數據庫的不足):
基于描述的數據庫設計,不同于一般數據庫的基于數據的數據庫設計,或者NXD數據庫基于文檔的的數據庫設計,新的XMLDB,將是基于描述的數據庫設計,即,基于對客觀事物的描述,充分發揮XML文檔在事物描述上的優勢,以接近自然語言的方式來存儲事物。
增加版本的概念。能夠讓不同版本的數據文件協同工作。
數據分布式存儲和強大的聚合能力。最小的儲存單位不是XML 儲存單元,而是XML DB fragment,可以把同一個表的內容以不同的方式存貯在不同的物理位置,同時對用戶透明,利用轉換器和聚合器,對用戶來說還是一個完整的XMLDBData對象。
基于多線程的數據檢索能力,能夠比較迅速的找到所需要的數據內容。利用多線程,可以對一個表的多個XMLDB fragment同時進行檢索,然后通過聚合器,聚合成一個完整的XMLDBData對象,實現數據的快速檢索。
支持基于XML的查詢語言(XQuery?maybe yes,maybe no)。先實現一個獨有的,基于XML的查詢方式。在這個基礎上,通過轉化器,可以同時提供對XQuery,甚至SQL語言的支持
支持傳統數據庫里一些基本的概念和功能,比如數據同步,鎖的操作,以及事務的操作。這些都是數據庫里面一些很經典也很重要的概念,是一個完整的數據庫所不可缺少的一部分,應該支持和實現。
提供完備的Adapter機制,支持對傳統SQL語言操作方式的支持。
提供用戶自定義函數功能。先實現用戶使用Java語言自定義函數,技術成熟后,提供腳本語言的支持。
提供多種連接方式和安全解決方案。提供https,Soap等多種網絡連接方式,并且數據庫本身是一個開放的接口,可以加載不同的安全解決方案。
提供豐富的連接和調試工具(屬于可選目標,除了命令行調試工具外,其他的將不包括在核心組件中)