前言
業(yè)界對持久存儲領(lǐng)域的追求從未停止過,為了更方便、更容易地用對象表達我們的思維,開源領(lǐng)域和商業(yè)領(lǐng)域都涌現(xiàn)了許多新技術(shù), ORM 的出現(xiàn)恰恰說明了這點。最近一年,業(yè)界也在反思,到底 ORM 給我們帶來的是便利還是麻煩。矛頭指向大名鼎鼎的 Hibernate ,紛紛議論其性能問題,大家似乎要達成這樣的共識:“在業(yè)務(wù)邏輯復(fù)雜的地方用 SP ,而一般的 CRUD 還是 Hibernate ”,就連全球知名的 BearingPoint 也有類似看法。下面一個簡單的例子,說明了傳統(tǒng) ORM 工具的弊端。讓我們考慮一個簡單的 Student 對象如清單1:
清單1. Student 類
public class Student { private String name; private int age; public String getName(){ return name; } public int getAge(){ return age; } }
考慮下面這個場景:找到“年齡小于 20 歲的所有學(xué)生”?
使用 ORL 實現(xiàn)如清單2:
清單2. ORL 實現(xiàn)
String oql = "select * from student in AllStudents where student.age <20"; OQLQuery query = new OQLQuery(oql); Object students = query.execute();
使用 JDOQL 實現(xiàn)如清單3:
清單3. JDOQL 實現(xiàn)
Query query = persistenceManager.newQuery(Student.class, "age <20"); Collection students = (Collection)query.execute();
上面的方法都存在一些普遍問題:
既然存在如此多的問題, 為什么不直接使用純面向?qū)ο髷?shù)據(jù)庫呢?有些開發(fā)者可能會說:“它缺乏數(shù)學(xué)模型的支持, 還不夠成熟”。的確, RDBMS 發(fā)展了幾十年才有今天的成就,已經(jīng)非常完善了。而技術(shù)的革新是無止境的, 故步自封的永遠都跟不上變化的腳步。
讓我們來簡單回顧一下對象數(shù)據(jù)庫的發(fā)展史(資料來源于 Wiki 百科全書):“面向?qū)ο髷?shù)據(jù)庫系統(tǒng)”這一術(shù)語第一次出現(xiàn)于 1985 年。著名的研究項目包括:Encore-Ob/Server ( 布朗大學(xué)), EXODUS(Wisconsin 大學(xué)), IRIS (惠普), ODE ( Bell 實驗室), ORION (MCC ) ,Vodak (GMD-IPSI)和 Zeitgeist (Texas Instruments)。其中以 ORION 項目發(fā)表的論文數(shù)為最多。 MCC 的 Won Kim 將這些論文中最有價值的一部分匯編成書并由 MIT 出版社出版。對象數(shù)據(jù)庫管理系統(tǒng)為面向?qū)ο缶幊陶Z言增加了持久的概念。最早的商品化 ODBMS 出現(xiàn)在 1986 年,是 Servio 公司(現(xiàn)在的 GemStone 公司)和 Ontos 公司推出的。后來(九十年代) Object Design ( ODI )、 Versant 、 Objectivity 、 O2 Technology 、 Poet 、 Ibex 、 UniSQL 和 ADB MATISSE 等公司也加入了這個開拓行列。
而今天,一家來自加州硅谷的開源面向?qū)ο髷?shù)據(jù)庫公司 db4objects 為我們帶來了db4o, 一款性能卓越的純面向?qū)ο髷?shù)據(jù)庫,也是我們這篇和后續(xù)文章將會介紹的主角。
db4o 為我們帶來的是這樣一種面向?qū)ο蟮牟樵兎绞?
什么是 db4o
“利用表格存儲對象,就像是將汽車開回家,然后拆成零件放進車庫里,早晨可以再把汽車裝配起來。但是人們不禁要問,這是不是泊車的最有效的方法呢?!?– Esther Dyson
db4o 是一個開源的純面向?qū)ο髷?shù)據(jù)庫引擎,對于 Java 與 .NET 開發(fā)者來說都是一個簡單易用的對象持久化工具,使用簡單。同時,db4o 已經(jīng)被第三方驗證為具有優(yōu)秀性能的面向?qū)ο髷?shù)據(jù)庫, 下面的基準測試圖對 db4o 和一些傳統(tǒng)的持久方案進行了比較。db4o 在這次比較中排名第二,僅僅落后于JDBC。通過圖 1 的基準測試結(jié)果,值得我們細細品味的是采用 Hibernate/HSQLDB 的方案和 JDBC/HSQLDB 的方案在性能方面有著顯著差距,這也證實了業(yè)界對 Hibernate 的擔(dān)憂。而 db4o 的優(yōu)異性能,讓我們相信: 更 OO 并不一定會犧牲性能。
圖1. HSQLDB 基準測試
同時,db4o 的一個特點就是無需 DBA 的管理,占用資源很小,這很適合嵌入式應(yīng)用以及 Cache 應(yīng)用, 所以自從 db4o 發(fā)布以來,迅速吸引了大批用戶將 db4o 用于各種各樣的嵌入式系統(tǒng),包括流動軟件、醫(yī)療設(shè)備和實時控制系統(tǒng)。
db4o 由來自加州硅谷的開源數(shù)據(jù)庫公司 db4objects 開發(fā)并負責(zé)商業(yè)運營和支持。db4o 是基于 GPL 協(xié)議。db4objects 于 2004 年在 CEO Christof Wittig 的領(lǐng)導(dǎo)下組成,資金背景包括 Mark Leslie 、 Veritas 軟件公司 CEO 、 Vinod Khosla ( Sun 公司創(chuàng)始人之一)、 Sun 公司 CEO 在內(nèi)的硅谷高層投資人組成。毫無疑問,今天 db4objects 公司是硅谷炙手可熱的技術(shù)創(chuàng)新者之一。
db4o 特性
db4o 的目標是提供一個功能強大的,適合嵌入的數(shù)據(jù)庫引擎,可以工作在設(shè)備,移動產(chǎn)品,桌面以及服務(wù)器等各種平臺。主要特性如下:
或許開發(fā)者會問,如果現(xiàn)有的應(yīng)用環(huán)境已經(jīng)有了關(guān)系型數(shù)據(jù)庫怎么辦?沒關(guān)系,db4o 的 dRS(db4o Replication System)可實現(xiàn) db4o 與關(guān)系型數(shù)據(jù)庫的雙向同步(復(fù)制),如圖 3 。 dRS 是基于 Hibernate 開發(fā),目前的版本是 1.0 ,并運行在 Java 1.2 或更高版本平臺上,基于 dRS 可實現(xiàn) db4o 到 Hibernate/RDBMS 、 db4o 到 db4o 以及 Hibernate/RDBMS 到 Hibernate/RDBMS 的雙向復(fù)制。dRS 模型如圖3
圖3. dRS 模型
結(jié)論
db4o 因為其開源的理念,以及創(chuàng)新的實現(xiàn),獲得了 Java Pro 2006 讀者選擇獎。無論從成功案例還是 db4o 本身來看,這款純面向?qū)ο髷?shù)據(jù)庫都值得我們關(guān)注,從官方論壇反饋情況看,有相當?shù)挠脩魷蕚浒殃P(guān)系型數(shù)據(jù)庫遷移到 db4o 。而最新發(fā)布的 5.5 版本,更是把性能再次提升很多。在接下來的文章中,我會繼續(xù)和大家分享 db4o 給我們帶來的這場面向?qū)ο髷?shù)據(jù)庫風(fēng)暴。
?
參考資料
學(xué)習(xí)
討論
作者簡介
Rosen Jiang 來自成都,是 db4o 和 OO 的忠實 fans,是 2005 年 db4o 的 dvp 獲得者之一。他正在 J2me 應(yīng)用中使用 db4o,你可以通過 rosener_722@hotmail.com 和他聯(lián)系。
張黃矚,熱愛開源軟件,熟悉 Java/C/C++ 編程語言,對數(shù)據(jù)庫技術(shù)網(wǎng)絡(luò)技術(shù)均感興趣。你可以通過 zhanghuangzhu@gmail.com 聯(lián)系他。
Chris 來自香港,熱愛開源和 db4o。他創(chuàng)辦了中國最火熱的 Java 和開源社區(qū) Matrix(http://www.Matrix.org.cn), 你可以通過 chris@Matrix.org.cn 和他聯(lián)系。
Powered by: BlogJava Copyright © Rosen