开源面向对象数据库db4o之旅,第1部分 初识db4o

前言

业界对持久存储领域的追求从未停止过,为了更方便、更容易地用对象表达 我们的思维,开源领域和商业领域都涌现了许多新技术, ORM 的出现恰恰说明 了这点。最近一年,业界也在反思,到底 ORM 给我们带来的是便利还是麻烦。 矛头指向大名鼎鼎的 Hibernate ,纷纷议论其性能问题,大家似乎要达成这样 的共识:“在业务逻辑复杂的地方用 SP ,而一般的 CRUD 还是 Hibernate ” ,就连全球知名的 BearingPoint 也有类似看法。下面一个简单的例子,说明了 传统 ORM 工具的弊端。让我们考虑一个简单的 Student 对象如清单1:

清单1. Student 类

public class Student {
  private String name;
  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 student.age <20";
OQLQuery query = new OQLQuery(oql);
Object students = query.execute();

使用 JDOQL 实现如清单3:

清单3. JDOQL 实现

Query query = persistenceManager.newQuery(Student.class,  "age <20");
Collection students = (Collection)query.execute();

上面的方法都存在一些普遍问题:

现代集成开发环境不会检查内嵌字符串的语义和语法错误。在上面所有查询 语句中, age 字段和数值 20 都被认为是数字类型,但是没有一个 IDE 或编译 器能检查其实际正确性。如果开发者混淆了查询代码-―比如,改变了 age 字 段的名字或类型,将导致――上面所有的查询语句在运行时报错,而不会在编译 时提示。

现代敏捷开发技术鼓励不断进行重构来维持清晰和与时俱进的类模型,以便 准确重现不断演进的域模型。如果查询代码难于维护,它会延迟决定重构的时间 并不可避免的引入低质量代码。

所有列出的查询都直接用 Student 类的私有成员 age,而不是使用它的公共 接口 student.getAge(),因此他们都破坏了面向对象封装规则,违反接口和实 现应该分离的面向对象法则。

所有的查询都非 100% 的原生。

既然存在如此多的问题, 为什么不直接使用纯面向对象数据库呢?有些开发 者可能会说:“它缺乏数学模型的支持, 还不够成熟”。的确, RDBMS 发展了 几十年才有今天的成就,已经非常完善了。而技术的革新是无止境的, 故步自封 的永远都跟不上变化的脚步。

让我们来简单回顾一下对象数据库的发展史(资料来源于 Wiki 百科全书) :“面向对象数据库系统”这一术语第一次出现于 1985 年。著名的研究项目包 括:Encore-Ob/Server ( 布朗大学), EXODUS(Wisconsin 大学), IRIS ( 惠普), ODE ( Bell 实验室), ORION (MCC ) ,Vodak (GMD-IPSI)和 Zeitgeist (Texas Instruments)。其中以 ORION 项目发表的论文数为最多。 MCC 的 Won Kim 将这些论文中最有价值的一部分汇编成书并由 MIT 出版社出版 。对象数据库管理系统为面向对象编程语言增加了持久的概念。最早的商品化 ODBMS 出现在 1986 年,是 Servio 公司(现在的 GemStone 公司)和 Ontos 公司推出的。后来(九十年代) Object Design ( ODI )、 Versant 、 Objectivity 、 O2 Technology 、 Poet 、 Ibex 、 UniSQL 和 ADB MATISSE 等公司也加入了这个开拓行列。

而今天,一家来自加州硅谷的开源面向对象数据库公司 db4objects 为我们 带来了db4o, 一款性能卓越的纯面向对象数据库,也是我们这篇和后续文章将 会介绍的主角。

db4o 为我们带来的是这样一种面向对象的查询方式:

100% 的原生 查询语言应能用实现语言( Java 或 C# )完全表达,并完全 遵循实现语言的语义。

100% 的面向对象 查询语言应可运行在自己的实现语言中,允许未经优化执 行普通集合而不用自定义预处理。

100% 的类型安全 查询语言应能完全获取现代 IDE 的特性,比如语法检测、 类型检测、重构,等等。

时间: 2024-08-01 12:45:49

开源面向对象数据库db4o之旅,第1部分 初识db4o的相关文章

开源面向对象数据库db4o之旅,第3部分 深入db4o

前言 在开源面向对象数据库 db4o 之旅 系列文章的第 1 部分:初识 db4o 中, 作者介绍了 db4o 的历史和现状,应用领域,以及和 ORM 等的比较: 在第 2 部分:db4o 查询方式中, 作者介绍了 db4o 的三种不同的查询方式:QBE.SODA 以及 Native Queries,并分别通过这三种不同的途径实现了两个关联对象的查 询. 前面我们已经介绍了如何在 db4o 中查询以及添加对象,在本文中我们将会 向您介绍在 db4o 中如何对对象进行更新以及删除操作. 更新数据

开源面向对象数据库db4o之旅,第2部分 db4o查询方式

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

面向对象数据库db4o之旅,第4部分 使用dRS

前言 在开源面向对象数据库 db4o 之旅 系列文章的第 1 部分:初识 db4o 中, 作者介绍了 db4o 的历史和现状.应用领域.以及和 ORM 等的比较:在第 2 部 分:db4o 查询方式 中 , 作者介绍了 db4o 的三种不同的查询方式:QBE.SODA 以及 Native Queries,并分别通过这三种不同的途径实现了两个关联对象的查 询:在第 3 部分:深入 db4o 中,作者介绍了 db4o 的修改和删除,引入了" 更新深度 (update depth)"这一重要

Java的面向对象数据库db4o

上学的时候就听老师说过有对象数据库. 但是我所接触的数据库都是关系型数据库mysql,oracle,ms sql server,或是db2. 最近在ibm development work上看到一个名为db4o的对象数据. 才看第一章,学过Java的都应该很容易理解的. 确实它真的很简单. 看起来似乎就像是在一个Java的操作,而并非如我们所以为的那样的想关系型数据库中操作一样. 如果有兴趣的话,大家也可以去看看. 不过,文章作者也对db4o的一些缺点进行了列举. 自己并没有进行很深入的学习.

Java中8个顶级开源NoSQL数据库!

Java中8个顶级开源NoSQL数据库! NoSQL Databases, Java, Terrastore, Neo4j, Voldemort, HBase, InfoGrid, HyperGraphDB, Perst, NeoDatis ODB NoSQL正在崛起.许多企业和用户已经将MySQL数据库替换成了NoSQL数据库.NoSQL使分析非结构化的数据变得更容易,因此开发者必须意识到存在于NoSQL世界中的趋势和工具. 1.Terrastore 新的文档存储技术可以提供先进的伸缩性和弹性

jQuery谷歌地图插件Maplace(图中附送如何攻击开源中国数据库)

jQuery谷歌地图插件Maplace 图中附送如何攻击开源中国数据库..   var P1 = [ { lat: 45.468945, lon: 45.73684365, title: 'Title', html: 'Content', zoom: 10, animation: google.maps.Animation.DROP } ]; var LocsA = [ { lat: 45.9, lon: 10.9, title: 'Title A1', html: '<h3>Content

时间序列数据的存储和计算 - 开源时序数据库解析(一)

开源时序数据库   如图是17年6月在db-engines上时序数据库的排名,我会挑选开源的.分布式的时序数据库做详细的解析.前十的排名中,RRD是一个老牌的单机存储引擎,Graphite底层是Whisper,可以认为是一个优化的更强大的RRD数据库.kdb+.eXtremeDB和Axibase都未开源,不做解析.InfluxDB开源版和Prometheus的底层都是基于levelDB自研的单机的存储引擎,InfluxDB的商业版支持分布式,Prometheus的roadmap上也规划了分布式存

什么是面向列开源分布式数据库Hbase - 产品和技术

什么是面向列开源分布式数据库Hbase 发布时间:2012.04.16 14:41      来源:和讯     作者:和讯 HBase是一个分布式的.面向列的开源数据库,由Apache基金会开发.HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.它基于列的而不是基于行的模式.用户存储数据行在一个表里.一个数据行拥有一个可选择的键和任意数量的列.用户可根据键访问行,以及对于一系列的行进行扫描和过滤.HBase一个可以横向扩张的表存储系统,能够为大规模数据提供速度极快的低等

[转]李战大师-悟透delphi 第十一章 面向对象数据库基础

第十一章  面向对象数据库基础 第二节 数据对象的标识我们在关系数据库的设计和开发中,可能经常需要一些唯一的编号或标识,用来作为关键字,以区别每一个不同的人,每一张不同的单据,每一次不同的信息登记,等等.并且,我们也一直采用这些编号和标识,作为关系的连接字段.但是,要保证编号或标识是完全唯一的,却是一个不大不小的难题.下面我们将详细讨论这一问题,并希望能从另一个高度来理解这一问题.不过,我们首先来看看问题是怎样由来的.现在,给大家讲一个故事. 从前,在北京降生了一个漂亮的小女孩.接生的李阿姨说,