面向對象的數據庫db4o: 初識db4o

前言

業界對持久存儲領域的追求從未中止過,爲了更方便、更容易地用對象表達咱們的思惟,開源領域和商業領域都涌現了許多新技術, ORM 的出現偏偏說明了這點。最近一年,業界也在反思,到底 ORM 給咱們帶來的是便利仍是麻煩。矛頭指向大名鼎鼎的 Hibernate ,紛紛議論其性能問題,你們彷佛要達成這樣的共識:「在業務邏輯複雜的地方用 SP ,而通常的 CRUD 仍是 Hibernate 」,就連全球知名的 BearingPoint 也有相似見解。下面一個簡單的例子,說明了傳統 ORM 工具的弊端。讓咱們考慮一個簡單的 Student 對象如 清單1java

  清單1. Student 類程序員

public class Student { 
	private String name; 
	private int age; 
	public String getName(){ 
		return name; 
	} 
	public int getAge(){ 
		return age; 
	} 
}

考慮下面這個場景:找到「年齡小於 20 歲的全部學生」?數據庫

使用 ORL 實現如 清單2編程

  清單2. ORL 實現
安全

String oql = "select * from student in AllStudents where student.age <20"; 
OQLQuery query = new OQLQuery(oql); 
Object students = query.execute();

使用 JDOQL 實現如 清單3服務器

  清單3. JDOQL 實現編程語言

Query query = persistenceManager.newQuery(Student.class, "age <20"); 
Collection students = (Collection)query.execute();

上面的方法都存在一些廣泛問題:工具

  • 現代集成開發環境不會檢查內嵌字符串的語義和語法錯誤。在上面全部查詢語句中, age 字段和數值 20 都被認爲是數字類型,可是沒有一個 IDE 或編譯器能檢查其實際正確性。若是開發者混淆了查詢代碼-―好比,改變了 age 字段的名字或類型,將致使――上面全部的查詢語句在運行時報錯,而不會在編譯時提示。性能

  • 現代敏捷開發技術鼓勵不斷進行重構來維持清晰和與時俱進的類模型,以便準確重現不斷演進的域模型。若是查詢代碼難於維護,它會延遲決定重構的時間並不可避免的引入低質量代碼。學習

  • 全部列出的查詢都直接用 Student 類的私有成員 age,而不是使用它的公共接口 student.getAge(),所以他們都破壞了面向對象封裝規則,違反接口和實現應該分離的面向對象法則。

  • 全部的查詢都非 100% 的原生。

既然存在如此多的問題, 爲何不直接使用純面向對象數據庫呢?有些開發者可能會說:「它缺少數學模型的支持, 還不夠成熟」。的確, RDBMS 發展了幾十年纔有今天的成就,已經很是完善了。而技術的革新是無止境的, 故步自封的永遠都跟不上變化的腳步。

讓咱們來簡單回顧一下對象數據庫的發展史(資料來源於 Wiki 百科全書):「面向對象數據庫系統」這一術語第一次出現於 1985 年。著名的研究項目包括:Encore-Ob/Server ( 布朗大學), EXODUS(Wisconsin 大學), IRIS (惠普), ODE ( Bell 實驗室), ORION (MCC ) ,Vodak (GMD-IPSI)和 Zeitgeist (Texas Instruments)。其中以 ORION 項目發表的論文數爲最多。 MCC 的 Won Kim 將這些論文中最有價值的一部分彙編成書並由 MIT 出版社出版。對象數據庫管理系統爲面向對象編程語言增長了持久的概念。最先的商品化 ODBMS 出如今 1986 年,是 Servio 公司(如今的 GemStone 公司)和 Ontos 公司推出的。後來(九十年代) Object Design ( ODI )、 Versant 、 Objectivity 、 O2 Technology 、 Poet 、 Ibex 、 UniSQL 和 ADB MATISSE 等公司也加入了這個開拓行列。

而今天,一家來自加州硅谷的開源面向對象數據庫公司 db4objects 爲咱們帶來了db4o, 一款性能卓越的純面向對象數據庫,也是咱們這篇和後續文章將會介紹的主角。

