亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3088 | 回復: 0
打印 上一主題 下一主題

面向對象的數(shù)據庫db4o [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-01-23 10:27 |只看該作者 |倒序瀏覽
接觸到db4o,總結了一下SDK里面的FirstStep,供大家初學的一個參考.
主要內容:
1、什么是db4o
2、db4o的學習資源
3、db4o: the first step
--------------------------------------------------------------------------------
什么是db4o?
db4o是一種純對象數(shù)據庫,相對于傳統(tǒng)的關系數(shù)據庫+ORM,db4o具有以下好處:
1)以存對象的方式存取數(shù)據(廢話~~,不過你考慮一下完全以對象的方式去考慮數(shù)據的存取對傳統(tǒng)的數(shù)據庫設計思維來說是多么大的顛覆);
2)無需數(shù)據庫服務器,只需要一個數(shù)據文件,且dll大小僅為300多k,非常適合作為嵌入式數(shù)據庫;
3)提供Query By Sample, Native Query和Simple Object DataBase Access(SODA)三種方式進行數(shù)據查詢,操作簡便且功能強大,和sql說byebye.
同時,db4o有.net和java兩種版本,.net版本已經支持.net 1.0/1.1/2.0了.
db4o可以在:http://www.db4o.com/default.aspx 下載,最新版本為5.2.同時還有一個叫objectmanager的工具,可用于查看數(shù)據文件中保存的對象,不過安裝前需要安裝jvm.
--------------------------------------------------------------------------------
db4o的學習資源
對于初學者來說,參考db4o的api document和db4o tutorial就夠了,這些在安裝的時候都已經帶了,不用到處找了.另外還可以上db4o的官方forum http://forums.db4o.com/login.aspx?pnr=&ReturnUrl=/forums,人氣還可以.
--------------------------------------------------------------------------------
db4o: the first step
今天我只是簡單的介紹如何使用db4o實現(xiàn)簡單對象的crud操作,并且對db4o的插入和查詢效率進行了初步的測試,下一步會進行繼續(xù)的深入,有興趣的兄弟可以一塊交流,db4o和nhibernate搭配實現(xiàn)orm的確是一套很好的方案.
1、基本概念:
先別去想什么db4o又是一套復雜的開源的東西,今天我們只需要了解com.db4o.ObjectContainer和com.db4o.Db4o兩個類
(1)com.db4o.Db4o:db4o類庫中的關鍵類之一,本文中的用途是用com.db4o.Db4o.OpenFile來創(chuàng)建和打開db4o的數(shù)據庫文件
(2)com.db4o.ObjectContainer:簡單點來說,db4o的數(shù)據庫文件就是一個對象的容器(存儲的是對象嘛~~),我們可以通過Db4o::OpenFile來獲取指向db4o數(shù)據庫文件的ObjectContainer,進行所需的存取操作后,調用ObjectContainer::Close()來關閉這一連接.
或許你會說,怎么會那么簡單,沒錯,今天接觸db4o的時候就是那么舒服,不用管什么數(shù)據庫的Schema.
2、簡單的db4o的存取操作:
示例如何進行對象的存取操作之前,我們先簡單的定義一個對象類,用于db4o的存取.
1 ///  
2     /// 用于測試db4o基本crud操作的對象類
3     ///  
4     public class Entity
5     {
6         private string m_strName;
7
8         public Entity(string strName)
9         {
10             this.m_strName = strName;
11         }
12
13         public string Name
14         {
15             get
16             {
17                 return this.m_strName;
18             }
19             set
20             {
21                 this.m_strName = value;
22             }
23         }
24     }
1)保存對象:
1 private const string CONST_DEFAULT_DATAFILE = @"c:\db4obasic.yap";
2
3 static void Main(string[] args)
4 {
5
6     // 打開數(shù)據文件
7     ObjectContainer container = Db4o.OpenFile(CONST_DEFAULT_DATAFILE);
8
9     try
10     {
11         Entity entity = new Entity("calvin");
12         container.Set(entity);
13     }
14     finally
15     {
16         container.Close();
17     }
18 }
2)刪除已有對象:
1 private const string CONST_DEFAULT_DATAFILE = @"c:\db4obasic.yap";
2
3 static void Main(string[] args)
4 {
5
6     // 打開數(shù)據文件
7     ObjectContainer container = Db4o.OpenFile(CONST_DEFAULT_DATAFILE);
8
9     try
10     {
11         Entity entity = new Entity("calvin");
12         container.Set(entity);
13
14         IList result = container.Get(entity);
15         container.Delete((Entity) result[0]);
16     }
17     finally
18     {
19         container.Close();
20     }
21 }
3)更新對象
1 private const string CONST_DEFAULT_DATAFILE = @"c:\db4obasic.yap";
2
3 static void Main(string[] args)
4 {
5
6     // 打開數(shù)據文件
7     ObjectContainer container = Db4o.OpenFile(CONST_DEFAULT_DATAFILE);
8
9     try
10     {
11         Entity entity = new Entity("foo");
12         container.Set(entity);
13
14         IList result = container.Get(entity);
15         entity = (Entity) result[0];
16         entity.Name = "bar";
17         container.Set(entity);
18     }
19     finally
20     {
21         container.Close();
22     }
23 }
在2)和3)中,我使用了QBE來實現(xiàn)對象的查詢,按照db4o官方的說法,用QBE可以快速的實現(xiàn)對象簡單查詢,但是限制也不少:
“Querying this way has some obvious limitations:
- db4o must reflect all members of your example object.
- You cannot perform advanced query expressions. (AND, OR, NOT, etc.)
- You cannot constrain on values like 0 (integers), "" (empty strings), or nulls (reference types) because they would be interpreted as unconstrained.
- You need to be able to create objects without initialized fields. That means you can not initialize fields where they are declared. You can not enforce contracts that objects of a class are only allowed in a well-defined initialized state.
- You need a constructor to create objects without initialized fields.

推薦使用的方式是Native Query(NQ),這是一種非常奇妙且簡單的查詢方式,我將在后續(xù)的文章中介紹nq,,按照Linkin兄的說法“nq搭配c#2.0的泛型和匿名函數(shù),簡直是數(shù)據查詢的絕配”.
4)db4o的插入性能:
我簡單測試了一下,看看db4o的插入性能如何,試試插入10萬個簡單對對象,代碼斷如下:
1 ///  
2         /// 測試DB4o的插入效率
3         ///  
4         ///  
5         private static void TestBatchInsert(ObjectContainer container)
6         {
7             int iBegin = System.Environment.TickCount;
8
9             for (int i = 0; i 10分鐘(沒耐心繼續(xù)等了),大家一起找找原因吧.
5)db4o的查詢性能:
采用4)中插入的數(shù)據,通過native query的方式查詢Name以"1"開頭的對象,花了10484ms,返回了1111個對象.


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/93829/showart_2158288.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP