国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

開源面向?qū)ο髷?shù)據(jù)庫db4o之旅:初識db4o

2019-11-18 15:20:20
字體:
供稿:網(wǎng)友

2006 年 10 月 23 日

    本文為 db4o 之旅系列文章的第一篇,介紹了面向?qū)ο?a href="http://m.survivalescaperooms.com/sql.asp">數(shù)據(jù)庫 db4o 的基本特性,并且與傳統(tǒng)關(guān)系型數(shù)據(jù)庫以及 OR 映射技術(shù)做了比較分析,讀者可以體驗(yàn)到 db4o 的全新的面向?qū)ο蟠鎯Φ睦砟睿⑶医o出了性能測試數(shù)據(jù)。

前言

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


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

考慮下面這個(gè)場景:找到“年齡小于 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(); 

上面的方法都存在一些普遍問題:

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

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

    讓我們來簡單回顧一下對象數(shù)據(jù)庫的發(fā)展史(資料來源于 Wiki 百科全書):“面向?qū)ο髷?shù)據(jù)庫系統(tǒng)”這一術(shù)語第一次出現(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à)值的一部分匯編成書并由 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 等公司也加入了這個(gè)開拓行列。

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

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

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



發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 西昌市| 集安市| 库伦旗| 永平县| 大冶市| 项城市| 郯城县| 临朐县| 金溪县| 万山特区| 黔西县| 开化县| 宁陵县| 城固县| 化德县| 乌海市| 铅山县| 太康县| 威海市| 五峰| 宝坻区| 巴马| 韶山市| 阿尔山市| 卢湾区| 白银市| 石首市| 红桥区| 敦煌市| 阜南县| 龙里县| 庆城县| 财经| 南康市| 富宁县| 铁岭县| 凌源市| 镇巴县| 德清县| 浦城县| 张家口市|