简介
面向对象数据库系统(OODBS)支持定义和操作OODB,应满足两个标准:首先它是数据库系统,其次它也是面向对象系统。第一个标准即作为数据库系统应具备的能力(持久性、事务管理、并发控制、恢复、查询、版本管理、完整性、安全性)。第二个标准就是要求面向对象数据库充分支持完整的面向对象(OO)概念和控制机制。综上所述,我们将面向对象数据库简写为:面向对象数据库=面向对象系统+数据库能力。
面向对象是一种认识方法学,也是一种新的程序设计方法学。把面向对象的方法和数据库技术结合起来可以使数据库系统的分析、设计最大程度地与人们对客观世界的认识相一致。面向对象数据库系统是为了满足新的数据库应用需要而产生的新一代数据库系统。
基本技术数据库转换技术异构数据库系统中各数据库模式和操作之间转换是一个关键研究课题。由于关系数据库系统主宰当今数据库应用领域,而面向对象数据库能满足更高一级数据库要求,所以有必要在这两种数据库模型中建立一种映射关系,实现模式和操作相互转换1。
转换一般有两种途径:从关系DB到面向对象DB(RDBtoOODB)和从面向对象DB到关系DB(OODBtoRDB)。OODBtoRDB转换技术转换时要保证一致性(对象语义和动作信息在转换过程中不丢失)。转换包括数据模式和数据操作转换。
数据模式转换
对象标识符是对象存在的唯一标志,两个对象相同等价于其标识符相同。与关系模式不同的是面向对象中类属性分为原子属性、组合属性和集合属性。数据模式转换指从OODB到RDB数据描述语言(DML)的转换,基本思路是把父类属性扩展到所有子类中,每个类映射为一个关系;类的每个属性映射为它对应的关系属性。类中不同类型属性作不同处理。默认对象标识符属性映射为RDB关键字属性,原子属性映射为固定属性,组合属性映射为与主属性对应关系关键字相关的外关键字,集合属性映射为原子属性加上具有两个属性的关系,其中一个属性是设置与对应的集合属性的联系;另一个属性是处理集合元素。方法转换是数据模式转换的重要转换,方法有定义和调用。标准RDB无支持用户自定义函数和过程的机制,近年来一些商业化RDBMS提供这方面的功能,称为PSM子程序(包含用户自定义函数和过程)。标准PSM子程序至少支持以下两种功能:
①创建用户自定义函数,并从标量表达式中调用此函数;
②创建用户自定义过程,并通过一个新的SQL语句(典型的是CALL)调用这些过程。
继承性是OODBMS典型特性,M.Blaha提出四种借助关系表处理继承性的方法,其核心是把分层结构中的每个类转换为一张表。
数据操作转换
数据模式转换是指从OODB到RDB数据操纵语言(DCL)的转换。本文从OODB to RDB角度讲述。数据库常用操作有数据查询、插入、删除和修改,它们都离不开限制条件,所以先讲述限制条件转换。
我们用 和 分别表示类限制条件和关系限制条件。相比之下, 比 多两个机制:路径表达式操作数机制和集合操作数及运算符。通过直接设置类C某些属性及以类C为根类组合层次结构中的限定谓词得到 。根据 我们得到一个类限定图GC,同样每一个 也对应一个关系限定图GR。实施限制条件转换时,通常是先根据 构造 ,然后把GC转换成GR,最后由GR产生 。数据查询转换是把对象查询运算转换为关系查询运算。其过程是从指定的类和(或)它的所有子类映射关系中选出与 限定对象对应的元组(由关系限定条件 所限定)。
数据修改转换是把对象修改运算转换为关系修改运算。该操作受QR(由 映射得到)限定,过程是删除所有旧元组后再插人新元组。数据插入转换与此相似。数据删除转换是把对象删除运算转换为关系删除运算,该操作受 (由QC映射得到)限定,此时必须把与这些组合对象对应的元组中那些外关键字属性设置为NULL。
模式演进技术面向对象数据库中的类为适应需求变化而随时间变化称为模式演进,包括创建新类、删除旧类、修改类属性和操作等。模式演进必须保持模式一致性(模式自身内部不能出现矛盾),这通过模式一致性约束来描述。模式一致性约束可分为唯一性约束(同一模式中名字唯一)、存在性约束(显示引用的成分须存在)和子类型约束(子类和父类的联系不可有环,不能有从多继承带来的任何冲突等)等,满足所有这些一致性约束的模式称为一致模式。模式演化历来是面向对象数据库研究的重点与难点。其解决途径一般有以下两种:
①模式改变考虑现有应用程序,使两者相互集成和适应。
②开发新的高级数据库编程语言。
常用演化方法有TSE(透明模式演化)、等价模式演化和基于数据字典的模式演化等。
索引技术面向对象数据库数据庞大而复杂,若无好的索引处理,则数据处理效率十分低下。索引化过程就是对数据进行主体和特征分析,赋予标志的过程。数据索引技术分为三种:继承索引、集聚索引和集成索引。具体技术特点见文献。
事务管理技术传统数据库事务管理特点及不足
传统数据库事务管理由两部分组成:并发控制和恢复。通常用锁协议实现并发控制,用日志协议实现恢复。在工程设计等应用领域需要长事务和协作事务。但事务原子性使得若长事务不能完成,则所有已做的工作均要放弃;而串行性则使得若长事务不结束,其他事务必须等待,造成传统并发控制方法效率极低。
OODBS事务管理技术特点
OODBS事务管理子系统如图所示。其中,锁管理器管理锁表,存放单个活动事务管理锁和等待锁。存储子系统与锁管理器实施对象上锁操作,事务结束时释放此锁。死锁管理器检测和解除死锁。系统采用时间溢出技术,即每个申请均有一时间限制,时间溢出则死锁管理器将事务放弃。日志管理记录对象修改日志。相比传统RDBS,OODBS加锁技术的特点有:加锁逻辑单位是对象而不是类;给一个类对象加锁比给一个关系对象加锁需更多信息;当一个类实例被加锁时,其超类也被加锁。数据库中被加锁项大小称为粒度。采用粗粒度锁机制时并发程序开锁代价低,但系统并发行差;采用细粒度锁机制则保证高度并发性,但系统开锁代价大。OODB采用粗粒度加锁机制同样能达到很高的并行性,加锁的一般是对象,但是如果某一事务要访问同一个类的大多数实例,则对整个类加锁,既保证可靠性,又降低系统开锁代价。
OODBS恢复机制
RDBS支持软故障和硬故障恢复。OODBS采用来自软件故障和用户激活事务夭折的事务恢复,不采用来自磁盘故障的恢复。OODBS采用UNDO日志(更新的对象页事务结束时存入磁盘)。恢复内容主要有以下两种:
(1)多媒体日志恢复。通常OODBS把多媒体数据和其描述部分分开,描述部分通过对象标识符引用相应多媒体数据。存储子系统管理一个能动态变化的空闲块链表,里面存储多媒体数据,系统把它作为多媒体数据日志。如果创建多媒体数据事务夭折,则只需置空描述部分引用并将己分配给多媒体数据的空闲块链重新复位。同样如果删除多媒体数据事务夭折,则描述部分根据日志可恢复到原来状态。
(2)索引页日志恢复。方法有两种:①分裂索引页的插入操作。系统把当前索引页的一半表项分给新页,除了拷贝到新页的表项外,其他表项都记录在日志中。发生故障时,去掉整个新页即可。②合并索引页的删除操作。系统把当前索引页的表项拷贝到新页,除了从当前页删除的表项外,其他表项都记录在日志中。发生故障时,重新使用当前页即可。
虚拟事务
OODBS支持两类事务:常规事务和虚拟事务。前者提交时,所有更新结果都永久地记录到数据库中;它夭折时,所有修改相当于没做。后者总是夭折的,即不论此事务以什么方式结束,对对象的改动不会记录到数据库中,用户能通过此类事务对数据库进行复杂变化并观察结果,不必担心不一致性。虚拟事务对象采用两个副本:影子副本(原始对象,不被更新)和当前副本(被更新对象)。
长事务管理
传统事务模式处理长事务时存在冲突事务间长期等待和系统故障时数据库更新全部撤销两个缺点。OODB中一个长事务可看作一些短事务集合。一个短事务看作并发控制和恢复的基本单位,这样用户能减少锁粒度(把长事务锁变成短事务锁),实现不同长事务并发操作和长事务部分撤销。
视图类实现技术面向对象数据库视图
传统数据库视图从某个特定角度反映数据库,不存储数据,也不占用空间,但可当作实表操作,也称为虚表。OODBS中的视图具备传统数据库中的功能,每个视图是一个“虚类”,由一个或多个类产生,虽不能产生对象实例,但可当作对象实例操作。面向对象数据库中所有视图构成一个有向无环图,其基本元素是对象视图类。对象视图类从模式中源类的某个查询推导产生,它由属性和方法构成,存在继承和合成关系。
面向对象数据库视图实现技术
面向对象数据库中很多操作(如统计、连接查询和视图操作)都能自由访问数据库数据,利用这些操作实现OODBS视图操作,能降低复杂度并提高效率,但容易破坏对象封装性。为了不破坏对象封装性,我们在对象中设计一组接口,系统通过这组接口完成视图操作,这样会增加对象复杂性和OODBS设计难度。为了克服这个缺点,我们对这些接口实行标准化,把它们与数据库中其他对象的服务结合。基于上述条件,我们设计相应类数据结构和操作实现OODBS视图。
面向对象数据库视图集成技术视图类定义好后,我们把它们集成在一起构成有向无环图,其基本元素是对象视图类。
版本管理技术工程类应用中设计工作随时间逐渐演进,本身就是一个不断反复、试探、选择和完善的过程,其间会产生同一被设计对象的多个版本,它们必须妥善管理。为了降低设计复杂性,常常采用分层逐步细化的方法。这样,一个被设计对象由多个子对象构成,每一个子对象同样产生多个版本。子对象某些版本合起来就构成了上层对象某个特定版本,并且如果某个子对象创建一个新版本,上层对象可能派生一个对应的新版本,等等。此外,在模式演化过程中,常用版本管理控制对象演化过程。版本管理有两个方面:
①集合管理。对所有版本管理,其关系有两种,即时间先后关系,是最基本的关系,一般用版本号表示,以及派生关系,如图所示,这种图叫做版本图。版本集合管理常用版本图进行管理。
②引用管理。多版本系统中的对象只是逻辑上虚拟的概念,实际存在的是该对象的各个版本,所以,使用对象就是引用它的某一版本。
一般有两种引用方法:静态引用(直接引用某个对象的特定版本)和动态引用(引用关系指向某个对象,不一定是哪个版本)。相比之下,动态引用更有效,更贴近实际。根据版本是否已“冻结”,版本分为发行版本(已经定型和“冻结”,不可更改)和临时版本(可修改)两种。
安全建模技术随着Internet技术不断发展,安全性已成为不可忽视的问题,利用安全模型能精确地描述系统安全策略。安全模型和数据库系统的结合就是数据库安全建模技术。OODB通常结合RDB安全技术描述OODB安全技术。常用OODB安全模型有支持单级和多级对象的两种模型。相比之下,多级对象模型能更好地描述现实世界实体,是实现OODB安全性的主流。
安全建模基本框架安全建模本质是利用面向对象建模技术,对现实世界各种安全性引入若干种安全性约束分类,进行安全性分等,将现实系统中的安全性语义表达成数据库系统支持的安全性模型。在此过程中可能会产生冲突,引起数据库安全性语义的不一致性,因此,进行一致性检测和解决冲突是必要的。安全建模主要有两个任务:安全性分等和一致性检查与冲突解决。其中的一致性检查与冲突解决任务由机器完成。安全性分等是由OODB提供方法,由应用系统设计者(建模者)完成。
优点OODBS赋予数据库设计和应用开发人员很强的面向对象能力,从而大大扩展了数据库系统的应用领域,提高了开发人员的工作效率和应用系统的质量。面向对象数据模型与传统数据模型相比"在以下方面具有优势2:
1、易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高
在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
问题面向对象数据库技术可望成为继关系数据库技术之后的新一代数据管理技术。尽管目前已有大量的研究开发工作,有一些可支持的面向对象数据库系统,但面向对象数据库的成熟仍有赖于许多关键问题的解决。另一方面,由于面向对象数据库的发展经历了从研究到商用的过程,因而,开发者面对的是涉及各方面的技术问题。对于面向对象数据库来说,最大的挑战是建立一个在性能、一致性、完整性、可靠性和灵活性上优良的数据库。其中一些问题是面向对象数据库所特有的,如2:
性能方面:由于面向对象数据库中数据被存放在许多地方,因此,有效对象聚集是性能好坏的关键因素。这种数据集聚可以以类层次或对象的其它关系为依据。而面向对象数据库的性能提高也需要优良的高速缓冲方案,其目标是根据使用要求使各对象尽可能地放在一起。同时,面向对象数据库技术要想能取代传统的数据库技术,性能改善是必不可少的。提高面向对象数据库的性能尤其是在分布式环境中的性能的一种方法是把访问数据库的应用程序也看作是对象,以使它们在数据库中可象数据对象那样到处移动。在进行查询时,数据库可以选择将数据移至程序还是将程序移至数据。
模式修改:当需要面向对象数据库的升级或新版本时数据库的模式修改或重构将是个问题。面向对象数据模型有丰富的建模能力,这一方面使用户建模容易。另一方面也使面向对象数据库模式复杂,需要有工具支持。视图、演绎能力、语义建模和长事务也是未来面向对象数据库系统应该具备的数据库特征。可扩充体系结构也是一个重要方向。
标准化:标准化和形式化是面向对象数据库系统研究和发展的一个重要方向。几年来,人们在核心面向对象概念方面基本达成了共识,但在面向对象数据模型的其它方面,如&体系结构、编程接口语言上的理解尚未达到一致。有待于在系统研制和应用过程中进行标准化。