許多年以來在數據庫技術領域很少有重大的技術創(chuàng)新能夠引起人們對整個數據庫發(fā)展歷程的回顧與反思。2006年DB2 9中推出的pureXML技術,對過去數十年來關系型數據庫的最基本的數據組織方式進行了重大的創(chuàng)新,第一次讓我們對數據庫的歷史,以及過去支撐其發(fā)展壯大的理論基礎和外部挑戰(zhàn)從新的角度進行審視。
今天我們很少去回顧數據庫的歷史,對于絕大多數IT技術人員,數據庫等同于關系型數據庫,數據則和表緊密聯(lián)系。E-R模型幾乎是我們描述世界的唯一方式,SQL語言是數據庫信息訪問處理的唯一手段。關系型數據庫已經成為了一種宗教式的信仰,數據相關的所有理論問題似乎都已經解決。
然而歷史的發(fā)展總是在我們不經意間產生轉折,所有重大技術的產生及發(fā)展都有其生存的土壤。40年前數據庫的誕生并不是關系型數據庫,第一代的數據庫第一次實現(xiàn)了數據管理與應用邏輯的分離,采用層次結構來描述數據,是層次型數據庫(IMS)。第二代數據庫奠基于上世紀70年代E.F Codd博士提出的關系型理論以及SQL語言的發(fā)明。實現(xiàn)了數據建模和數據操作處理的標準化,關系型數據庫在其后的20多年的時間取得了長足的發(fā)展,得到了廣泛的應用。技術的演進主要集中在性能、擴展性和安全性等方面的提升,其基本的理論框架和技術理念并沒有大的變化。
與之相反,在過去的20多年里,IT產業(yè)發(fā)生了重大的變化和一系列技術及理念的創(chuàng)新。數據庫所生存的外部土壤隨著Internet以及在網絡環(huán)境下IT系統(tǒng)互聯(lián)互通相互協(xié)作的趨勢,對信息管理技術提出了新的挑戰(zhàn)。概括而言,有以下難以回避的重要問題:
今天信息的復雜性與關系型數據庫理論產生的時代已不可同日而語,信息的結構日益復雜,隨著個性化服務等需求增長,信息的多樣性和差異性都大大增加了,而關系型理論在管理信息復雜性方面的不足日益明顯。
E-R模型本質上是一個二維的模型,通過一系列二維關系的組合來描述復雜實體對象,每個表所代表的所有實體在建模設計時沒有差異性,即使只有一個實體擁有某種屬性,也必須為其建立一個字段。因而在很多系統(tǒng)中,我們經常可以看到一張表有數百個字段,而對于每條記錄,大多數字段都是空的。
如果這種個體間的差異性不是僅僅表現(xiàn)在屬性上,而且涉及結構和關系,則需要為有差異的實體建立不同的表和對應關系。因而今天的許多業(yè)務系統(tǒng)往往需要幾千張表,甚至數萬張表。數據庫的結構變得十分復雜,數據庫中的信息變得難以理解。
從某種意義上而言,今天業(yè)務系統(tǒng)數據庫的信息是業(yè)務系統(tǒng)運行的副產物。數據庫是為支撐特定業(yè)務應用的運行而設計,數據庫中的數據也只被單一系統(tǒng)使用,所以很少考慮這些信息是否易于理解。然而,今天越來越多的系統(tǒng)需要相互協(xié)作、共享信息。信息的可讀性、能否易于理解變得日益重要。關系型數據庫在此方面存在較大不足,表中的數據不能自我描述,表與表之間的關系在數據中不能直接清晰地體現(xiàn)。從而使很多系統(tǒng)即使開放表結構,其他應用依然難以理解數據的關系和含義。
隨著IT系統(tǒng)進入社會生活的各個方面,信息不僅日益復雜,而且其需求內容和結構隨著時間的推移也不斷地產生變化.現(xiàn)實世界要求信息技術具有越來越高的靈活性和適應性.關系型數據理論所采用的是一種固定的建模方式,任何關系和屬性一旦定義,就是固定的,難以隨著需求的變化進行靈活的調整。
XML作為一種數據格式在上世紀90年代中期出現(xiàn),一開始其主要目的是應用于系統(tǒng)間數據的交換。為便于數據交換,其設計包含了幾個主要的特點,首先是采用自描述的標簽式數據描述方式,數據本身描述自己的含義,從而使數據的可讀性大大提高,十分易于人或程序理解。
另外,XML采用層次型(樹型)的方式組織數據,通過層次關系體現(xiàn)出數據與數據之間的關系。層次模型能夠比較清晰地描述復雜對象,并易于擴展。經過近10年的發(fā)展,XML已經成為數據交換的事實標準,國際上形成了很多行業(yè)性的XML技術標準,對信息技術產生很大的影響。
雖然XML設計之初主要應用于數據交換,但這種新型的數據組織方式卻在應對信息的復雜性、可理解性和靈活性的挑戰(zhàn)方面開啟了新的道路,迎合了技術發(fā)展的方向和潮流。同時XML也模糊了傳統(tǒng)上結構化數據和非結構化數據的嚴格分界線,對20余年來關系型數據庫理論基礎產生沖擊。人們反思數據究竟應該是關系的還是層次化的,是單一的表格關系還是多樣化的對象?
與此同時,在過去10余年中,另外一個重要的技術也對IT產生了重要的影響,這就是面向對象的技術。
面向對象技術鼓勵設計者使用對象(而不是表)來思考數據,在面向對象的設計思想中,數據也是以對象的形式存在,層次結構是對數據對象最直接、最自然的體現(xiàn)。
而關系型數據庫的理論與面向對象的思想并不匹配,E-R模型中沒有對象的概念,在關系型數據庫中實現(xiàn)對象的嵌套、對象的多樣性很不直觀,需要很大的代價。在關系理論中,數據應該被組織成規(guī)范的表——也就是數據應該按唯一的方式組織,使得程序員能夠消除冗余,確保數據變化的一致性。這種設計技術的引入確保了關系表中的數據是一組獨立的、通過鍵來關聯(lián)數據。這種技術來自集合論的數學理論,但問題是集合論不能表達數據之間所有的關系和結構。
以規(guī)范的方式存儲數據常常要求程序員在存入數據庫之前分解對象,并且重新組織數據——就像在車庫中存儲車時,你把它的門、椅子、輪子等等分別卸下來存放。這不僅消耗資源,而且沒有任何意義。
今天在應用領域,軟件開發(fā)已經廣泛采用了面向對象的設計思想和技術。而面向對象的數據庫技術卻遲遲未被市場接受。對象數據庫出現(xiàn)時,關系型數據庫供應商已經積聚了巨大的動力,并占領了大量市場份額。在標準的SQL接口下,訪問關系型數據庫的面向對象程序很容易寫。相反,多數早期的對象數據完全不提供SQL接口,不適合任何查詢應用程序。
XML技術的出現(xiàn),以及相關國際標準的制定(如Xquery, SQL/XML)為數據庫引入面向對象的技術提供了新的動力。現(xiàn)實外部世界的技術挑戰(zhàn),XML、面向對象技術與標準的成熟為新一代數據庫的創(chuàng)新提供了條件。那么未來會是怎樣呢?迎接新的技術變革我們準備好了嗎?
今天,關系數據庫推動各種規(guī)模的公司發(fā)展業(yè)務。盡管這些數據庫是受歡迎而且重要的,但從長遠來看,它們根本無法與用 XML 表示的半結構化(和分層)內容相比。我們無法忽略過去20年來業(yè)界在關系型數據庫上的巨大投入(企業(yè)在關系數據和關系數據庫管理系統(tǒng) (RDBMS) 方面的投資高達萬億美元)。
因此,簡單地將 RDBMS 替換成純 XML 存儲的做法并不可取,但我們更無法回避新技術的潮流和巨大價值。世界既可以是關系的,也可以是層次的,兩種技術各自有其優(yōu)勢和局限性,因而容納關系型和層次型兩類模型的混合數據庫就成為數據庫發(fā)展的必然選擇。
ibm 的新一代數據庫 DB2 9中第一次實現(xiàn)了關系型引擎與層次型引擎的結合,實現(xiàn)了混合數據庫。IBM將此技術稱為pureXML技術。
關系型數據庫很早就已經開始考慮對XML的支持,但傳統(tǒng)的技術一般還是基于關系型數據庫的基本框架,用表之間的關系去模擬XML的層次結構.僅僅是對關系型數據的一些功能性增強,而非真正去適應XML所代表的層次型結構和面向對象的數據處理方法,因而難以發(fā)揮XML的靈活性、擴展性等方面的優(yōu)勢,大大限制了XML技術在數據庫的應用.
關系數據庫中的第一代 XML 支持是切分(或分解)文檔以適應關系表格,或將文檔原封不動地存儲為字符或二進制大對象(CLOB 或 BLOB)。這兩個方法中的任一種,都嘗試將 XML 模型強制轉換成關系模型。以大對象保存XML數據的方式,使得數據庫無法理解XML中的信息內容,每次對XML中任何信息的訪問都必須將整個文檔取出,然后再分解獲得相應的信息內容,效率和靈活性都存在極大的限制.
如果采用將XML文檔中的數據項都拆分到很多個對應的關系型表中的方式,首先失去了XML靈活性的優(yōu)勢。由于XML的數據項與關系型表中字段的對應是固定的,所以XML的擴展和變化必然要求數據庫中對應表的結構改變;另外數據對象拆分后,已經不再有物理上對象的概念,同樣在功能和性能上都有很大的局限性。
與過去關系型數據庫的XML增強功能不同,pureXML技術第一次真正意義上提供了一種與XML層次型結構相匹配的層次型存儲方式和相對應的操作訪問方式。
在pureXML中,XML 作為一種新的數據類型。幾乎每個 DB2 組件、工具和實用程序都已得到增強,以識別和處理這種新數據類型。新的存儲模式以解析后的注釋樹形式(類似于 XML 文檔對象模型 (DOM))保留 XML,它與關系數據存儲分開。
在兩種數據存儲(關系和 XML)的頂部是一個混合型數據庫引擎。該引擎可以處理 XQuery、Xpath、SQL和 SQL/XML。該引擎采用帶有 SQL 和 XQuery 解析程序的雙語查詢編譯器。因此,開發(fā)人員可以根據具體情況,使用相應的語言(或同時使用這兩種語言)。使用混合型 DB2 ,您可以根據信息管理的需要來靈活地選擇數據的存儲組織模式和訪問方法,實現(xiàn)二者之間靈活的轉換。
在數據庫管理系統(tǒng)中存儲關系和 XML 數據可提供靈活性和一貫快速的性能,因為數據庫管理系統(tǒng)在每一個級別(從客戶端到引擎,再到磁盤)都了解和支持這兩種模式。XML 數據繼承了 DB2 為關系數據提供的相同的備份與恢復、優(yōu)化、可伸縮性和高可用性。最終,統(tǒng)一的 XML/關系數據庫通過避免對分開存儲的 XML 數據和關系數據進行集成,簡化了業(yè)務過程。
關系數據庫中的第一代 XML 支持是切分(或分解)文檔,以適應關系表格或將文檔原封不動地存儲為字符或二進制大對象(CLOB 或 BLOB)。這兩個方法中的任一種都嘗試將 XML 模型強制轉換成關系模型。然而,這兩種方法在功能和性能上都有很大的局限性?;旌闲湍P蛯?XML 存儲在類似于 DOM 的模型中。XML 數據被格式化為緩沖數據頁,以便快速導航和執(zhí)行查詢以及簡化索引編制。
pureXML在以下領域具有顯著優(yōu)勢:
存儲:pureXML 技術將以“節(jié)點級”(而非“文檔級”)粒度存儲 XML。在數據庫中,物理存儲層的主要存儲單元是節(jié)點。每一頁中都存在一個節(jié)點,而其它的節(jié)點則來自相同或不同的文檔。每個節(jié)點不僅連結其父節(jié)點,還連結其子節(jié)點。因此,瀏覽到某個節(jié)點的父項、同級項或子項的效率都非常高,只要下一個引用的節(jié)點在同一頁,其遍歷速度將比指針的遍歷速度還要快,無需重寫整個文檔即可增加或減少節(jié)點,或者將節(jié)點重新部署到其它頁。
索引機制:管理著數百萬的 XML 文檔的 XML 應用程序并不罕見,因此要提供高查詢性能就要為大量的 XML 數據編制索引。DB2 支持在 XML 列上建立路徑特定的索引,因此元素和屬性常用作謂詞,且可以編制跨文檔連接的索引。
新的 XML 值索引可有效評估XML 模式表達式,從而提高 XML 文檔的查詢性能。與傳統(tǒng)的關系索引相比較,在關系索引中,索引鍵由用戶指定一個或多個表格列組成,而 XML 值索引則使用特定的 XML 模式表達式(XPath 的子集,XPath 不包含謂詞等等)來編制路徑和 XML 文檔(存儲在一個 XML 列中)中的值的索引。如果值不是在文檔中指定的,則該索引還可以在插入時通過模式來填充默認的屬性和元素值。
創(chuàng)建索引時,您可以指定要編制索引的路徑和索引類型??梢跃幹婆c存儲在該列中的 XML 文檔中的路徑表達式以及路徑表達式集匹配的任何節(jié)點的索引,而且該索引可以直接指向存儲中的節(jié)點(它與其父節(jié)點和子節(jié)點連接以便于快速瀏覽)。索引條目并不是提供訪問文檔開頭的索引,而是包含實際文檔節(jié)點的位置信息。因此,該索引可以快速直接訪問文檔中的節(jié)點,并避免文檔遍歷。
查詢:XQuery,即查詢 XML 數據的一種新語言,用于處理不同的模式,包含諸如序列(而非 SQL 中的集)、多嵌套序列和稀疏屬性。XQuery 還可以支持不同種類的模式以及動態(tài)的結構更改。
IBM 實施不包含獨立的 XQuery 或 XPath 處理程序?;镜?XQuery 和 XPath 直接嵌入到查詢引擎中。該查詢編譯器自身是雙語的,帶有兩個可互操作的查詢語言解析程序 — 一個用于 SQL,另一個用于 XQuery — 以產生查詢圖表模型(用于處理關系和 XML 數據)的新變量。因為中間的查詢表達法是中性語言,XQuery、SQL 以及 XQuery 與 SQL的組合將編譯成同樣的中間表達法,經過同樣的重寫和轉化,以類似的方式優(yōu)化并產生類似的可執(zhí)行代碼。無論使用什么語言來指定查詢設計,此過程都將產生最優(yōu)的互操作查詢設計。
因為這兩個解析程序可以相互操作,所以您可以在同一語句中混合使用 SQL 和 XQuery,從而使搜索功能更強大:在 XML 文檔中進行查詢并從 SQL 返回其片斷。
pureXML技術及混合型數據庫的出現(xiàn),超越了關系型數據庫固有的局限性,為數據庫的應用及開發(fā)開辟了新的領域。其意義不僅僅是提供了一種存儲XML數據的更有效的方式,可用于使用XML數據的各類領域;同時,由于pureXML所代表的層次型數據組織方式,使得我們有了關系型和層次型兩種數據建模的方法,即使是對于傳統(tǒng)非XML的關系型數據,在某些情況下將傳統(tǒng)關系型的數據轉化為層次型存儲也將帶來巨大的業(yè)務價值。
從對現(xiàn)有XML數據管理的應用看,pureXML技術的價值是非常明顯的。如在書籍出版領域,W3C已經制定了各類數據的規(guī)范,今天很多這個領域的數據就是以XML的形式存在。但是如何提供有效的存儲方式,以及準確高效的數據查詢方式卻始終是對關系型數據庫的一個挑戰(zhàn)。
以圖書為例,任何書籍的信息有部分結構化的成分,但是書籍內容的差異性太大,很難用一種統(tǒng)一的結構化的體系進行描述。另一方面,基于各類書籍文章的結構,提供精確的信息查詢和搜索具有重要的應用價值。傳統(tǒng)關系型數據庫很難對書籍XML數據建模,更難以提供準確的查詢和搜索。往往只能用全文檢索的模式提供一些簡單的功能。而采用pureXML技術,任何書籍的XML信息可以直接存儲在數據庫中,無需復雜建模。由于XML的自描述能力,一旦數據以XML對象存儲,就可以提供精確的查詢和搜索。舉個簡單例子,對于一本300頁的書,全文檢索只能返回其中是否有你查詢的內容,無法準確定位在哪一章、哪一節(jié)、哪一頁,其實用性很弱。而通過pureXML的Xquery進行查詢,可以準確定位到最細的粒度,而且可對指定范圍進行搜索。
在廣泛使用XML的信息交換領域,pureXML 能夠很大程度上降低數據模型設計的復雜性。無需將XML每個數據項的信息都映射到關系型表的字段上,減少了很多不必要的加工處理過程。另外,XML所具有的擴展性和靈活性的優(yōu)勢可得到充分的發(fā)揮。數據層的存儲模式不再與數據交換本身的內容是緊密耦合的關系?;趐ureXML可設計相對通用的數據交換的存儲模式,而且可以方便地適應數據標準的調整和變化。這一點在很多監(jiān)管類報表信息收集(如XBRL)上有重要的應用價值。
即使對于不涉及任何XML數據的應用,pureXML所代表的層次型數據結構和面向對象的設計方式,也可對關系型數據庫的設計方式提供重要的補充。比如對于復雜對象的結構的建模,層次型的模型比關系型有明顯的優(yōu)勢。以電子病歷為例,下面為關系型建模的樣例:
如果采用層次型的數據存儲方式,則相對簡單、直接。
在關系型的模型中對象與對象之間的嵌套關系比較難于描述,不對數據內在的順序關系進行維護,只能通過增加附加的屬性通過數據值進行管理。實體之間的差異性需要通過不同的表,這樣對于同類信息,也可能要建立很多不同的表。
在同一個表中,如果每條記錄的屬性差異性很大,則需要通枚舉的方式將各種可能出現(xiàn)的屬性都建成表上的字段。如果采用pureXML技術則可大大方便對這類信息的管理。
以上僅是pureXML應用的簡單示例,隨著XML的標準在各個行業(yè)更為廣泛深入地應用,以及Web 2.0等新興技術領域的發(fā)展,我們相信這類技術將越來越多地應用到各類系統(tǒng)中。
數據庫的歷史經歷了40年的歷程,每一種技術都是隨挑戰(zhàn)應運而生。層次型數據庫和關系型數據庫在此過程中都曾為其發(fā)展起到重要的作用,而技術的發(fā)展在一次次潮流的循環(huán)往復中得到升華。為適應今天及未來的業(yè)務挑戰(zhàn),由層次模型與傳統(tǒng)的關系型模型結合的混合數據庫技術,為數據庫的發(fā)展開辟了新的方向。IBM所推出的DB2 pureXML技術僅僅是新的變革的開始,正如關系型數據庫曾經為IT產業(yè)的發(fā)展做出了舉足輕重的貢獻,我們有理由對pureXML所代表的新一代混合數據庫技術充滿期待!