如何有效地存儲 XML、管理 XML 和提高 XML 的處理效率一直是束縛 XML 企業級應用的基礎性難題。DB2 V9 首次有效地解決了上述三個基礎性難題。IBM 將這一在信息管理領域有著裡程碑式意義的技術稱為“DB2 pureXML”。本文將和讀者一起來探討:在應用了 DB2 v9 pureXML技術,排除了XML應用的基礎性技術障礙之後,我們可以用XML來為企業應用做哪些事情?
DB2 V9 解決了 XML 的存儲、管理和高效處理問題
我相信,XML 對於多數讀者來說已經是一個耳熟能詳的術語了。由於XML具有自我描述性(易理解性)、靈活性、平台無關性和標准化等優點,因此,許多 IT 精英和組織都在探索如何將 XML 這一“基因”優秀的技術廣泛應用到企業各個領域。
要讓 XML 在企業級層面廣泛應用的第一個問題就是技術規范和標准。1998 年 2 月,W3C 正式發布了有關 XML 的規范,並一直不斷地完善其標准。到目前為止,XML 的技術規范和標准方面應該說是相當成熟了。
然而,XML 廣泛應用於企業應用還有一些一直困擾著 IT 人的基礎問題:如何有效地存儲 XML?如何更好地管理 XML?如何提高 XML 的信息處理效率,包括查詢、部分更新等等? 這些基礎問題不解決,XML 在企業應用中就“無法落地”,或者至少說是“無法令人滿意地進行落地管理”。例如,XML 在前些年已經廣泛應用於數據交換領域,從此,IT 系統與系統之間就有了“公共語言”。然而,人們一直沒有找到一種方式,將這些“公共語言”進行高效率地原生態存儲和管理,就像原始人有了語言以後長期沒有找到能夠原生態記錄和管理語言的方式——“文字”。
人類是充滿智慧的,IT 人更是如此。原始人在沒有發明文字的時候,采用了“結繩記事”等等簡陋的或是間接的方法來記錄和管理人與人之間交流的語言。而 IT 人在過去幾年裡,也嘗試用了一些簡陋的或是間接的方式來存儲和管理 XML,簡單歸納如下:
傳統方式1:將 XML 簡單地保存在文件系統中。這種方式可以說是非常簡陋的,基本上沒有管理性和效率可言。XML 文件數量不多的情況還勉強可以接受,到了一定規模的企業應用就是難以忍受了。我親眼目睹了一家公司的應用將數千個 XML 文檔放在一個文件夾中,然後通過 Java 應用進行信息查詢、更新和刪除。其效率、應用維護的復雜度、權限管理等等方面幾乎可以用“慘不忍睹”來形容。
傳統方式2:將 XML 存入關系數據庫(DBMS)的大對象字段中。實際上,這種方式只不過是將“傳統方式1”中 XML 存儲的位置從簡單的文件系統挪到數據庫大字段中而已,並沒有實質性地提高 XML 的可管理性和可操作性。而且不僅如此,我們知道,管理大對象並非 DBMS 的強項。例如在多數 DBMS 中,大對象是不能夠像一般結構化數據那樣進入數據庫內存緩沖池的,因此,效率上大打折扣。
傳統方式3:將 XML 分解到關系數據庫的多張關系型表中。如果 XML 文檔本身比較簡單還好,如果稍微復雜一點,則可能一個 XML 文檔就要映射到好幾張關系表,而如果不幸的,XML 的格式經常要發生一些變化的話,那這個映射關系維護起來就更復雜了。這是問題之一。其二,這種方式會讓 XML 文檔本身的完整性蕩然無存,對於一些需要保證 XML 文檔完整性的應用就非常不合適。其三,這種分解的方式會耗費數據庫服務器的大量 CPU 和內存資源,有可能使數據庫系統面臨系統資源不足的風險。
傳統方式4:將XML存放到XML-Only的數據庫中。這種特殊的XML-Only的數據庫大大提升了XML的可管理性和可操作性。然而將這類非主流的、尚未經過業界驗證的數據庫應用到企業系統中,未免讓人心驚膽戰。其次,這種XML-Only的數據庫基本上不支持關系型數據,而二十幾年的關系型數據歷史讓關系數據庫已經滲入到企業應用的各個方面,因此這種XML-Only數據庫在保護投資方面也是倍受批評的。
DB2 V9 的推出開辟了 XML 存儲和管理的新天地。在存儲方面,DB2 V9 將 XML 進行高效地原生態的存儲,在應用訪問方面,支持 SQL 和 XML 兩種訪問方式。不僅如此,所有關系型的操作方式和數據庫工具都可用於 XML 之上,例如索引機制、導入導出、關聯查詢、高速批量加載、系統優化等等。IBM 將這一技術稱之為“pureXML”。有了 pureXML 技術,XML 在關系數據庫中再也不是“二等公民”了。DB2 V9 成為一個既支持關系數據,又原生態支持 XML 的名副其實的雙引擎數據庫。
圖 1. DB2 V9 中的“雙引擎”處理方式
那麼,在應用了 DB2 V9 pureXML 技術,排除了 XML 應用的基礎性技術障礙之後,我們可以用 XML 來為企業應用做哪些事情?事實上,我無法,也無意將 pureXML 在企業中的應用價值進行窮舉。下文只是將我到目前為止所能夠看到應用領域做一些小結。真正的目的在於拋磚引玉,引發讀者對 DB2 pureXML 的價值進行不斷探索。
應用領域之一:信息交換和共享
XML 最先被應用的企業領域是信息交換和信息共享。由於普遍意識到 XML 的優點,許多行業開始制定本行業的基於 XML 的數據交換和信息共享標准。例如:ACORD(保險業 XML 標准)、FIXML(基於 XML 的金融信息交換協議)、FPML(金融產品 XML)、HL7(醫療衛生 XML 標准)、IXRetail(零售行業 XML 標准)、XBRL(業務報告和會計 XML)、NewsML(新聞和發行 XML)……當然,信息交換和共享並非因為 XML 才出現的,然而有了 XML,企業與企業之間或者企業內部的 IT 系統之間的信息交換和共享就更具標准化,同時具有可理解性和靈活性的特點,具有了“共同語言”。以 FIXML 為例,老的 FIX 標准是基於簡單文本的,幾乎沒有可理解性和靈活性可言;而新的 FIXML 標准由於采用了 XML,具有很好的可理解性和靈活性,如圖 2 所示:
圖 2. FIX 與 FIXML 對比
現在,有了 DB2 pureXML 技術,這些數據交換平台的能力大大增強了,這些交換的 XML 可以被 DB2 數據庫原生態地管理起來。應用可以非常便捷地將 XML 以靈活的格式送入“信息高速公路”(企業總線),或者從企業總線中獲得 XML。如圖 3 所示:
圖 3. 通過 XML 的信息集成和交換
應用領域之二:作為一種新的數據模型
為什麼需要 XML 這種新的數據描述模型呢?原因是,多年的實踐證明:純粹的關系數據庫 E-R 模型過於嚴格,結構固化,難以適應信息的復雜性、靈活性、層次性、以及個體差異。下面分別為您舉一些我所接觸到的例子。
復雜的信息
例如:醫療衛生領域中的電子病歷、在全球貿易中對中藥藥材產品的詳細描述(多達上千個屬性)、銀行的客戶資料…… 以電子病歷為例,一位住院病人的完整電子病歷信息通常包括了:既往病史、通科檢查、專科檢查、病程、醫囑、手術通知書、術前小結、術後小結、出院小結等等錯綜復雜的信息。如此復雜的信息采用傳統的關系型數據庫表來保存是相當困難的,往往需要幾十甚至幾百張表的復雜關聯,表結構設計非常復雜,難以理解,也缺乏整體性。而如果采用XML來描述則往往只需要一張或若干張表,設計簡單,結構清晰,而且維護也方便。所以,現在國內越來越多的 HIS 應用開發商正在使用 DB2 pureXML 技術在構建其電子病歷等應用。如圖 4 所示:
圖 4. 使用 XML 表示電子病歷中的信息
圖 5. XML 電子病歷信息的形式
靈活多變的信息
例如員工的聯系信息、靈活的表單信息、供應商及客戶信息等等。這類信息非常容易發生結構性的變化。例如,前些年的老系統中員工電話可能只有一個,而隨著移動電話的快速普及,員工很可能每人擁有多個聯系電話。這時修改結構化表的代價是非常高的,而如果聯系信息采用 XML 形式,則易如反掌。如下圖所示:
圖 6. 通過 XML 存儲聯系信息
層次型特征明顯的信息
例如汽車行業的物料清單信息(往往采用好幾個層級來描述一輛汽車的零部件和供應商),民航服務公司的旅客票務信息等等。此類層次性特征明顯的信息如果采用 E-R 模型來建模,則免不了就會出現若干個層級,從而經常出現許多張大表的關聯查詢,其效率往往非常低。
圖 7. 通過 XML 進行數據關聯
個體差異帶來的稀疏數據
為什麼采用關系型方式會出現稀疏數據呢?我認為其根本原因是關系型表的結構是固化的,每個個體(數據行)的字段數量都必須相同,而個體之間往往又存在較大的差異。而如果采用 XML 來描述此類信息則完全沒有這個問題。
圖 8. 使用 XML 避免冗余數據
應用領域之三:文檔管理和知識管理
發揮細粒度檢索能力以及強大的關聯能力,進行文檔管理和知識管理。
細粒度檢索能力
采用一般的全文本搜索引擎往往只能告訴用戶他/她要的信息在哪篇文檔中,而無法告訴用戶具體在那些文檔的哪個章節和段落。而一篇企業文檔(例如技術文檔、規章制度、文獻、報告等等)往往包含幾十、幾百、甚至上千頁,這對用戶而言就很不方便,因此就出現了“細粒度檢索”的需求,即能夠搜索結果不包含哪篇文檔,還要具體顯示該文檔的哪些章節和段落。而如果采用 XML 對文檔進行精細描述,並用 XQuery 進行細粒度檢索,就能夠滿足用戶的這類需求。
圖 9. 使用 XQuery 查詢 XML 信息
強大的關聯能力
在知識管理系統中,信息與信息之間的關聯是非常重要的信息。我曾經接觸過一個大型國際體育賽事的知識管理系統,該系統就非常強調信息的關聯性。比如場館信息與比賽項目信息之間就有著非常緊密地聯系,不同的比賽項目對場館有著不一樣的要求,而且它們還與票務信息緊密聯系,因為不同的比賽項目,不同的場館結構,對於 VIP 座位的定義是不一樣的。毫無疑問,采用 XML 來描述這類關聯性很強的信息是很好的選擇,因為關聯(Link)是 XML 的強項。
應用領域之四:更加靈活的表單應用
2003 年 10 月 14 日,萬維網聯盟(W3C)宣布了 XForms 1.0 標准的發行,它 是新一代基於 Web 的表單的基石。傳統的 Html 表單並沒有分離表單的“用途”(purpose)和“表現形式”(presentation);而 XForms 則不然,它將一個表單的作用和表單的表現形式分離開來。這就允許一個表單可以有更加靈活的表現形式選擇,並可以支持多種顯示設備。XForm包括三部分:模型(model)、實例數據(instance data)和用戶界面。
圖 10. 分層的信息
這些 eForm 以 XML 原生態的形式被保存在 DB2 V9 數據庫中,並無縫結合到企事業的整個業務流程中。
圖 11. 使用原生態的 XML 信息
應用領域之五:內容推送(RSS)
盡管過去一段時間裡有許多人在批評 Web 2.0 就是“一幫人在看皇帝的新裝而已”,然而,Web 2.0 這場變革已經在褒貶不一的聲音中走到了我們面前,並正在悄悄地改變我們的生活。談到 Web 2.0,大家自然而然會想到 RSS、Blog、Wiki 這類應用以及 XML 和 AJax 等技術實現。限於篇幅,本文不能展開討論 Web 2.0。在本章,我只是拋磚引玉地談一談 RSS 之一重要的 Web 2.0 應用,以及 DB2 V9 是如何能夠提高 RSS 的信息管理和應用開發效率的。
RSS(Really Simple Syndication)是站點與站點之間共享內容的一種簡易方式(也稱為“聚合內容”)。各網站(RSS Provider)提供 RSS Feed,然後由 RSS 聚合平台(Web 2.0 網站或桌面工具等),根據用戶的喜好,進行選擇性地聚合。
然後,我們就可以將這個 RSS Feed聚合到各種聚合平台中。如下圖,是我非常喜歡的“新浪點點通閱讀器”,我將 DB2 的技術支持、國內新聞、國際新聞、本地新聞以及財經地產等等站點的 RSS 聚合到這個閱讀器中,這樣一來,我每天就可以非常方便地閱讀我所關心的信息。
圖 12. RSS 閱讀器
為了能夠做到統一訂閱,RSS 具有統一的標准。事實上,RSS 是屬於 XML 的一種,它遵守 XML 1.0 規范。為了更方便地應用 RSS 樣式,RSS 提供了標准的元素以及這些元素的表現形式。
通過 DB2 V9,RSS Provider 就可以對其發布的 RSS Feed 進行更為高效的增刪改以及檢索等操作。而 RSS Reader 應用則可以利用 DB2 V9 統一管理用戶所訂閱的各個 RSS Feed。
圖 13. 將 RSS 發布為 Web services
甚至,還可以利用 DB2 V9 直接將這些 RSS Feed 發布成 Web Service,從而更方便地集成到應用中。
應用領域之六:讓用戶界面更具個性化
由於構成圖形用戶界面的各種元素(例如窗口、菜單、字菜單等等)間天生所具有的層次和嵌套關系,與 XML 文檔中元素和屬性之間的關系十分相似,使用 XML 來描述圖形用戶界面是十分自然的想法。而使用 XML 來描述用戶界面最直接的好處就是讓用戶界面更具個性化。
本章我著重談一下使用 XML 有利於軟件產品的客戶化界面定制,讓用戶界面更具更具個性化。
現在國內許多行業的 IT 應用開發商之間競爭異常非常激烈。激烈競爭的直接結果就是每一個項目的利潤空間大大縮水了。如何確保在客戶的項目預算范圍內提高利潤空間呢?很自然的一個思路就是變項目開發為產品研發。一旦產品化以後,成功地在多個客戶實施,則每個項目的成本將大大降低。
然而,每個客戶的具體需求又是千差萬別的。例如,綜合醫院的信息系統和專科醫院的信息系統差別非常大。這些需求的差別包括許多方面,例如數據模型和流程等等,但往往最大的一個差異就是用戶界面。幾乎每一個客戶都有自己企業所喜好的界面風格。
我們非常欣喜地看到國內一些有實力的開發商已經在產品化和客戶定制化這兩個方面找到一個行之有效的方法,那就是采用 XML 來描述用戶界面,而這些 XML 則采用 DB2 V9 進行高效的管理。如下圖所示,用戶登錄之後,“XML-GUI個性化加載模塊” 從 DB2 V9 中獲得用戶的個性化界面定制信息(XML),接著展現給用戶一個個性化的界面。這樣一來,同一個產品在不同的企業就可以有不同的展現界面;不僅如此,企業中不同角色、不同等級的用戶也將擁有不同的界面。而且,最終用戶還能夠對某些菜單或樣式進行自行定制。
圖 14. 個性化用戶界面加載過程
總結
DB2 V9 在對 XML 的存儲、管理和處理效率上取得革命性突破。本文列舉了可以用 DB2 V9 來為企業應用做哪些事情:
信息交換和共享;
作為一種新的數據模型:復雜的信息、靈活多變的信息、層次型特征明顯的信息、以及個體差異帶來的稀疏數據;
文檔管理和知識管理(利用 XML 的細粒度檢索能力和強大的關聯能力);
構建更加靈活的表單應用;
Web 2.0 應用(例如 RSS)
讓用戶界面更具個性化
本文的真正目的在於拋磚引玉,引發讀者對 DB2 pureXML 的價值進行不斷探索。假如您對 DB2 pureXML 的企業應用價值有新的發現,隨時歡迎您與筆者進行交流。