ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:525.60KB ,
资源ID:21010507      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21010507.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(面向对象数据库 db4o 之旅Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

面向对象数据库 db4o 之旅Word格式.docx

1、 private int age; public String getName() return name; public int getAge() return age; 考虑下面这个场景:找到“年龄小于 20 岁的所有学生”?使用 ORL 实现如清单2:清单2 ORL 实现String oql = select * from student in AllStudents where studentage 20;OQLQuery query = new OQLQuery(oql);Object students = queryexecute();使用 JDOQL 实现如清单3:清单3 JDO

2、QL 实现Query query = persistenceManagernewQuery(Studentclass, age );Collection students = (Collection)queryexecute();上面的方法都存在一些普遍问题: 现代集成开发环境不会检查内嵌字符串的语义和语法错误。在上面所有查询语句中, age 字段和数值 20 都被认为是数字类型,但是没有一个 IDE 或编译器能检查其实际正确性。如果开发者混淆了查询代码比如,改变了 age 字段的名字或类型,将导致上面所有的查询语句在运行时报错,而不会在编译时提示。 现代敏捷开发技术鼓励不断进行重构来维持清晰

3、和与时俱进的类模型,以便准确重现不断演进的域模型。如果查询代码难于维护,它会延迟决定重构的时间并不可避免的引入低质量代码。 所有列出的查询都直接用 Student 类的私有成员 age,而不是使用它的公共接口 studentgetAge(),因此他们都破坏了面向对象封装规则,违反接口和实现应该分离的面向对象法则。 所有的查询都非 100% 的原生。既然存在如此多的问题, 为什么不直接使用纯面向对象数据库呢?有些开发者可能会说:“它缺乏数学模型的支持, 还不够成熟”。的确, RDBMS 发展了几十年才有今天的成就,已经非常完善了。而技术的革新是无止境的, 故步自封的永远都跟不上变化的脚步。让我们

4、来简单回顾一下对象数据库的发展史(资料来源于 Wiki 百科全书):“面向对象数据库系统”这一术语第一次出现于 1985 年。著名的研究项目包括:Encore-Ob/Server ( 布朗大学), EXODUS(Wisconsin 大学), IRIS (惠普), ODE ( Bell 实验室), ORION (MCC ) ,Vodak (GMD-IPSI)和 Zeitgeist (Texas Instruments)。其中以 ORION 项目发表的论文数为最多。 MCC 的 Won Kim 将这些论文中最有价值的一部分汇编成书并由 MIT 出版社出版。对象数据库管理系统为面向对象编程语言增加了

5、持久的概念。最早的商品化 ODBMS 出现在 1986 年,是 Servio 公司(现在的 GemStone 公司)和 Ontos 公司推出的。后来(九十年代) Object Design ( ODI )、 Versant 、 Objectivity 、 O2 Technology 、 Poet 、 Ibex 、 UniSQL 和 ADB MATISSE 等公司也加入了这个开拓行列。而今天,一家来自加州硅谷的开源面向对象数据库公司 db4objects 为我们带来了db4o, 一款性能卓越的纯面向对象数据库,也是我们这篇和后续文章将会介绍的主角。db4o 为我们带来的是这样一种面向对象的查询方

6、式: 100% 的原生 查询语言应能用实现语言( Java 或 C# )完全表达,并完全遵循实现语言的语义。 100% 的面向对象 查询语言应可运行在自己的实现语言中,允许未经优化执行普通集合而不用自定义预处理。 100% 的类型安全 查询语言应能完全获取现代 IDE 的特性,比如语法检测、类型检测、重构,等等。什么是 db4o“利用表格存储对象,就像是将汽车开回家,然后拆成零件放进车库里,早晨可以再把汽车装配起来。但是人们不禁要问,这是不是泊车的最有效的方法呢。” Esther Dyson db4o 是一个开源的纯面向对象数据库引擎,对于 Java 与 NET 开发者来说都是一个简单易用的对

7、象持久化工具,使用简单。同时,db4o 已经被第三方验证为具有优秀性能的面向对象数据库, 下面的基准测试图对 db4o 和一些传统的持久方案进行了比较。db4o 在这次比较中排名第二,仅仅落后于JDBC。通过图 1 的基准测试结果,值得我们细细品味的是采用 Hibernate/HSQLDB 的方案和 JDBC/HSQLDB 的方案在性能方面有着显著差距,这也证实了业界对 Hibernate 的担忧。而 db4o 的优异性能,让我们相信: 更 OO 并不一定会牺牲性能。图1 HSQLDB 基准测试同时,db4o 的一个特点就是无需 DBA 的管理,占用资源很小,这很适合嵌入式应用以及 Cache

8、 应用, 所以自从 db4o 发布以来,迅速吸引了大批用户将 db4o 用于各种各样的嵌入式系统,包括流动软件、医疗设备和实时控制系统。db4o 由来自加州硅谷的开源数据库公司 db4objects 开发并负责商业运营和支持。db4o 是基于 GPL 协议。db4objects 于 2004 年在 CEO Christof Wittig 的领导下组成,资金背景包括 Mark Leslie 、 Veritas 软件公司 CEO 、 Vinod Khosla ( Sun 公司创始人之一)、 Sun 公司 CEO 在内的硅谷高层投资人组成。毫无疑问,今天 db4objects 公司是硅谷炙手可热的技

9、术创新者之一。db4o 特性db4o 的目标是提供一个功能强大的,适合嵌入的数据库引擎,可以工作在设备,移动产品,桌面以及服务器等各种平台。主要特性如下: 开源模式。与其他 ODBMS 不同,db4o 为开源软件,通过开源社区的力量驱动开发 db4o 产品。 原生数据库。db4o 是 100% 原生的面向对象数据库,直接使用编程语言来操作数据库。程序员无需进行 OR 映射来存储对象,大大节省了程序员在存储数据的开发时间。 高性能。 图2为 db4o 官方公布的基准测试数据,db4o 比采用 Hibernate/MySQL 方案在某些测试线路上速度高出 44 倍之多!并且安装简单,仅仅需要 40

10、0Kb 左右的 jar 或 dll 库文件。在接下来的系列文章中,我们将只关注在 Java 平台的应用,但是实际上 db4o 毫无疑问会很好地在 NET 平台工作。图2 db4o 官方基准测试数据 易嵌入。使用 db4o 仅需引入 400 多 k 的 jar 文件或是 dll 文件,内存消耗极小。 零管理。使用 db4o 无需 DBA,实现零管理。 支持多种平台。db4o 支持从 Java 11 到 Java 50,此外还支持 NET 、 CompactFramework 、 Mono 等 NET 平台,也可以运行在 CDC 、 PersonalProfile 、 Symbian 、 Sava

11、je 以及 Zaurus 这种支持反射的 J2ME 方言环境中,还可以运行在 CLDC 、 MIDP 、 RIM/Blackberry 、 Palm OS 这种不支持反射的 J2ME 环境中。或许开发者会问,如果现有的应用环境已经有了关系型数据库怎么办?没关系,db4o 的 dRS(db4o Replication System)可实现 db4o 与关系型数据库的双向同步(复制),如图 3 。 dRS 是基于 Hibernate 开发,目前的版本是 10 ,并运行在 Java 12 或更高版本平台上,基于 dRS 可实现 db4o 到 Hibernate/RDBMS 、 db4o 到 db4o

12、 以及 Hibernate/RDBMS 到 Hibernate/RDBMS 的双向复制。dRS 模型如图3 图3 dRS 模型结论db4o 因为其开源的理念,以及创新的实现,获得了 Java Pro 2006 读者选择奖。无论从成功案例还是 db4o 本身来看,这款纯面向对象数据库都值得我们关注,从官方论坛反馈情况看,有相当的用户准备把关系型数据库迁移到 db4o 。而最新发布的 55 版本,更是把性能再次提升很多。在接下来的文章中,我会继续和大家分享 db4o 给我们带来的这场面向对象数据库风暴。第 2 部分: db4o 查询方式这篇文章是 db4o 之旅 系列文章的第二篇,介绍了面向对象数

13、据库 db4o 的安装、启动以及三种查询语言,并对三种查询语言做了比较。查看本系列更多内容标记本文!在 db4o 之旅 系列文章的第一部分:初识 db4o 中,作者介绍了 db4o 的历史和现状,应用领域,以及和 ORM 等的比较。在这篇文章中,作者将会介绍 db4o 的安装、启动以及三种不同的查询方式:QBE(Query by Example)、SODA(Simple Object Database Access) 以及 NQ(Native Queries),并分别通过这三种不同的途径实现了两个关联对象的查询。本文还示范了开发中最经常用到的几个典型功能的 db4o 实现。下载和安装 db4o

14、db4o 所有最新的版本都可以直接在官方网站上下载,进入 db4o 的下载页面,我们可以看到最新的 for Java 稳定版本是 55,包括 JAR、源代码、入门文档、API 等内容的完整的打包文件只有 6 MB,db4o 还有一个对象数据库管理工具 ObjectManager,目前版本是 18(请在参考资源中下载)。接着在 Eclipse 中新建 Java 项目,把 db4o 对象数据库引擎包 db4o-55-java5jar 导入进项目。由于 db4o 支持多种版本的 JDK,除了 for JDK 50 的 db4o-55-java5jar 外,还有 for JDK 11、12-14 的

15、JAR 包,以适应多种环境。与 Hibernate、iBATIS SQL Maps 相比,db4o 更加自然,无需过多地引用第三方支持库。开启数据库db4o 怎样进行对象持久化呢?通过浏览目录可以发现,与传统的 RDBMS 一样,db4o 也有自己的数据库文件, 在 db4o 中数据库文件的后缀名是“*yap”。让我们先来了解一下 db4o 对象数据库引擎的主要包结构: comdb4o comdb4o 包含了使用 db4o 时最经常用到的功能。两个最重要的接口是 comdb4oDb4o 和 comdb4oObjectContainer。comdb4oDb4o 工厂是运行 db4o 的起点,这个

16、类中的静态方法可以开启数据库文件、启动服务器或连接一个已经存在的服务器,还可以在开启数据库之前进行 db4o 环境配置。comdb4oObjectContainer 接口很重要,开发过程中 99% 的时间都会用到它,ObjectContainer 可在单用户模式下作为数据库实例,也可作为 db4o 服务器的客户端。每个 ObjectContainer 实例都有自己的事务。所有的操作都有事务保证。当打开 ObjectContainer,就已经进入事务了,commit() 或 rollback() 时,下一个事务立即启动。每个 ObjectContainer 实例维护它自己所管理的已存储和已实例化

17、对象,在需要 ObjectContainer 的时候,它会一直保持开启状态,一旦关闭,内存中数据库所引用的对象将被丢弃。 comdb4oext 你也许想知道为什么在 ObjectContainer 中只能看见很少的方法,原因如下:db4o 接口提供了两个途径,分别在 comdb4o 和 comdb4oext 包中。这样做首先是为了让开发者能快速上手;其次为了让其他产品能更容易的复制基本的 db4o 接口;开发者从这一点上也能看出 db4o 是相当轻量级的。每个 comdb4oObjectContainer 对象也是 comdb4oextExtObjectContainer 对象。可以转换成 E

18、xtObjectContainer 获得更多高级特性。 comdb4oconfig comdb4oconfig 包含了所有配置 db4o 所需的类。 comdb4oquery comdb4oquery 包包含了构造“原生查询, NQ(Native Queries)”所需的 Predicate 类。NQ 是 db4o 最主要的查询接口。db4o 提供两种运行模式,分别是本地模式和服务器模式。本地模式是指直接在程序里打开 db4o 数据库文件进行操作:ObjectContainer db = Db4oopenFile(autoyap而服务器模式则是客户端通过 IP 地址、端口以及授权口令来访问服务

19、器:服务器端:ObjectServer server=Db4oopenServer(,1212);servergrantAccess(admin,123456客户端:ObjectContainer db=Db4oopenClient(192168010,1212,两种方式都可以得到 ObjectContainer 实例,就目前 Java EE 应用环境来看,服务器模式更有现实意义;而本地模式更适合于嵌入式应用。为了简化演示,本文在下面的例子都将采用本地模式。在下面的例子里,我们都会用到下面两个对象: People 和 AutoInfo 对象。People 对象清单1:清单1 People 对象

20、package bo;public class People private javalangInteger _id; private javalangString _name; private javalangString _address; private javautilList _autoInfoList; public javalangInteger getId() return _id; public void setId(javalangInteger _id) this_id = _id; public javalangString getName() return _name

21、; public void setName(javalangString _name) this_name = _name; public javalangString getAddress() return _address; public void setAddress(javalangString _address) this_address = _address; public javautilList getAutoInfoList() return this_autoInfoList; public void addAutoInfo(AutoInfo _autoInfoList) if (null = this_autoInfoList) this_autoInfoList = new javautilArrayList“Open File”选择刚才我们保存的“autoyap”文件(“autoyap”文件可在项目的根目录下找到),最新的 ObjectManager 18 版本为我们提供了“Read Only”方式读取数据库文件,避免 ObjectManager 占用数据库文件所导致的程序异常。打开之后,如图 2 所示,刚才存贮的 People 对象已经在数据库中了,并且还可以很直观的看到 AutoIn

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1