當 IBM 在 DB2 9 中引入 pureXML 之後兩年,這個問題可以說已經徹底解決了。當 IBM 在 2006 年推出 DB2 9 數據庫時,它的 pureXML 技術就引起了廣泛的關注。但是,人們並沒有馬上接受 “關系/XML” 混合型 DBMS 的思想。
這種思想的好處很明顯:通過把 XML 引擎和現成的 RDBMS 集成在一起,XML 數據可以輕松地合並到數據操作中,還可以對 XML 數據應用關系系統的許多數據管理特性,比如安全性和存檔。但是,這種做法的性能怎麼樣呢?考慮到對象-關系數據庫過去的性能,人們對混合型系統的性能抱著懷疑態度。
兩年之後,pureXML 的性能影響不僅停留在理論上,而且已經在真實環境中表現出來了。
希望通過 XML 獲得什麼?
在開發 pureXML 和 DB2 9 的 5 年中,IBM 深入研究了 XML 的性質(XML 具有強大的靈活性,同時也非常繁瑣),發現了需要改進的五個方面。IBM 主要關注兩個性能因素:存儲模型和查詢優化。
XML 數據由一個層次化的樹結構表示,通常包含多個層和大量節點,因此這種格式很難優化和編制索引。它還涉及某種形式的壓縮。因此,XML 查詢可能變得非常復雜。
存儲 XML 數據的一種常用方法是字符大對象(CLOB)。與二進制大對象(BLOB)一樣,CLOB 通常作為一個整體存儲,很少為編制索引或查詢優化進行預處理。另一種方法是把 XML 數據 “分解” 為關系數據的列;這種方法需要復雜的解析技術,通常使用大量存儲空間。
DB2 pureXML 把 XML 數據存儲為經過預先解析的層次化格式,這種格式反映數據的底層嵌套結構。這種格式支持編制復雜的索引,並允許對物理存儲中的數據進行壓縮。在執行查詢時,pureXML 把 XQuery 和 SQL/XML 查詢轉換為一種在多方面(跨語言、查詢重寫、優化索引和成本)經過優化的統一格式。XML 壓縮、查詢優化以及關系和 XML 處理的混合(在 DB2 9.5 中還改進了插入和更新性能)改進了數據庫的處理DB2 9 XML性能;IBM 的測試和真實項目表明,與 DB2 V8 或其他 DBMS 中的相似操作相比,速度提高了 10 到 20 倍(參見相關內容中 “成功帶來的喜悅”部分)。
更適合 XML 的模型
pureXML 的性能特點還包括其適應性。要點:XML 數據並不會取代關系數據。對於標准的金融業務,XML 數據很難超越關系數據庫,但是 RDBMS 很難處理出版物,比如整本書、雜志或期刊。如果應用程序中的數據具有復雜的層次結構,或者包含大量非結構化信息,RDBMS 也很難處理。例如,生命科學組織正在把許多常用數據由各種專有格式轉換為 XML。在某些情況下,對於難以在傳統 RDBMS 中存儲和提取的數據,XML 格式提供了優化的數據訪問路徑,這使 XML 數據庫在根本上具有顯著的性能優勢。
XML DBMS 還有一個優點:它們能夠通過 Web 服務或其他方法與 XML 應用程序直接通信。因為 XML 在因特網上使用廣泛,應用程序之間的通信也大量采用 XML 格式,所以讓整個通信鏈(應用程序 - 消息 - 數據庫)都采用 XML 格式是很有意義的。
IBM 的 pureXML 在技術方面有許多重要的創新(68 項新專利!),但是 IBM 關系/XML 模型真正的價值在於它在主流企業應用程序中表現出的性能。
XML 在真實環境中的性能
北京西城區衛生局為大約一百萬人提供服務,它把客戶清單存儲在一個大型數據庫中,其中包含敏感數據。衛生系統需要把完整的文檔(比如醫生的報告)與來自許多數據源的數據組合在一起,因此非常需要利用 XML 的靈活性。衛生局的 CIO Zhu Shu Hong 指出,“帶有 pureXML 特性的 DB2 9 不但適合核心數據庫存儲模型,也適合原始數據收集形式和數據交換”。Zhu 先生認為,XML 能夠處理復雜的個人健康記錄,這使 XML 非常適合他們;XML 提供了靈活的查詢功能,能夠對實時隨需信息進行快速響應,這對於某些醫療活動非常重要。尤其是西城區衛生局把它的大型 DB2 9 數據庫與 IBM 面向服務體系結構(SOA)結合在一起,為向應用程序提供數據的 Web 服務實現了一個 “服務總線”。
German Research Center for Competitive Sports(Das Deutsche Forschungszentrum für Leistungssport)開發了一個稱為 eActe 的應用程序,這個程序用來收集和分析關於運動科學的基本信息和應用研究信息。數據收集是這個程序中最困難的方面。這個數據庫包含的內容非常廣泛,包括監視設備生成的大量數據、掃描圖像和大量手工輸入的數據。例如,有以 9 種形式收集的 3,000 個參數,共有 63 頁。數據是通過一個專用的在線門戶或客戶機應用程序使用 Lotus Forms 軟件捕捉的,然後通過一個 IBM WebSphere Application Server 傳遞,並以關系格式和 XML 格式存儲在 IBM DB2 9 中。對於位於 Koln 的研究中心,pureXML 能夠快速捕捉復雜的運動測試結果,並以 XML 格式提交數據,其他程序很容易用這種格式進行分析。
另一個德國組織 Douglas Holding AG 使用 IBM DB2 9 和 pureXML 從 1,600 家零售商店和 800 家香料店收集數據,執行一項非常傳統的零售工作:每天整理每家商店的現金收據並為公司的數據倉庫准備結果。在這種情況下,pureXML 用來壓縮數據和決定數據結構,Douglas 發現與以前的系統相比這個系統更容易使用(參見相關內容中“成功帶來的喜悅”部分)。
這些例子都表明了一點:pureXML 數據存儲的效率、響應速度和 XML 數據的查詢靈活性都很好。
最佳實踐
IBM 為提高 XML 性能做了大量工作,尤其是應對數據量和查詢復雜性的增加;但是,與所有數據管理系統一樣,pureXML 也需要良好的設置和一些調整。關於 XML 性能調優的一些建議參見相關內容中“獲得出色的 XML 查詢DB2 9 XML性能”部分。
XML 數據庫市場在最近 10 年競爭越來越激烈了,但是 IBM 的混合方式非常先進,這使 XML 成為日常數據管理的固有組成部分。為了實現這個目標,IBM 增強了 pureXML 的功能、可靠性和性能。IBM 首先做了一些研究,然後在 DB2 9.5 中實現了許多性能改進。
盡管 XML 已經成為因特網上主要的數據語言,它是實際上的數據交換標准,而且幾乎已經成為 Web 服務和 SOA 的必有部分,但是一些 DBA(甚至整個 IT 部門)仍然對是否接受它猶豫不決。DB2 9 和 pureXML 把關系數據庫的可靠性、可伸縮性和可管理性引入了 XML 領域,同時避免了其他老式存儲方式的缺點。因此,那些對 XML 的性能持懷疑態度的 IT 人員應該轉變思想了。
相關內容
獲得出色的 XML 查詢性能
XML 應用程序通常需要很高的性能。實現良好性能的主要責任由應用程序設計人員和 DBA 承擔。在 Matthias Nicola 的 developerWorks 文章 “DB2 9 中 15 個 pureXML 性能最佳實踐” 中,他解釋了如何通過 DB2 9 的 pureXML 技術產生最好的性能。下面總結一下他的前五個提示。
理智地選擇 XML 文檔的粒度。在設計 XML 應用程序和 XML 文檔結構時,需要決定在單一 XML 文檔中包含哪些業務數據。在細粒度、中等粒度和粗粒度之間進行選擇時,需要考慮應用程序主要以哪種粒度訪問和處理數據。如果不太確定,那麼應該傾向於選用較細的粒度和較小的 XML 文檔。
使用 DMS 和更大的頁取得更好的 XML 性能。數據庫管理的表空間(DMS)可以提供比操作系統管理的表空間(SMS)更高的性能。在 DB2 9 中,在默認情況下新創建的表空間是 DMS。DMS 表空間與自動存儲一起使用可以使 DMS 容器隨需增長,而不需要人為干預。經驗法則是,為 XML 數據選擇一個不小於平均預期文檔大小的兩倍而且不超過最大值 32 KB 的頁大小。如果為關系數據和 XML 數據(或者為數據和索引)使用單一的頁大小,那麼 16KB 或 8KB 的頁對於這兩種數據類型而言可能都是較好的選擇。
使用 XML 存儲選項:內聯、壓縮或單獨的表空間。如果通過性能分析發現對於 XML 數據需要更大的頁大小,而對於關系數據或索引則需要更小的頁大小,那麼可以使用單獨的表空間。當定義一個表時,可以將 “長” 數據(大對象和 XML 數據)轉到一個具有不同頁大小的單獨的表空間中。但是應按常理來考慮。更少的緩沖區池和表空間以及更少的頁大小種類,可以產生更簡單的物理數據庫設計,從而更容易管理、維護和調優。因此,要避免引入多種頁大小,除非您知道這樣做確實可以帶來性能好處。應該使用內聯和壓縮功能來減少存儲開銷並提高 I/O 性能。
配置 DB2 以便快速地成塊插入 XML 數據。傳統的插入和日志記錄性能調優對於 XML 插入和導入仍然適用。在 DB2 9.5 中,使用裝載代替導入。如果表上需要多個 XML 索引,就應該在任何成塊插入之前定義它們。這樣的話,每個 XML 文檔只被處理一次,便可以為所有 XML 索引生成索引條目。如果在填充表之後發出多條 create index 語句,那麼 XML 列中的所有文檔將被訪問多次。
使用新的快照監視器元素檢查 XML 性能。DB2 9 為 XML 數據提供了新的緩沖區池快照監視器元素,它們與用於關系數據和索引的現有計數器相對應。由於關系數據和索引存儲在一個表空間內不同的存儲對象中,因此它們具有不同的讀和寫計數器。DB2 9 中的 pureXML 存儲為 XML 數據引入了一種新的存儲對象(稱為 XDA),它也有自己的緩沖區池計數器。
在研究了 Nicola 的性能提示之後,一定要閱讀他關於通過索引改進 XML 查詢性能的文章。
成功帶來的喜悅
DB2 9 pureXML 使香料店和零售公司 Douglas Holding 能夠更快地進行銷售數據整理和聚合。
Douglas Holding AG 公司在歐洲和美國擁有超過 1,800 家零售商店。在 2005 年,它啟動了一個稱為 Operational Data Stage 的項目,其目的是解決現金收據整理和銷售信息聚合的主要問題。使用 XML 格式獲得數據是一個重要的基礎步驟。“靈活性是我們選用 XML 的主要原因,” Andreas Birkendorf 博士(處理公司 IT 需求的 Douglas Holding 分支機構 Douglas Informatik & Service 的項目主管)說,“因為數據源的差異非常大,而且它們的格式還可能會變化,所以我們需要一種非常靈活的接口。”
這個項目在開始時使用 IBM DB2 Version 8 XML Extender,這是有效的,但是過程很復雜,難以使用。2007 年,IBM DB2 9 pureXML 的出現改變了這種狀況。DB2 9 更容易使用,尤其是在 XML 和關系結構之間進行映射方面。與使用 DB2 V8 XML Extender 時相比,性能提高了 20 倍以上。這大大減少了處理時間;盡管 Birkendorf 的團隊一度擔心如果 Douglas 決定增加數百家商店,他們就會無法承受,而現在 Birkendorf 確信 “現在我們知道我們可以應付。”
據 Birkendorf 所說,一部分DB2 9 XML性能改進並非來自物理處理速度的提高,而是由於不再需要完成某些工作。“如果格式發生細微的變化,pureXML 使我們可以更輕松地應對。實際上,有時候我們甚至不需要做手工修改;系統會處理它。”
Douglas Holding 很早就利用 pureXML 實現了 XML 模型系統,但是這個過程並非一帆風順。“具有關系數據庫背景的人員可能需要調整其思維模式,” Birkendorf 說,“我們早在 pureXML 出現之前就意識到了 XML 的價值;我們知道它正是我們所需要的。”