主动数据库产生背景传统数据库是“被动”的——只能根据应用程序的要求而对数据库进行数据的创建、检索、修改、删除等操作,而不能根据发生的事件或数据库的状态“主动”做些什么。数据库仅作为一种被动的数据存储仓库而存在。利用“被动服务”的数据库不能很好地完成带有主动性需求的任务。而在实际应用中,主动性需求是大量存在的,这就呼唤着解决该问题的方案。主动数据库(ActiveDataBaseSystem):是指在没有用户干预的情况下,能够主动地对系统内部或外部所产生的事件作出反应的数据库。主要设计思想:用一种统一而方便的机制实现应用对主动性功能的需求,即系统能把各种主动服务功能与数据库系统集成在一起,以利于软件的模块化和软件重用,同时也增强了数据库系统的自我支持能力。要使数据库具有各种主动功能,就需要对传统数据库添加支持主动规则的功能模块。为了支持ECA规则,主动数据库包括以下几个功能模块:数据模型:在传统数据库中主要指层次模型、网状模型和关系模型等描述和处理实体间联系的方法,而在主动数据库中主要指知识模型执行模型:处理和执行主动规则的方式条件检测:如何检测规则的条件事务调度:如何控制事务执行的次序,使数据库状态满足完整性、一致性等要求知识模型指在主动数据库管理系统中描述、存储和管理ECA规则的方法知识模型还支持有关时间的约束条件传统数据库为实现复杂的参照完整性和数据一致性引进了触发器,但只能描述“单个关系”的更新,且执行方式单一,条件的检查、动作的执行总是在触发后立即执行或事务提交前执行执行模型指ECA规则的处理、执行方式提出了立即式、延迟式、隔离式等执行ECA规则的方式,克服了DBMS中触发器只能顺序执行规则的不足主动规则执行分为五个阶段:信号通知阶段:事件源引起事件发生的现象。规则触发阶段:产生事件(包括复合事件)并触发相应的规则,规则和与之相关的事件形成了规则实例。评估阶段:对触发规则的条件进行评估,条件评估成功的所有规则实例形成了规则冲突集。规则调度阶段:对规则冲突集进行处理,选出下面将要执行的规则执行阶段:执行所选出的规则实例的动作。动作执行时可能产生其它事务,即规则的级联触发。规则执行过程事务调度指如何控制事务的执行次序,使得事务满足一定的约束条件传统DBMS中并发事务的调度应满足可串行化以保证数据库的一致性主动数据库中还需满足事务时间方面的要求主动数据库一般模型在功能结构上,一个主动数据库系统(ADBS)由一个传统数据库系统(DBS)和一个事件驱动的知识库(EB)和相应的事件监视器(EM)组成。ADBMS=DBS+EB+EMDBS:传统数据库系统,用来存储数据和对数据进行维护、管理和运用EB:事件驱动知识库,是一组由事件驱动的知识的集合,每一项知识表示在相应的事件发生时,如何主动地执行其中包含的由用户预先定义的动作EM:是一个随时监视EB中事件是否发生的监视模块,一旦监视到某事件发生时就主动地触发系统,按照EB中指明的相应知识执行其中预先设定的动作主动数据库的主动性主要是通过规则机制实现的,常采用事件驱动的ECA规则模型,即事件--条件--动作(Event-Condition-Action)规则。ECA规则定义:当某一事件(Event)发生后引发数据库管理系统去检测数据库当前状态,看是否满足设定的条件(Condition),若条件满足,则出发规定动作(Action)的执行。ECA一般形式:RULE规则名[参数列表]ON事件列表IF条件1THEN动作1[WHERE约束1][EXCEPTION例外处理动作1]......IF条件nTHEN动作n[WHERE约束n][EXCEPTION例外处理动作n]ENDRULE说明:1)规则名用来在系统中唯一标识该规则,在进行规则的匹配和管理时用来指定规则。2)参数列表,参数列表是可选的,在检查该规则时,这些参数将带入系统的实时值。3)事件列表描述的是该规则要处理的事件。4)条件表达式是一种合法的逻辑公式,如果条件表达式的值为真,则其后描述的动作序列将被执行。5)动作序列是当相应的事件发生并且条件满足时执行的一系列预定的动作,在动作当中,可以进一步引发另一个事件。6)约束是指这条规则执行时必须遵循的约束条件,包括对执行时间的约束、动作开始前的前置条件以及在动作完成后结果应满足的后置条件等等,约束时可选的,当不指明WHERE子句时,表示没有约束。7)异常(例外)处理动作指出在规则的执行过程当中,当出现异常或约束未被满足时所应作的一系列预定的动作,异常处理动作是可选的,当不指明EXCEPTION子句时,表示没有异常处理。指定主动数据库规则的模型也称为事件(Event)-条件(Condition)-动作(Action)模型,即ECA模型。ECA模型通常指显式地应用于数据库的插入、改变、删除等更新操作;或是时态事件,其它外部事件一旦定义的触发事件发生,可能要计算一个可以选择的条件。1.若有条件,则计算条件,true时执行action;2.若无条件,则只要事件发生,就执行动作。通常是一个SQL语句序列,也可能是一个将被自动执行的数据库事务或外部程序事件(Event)动作(Action)条件(Condition)主动数据库系统的体系结构交互程序/程序接口ECA规则库内存表格和缓冲区总控程序DDL处理模块DML处理模块帮助和解释模块日志和恢复模块实用程序包事件监视和动作执行模块数据库数据字典用户应用程序实线为控制连接虚线为数据连接主动数据库的实现实现途径实现主动数据库系统可有以下几种实现途径:(1)改造的途径最简单的实现方案就是在原有数据库管理系统的基础上进行改造。为此只需在原有数据库管理系统之外增加一个能经常有机会(例如具有较高的运行优先级)运行的事件监视器即可。此时,事件库是统一的一个库,由用户预先设置好,在应用程序运行的同时,由事件监视器来监视事件的发生,并根据事件库中所示自动执行相应的动作或动作序列。(2)嵌入主动程序设计语言的途径这种方法把一般程序设计语言改造成一种主动程序设计语言,数据库操作嵌入在其中执行。这种途径已由主动程序设计语言将事件库分成块,分布在各个近程或对象(当采用面向对象范式时)中,运行效率可望大大提高。(3)重新设计主动数据库程序设计语言的途径按上节所述.重新设计主动数据库程序设计语言来将数据的定义、操作、维护和管理功能与应用程序彻底融合在一起,这自然也是—条可取的途径。这就彻底地解决了所谓“阻抗不匹配”问题。三种途径对比一般来说,第一种途径是一种最简单的途径,但效率较差;第二种途径是一种折中方案,改造的工作量适中,除了在两种语言的接口部分可能损失一定的效率之外,运行效率较好;第三种途径是一种最彻底的方案,运行效率高,但是现实的难度和工作量较大。因此应根据具体情况对上述三种实现途径进行具体的选择。