面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫
摘要
本文簡要回顧了面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)結(jié)合的發(fā)展歷程和方向,探討面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)的結(jié)合的三種方式的基本特征、優(yōu)勢、劣勢,著重介紹面向?qū)ο髷?shù)據(jù)庫和以應(yīng)用面向?qū)ο蠹夹g(shù)的后關(guān)系型數(shù)據(jù)庫—— Caché ,以其為例分析面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)結(jié)合的現(xiàn)狀,并展望面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)結(jié)合發(fā)展前景。
關(guān)鍵詞
面向?qū)ο蟆?/span> SQL 、 MUPUS 語言、 Caché 、 ORM (對象關(guān)系映射)
前言
在當(dāng)今軟件的世界里,面向?qū)ο蠹夹g(shù)一統(tǒng)天下,滲透到幾乎所有軟件設(shè)計領(lǐng)域、應(yīng)用領(lǐng)域和工程領(lǐng)域。與此同時,在數(shù)據(jù)庫領(lǐng)域中,雖然關(guān)系數(shù)據(jù)庫占據(jù)了絕大部分的市場份額, Oracle 、 DB2 、 SQLServer 、 Infomix 成為數(shù)據(jù)庫中的霸主,但關(guān)系數(shù)據(jù)庫究竟還是是數(shù)據(jù)的一種存儲方式,它不屬于面向?qū)ο箢I(lǐng)域。當(dāng)以關(guān)系數(shù)據(jù)庫為數(shù)據(jù)存儲方式時,由于關(guān)系概念與面向?qū)ο蟾拍钍峭耆煌膬蓚€概念,它們之間存在嚴(yán)重的“阻抗失諧( Impedance Mismatch )”。為了解決這個問題,面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)自然而然開始交流和結(jié)合,應(yīng)用上層的面向?qū)ο笠鬂B透到數(shù)據(jù)庫,甚至是數(shù)據(jù)庫底層,并開始影響未來數(shù)據(jù)庫的發(fā)展。
面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)的結(jié)合,開拓出多種結(jié)合方式,出現(xiàn)了許多新興的概念,創(chuàng)造出來許多優(yōu)秀的產(chǎn)品,下面就讓我們一起來疏理其脈絡(luò),管窺其機(jī)理,展望其發(fā)展。
發(fā)展
八十年代以來 , 不同領(lǐng)域的應(yīng)用提出了許多新的數(shù)據(jù)管理需求 , 傳統(tǒng)數(shù)據(jù)庫技術(shù)遇到了巨大的挑戰(zhàn)。在這種挑戰(zhàn)之下,第三代數(shù)據(jù)庫應(yīng)運而生,并和諸多新技術(shù)相結(jié)合(比如分布處理技術(shù)、并行計算技術(shù)、人工智能技術(shù)、多媒體技術(shù)、模糊技術(shù)),廣泛應(yīng)用于多個領(lǐng)域(商業(yè)管理、 GIS 、計劃統(tǒng)計等),由此也衍生出多種新的數(shù)據(jù)庫技術(shù)。其中一個重要的方向就是數(shù)據(jù)庫的面向?qū)ο蠹夹g(shù),在面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)相結(jié)合的過程中,基本上是沿著下面幾種途徑發(fā)展的:
一種是建立純粹的面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)(即 OODBMS ) ,這種途徑往往是以一種面向?qū)ο笳Z言為基礎(chǔ),增加數(shù)據(jù)庫的功能,主要是支持持久對象和實現(xiàn)數(shù)據(jù)共享。面向?qū)ο蟮臄?shù)據(jù)庫不僅在處理多媒體等數(shù)據(jù)類型時可以做到游刃有余,而且在應(yīng)用系統(tǒng)開發(fā)速度和維護(hù)等方面有著極大的優(yōu)越性。面向?qū)ο髷?shù)據(jù)庫系統(tǒng)產(chǎn)生于 80 年代后期,它利用類的設(shè)施來描述復(fù)雜對象,利用類中封裝的方法來模擬對象的復(fù)雜行為,利用繼承性來實現(xiàn)對象的結(jié)構(gòu)和方法的重用。面向?qū)ο髷?shù)據(jù)庫系統(tǒng)對一些特定應(yīng)用領(lǐng)域(例如 CAD 等),能較好地滿足了其應(yīng)用需求。但是,這種純粹的面向?qū)ο髷?shù)據(jù)庫系統(tǒng)并不支持 SQL 語言,在通用性方面失去了優(yōu)勢,因而其應(yīng)用領(lǐng)域受到了很大的局限。
另一種途徑是從傳統(tǒng)的關(guān)系數(shù)據(jù)庫加以擴(kuò)展,增加面向?qū)ο蟮奶匦裕衙嫦驅(qū)ο蠹夹g(shù)與關(guān)系數(shù)據(jù)庫相結(jié)合,建立對象關(guān)系數(shù)據(jù)庫管理系統(tǒng)( ORDBMS ) ,這種系統(tǒng)既支持已經(jīng)被廣泛使用的 SQL ,具有良好的通用性,又具有面向?qū)ο筇匦裕С謴?fù)雜對象和復(fù)雜對象的復(fù)雜行為,是對象技術(shù)和傳統(tǒng)關(guān)系數(shù)據(jù)庫技術(shù)的最佳融合。 1997 年,對象關(guān)系數(shù)據(jù)庫的出現(xiàn)和發(fā)展應(yīng)該算是數(shù)據(jù)庫技術(shù)的一次革命,對象技術(shù)和關(guān)系技術(shù)珠聯(lián)壁的優(yōu)點,吸引著全球數(shù)據(jù)庫廠商競相研究開發(fā)。如何在現(xiàn)有的關(guān)系型數(shù)據(jù)庫產(chǎn)品中加入對象技術(shù),即開發(fā)面向?qū)ο蟮年P(guān)系型數(shù)據(jù)庫成為數(shù)據(jù)庫軟件廠商競爭的一個焦點。
第三種就是最近兩年中,在開源領(lǐng)域中最為炙熱的 ORM (對象關(guān)系映射)。 解決“阻抗失諧( Impedance Mismatch )”矛盾的辦法是在對象層和關(guān)系層間建立一個映射層( Mapping Layer ),通過這種方式數(shù)據(jù)源中的關(guān)系數(shù)據(jù)才能進(jìn)入對象領(lǐng)域,以對象的面貌出現(xiàn),供上層應(yīng)用使用。
最后一種來自于 MUMPS 領(lǐng)域—— M 技術(shù)數(shù)據(jù)庫。 MUMPS 語言,簡稱: M 技術(shù)算起來也是一種古老的語言了,與 FORTRAN 和 COBOL 屬于同時代的語言。 它在醫(yī)學(xué)、商業(yè)和教育領(lǐng)域中的用處正在日益擴(kuò)大。 M 技術(shù)應(yīng)用于數(shù)據(jù)庫領(lǐng)域產(chǎn)生一個數(shù)據(jù)庫分支—— M 數(shù)據(jù)庫,其中的佼佼者—— Caché 是將 M 技術(shù)和面向?qū)ο蠹夹g(shù)融合得到的后關(guān)系型數(shù)據(jù)庫,在醫(yī)療領(lǐng)域的絕對占有率。在面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)結(jié)合的大環(huán)境下,這種技術(shù)可以說是劍走偏鋒,又銳利難當(dāng)。
面向?qū)ο髷?shù)據(jù)庫
面向?qū)ο蠛完P(guān)系數(shù)據(jù)庫一樣,都支持?jǐn)?shù)據(jù)庫的持久性、二次存儲管理、并發(fā)控制、恢復(fù)和查詢的功能。不同的是:
1.???????
面向?qū)ο蟮姆独且苑诸悶榛A(chǔ)的,類用于定義存儲在數(shù)據(jù)庫內(nèi)對象的結(jié)構(gòu)及行為
2.?
關(guān)系范例是以元組(
tuple
)或記錄為基礎(chǔ)的,它被唯一地用來定義存儲在數(shù)據(jù)庫內(nèi)的數(shù)據(jù)結(jié)構(gòu)。一組元組被稱之為一個關(guān)系(
relation
)或一個表(
table
)
面向?qū)ο髷?shù)據(jù)庫系統(tǒng)的優(yōu)點
1.???????
能有效地表達(dá)客觀世界和有效地查詢信息:面向?qū)ο蟮姆椒ǚ弦话闳说乃季S規(guī)律、即將現(xiàn)實世界分解成明確的對象,這些對象具有屬性和行為。
2.???????
可維護(hù)性好:在耦合性和內(nèi)聚性方面,面向?qū)ο髷?shù)據(jù)庫的性能尤為突出。這使得數(shù)據(jù)庫設(shè)計者可在盡可能少影響現(xiàn)存代碼和數(shù)據(jù)的條件下修改數(shù)據(jù)庫結(jié)構(gòu)。這種先進(jìn)的耦合性和內(nèi)聚性也簡化了在異種硬件平臺的網(wǎng)絡(luò)上的分布式數(shù)據(jù)庫的運行。
3.???????
能很好地解決
Impedance mismatch
問題
面向?qū)ο髷?shù)據(jù)庫系統(tǒng)的缺點
1.???????
技術(shù)還不成熟。面向?qū)ο髷?shù)據(jù)庫技術(shù)的根本缺點是這項技術(shù)還不成熟,還不廣為人知。
ODBMS
如今還存在著標(biāo)準(zhǔn)化問題,由于缺乏標(biāo)準(zhǔn)化,許多不同的
ODBMS
之間不能通用。此外,是否修改
SQL
以適應(yīng)面向?qū)ο蟮某绦颍€是用新的對象查詢語言來代替它,目前還沒有解決,這些因素表明隨著標(biāo)準(zhǔn)化的出現(xiàn),
ODBMS
還會變化。
2.???????
面向?qū)ο蠹夹g(shù)需要一定的訓(xùn)練時間:人們還需要學(xué)習(xí)一套新的開發(fā)方法使之與現(xiàn)有技術(shù)相結(jié)合。此外,面向?qū)ο笙到y(tǒng)開發(fā)的有關(guān)原理才剛開始具有雛形,還需一段時間在可靠性、成本等方面令人可接受。
3.???????
理論還需完善:從正規(guī)的計算機(jī)科學(xué)方面看,還需要設(shè)計出堅實的演算或理論方法來支持
ODBMS
的產(chǎn)品。此外,既不存在一套數(shù)據(jù)庫設(shè)計方法學(xué),也沒有關(guān)于面向?qū)ο蠓治龅囊惶浊逦母拍钅P停鯓釉O(shè)計獨立于物理存儲的信息還不明確。
對象關(guān)系數(shù)據(jù)庫和對象關(guān)系映射
對象關(guān)系數(shù)據(jù)庫和對象關(guān)系映射作的是同一件事:在關(guān)系數(shù)據(jù)庫之上,加入對象——關(guān)系映射引擎,將應(yīng)用領(lǐng)域中的實體對象和數(shù)據(jù)中的表作一個映射,上層應(yīng)用操作對象,映射引擎作具體的關(guān)系表的操作。所不同的是角色不同:對象關(guān)系數(shù)據(jù)庫是由數(shù)據(jù)庫廠商實現(xiàn),是一個自底向上的行為,而對象關(guān)系映射由應(yīng)用層來作,是一個自上而下的行為,殊途同歸。核心技術(shù)便是 OR 映射,包括:
1.????? 將屬性映射成列。類屬性將映射成關(guān)系數(shù)據(jù)庫中的零或幾列。要記住,并不是所有屬性都是持久的。
2.???????
在關(guān)系數(shù)據(jù)庫中實現(xiàn)繼承。在將對象保存到關(guān)系數(shù)據(jù)庫中時,繼承的概念中發(fā)生幾個有趣的問題。
3.???????
將類映射成表。類到表的映射通常不是直接的。除了非常簡單的數(shù)據(jù)庫以外,您不會有類到表的一對一映射。
其優(yōu)點包括:
1.???????
該技術(shù)最大的有點在于讓數(shù)據(jù)庫的關(guān)系技術(shù)得到“可持續(xù)發(fā)展”。當(dāng)今業(yè)界,關(guān)系數(shù)據(jù)庫占據(jù)著絕大部分的應(yīng)用領(lǐng)域,縱然從純技術(shù)角度來看,關(guān)系技術(shù)與其他先進(jìn)的數(shù)據(jù)庫技術(shù)相比存在諸多限制,但從市場、應(yīng)用、發(fā)展和經(jīng)濟(jì)多角度來看,只有在關(guān)系數(shù)據(jù)庫之上作出調(diào)適,進(jìn)行改進(jìn),才能保護(hù)客戶的既有投資,才能讓熟悉關(guān)系技術(shù)的開發(fā)群體能夠平滑過渡到新的階段。因此可以說,對象關(guān)系映射技術(shù)才是最可能得到長足發(fā)展和廣泛應(yīng)用的技術(shù)
2.???????
能夠在很大的程度上解決
Impedance mismatch
問題,現(xiàn)今對象關(guān)系技術(shù)已經(jīng)支持,對象關(guān)系的一對一映射,一對多映射,部分產(chǎn)品還實現(xiàn)了多對多映射,較好的實現(xiàn)了主鍵、外鍵和事務(wù)。并且,在過程語言上的發(fā)展使得關(guān)系世界的存儲過程和觸發(fā)器的功能得到實現(xiàn)
3.???????
對象關(guān)系映射技術(shù)較好的實現(xiàn)同現(xiàn)有主流開發(fā)語言的結(jié)合,如
Java
、
C
#語言,無縫的融入到開發(fā)環(huán)境中,這樣的便捷性大大提高的開發(fā)的效率,減少了應(yīng)用程序的代碼量。
當(dāng)然,雖然對象關(guān)系數(shù)據(jù)庫和對象關(guān)系映射殊途同歸,但是對象關(guān)系數(shù)據(jù)庫有數(shù)據(jù)庫廠商開發(fā)和維護(hù),算是正規(guī)軍,對象關(guān)系映射中間件主要由開源組織和個人開發(fā)和維護(hù),算是游擊隊,兩相比較,正規(guī)軍將對象關(guān)系層直接融入數(shù)據(jù)庫產(chǎn)品,在技術(shù)上具備效率、和數(shù)據(jù)庫的結(jié)合度等多方優(yōu)勢;在實力層面又具備強(qiáng)大的經(jīng)濟(jì)、市場和研發(fā)優(yōu)勢,因此會成為對象關(guān)系映射技術(shù)發(fā)展的主流。而對象關(guān)系映射中間件短小精悍,具備多數(shù)據(jù)庫的支持能力,并且受開發(fā)社群的鼎立支持,也將在未來占據(jù)一席之地。
后關(guān)系型數(shù)據(jù)庫- Caché
作為唯一實用過的面向?qū)ο髷?shù)據(jù)庫,我試圖給它作一個分類,關(guān)系對象數(shù)據(jù)庫?還是對象數(shù)據(jù)庫?很難將其歸類,因此單列給予分析說明。可以
Caché
是一種高性能的面向?qū)ο髷?shù)據(jù)庫,具有高效率和可升級的多維對象模型,由于市場的需要其內(nèi)部集成了
SQL
訪問,并且具有獨特的分布式數(shù)據(jù)緩沖功能。其底層是多維數(shù)據(jù)模型,其前身是
Mupus
語言的數(shù)據(jù)庫產(chǎn)品。它有下列特點:
1.????????
全面采用了面向?qū)ο竽P停?/span>
Caché
存儲的數(shù)據(jù)模型接近現(xiàn)實世界。對象世界的一切特點它都具備,并且實現(xiàn)得很。
Caché
的對象模型是基于
ODMG
標(biāo)準(zhǔn)的,
Caché
全
面
支持所有面向?qū)ο蟾拍睿ǚ庋b、嵌入對象、多繼承、多形性和集合。
2.????????
Caché’s
高性能數(shù)據(jù)庫使用多維數(shù)據(jù)模型,它允許有效地緊密存儲豐富的數(shù)據(jù)結(jié)構(gòu)。在這個多維數(shù)據(jù)模型之上,構(gòu)建對象和關(guān)系表,可以說:對象和關(guān)系表是其多維數(shù)據(jù)的外部表現(xiàn),就想同樣一個人,在外面穿著警服是警察,在家穿著便服是父親和丈夫。
Caché
通過統(tǒng)一數(shù)據(jù)結(jié)構(gòu),提供用對象和關(guān)系表兩種方式的靈活而迅速的數(shù)據(jù)訪問,可以用兩種方式并行訪問相同的數(shù)據(jù)。
3.??????? Caché 可以與多種開發(fā)工具和語言互操作,這些訪問方法允許同時使用來滿足不同應(yīng)用需求和優(yōu)化性能。對于對象,可以通過 ActiveX 、 Java 、 C++ 和 Web 方式訪問,同時產(chǎn)品統(tǒng)一數(shù)據(jù)結(jié)構(gòu)可以同時支持用標(biāo)準(zhǔn) SQL 方式訪問對象庫。
4.????????
全面支持
SQL
的訪問方式,
Caché
也提供了對微軟
ODBC
和
SUN
的
JDBC
的高性能驅(qū)動程序,在應(yīng)用端可以象訪問關(guān)系數(shù)據(jù)庫一樣訪問
Caché
。
5.????????
Caché
應(yīng)用服務(wù)器提供
CSP
技術(shù)。用
Caché
開發(fā)的應(yīng)用可以與
Web
進(jìn)行數(shù)據(jù)交互,
CSP
提供了:
·???????
一個為數(shù)據(jù)庫應(yīng)用提供的先進(jìn)的面向?qū)ο箝_發(fā)方法。
·???????
極好的運行性能和可擴(kuò)展性
·???????
CSP
支持
HTML
、
XML
、
WML
和其它基于
Web
的語言。
講得太多,有為
Caché
作廣告的嫌疑,但根據(jù)實際的應(yīng)用,我認(rèn)為它是一個真正集關(guān)系數(shù)據(jù)庫和對象數(shù)據(jù)庫之所長的產(chǎn)品,通過它,開發(fā)者可以自由的游弋于對象世界和關(guān)系世界,不同的應(yīng)用邏輯采用不同的技術(shù)對相同的數(shù)據(jù)進(jìn)行訪問。因此,可以預(yù)言,在將來的支持面向?qū)ο蟮臄?shù)據(jù)庫世界中,
Caché
將扮演頗為重要的角色。
結(jié)論
“阻抗失諧( Impedance Mismatch )” 的問題引發(fā)了當(dāng)今數(shù)據(jù)發(fā)展的一大趨勢——面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)的結(jié)合和相互促進(jìn)。對象是對復(fù)雜事物進(jìn)行抽象思維結(jié)果,也是認(rèn)識事物的普遍方法。對象編程和對象數(shù)據(jù)庫符合人們對于客觀世界的認(rèn)識,事物的復(fù)雜行為在程序?qū)崿F(xiàn)對象時也可以隱藏其復(fù)雜性。這些特性在現(xiàn)代的面向?qū)ο髴?yīng)用中越來越多地體現(xiàn)。因此,不管選擇怎樣的道路來實現(xiàn),未來的幾年或者十幾年中,伴隨著面向?qū)ο蠹夹g(shù)的發(fā)展,面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)的結(jié)合將會穩(wěn)步向前,逐漸向產(chǎn)業(yè)化和主流化方面發(fā)展。
參考文獻(xiàn)
《數(shù)據(jù)庫技術(shù)的新浪潮》,微電腦世界
《 Cach é技術(shù)白皮書》 Intersystem Inc.
《面向?qū)ο蟮年P(guān)系數(shù)據(jù)庫設(shè)計》,互聯(lián)網(wǎng)
《 Object-oriented database product vendors 》 www.soa.org
《對象數(shù)據(jù)庫的實現(xiàn)技術(shù)及其查詢處理》 復(fù)旦大學(xué)博士論文