免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
開(kāi)源面向?qū)ο髷?shù)據(jù)庫(kù) db4o 之旅: 初識(shí) db4o


級(jí)別: 初級(jí)

Rosen Jiang (rosener_722@hotmail.com), 軟件工程師, db4o 和 OO 的忠實(shí) fans
張 黃矚 (zhanghuangzhu@gmail.com), 軟件工程師, 熱愛(ài)開(kāi)源軟件
Chris (chris@Matrix.org.cn), Matrix 創(chuàng)辦者, Matrix

2006 年 10 月 23 日

本文為 db4o 之旅系列文章的第一篇,介紹了面向?qū)ο髷?shù)據(jù)庫(kù) db4o 的基本特性,并且與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)以及 OR 映射技術(shù)做了比較分析,讀者可以體驗(yàn)到 db4o 的全新的面向?qū)ο蟠鎯?chǔ)的理念,并且給出了性能測(cè)試數(shù)據(jù)。

前言

業(yè)界對(duì)持久存儲(chǔ)領(lǐng)域的追求從未停止過(guò),為了更方便、更容易地用對(duì)象表達(dá)我們的思維,開(kāi)源領(lǐng)域和商業(yè)領(lǐng)域都涌現(xiàn)了許多新技術(shù), ORM 的出現(xiàn)恰恰說(shuō)明了這點(diǎn)。最近一年,業(yè)界也在反思,到底 ORM 給我們帶來(lái)的是便利還是麻煩。矛頭指向大名鼎鼎的 Hibernate ,紛紛議論其性能問(wèn)題,大家似乎要達(dá)成這樣的共識(shí):“在業(yè)務(wù)邏輯復(fù)雜的地方用 SP ,而一般的 CRUD 還是 Hibernate ”,就連全球知名的 BearingPoint 也有類似看法。下面一個(gè)簡(jiǎn)單的例子,說(shuō)明了傳統(tǒng) ORM 工具的弊端。讓我們考慮一個(gè)簡(jiǎn)單的 Student 對(duì)象如清單1


清單1. Student 類
                        public class Student {                        private String name;                        private int age;                        public String getName(){                        return name;                        }                        public int getAge(){                        return age;                        }                        }                        

考慮下面這個(gè)場(chǎng)景:找到“年齡小于 20 歲的所有學(xué)生”?

使用 ORL 實(shí)現(xiàn)如清單2


清單2. ORL 實(shí)現(xiàn)
                        String oql = "select * from student in AllStudents where student.age <20";                        OQLQuery query = new OQLQuery(oql);                        Object students = query.execute();                        

使用 JDOQL 實(shí)現(xiàn)如清單3


清單3. JDOQL 實(shí)現(xiàn)
                        Query query = persistenceManager.newQuery(Student.class, "age <20");                        Collection students = (Collection)query.execute();                        

上面的方法都存在一些普遍問(wèn)題:

  • 現(xiàn)代集成開(kāi)發(fā)環(huán)境不會(huì)檢查內(nèi)嵌字符串的語(yǔ)義和語(yǔ)法錯(cuò)誤。在上面所有查詢語(yǔ)句中, age 字段和數(shù)值 20 都被認(rèn)為是數(shù)字類型,但是沒(méi)有一個(gè) IDE 或編譯器能檢查其實(shí)際正確性。如果開(kāi)發(fā)者混淆了查詢代碼-―比如,改變了 age 字段的名字或類型,將導(dǎo)致――上面所有的查詢語(yǔ)句在運(yùn)行時(shí)報(bào)錯(cuò),而不會(huì)在編譯時(shí)提示。
  • 現(xiàn)代敏捷開(kāi)發(fā)技術(shù)鼓勵(lì)不斷進(jìn)行重構(gòu)來(lái)維持清晰和與時(shí)俱進(jìn)的類模型,以便準(zhǔn)確重現(xiàn)不斷演進(jìn)的域模型。如果查詢代碼難于維護(hù),它會(huì)延遲決定重構(gòu)的時(shí)間并不可避免的引入低質(zhì)量代碼。
  • 所有列出的查詢都直接用 Student 類的私有成員 age,而不是使用它的公共接口 student.getAge(),因此他們都破壞了面向?qū)ο蠓庋b規(guī)則,違反接口和實(shí)現(xiàn)應(yīng)該分離的面向?qū)ο蠓▌t。
  • 所有的查詢都非 100% 的原生。

既然存在如此多的問(wèn)題, 為什么不直接使用純面向?qū)ο髷?shù)據(jù)庫(kù)呢?有些開(kāi)發(fā)者可能會(huì)說(shuō):“它缺乏數(shù)學(xué)模型的支持, 還不夠成熟”。的確, RDBMS 發(fā)展了幾十年才有今天的成就,已經(jīng)非常完善了。而技術(shù)的革新是無(wú)止境的, 故步自封的永遠(yuǎn)都跟不上變化的腳步。

