对象数据库
维基百科,自由的百科全书
对象数据库是一种以对象形式表示信息的数据库。对象数据库的数据库管理系统被称为 ODBMS 或 OODBMS。
两个主要原因让用户使用对象数据库技术。首先,关系数据库在管理复杂数据时显得笨重。其次,被应用软件操作的数据一般是用面向对象的编程语言如 C++, Java, Delphi和 C# 写成,而那些用来转化数据表示和关系数据库元组的代码很冗繁,执行时也有不少耗时。 这种应用程序和数据库表示信息的模式之间的不匹配有时也被称为 impedance mismatch。
目录 |
[编辑] 历史
对象数据库管理系统在 1980 年代早中期 grew out of research 对图结构的对象有了本质的数据库管理支持。“面向对象数据库系统”这一术语第一次出现于1985年。著名的研究项目包括 Encore-Ob/Server (布朗大学), EXODUS(Wisconsin 大学), IRIS (惠普), ODE(Bell 实验室), ORION (MCC), Vodak (GMD-IPSI), and Zeitgeist (Texas Instruments)。其中以 ORION 项目发表的论文数为最多。MCC 的 Won Kim 将这些论文中最有价值的一部分汇编成书并由 MIT 出版社出版。
对象数据库管理系统为面向对象编程语言增加了持久的概念。 早期的商品数据库集成了多种语言: GemStone (Smalltalk), Gbase (Lisp), and Vbase (COP). COP 是 C 对象处理器 (C Object Processor),一种基于 C 的早于 C++ 的专有语言。 1990 年代大部分时间由 C++ 统治着商品对象数据库管理系统市场。 厂商在 1990 年代晚期加入了 Java 并于最近加入了 C#。
[编辑] 对象数据库的采纳
基于持久编程的对象数据库在一些应用领域获得了认可,如工程和空间数据库,通信和科学领域如高能物理和分子生物。他们对主流的商业数据处理没有什么影响,尽管在获得了一些应用在部分特殊领域如金融服务。值得指出对象数据库保持着世界上最大的数据库(超过1000Terabytes在斯坦福线性加速中心)和被记录到的最高摄取率(一 Terabyte每小时)。
2004 年以来,当出现了易用和普遍可支付的开放源代码对象数据库时, 对象数据库进入了第二次增长期。这些开放源代码的对象数据库完全用OOP语言如Java,C++, 或 C#写出。 ObjectDB 是对象关系数据库的一个例子。
[编辑] 技术特性
在纯对象数据库中,数据以对象的形式存储,这些对象只能由其所属的类中定义的方法来操作。 对象被组成一种类型层次(有时是格式 lattic),子类继承其超类的特性。 对象中可以有到其他对象的引用,于是应用程序可以以一种导航式的编程风格访问数据。
多数对象数据库也提供了一些查询语言,允许用声明式编程访问对象。在对象查询语言以及查询和导航接口的集成领域,产品间出现了很大的区别。ODMG 用对象查询语言 OQL 作了标准化的尝试。
访问数据可以更快,表的联合常常是不必要的(在关系数据库的表实现方式下)。这是因为无需查询只需通过指针就可以直接获得对象。
产品间的令一点不同是数据库定义模式的方式。 然而一般的特征是编程语言和数据库模式使用相同类型的定义。
多媒体应用程序将变得容易因为与数据相关的类方法保证了数据的正确解释。
许多对象数据库提供对版本的支持。 一个对象可以看作是他所有版本的集合。 同时,对象版本也可以被看作是对象自身的属性。 一些对象数据库也提供了对触发器和约束的语义支持, 这些特性是活跃数据库(active database) 的基础。
[编辑] 优势和劣势
对 ODBMS 和关系 DBMS 的基准测试显示 ODBMS 在某些任务上优势明显。 主要原因是许多操作使用导航式而不是声明式接口, 并且对数据的导航式访问通常可以有指针高效得实现。
对基于导航数据库技术,如ODBMS的批评指出, 基于指针的技术为一些特殊的搜索路径或视点(viewpoint)作了优化。而且,对一般目的的查询,基于指针的技术比关系型要慢并难于形式化。导航式显得适合与特定应用而失了普遍,未来的使用。
ODBMS 的其他技术显得缺失了与SQL世界中大量工具或特性的互操作性包括但不限于产业标准互联性,报告工具, OLAP 工具以及备份和恢复标准。 另外,不像关系数据库,对象数据库缺少形式化的数学基础,而这反过来导致他们在查询支持上的弱势。 不过,这一缺陷被部分弥补,因为一些 ODBMS 除了 导航式访问外也提供了对 SQL 的完全支持,如 Objectivity/SQL++。
事实上,在概念封装即隐藏数据使他只能通过公布的一些接口访问 和关系数据库技术假定数据只能由基于数据内容的查询而不是预定义的查询路径的形式访问之间存在着本质的张力。数据库中心论倾向于用声明和属性驱动的观点看世界, 而面向对象倾向于从行为的观点看世界。这就是 围绕着OOP和数据库的许多 impedance mismatch 问题之一。
尽管很多评论认为对象数据库是失败的,但主要的辩护者仍很活跃,更紧密得整合数据库的功能和对象编程语言的尝试在研究和产业社区里仍在继续。