2009年8月1日 星期六

DB2與關聯式資料庫的深厚淵源

DB2與關聯式資料庫的深厚淵源
http://www.ithome.com.tw/itadm/article.php?c=50930&s=5

關聯式資料庫管理系統這項技術發展已將近40年,它和IBM有很深厚的淵源,從理論、實作、產品化,到了1983年正式推出DB2第一版,這個時間點距今剛好滿25年。

從第二版開始參與該項產品研發的IBM矽谷實驗室查詢技術部DB2 z/OS資深研發經理傅毓勤表示,DB2不只是IBM的第一套關聯式資料庫產品,假如也將早期IBM奠定理論和推動實際應用的基礎等因素考慮進來,說它是業界第一套關聯式資料庫,當之無愧。

理論建構:關聯式模型
關聯式的資料模型理論是在1970年出現,由IBM研究院的E.F. Codd發表了業界第一篇關於關聯式資料庫技術的重要論文,題目為〈A Relational Model of Data for Large Shared Data Banks〉。

Codd認為,將來如果在共享的環境下,需要管理大量資料,關聯式模型(Relational Model)是最強大的一種構想。當時這僅止為一個研究方向,必須要發展、實現出一些基礎的技術,因此IBM繼續在這方面發展。

SQL語法與查詢最佳化的濫觴
首先要建構的是程式語言,這些關聯性需要特定的運算子(Operator)去表達、怎麼做聯結(Join),都需要靠一套語言來加以規範與定義。後來SEQUEL查詢語言的出現,再加上查詢最佳化的技術理論的推出,都是很關鍵的發展,讓這個模型可行性越來越高。

在1974年,IBM的Don Chamberlin和Ray Boyce共同提出一篇論文〈SEQUEL:A Structured English Query Evaluation Language〉,主要關於一套全新設計的程式語言,用在關聯式資料庫的資料存取和操作上。顧名思義,SEQUEL是一種口語化查詢語言,使用上就像一段英語敘述,而且語意是完備的、不會有矛盾。

這部分的成就也成為1986年後的ANSI/ISO SQL標準的基礎。這兩位等於SQL語言的鼻祖。這項技術,等於把關聯式模型落實成一套真正存在的語言,你可以用它來描述怎麼去查詢,在實用度和處理能力上是一個躍進。

SQL運用在程式開發上,和既有的程序式程式語言(Procedural Language)上有很大不同,傅毓勤認為,你所要描述的是What而不是How,例如你只要指定特定的資料表加以連結,而非把宣告變數、資料型別、運算子、表示式、迴圈相關的敘述等所有細節,一五一十地寫出來。當時,這也是被人質疑的。究竟這樣的語言能不能有效地實現出來,換句話說,還需寫出一個編譯器來剖析這樣的程式,執行最佳化。

於是,1979年,IBM的Patricia Selinger在美國電腦協會的SIGMOD 大會上發表一篇〈Access Path Selection in a Relational Database Management System〉,這是第一份有關於關聯式模型查詢最佳化的論文,也確立了今後SQL查詢最佳化(SQL Query Optimization in RDBMS)的發展方向。傅毓勤說,放眼望去,幾乎所有的優化工具,都是憑藉這個基礎發展出來的。

在資料庫發展上要做到最佳化查詢,通常會遇到NP Hard等級的問題,要找到最好的演算法一直很難,因為時間耗費通常與資料表數量的增加成指數成長,比如要處理30個資料表,可能就得用到天文數字般的處理量,但Patricia Selinger提出用工程來解決的方法,例如根據查詢的複雜度、回傳結果的資料量、也就是預估各種存取資料方法的成本,用布林表示式來決定對應的存取計畫。

SQL/DS和DB2 for z/OS
這兩項理論讓關聯式資料模型就不再是那麼抽象的名詞,實現的可能性大增。接下來還有三件事在歷史上很重要,就是如何產品化,使DB2成為一套能夠真正用在業界的產品。

1982年,IBM基於System R和SQL推出全世界最早的商業化關聯式資料庫SQL/DS,用在VSE和VM這兩個大型主機的作業系統上,它也是第一個針對查詢處理程序(Query Processing)的系統;隔年他們又將SQL/DS一部份作為新的資料庫產品Database 2的基礎,DATABASE 2即為我們目前慣稱的DB2。也就是說,SQL/DS是DB2的前身,所以DB2也算是從System R衍生出來。

為什麼叫做Database 2?原因是IMS是IBM發展出的第一套階層式資料庫管理系統,而相對於階層式模型,他們認為這套新的系統是第二代的資料庫系統。

DB2的第一個版本,當時主要用在決策支援方面的少量查詢,還無法真正運用在交易上,例如銀行的核心業務。到了1988年第二個版本發行時,又有了一個革命性的改變,Don Haderle、Jim Teng(鄧之嘉)、Howard Herron帶領開發團隊,將交易率大幅提升,讓DB2成為可以真正用在交易的資料庫系統。

加入並行處理演算法和資料分享的架構
一套資料庫管理系統除了能簡化資料存取、負擔線上交易,在可用性、延展性和可靠度也需要提出保障。

可用性的強化上,主要是Aries的並行處理演算法,它是由C. Mohan和Don Haderle在1980年代中、晚期所發展的。這個計畫主要是針對並行處理的控制(Concurrency Control)上,把鎖定(Lock)的技術從資料頁(Page)降到資料列(row)的等級,因為粒度變小了,所以並行處理的效率大大提升,這也讓系統復原比較有效率。

在可用性和延展性,還有一項關鍵技術,傅毓勤特別強調是DB2至今仍獨有的,那就是資料共享(Data Sharing)。在1988到1994年當中,IBM極力想讓這個平臺的處理能力能夠獲得突破性的改變,他們提出了Sysplex的架構和資料共享的技術,這是由Inderpal Narang、C. Mohan, Don Haderle、Jim Teng和Jeff Josten帶領的團隊所發展出來的。在DB2 for MVS V4,IBM也開始運用這樣的技術。

這個架構是指,你可以同時有多個執行DB2系統的成員,它們能在不同的主機上執行,然後合起來成為一個叢集,共享同一個資料庫;它們可以各自執行自己的應用程式,也可以合起來執行同一個應用程式。

傅毓勤表示,以可用性來說,合起來之後,它們之間是共享的,假設成員當中有一個停機、無法運作,其他成員會自動繼續維持運作,系統不需要額外執行其他容錯的機制,除非全部成員停止運作。

Sysplex還能用於延展性和工作負載平衡,例如動態加入新成員來分攤處理。這些成員共享了資料庫,它們可以執行在相同或不同的邏輯分割區(LPAR);如果分散在不同硬體上,它們彼此還可以相互支援處理,將工作負載分配至同時段比較閒置的主機上。文⊙李宗翰

沒有留言:

張貼留言