DB4O学习笔记

什么是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% 原生的面向对象数据库,直接使用编程语言( Java 或 C# )来操作数据库。程序员无需进行 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 环境中。

 

下载和安装

请到 www.db4o.com 下载,建议下载db4o for .NET 3.5, version 7.12+。安装完后在开始菜单db4o选项卡中会看到帮助文档和两个插件(for VS2005和VS2008),根据本机IDE选择安装插件,安装完后会自动集成到IDE中(图 3)。

图3. db4o for VS插件

 

Demo编写

 

创建一个数据库

(1)、用VS创建一个控制台项目,引用db4o客户端DLL--Db4objects.Db4o.dll(在db4o安装目录bin下可以找到),在Main函数编写如下代码;

1.  static void Main(string[] args)   

2.   {   

3.    

4.       string _DBPath = "D:\\TestDB.yap";   

5.       IObjectContainer db = Db4objects.Db4o.Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), _DBPath);      

6.  //在D盘根目录下创建了一个空的数据库(TestDB.yap),很像文件操作吧,有则打开,没有则建新;        

7.       db.Close();   

8.  }

9.    

(2)、编写两个待存储用的类(Car和Pilot )

1.  public class Pilot   

2.  {   

3.      public Pilot(string name, int points){Name = name; Points = points;}   

4.      public string Name { get; set; }   

5.      public int Points { get; set; }   

6.  }   

7.    

8.  public class Car   

9.  {   

10.     public Car(string model){ Model = model;}   

11.     public Pilot Pilot { get; set; }   

12.     public string Model{get;set; }   

13. }  

(3)、开始存储、查询、修改、删除对象

1.  string _DBPath = "D:\\TestDB.yap";   

2.  IObjectContainer db = Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), _DBPath);//创建或连接数据库                

3.  try  

4.  {   

5.      //1、新增对象   

6.      Car car1 = new Car("Ferrari");   

7.      Pilot pilot1 = new Pilot("Michael Schumacher", 100);   

8.      car1.Pilot = pilot1;   

9.      db.Store(car1);//保存对象到数据库   

10.     Car car2 = new Car("BMW");   

11.     Pilot pilot2 = new Pilot("Rubens Barrichello", 99);   

12.     car2.Pilot = pilot2;   

13.     db.Store(car2);//保存对象到数据库                  

14.     //查询   

15.     IList<Pilot> pilots = db.Query<Pilot>(typeof(Pilot));   

16.     // queryByName

17.     IList<Pilot> pilots1 = db.Query<Pilot>(delegate(Pilot pilot)     

18.     {   

19.         return pilot.Name == "Michael Schumacher";   

20.     });

21.     //Linq 查询  

22.     IList<Pilot> pilots2 = (from Pilot p in db where p.Name.StartsWith("Micha       el") select p).ToList();  

23.   

24.     db.Store(pilot1);  //更新   

25.   

26.     db.Delete(pilot1);//删除   

27.   

28.     db.Commit();//提交事务   

29. }   

30. catch (Exception ex)   

31. {   

32.     db.Rollback();//事务回滚   

33.     throw ex;   

34. }   

35. finally  

36. {   

37.     db.Close();//关闭连接   

38. }  

(4)、利用安装的VS插件查看数据库(工具—>ObjectManage

Enterprise-->Connect),选择数据库路径(D:\TestDB.yap),如下图:

图4. db4o TestDB.yap数据库查看

 

 

总结

 

db4o 因为其开源的理念,以及创新的实现,获得了 Java Pro 2006 读者选择奖。无论从成功案例还是 db4o 本身来看,这款纯面向对象数据库都值得我们关注,从官方论坛反馈情况看,有相当的用户准备把关系型数据库迁移到 db4o 。而最新发布的 7.3 版本,更是把性能再次提升很多,让我们一起分享 db4o 带来的这场面向对象数据库风暴吧。

posted @ 2010-03-28 18:11  Seven.Cheng  阅读(812)  评论(0)    收藏  举报