讓我們來(lái)簡(jiǎn)單回顧一下對(duì)象數(shù)據(jù)庫(kù)的發(fā)展史(資料來(lái)源于 Wiki 百科全書(shū)):“面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)”這一術(shù)語(yǔ)第一次出現(xiàn)于 1985 年。著名的研究項(xiàng)目包括:Encore-Ob/Server ( 布朗大學(xué)), EXODUS(Wisconsin 大學(xué)), IRIS (惠普), ODE ( Bell 實(shí)驗(yàn)室), ORION (MCC ) ,Vodak (GMD-IPSI)和 Zeitgeist (Texas Instruments)。其中以 ORION 項(xiàng)目發(fā)表的論文數(shù)為最多。 MCC 的 Won Kim 將這些論文中最有價(jià)值的一部分匯編成書(shū)并由 MIT 出版社出版。對(duì)象數(shù)據(jù)庫(kù)管理系統(tǒng)為面向?qū)ο缶幊陶Z(yǔ)言增加了持久的概念。最早的商品化 ODBMS 出現(xiàn)在 1986 年,是 Servio 公司(現(xiàn)在的 GemStone 公司)和 Ontos 公司推出的。后來(lái)(九十年代) Object Design ( ODI )、 Versant 、 Objectivity 、 O2 Technology 、 Poet 、 Ibex 、 UniSQL 和 ADB MATISSE 等公司也加入了這個(gè)開(kāi)拓行列。

而今天,一家來(lái)自加州硅谷的開(kāi)源面向?qū)ο髷?shù)據(jù)庫(kù)公司 db4objects 為我們帶來(lái)了db4o, 一款性能卓越的純面向?qū)ο髷?shù)據(jù)庫(kù),也是我們這篇和后續(xù)文章將會(huì)介紹的主角。

db4o 為我們帶來(lái)的是這樣一種面向?qū)ο蟮牟樵兎绞?

  • 100% 的原生 查詢語(yǔ)言應(yīng)能用實(shí)現(xiàn)語(yǔ)言( Java 或 C# )完全表達(dá),并完全遵循實(shí)現(xiàn)語(yǔ)言的語(yǔ)義。
  • 100% 的面向?qū)ο?/strong> 查詢語(yǔ)言應(yīng)可運(yùn)行在自己的實(shí)現(xiàn)語(yǔ)言中,允許未經(jīng)優(yōu)化執(zhí)行普通集合而不用自定義預(yù)處理。
  • 100% 的類型安全 查詢語(yǔ)言應(yīng)能完全獲取現(xiàn)代 IDE 的特性,比如語(yǔ)法檢測(cè)、類型檢測(cè)、重構(gòu),等等。






什么是 db4o

“利用表格存儲(chǔ)對(duì)象,就像是將汽車開(kāi)回家,然后拆成零件放進(jìn)車庫(kù)里,早晨可以再把汽車裝配起來(lái)。但是人們不禁要問(wèn),這是不是泊車的最有效的方法呢?!?– Esther Dyson

db4o 是一個(gè)開(kāi)源的純面向?qū)ο髷?shù)據(jù)庫(kù)引擎,對(duì)于 Java 與 .NET 開(kāi)發(fā)者來(lái)說(shuō)都是一個(gè)簡(jiǎn)單易用的對(duì)象持久化工具,使用簡(jiǎn)單。同時(shí),db4o 已經(jīng)被第三方驗(yàn)證為具有優(yōu)秀性能的面向?qū)ο髷?shù)據(jù)庫(kù), 下面的基準(zhǔn)測(cè)試圖對(duì) db4o 和一些傳統(tǒng)的持久方案進(jìn)行了比較。db4o 在這次比較中排名第二,僅僅落后于JDBC。通過(guò)圖 1 的基準(zhǔn)測(cè)試結(jié)果,值得我們細(xì)細(xì)品味的是采用 Hibernate/HSQLDB 的方案和 JDBC/HSQLDB 的方案在性能方面有著顯著差距,這也證實(shí)了業(yè)界對(duì) Hibernate 的擔(dān)憂。而 db4o 的優(yōu)異性能,讓我們相信: 更 OO 并不一定會(huì)犧牲性能。


圖1. HSQLDB 基準(zhǔn)測(cè)試

同時(shí),db4o 的一個(gè)特點(diǎn)就是無(wú)需 DBA 的管理,占用資源很小,這很適合嵌入式應(yīng)用以及 Cache 應(yīng)用, 所以自從 db4o 發(fā)布以來(lái),迅速吸引了大批用戶將 db4o 用于各種各樣的嵌入式系統(tǒng),包括流動(dòng)軟件、醫(yī)療設(shè)備和實(shí)時(shí)控制系統(tǒng)。

db4o 由來(lái)自加州硅谷的開(kāi)源數(shù)據(jù)庫(kù)公司 db4objects 開(kāi)發(fā)并負(fù)責(zé)商業(yè)運(yùn)營(yíng)和支持。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)的硅谷高層投資人組成。毫無(wú)疑問(wèn),今天 db4objects 公司是硅谷炙手可熱的技術(shù)創(chuàng)新者之一。








db4o 特性

db4o 的目標(biāo)是提供一個(gè)功能強(qiáng)大的,適合嵌入的數(shù)據(jù)庫(kù)引擎,可以工作在設(shè)備,移動(dòng)產(chǎn)品,桌面以及服務(wù)器等各種平臺(tái)。主要特性如下:

  • 開(kāi)源模式。與其他 ODBMS 不同,db4o 為開(kāi)源軟件,通過(guò)開(kāi)源社區(qū)的力量驅(qū)動(dòng)開(kāi)發(fā) db4o 產(chǎn)品。
  • 原生數(shù)據(jù)庫(kù)。db4o 是 100% 原生的面向?qū)ο髷?shù)據(jù)庫(kù),直接使用編程語(yǔ)言來(lái)操作數(shù)據(jù)庫(kù)。程序員無(wú)需進(jìn)行 OR 映射來(lái)存儲(chǔ)對(duì)象,大大節(jié)省了程序員在存儲(chǔ)數(shù)據(jù)的開(kāi)發(fā)時(shí)間。
  • 高性能。 圖2為 db4o 官方公布的基準(zhǔn)測(cè)試數(shù)據(jù),db4o 比采用 Hibernate/MySQL 方案在某些測(cè)試線路上速度高出 44 倍之多!并且安裝簡(jiǎn)單,僅僅需要 400Kb 左右的 .jar 或 .dll 庫(kù)文件。在接下來(lái)的系列文章中,我們將只關(guān)注在 Java 平臺(tái)的應(yīng)用,但是實(shí)際上 db4o 毫無(wú)疑問(wèn)會(huì)很好地在 .NET 平臺(tái)工作。

    圖2. db4o 官方基準(zhǔn)測(cè)試數(shù)據(jù)


  • 易嵌入。使用 db4o 僅需引入 400 多 k 的 jar 文件或是 dll 文件,內(nèi)存消耗極小。
  • 零管理。使用 db4o 無(wú)需 DBA,實(shí)現(xiàn)零管理。
  • 支持多種平臺(tái)。db4o 支持從 Java 1.1 到 Java 5.0,此外還支持 .NET 、 CompactFramework 、 Mono 等 .NET 平臺(tái),也可以運(yùn)行在 CDC 、 PersonalProfile 、 Symbian 、 Savaje 以及 Zaurus 這種支持反射的 J2ME 方言環(huán)境中,還可以運(yùn)行在 CLDC 、 MIDP 、 RIM/Blackberry 、 Palm OS 這種不支持反射的 J2ME 環(huán)境中。

或許開(kāi)發(fā)者會(huì)問(wèn),如果現(xiàn)有的應(yīng)用環(huán)境已經(jīng)有了關(guān)系型數(shù)據(jù)庫(kù)怎么辦?沒(méi)關(guān)系,db4o 的 dRS(db4o Replication System)可實(shí)現(xiàn) db4o 與關(guān)系型數(shù)據(jù)庫(kù)的雙向同步(復(fù)制),如圖 3 。 dRS 是基于 Hibernate 開(kāi)發(fā),目前的版本是 1.0 ,并運(yùn)行在 Java 1.2 或更高版本平臺(tái)上,基于 dRS 可實(shí)現(xiàn) db4o 到 Hibernate/RDBMS 、 db4o 到 db4o 以及 Hibernate/RDBMS 到 Hibernate/RDBMS 的雙向復(fù)制。dRS 模型如圖3


圖3. dRS 模型








結(jié)論

db4o 因?yàn)槠溟_(kāi)源的理念,以及創(chuàng)新的實(shí)現(xiàn),獲得了 Java Pro 2006 讀者選擇獎(jiǎng)。無(wú)論從成功案例還是 db4o 本身來(lái)看,這款純面向?qū)ο髷?shù)據(jù)庫(kù)都值得我們關(guān)注,從官方論壇反饋情況看,有相當(dāng)?shù)挠脩魷?zhǔn)備把關(guān)系型數(shù)據(jù)庫(kù)遷移到 db4o 。而最新發(fā)布的 5.5 版本,更是把性能再次提升很多。在接下來(lái)的文章中,我會(huì)繼續(xù)和大家分享 db4o 給我們帶來(lái)的這場(chǎng)面向?qū)ο髷?shù)據(jù)庫(kù)風(fēng)暴。



參考資料

學(xué)習(xí)

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
csdn-新聞評(píng)論
Oracle 重要文件系統(tǒng)解釋 - 爪哇一角 - BlogJava
Oracle 10.2.0.1 32位冷備遷移升級(jí)到10.2.0.5 64位
【oracle案例】ORA-01722
Hibernate:強(qiáng)大而廣泛應(yīng)用的老牌OR映射框架
Oracle dblink詳解(轉(zhuǎn))
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服