一般的数据库应用程序例如银行,教务处等需要应对的数据类型结构简洁,进行数据库设计和应用程序设计时负担较小。但是对于那些不得不与复杂,特殊化的数据结构打交道的新型的数据库应用,例如卫星数据应用,CAD建模应用,多媒体数据库应用,让应用程序显式地管理数据表格之间的关联关系、定义复杂的主键、实现复杂的存储过程无疑是不现实的。在这些应用场景下,传统关系型数据库性能较差,例如实现一个最近邻查找可能都需要引入join操作。
面向对象数据库在1985年左右应运而生,主要是希望解决上述问题,他们主要以工程应用软件作为其市场[2]。当然,由于OODB缺乏数据保护、访问控制机制、查询处理和事务处理系统,大部分OODB并不将商业数据处理作为他们市场,这也是OODB数据库无法获得较高数据库市场占有率的根本原因。
面向对象数据库以对象作为存储的基本单位,多个类型相同的对象的集合成为一个类。现实世界的任一实体都被统一地模型化为一个对象,每个对象有一个唯一的标识,称为对象标识。借助持久性编程语言的底层特性,任何对象从磁盘读入内存和写回磁盘均能隐式地保证,在内存中的数据只是数据库中该对象的临时副本,应用程序可以调用属于该对象的接口,处理封装在对象内部的数据,类似C++和java那样。
最后总结而言,面向对象数据库相比关系型数据库的优缺点如下[3]:
- 数据模型为语义数据模型,基于现实世界。
- 对象访问不需要装箱和拆箱操作,节省编程和执行时间。
- 更好的并发控制 – 对象的层次结构可能被锁定。
- 在分布式架构状态下可以很好的工作。
- 关系表更简单易懂,数据结构的存储较为简单。
- 数据间的关系相对简单时,面向对象数据库效率较低。
- 关系数据库有更多的工具,对事务处理,分析型数据处理任务的支持更好。
- 关系型数据库拥有统一的标准,相应的服务和支持更加稳定。
[1]. What is an Object-Oriented Database, https://study.com/academy/lesson/what-is-an-object-oriented-database.html 2020,2,24
[2]. Joseph M. Hellerstein and Michael Stonebraker. What Goes Around Comes Around. Readings in Database Systems, 4th Edition (2005)
[3]. 面向对象数据库,https://tson.com/object-oriented-databases-translate/ 2020,2,24