db4o 爲咱們帶來的是這樣一種面向對象的查詢方式:

  • 100% 的原生 查詢語言應能用實現語言( Java 或 C# )徹底表達,並徹底遵循實現語言的語義。

  • 100% 的面向對象 查詢語言應可運行在本身的實現語言中,容許未經優化執行普通集合而不用自定義預處理。

  • 100% 的類型安全 查詢語言應能徹底獲取現代 IDE 的特性,好比語法檢測、類型檢測、重構,等等。

什麼是 db4o

「利用表格存儲對象,就像是將汽車開回家,而後拆成零件放進車庫裏,早晨能夠再把汽車裝配起來。可是人們不由要問,這是否是泊車的最有效的方法呢。」 – Esther Dyson

db4o 是一個開源的純面向對象數據庫引擎,對於 Java 與 .NET 開發者來講都是一個簡單易用的對象持久化工具,使用簡單。同時,db4o 已經被第三方驗證爲具備優秀性能的面向對象數據庫, 下面的基準測試圖對 db4o 和一些傳統的持久方案進行了比較。db4o 在此次比較中排名第二,僅僅落後於JDBC。經過圖 1 的基準測試結果,值得咱們細細品味的是採用 Hibernate/HSQLDB 的方案和 JDBC/HSQLDB 的方案在性能方面有着顯著差距,這也證明了業界對 Hibernate 的擔心。而 db4o 的優異性能,讓咱們相信: 更 OO 並不必定會犧牲性能。

圖1. HSQLDB 基準測試

同時,db4o 的一個特色就是無需 DBA 的管理,佔用資源很小,這很適合嵌入式應用以及 Cache 應用, 因此自從 db4o 發佈以來,迅速吸引了大批用戶將 db4o 用於各類各樣的嵌入式系統,包括流動軟件、醫療設備和實時控制系統。

db4o 由來自加州硅谷的開源數據庫公司 db4objects 開發並負責商業運營和支持。db4o 是基於 GPL 協議。db4objects 於 2004 年在 CEO Christof Wittig 的領導下組成,資金背景包括 Mark Leslie 、 Veritas 軟件公司 CEO 、 Vinod Khosla ( Sun 公司創始人之一)、 Sun 公司 CEO 在內的硅谷高層投資人組成。毫無疑問,今天 db4objects 公司是硅谷煊赫一時的技術創新者之一。

db4o 特性

db4o 的目標是提供一個功能強大的,適合嵌入的數據庫引擎,能夠工做在設備,移動產品,桌面以及服務器等各類平臺。主要特性以下:

  • 開源模式。與其餘 ODBMS 不一樣,db4o 爲開源軟件,經過開源社區的力量驅動開發 db4o 產品。

  • 原生數據庫。db4o 是 100% 原生的面向對象數據庫,直接使用編程語言來操做數據庫。程序員無需進行 OR 映射來存儲對象,大大節省了程序員在存儲數據的開發時間。

  • 高性能。圖2爲 db4o 官方公佈的基準測試數據,db4o 比採用 Hibernate/MySQL 方案在某些測試線路上速度高出 44 倍之多!而且安裝簡單,僅僅須要 400Kb 左右的 .jar 或 .dll 庫文件。在接下來的系列文章中,咱們將只關注在 Java 平臺的應用,可是實際上 db4o 毫無疑問會很好地在 .NET 平臺工做。

         圖2. db4o 官方基準測試數據

         

  • 易嵌入。使用 db4o 僅需引入 400 多 k 的 jar 文件或是 dll 文件,內存消耗極小。

  • 零管理。使用 db4o 無需 DBA,實現零管理。

  • 支持多種平臺。db4o 支持從 Java 1.1 到 Java 5.0,此外還支持 .NET 、 CompactFramework 、 Mono 等 .NET 平臺,也能夠運行在 CDC 、 PersonalProfile 、 Symbian 、 Savaje 以及 Zaurus 這種支持反射的 J2ME 方言環境中,還能夠運行在 CLDC 、 MIDP 、 RIM/Blackberry 、 Palm OS 這種不支持反射的 J2ME 環境中。

或許開發者會問,若是現有的應用環境已經有了關係型數據庫怎麼辦?不要緊,db4o 的 dRS(db4o Replication System)可實現 db4o 與關係型數據庫的雙向同步(複製),如圖 3 。 dRS 是基於 Hibernate 開發,目前的版本是 1.0 ,並運行在 Java 1.2 或更高版本平臺上,基於 dRS 可實現 db4o 到 Hibernate/RDBMS 、 db4o 到 db4o 以及 Hibernate/RDBMS 到 Hibernate/RDBMS 的雙向複製。dRS 模型如 圖3。

圖3. dRS 模型

結論

db4o 由於其開源的理念,以及創新的實現,得到了 Java Pro 2006 讀者選擇獎。不管從成功案例仍是 db4o 自己來看,這款純面向對象數據庫都值得咱們關注,從官方論壇反饋狀況看,有至關的用戶準備把關係型數據庫遷移到 db4o 。而最新發布的 5.5 版本,更是把性能再次提高不少。在接下來的文章中,我會繼續和你們分享 db4o 給咱們帶來的這場面向對象數據庫風暴。

參考資料

學習

得到產品和技術

相關文章
相關標籤/搜索