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 VS2005VS2008),根据本机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)、编写两个待存储用的类(CarPilot

1.  public class Pilot   

2.  {   

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

4.      public string Name { getset; }   

5.      public int Points { getset; }   

6.  }   

7.    

8.  public class Car   

9.  {   

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

11.     public Pilot Pilot { getset; }   

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  阅读(785)  评论(0编辑  收藏  举报