10.7.4 主动数据库
传统数据库提供的服务都是被动的,只能根据用户或应用程序的要求对数据库进行操作,它丝毫不会根据数据库的内部状态变化情况做相应的处理。而在许多实际的应用领域,如管理信息系统(M IS)、计算机集成制造系统(CIM)、计算机辅助设计和制造系统等常常希望数据库在紧急情况下根据数据库的当前状态,主动进行相应的处理,不需要用户的干预,快速有效地解决实际环境中的问题。
如果一个数据库系统具有各种主动提供服务的功能,并且以一种统一的机制实现各种主动服务,这样的数据库系统就是主动数据库系统(Active Database System)。所以所谓主动数据库就是数据库应该提供主动服务的功能,不管是在关系数据库系统或者是面向对象数据库系统中都是可以实现的。
一、主动数据库的模型
一个主动数据库系统应该在某个特定的事件(Event)发生时,检查给定的条件(Condition),如果条件满足时则执行相应的动作(Action),我们把它称为ECA规则。一个主动数据库系统(ADBS)在功能上由一个数据库系统(DBS)、一个事件驱动的知识库(EB)和相应的事件监视器(EM)组成。
EB是一组由事件驱动的知识的集合,每一项知识规定当何种事件发生时,根据条件,执行什么样的动作。EM是一个负责监视EB中的事件是否发生的模块,如果监视到事件发生则触发系统,按EB中指明的相应知识执行其中预先设定的动作。
因此EB中知识的表示,决定事件发生时,执行什么动作。现在比较常用的是采用事件驱动的“条件-动作”规则表示这种知识。事件驱动的“条件-动作”规则有如下一般形式:
RULE(规则名)[(<参数>…]
WHEN(事件表达式)
IF<条件>THEN<动作1>
……
IF<条件n>THEN<动作n> (n≥1)
END-RULE[<规则名>]
从上述可以看到一旦事件发生,系统就自动地执行IF-THEN语句,检查IF后的条件,如果满足,则执行其后相应的动作。动作完成后,接着逐个检查下一个IF-THEN规则,直到执行完。
我们可以看出,主动数据库包含一个“被动数据库”,它负责常规的事务处理。另外包含一个“主动规则”,其中规定哪些事件发生时,执行什么动作。而系统中还有一个“事件监视器”,监视主动规则中的事件是否发生了。这样,用户可以通过设置各种不同的事件驱动规则,以一种统一的机制来实现诸多主动处理功能,从而满足各种客观需求。
二、主动数据库的体系结构
主动数据库系统是由一个普通的数据库系统、一个事件驱动的知识库和相应的事件监视器组成的。因此,主动数据库管理系统不仅应该具有普通数据库系统的功能,还应该具有为实现其主动性而具有的功能,主要包括:
(1)主动数据库系统应该提供普通数据库系统所提供的所有功能。当我们不考虑数据库的主动功能时,主动数据库和普通数据库应该一样。
(2)主动数据库应该支持用户或应用方便的定义说明自己所需要的主动性,而这些主动特性的说明应成为数据库的永久件部分。
(3)主动数据库应该能够很好地实现用户或应用定义的主动特性,而且能与系统的其他部分有效地集成在一起,包括查询、事务处理、并发控制和权限管理等。
(4)主动数据库应该具有良好的设计环境,应该提供与普通数据库类似的数据库设计和调试工具。
前面我们介绍过主动数据库的组成:ADBS=DBS+EB+EM,由此可以看出主动数据库管理系统与一般数据库管理系统在结构上的区别在于,它除了有一个传统的关系型被动数据库外,还添加了一个事件驱动的事件库和一个或多个事件监视器。主动数据库管理系统的结构如图10-21所示。图中实线表示控制连接,虚线表示数据连接。其实,系统中的用户接口、DDL处理模块、DML处理模块、日志和恢复模块、求助和解释模块、内存表格和缓冲区、数据库和数据字典的组织和处理等与一般数据库管理系统的处理方法没有原则区别,事件监视和执行模块是新增加的部分,它与规则库、数据库、数据字典乃至总控模块都有数据交换关系。
图10-21
三、主动数据库的实现
(1)改造的途径
主动数据库应该具有被动数据库的全部功能,因此实现主动数据库的一个简单方法就是在被动数据库的基础上,增加一层软件实现主动功能。为此只需在原有数据库管理系统之外增加事件监视器和事件库。事件规则库是统一的一个库,由用户预先置好,在应用程序运行的同时,由事件监视器来监视事件的发生,并根据库中所示自动执行相应的动作。
(2)嵌入主动程序设计语言的途径
这种方法需要将一种语言改造成具有主动功能的程序设计语言,然后使用这种语言描述规则库,使其成为这种主动语言的对象。这样设计处理的程序具有主动功能,然后由这种具有主动功能的程序将传统数据封装起来,主动程序作为人机接口,给用户提供一个主动数据库。这种途径减少了规则匹配时间,运行效率可以得到大大提高。
(3)重新设计主动数据库程序途径
就是从零开始,重新设计整个主动数据库系统,这样可以将数据管理和操作与应用程序彻底融合在一起,大大提高系统的性能,当然重新设计一种主动数据库的难度是非常大的。
由此可见,第一种方法简单易行,但是效率不高;第二种途径是一种折中方案,改造的工作量适中,除了在两种语言的接口部分可能损失一定的效率之外,运行效率较好;第3种方法当然是效率最高的,但是实现的难度也是最大的。因此应该根据具体情况和设计要求进行选择。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。