面向?qū)ο髷?shù)據(jù)庫的正確評價(jià)與選擇
2024-07-21 02:06:58
供稿:網(wǎng)友
注冊會(huì)員,創(chuàng)建你的web開發(fā)資料庫,(來源:http://www.ccidnet.com)
一、概述
就象關(guān)系數(shù)據(jù)庫一樣,市場上有許多面向?qū)ο蟮臄?shù)據(jù)庫(object-oriented database,oodb)可供選擇。然而,oodb在價(jià)格、功能、特色和體系上沒有什么統(tǒng)一的標(biāo)準(zhǔn)。本文將幫助你理解各種oodb系統(tǒng)之間的一些差別,在為應(yīng)用選擇合適的oodb時(shí),幫助你縮小挑選的范圍。
根據(jù)標(biāo)準(zhǔn)的不同,我用于評估這些產(chǎn)品的參考資料也是五花八門。在大多數(shù)情況下,本文的評價(jià)以個(gè)人經(jīng)驗(yàn)和看法為基礎(chǔ);另外一些細(xì)節(jié)直接從評測軟件或供應(yīng)商提供的數(shù)據(jù)資料獲得。在作出選擇之前,務(wù)必針對你的應(yīng)用進(jìn)行全面的測試。畢竟,你我看法可能有所不同。
我們將要分析的四種oodb產(chǎn)品是objectstore、versant developer suite、poet fastobjects和objectivity。每一種產(chǎn)品將從以下幾個(gè)方面進(jìn)行評估:
價(jià)格和許可 順從性 兼容性 特色 性能 可伸縮性和可用性
二、價(jià)格和許可
工程成本包括兩個(gè)方面:初始成本和維護(hù)費(fèi)用。初始成本往往在評估中起支配作用,但象年度支持、聯(lián)機(jī)討論、新手培訓(xùn)等問題都應(yīng)該成為產(chǎn)品成本的考慮因素。即使和它的競爭者大型rdbms相比,oodb的價(jià)格通常顯得很昂貴。
標(biāo)準(zhǔn)考慮…評估軟件可免費(fèi)下載的、全功能的試用軟件。開發(fā)版許可價(jià)格低價(jià)格,以用戶數(shù)量為基礎(chǔ)的許可。產(chǎn)品許可價(jià)格低價(jià)格,按照cpu數(shù)量為單位的許可,低廉的年度維護(hù)費(fèi)用。聯(lián)機(jī)支持負(fù)責(zé)的技術(shù)支持人員,大量有用的技術(shù)說明、示范和論壇?;钴S的用戶社團(tuán)大量的熱心用戶,新聞組里豐富有益的活動(dòng),非官方網(wǎng)站的支持。
三、順從性
和關(guān)系數(shù)據(jù)庫相比,oodb一般對順從標(biāo)準(zhǔn)的要求不是那么嚴(yán)格。大多數(shù)oodb都用自己獨(dú)特的方法實(shí)現(xiàn)各種特色功能。由于還沒有明確的標(biāo)準(zhǔn)評價(jià)oodb,所以對象數(shù)據(jù)庫管理組織(object database management group,odmg)的標(biāo)準(zhǔn)是當(dāng)前最好的準(zhǔn)繩。但各個(gè)oodb各自為政卻帶來了一些麻煩,要找出一個(gè)完全順從odmg 2.0或3.0規(guī)范的oodb產(chǎn)品很困難(與已經(jīng)有一年歷史的3.0規(guī)范相比,2.0規(guī)范是一個(gè)相當(dāng)寬松和不完善的規(guī)范)。也許在不遠(yuǎn)的將來,我們將用java data object(jdo)規(guī)范評價(jià)java oodb。
標(biāo)準(zhǔn)考慮…對“對象定義語言”(odl)的順從完全遵從odmg 3.0規(guī)范有關(guān)對象定義的規(guī)范。對“對象查詢語言”(oql)的順從完全遵從odmg 3.0規(guī)范有關(guān)查詢的規(guī)范。對java的順從性完全遵從odmg 3.0規(guī)范意味著正確實(shí)現(xiàn)java api/綁定。對c++的順從性完全遵從odmg 3.0規(guī)范意味著正確實(shí)現(xiàn)c++ api。對smalltalk的順從性完全遵從odmg 3.0規(guī)范(如果你的系統(tǒng)不太可能用到smalltalk,那么這只是一個(gè)可選的標(biāo)準(zhǔn))。
四、兼容性
無論是語言還是平臺,工程對可伸縮性的要求會(huì)日益增加。oodb不應(yīng)該在任何一方面影響這種可伸縮性。然而,平臺支持的代價(jià)很昂貴,它要求進(jìn)行廣泛的測試和大量的文檔說明。因此,一些供應(yīng)商的產(chǎn)品只支持?jǐn)?shù)量很少的平臺。要找出一個(gè)和各種主流oo語言(如c++、java、smalltalk)緊密結(jié)合的方案是相當(dāng)困難的。
標(biāo)準(zhǔn)考慮…支持的平臺廣泛的平臺支持——我總是考慮三個(gè)關(guān)鍵的平臺:linux,win2000,和solaris。你優(yōu)先考慮的平臺可能有所不同。java集成廣泛的jdk支持,緊緊跟蹤最新的jdk規(guī)范。c++集成廣泛的編譯器支持持久類的特殊化避免緊密結(jié)合——尋找那些不要求修改代碼中持久類的數(shù)據(jù)庫。這是一種與偏好有關(guān)的選擇,所以你應(yīng)該認(rèn)真研究處理后擴(kuò)展和擴(kuò)展/實(shí)現(xiàn)方式相比的優(yōu)缺點(diǎn)??汕度氲陌姹局徽加蒙倭康拇疟P空間、ram;具有取消一些非核心功能的能力。
五、特色
每一種數(shù)據(jù)庫方案都有自己的一些獨(dú)特的功能。下面我特別指出一些核心功能,因?yàn)檫@些功能對于開發(fā)工程來說具有很高的價(jià)值:
標(biāo)準(zhǔn)考慮…數(shù)據(jù)庫瀏覽管理數(shù)據(jù)庫、修改內(nèi)容、更新模式和生成內(nèi)容報(bào)表的能力。客戶端緩沖改善“熱點(diǎn)”數(shù)據(jù)庫響應(yīng)速度的能力;在確保對象同步的前提下,使得對數(shù)據(jù)庫的提取操作減到最少。數(shù)據(jù)庫安全用戶、用戶組訪問控制,最好在對象(如果不是容器的話)的層次上進(jìn)行。xml支持無縫地從數(shù)據(jù)庫提取、向數(shù)據(jù)庫插入xml的工具。ide集成和togethersoft之類提高開發(fā)效率的環(huán)境集成能夠提高開發(fā)效率。
六、性能
在性能的某些方面,oodb占有優(yōu)勢;但在其他方面,oodb又有所不足。在這里提供每一種產(chǎn)品詳細(xì)的性能測試數(shù)據(jù)顯得過于冗長,但理解可能影響性能的體系和功能方面的局限是很重要的。
標(biāo)準(zhǔn)考慮…加鎖策略應(yīng)用-對象級的加鎖機(jī)制能夠帶來很大的方便,但頁面級的加鎖機(jī)制在某些條件下能夠帶來性能上的飛躍。負(fù)載平衡透明地分布數(shù)據(jù)庫、調(diào)用遠(yuǎn)程服務(wù)器上的方法、在并發(fā)線程/訪問之間共享對象的能力。最大的數(shù)據(jù)庫大小越大越好。事務(wù)支持檢查點(diǎn):由多個(gè)線程共享一個(gè)事務(wù),一個(gè)線程占用多個(gè)事務(wù),嵌套事務(wù);當(dāng)某個(gè)給定產(chǎn)品的實(shí)現(xiàn)影響了你的應(yīng)用時(shí),確保你自己理解了結(jié)合客戶端緩沖時(shí)客戶端/服務(wù)器端同步的工作機(jī)制。有關(guān)查詢/性能的信息提取這些信息的能力,它能夠幫助你找出性能瓶頸;oodb提供的優(yōu)化和調(diào)整選項(xiàng)通常要比rdb少,但一些幫你提取性能信息和解釋查詢執(zhí)行計(jì)劃的工具仍很有用。
七、可伸縮性和可用性
雖然并非每一個(gè)工程都要求有企業(yè)級的恢復(fù)、可用性、可伸縮性功能,了解你所選擇的oodb方案能夠隨著工程一起發(fā)展而提供這方面的能力是值得的。
標(biāo)準(zhǔn)考慮…失敗轉(zhuǎn)移主服務(wù)器出現(xiàn)問題時(shí),透明地切換到冗余數(shù)據(jù)庫。負(fù)載平衡把負(fù)載分布到冗余服務(wù)器、把對象分割到多個(gè)服務(wù)器、同步多個(gè)客戶端對象緩沖之間數(shù)據(jù)視圖的能力。復(fù)制和增量備份無縫地復(fù)制數(shù)據(jù),支持負(fù)載平衡和恢復(fù)的能力。專用的查詢引擎(ad hoc query engine)豐富的查詢語言,允許對數(shù)據(jù)的快速訪問;理想情況下,它應(yīng)該能夠跨越?jīng)]有直接關(guān)聯(lián)的對象連接數(shù)據(jù)。
八、產(chǎn)品評論
下面,我按照前文提出的標(biāo)準(zhǔn)評估以下產(chǎn)品:
objectstore versant developer suite poet fastobjects objectivity
請參考cetus oodb area,那里有一個(gè)相當(dāng)新的oodb供應(yīng)商清單。
標(biāo)準(zhǔn)objectstoreversant developer suitepoetobjectivity背景信息供應(yīng)商object designversantpoetobjectivity產(chǎn)品主頁objectstorevdsfastobjectsobjectivity技術(shù)參考[29]spec 或 pdf data sheetoverview 或 manualsjava 或 c++pdf overview 或 specific data sheets版本6.06.0t7 8.0[16]6.0價(jià)格和許可試用版本30天試用[1]60天試用功能限制90天試用許可費(fèi)用[2][2][2][2]聯(lián)機(jī)支持尚可[3][9]尚可[9]好[19]很好用戶社團(tuán)[23]中等[4]中等較小中等順從性odl順從性nnn不完整的2.0/3.0支持oql順從性nn[10]odmg 3.0[17]njava接口遵從odmg 3.0odmg 3.0odmg 3.0odmg 3.0c++接口支持odmg 3.0n/a不完整的2.0/3.0支持smalltalk接口n/an/an/aodmg 3.0兼容性支持的unix操作系統(tǒng)linux,solaris,hp-ux,irix,aix,tru64 [ref]linux,solaris,hp-ux,irix,sgi,tru64 [ref]linux,solaris,hp-ux[ref]linux,solaris,hp-ux,irix,aix,tru64 [ref]支持的windows操作系統(tǒng)98,nt4,2000 [ref]nt4,2000 [ref]98,nt4,2000 [ref]98,nt4,2000 [ref]jdk要求1.0,1.1–1.3[22]1.2,1.31.1-1.31.22,1.3持久類的特殊化n[5]n[5]n[5]y[24]可嵌入的版本yny[18]n功能數(shù)據(jù)庫瀏覽器yyyy客戶端緩沖yyyy數(shù)據(jù)庫安全數(shù)據(jù)庫或者段的用戶/組控制數(shù)據(jù)庫的用戶控制[14]特定類和數(shù)據(jù)庫的用戶/組控制數(shù)據(jù)庫的用戶控制xml支持yy[15]部分[20]部分[20]性能加鎖策略數(shù)據(jù)庫,頁,或者對象對象級對象級容器級[25]最大的數(shù)據(jù)庫大小[7]數(shù)百個(gè)gb?數(shù)十個(gè)gb到數(shù)百個(gè)gb?[12]?根據(jù)報(bào)告,它達(dá)到了tb級事務(wù)支持死鎖檢測,mvcc [8]分布式事務(wù)管理(類似于mvcc的概念)檢查點(diǎn),共享或并行的事務(wù),嵌套事務(wù)檢查點(diǎn),死鎖檢測,共享或并行的事務(wù)提供有關(guān)查詢/性能的信息yn[13]nn[26]可伸縮性失敗轉(zhuǎn)移(failover)yyy可選[27]負(fù)載平衡部分[6]部分[11]部分[21]可選[27]復(fù)制和增量備份yyy可選[27]專門的查詢引擎(ad hoc query engine)沒有oql。使用集合和查詢對象y[10]y (oql)y[28]
■ 結(jié)束語
我希望自己還沒有給人以oodb狂熱鼓吹者的印象——對于我所使用的大多數(shù)應(yīng)用,我認(rèn)為應(yīng)用oodb帶有一定的風(fēng)險(xiǎn)。然而,一旦你理解并熟悉了oodb,它們可以成為很方便的工具。我個(gè)人比較看好poet和objectstore,但我覺得它們都很有用。
■ 注解
[1]只提供單實(shí)例個(gè)人版(single-instance personal edition,pse)供下載。[2]報(bào)價(jià)可以從銷售代表處獲得。[3]部分支持服務(wù)只提供給有效維護(hù)合同的擁有者訪問。[4]社團(tuán)規(guī)模只相對其他oodb產(chǎn)品而言。oodb的用戶社團(tuán)遠(yuǎn)遠(yuǎn)小于關(guān)系數(shù)據(jù)庫的用戶社團(tuán)。[5]持久類必須進(jìn)行事后處理。[6]多個(gè)數(shù)據(jù)庫之間的負(fù)載平衡看來不太可能。相反,處理通過客戶端緩沖得以分布,它把更多的邏輯和計(jì)算任務(wù)透明地移到了客戶端,從而減小了服務(wù)器的負(fù)載。[7]這些數(shù)據(jù)未經(jīng)證實(shí),主要從供應(yīng)商的聲明獲得。在討論數(shù)據(jù)庫大小的時(shí)候,對象的復(fù)雜性、大小、“合理的應(yīng)答時(shí)間”等問題都是必須考慮的因素。[8]多版本并發(fā)控制(multiversion concurrency control,mvcc)是一種非標(biāo)準(zhǔn)的技術(shù),在并發(fā)讀取/寫入操作期間用來維持緩沖客戶端和服務(wù)器端數(shù)據(jù)視圖的一致性。[9]可以從大量在線演示、faq、論壇獲益,所有這一切都對現(xiàn)有和潛在用戶開放。[10]實(shí)現(xiàn)了一種私有的vql語言,它和oql有一些共同點(diǎn)。[11]通過復(fù)制實(shí)現(xiàn)部分負(fù)載平衡能力;根據(jù)推測,負(fù)載平衡可能通過把請求重定向到多個(gè)數(shù)據(jù)庫實(shí)現(xiàn),但這一點(diǎn)未經(jīng)證實(shí)。多個(gè)數(shù)據(jù)庫之間的透明復(fù)制確保了每一個(gè)oodb上都有一份最新的數(shù)據(jù)。[12]需要64位的版本,以便超越大量在內(nèi)村、記錄計(jì)數(shù)等方面的2^32限制;versant的64位版本已經(jīng)構(gòu)造完畢,但還沒有在所有它所支持的平臺上經(jīng)過驗(yàn)證。[13]提供一些用于查詢調(diào)整和計(jì)時(shí)的工具。[14]如果不是我在什么地方錯(cuò)過,它似乎沒有提到粒度更小的安全機(jī)制或者是在api中提供這方面的能力。我找到特別提及的只是通過os強(qiáng)制的數(shù)據(jù)庫文件權(quán)限實(shí)現(xiàn)的數(shù)據(jù)庫級訪問控制。[15]需要單獨(dú)提供的工具。[16]poet分三種形式:t2(實(shí)時(shí)嵌入式j(luò)ava),e7(嵌入式j(luò)ava/c++),以及t7(企業(yè)java/c++)。版本號沒有明確顯示,t7的v8.0得自文件的版本號,當(dāng)前是8.0.0.19。[17]不能保證它完整地支持odmg 3.0 oql,但覆蓋范圍看來相當(dāng)廣泛。[18]包含一個(gè)c++或java的嵌入式版本,以及一個(gè)java的實(shí)時(shí)嵌入式版本。[19]聯(lián)機(jī)支持網(wǎng)站community.fastobjects.com的內(nèi)容非常全面,但速度常常很慢。我擁有高速連接,但它有規(guī)律地返回頁面超時(shí)錯(cuò)誤。[20]我只能通過命令行接口使用批量導(dǎo)入/導(dǎo)出功能。[21]沒有分布式功能的任何明顯標(biāo)記,而且我也沒有用過一個(gè)分布式的配置。如果poet的配置中數(shù)據(jù)庫復(fù)制帶有“reader scalability”選項(xiàng),負(fù)載平衡可以在某種程度上得以實(shí)現(xiàn),使得查詢可以對只讀的從屬數(shù)據(jù)庫進(jìn)行。[22]至少jdk 1.2看來最好,你將得到更好的集合支持和避免一些已經(jīng)有報(bào)道的“quirk”問題(未能肯定是否為jdk 1.1解決了這些問題)。[23]很難進(jìn)行評估。我從收入和internet/新聞組的討論入手分析。請把它看成是一種猜測。[24]持久類的標(biāo)識或者是它從ooobj派生,或者它實(shí)現(xiàn)iooobj接口。[25]雖然對整個(gè)容器加鎖聽起來嚇人,但它的基本思想是,它會(huì)顯著減少加鎖服務(wù)器的負(fù)載。[26]通過api調(diào)用和統(tǒng)計(jì)功能提供一些運(yùn)行時(shí)查詢調(diào)試能力。[27]一些資料,例如這一份說明,顯示出這些選項(xiàng)會(huì)增加成本。[28]沒有提供類似oql的等價(jià)語言。sql++是一種遵從sql的功能,允許針對oodb進(jìn)行sql查詢;容器支持一個(gè)scan()方法,以及支持“謂詞查詢語言”表達(dá)式(predicate query language)。[29]這四種產(chǎn)品都提供評估版供下載。下載軟件包附帶的文檔和示例一般都比較完善。