时间:2022-11-13 14:30:01 | 来源:信息时代
时间:2022-11-13 14:30:01 来源:信息时代
事件 : ECA规则的重要组成部分。最常用的事件可分为三类: 与数据库状态有关的事件、时间事件和外部事件。事件可以是原子事件,也可以是由原子事件组成的复杂事件。
原子事件是规则系统预定义的事件,是不可分割的最小事件。按照事件源或引发事件的不同,可以将事件分为如下几种:
(1)数据库操作事件: 执行检索、插入、修改、删除等数据操作时会引发一个事件。
(2)行为实施事件:事件由用户定义操作的执行引发,如发送消息给某个对象。
(3)事务事件:事件由事务命令引起,如事务的开始、中止或提交都可以引发一个事件。
(4)用户定义的事件:由数据库编程语言明确引发一个事件,如响应用户输入的某些信息生成的事件。
(5)异常事件: 由某些异常操作引发的事件,如对于一些未经授权数据的访问、违反完整性约束的操作等将引发一个事件。
(6)时间事件: 由时间引发的事件,也称为暂时事件,分为绝对时间、相对时间和时间区间。
(7)外部事件: 在数据库系统之外发生的事件。如外接设备等引起的中断或发出的信号。
可以由多个原子事件组成一个复杂事件,称为复合事件(composite event)。复合事件是由原子事件与一组操作符组合成的,这样形成的式子称为事件表达式(event expression)。事件表达式定义如下:
(1)任意原子事件e都是事件表达式。
(2)如果E1,E2,…,En是事件表达式,则事件操作符作用于上的结果为事件表达式; 任意事件表达式E,(E)是事件表达式。
常用的事件操作符定义如下: 设一个事件e的发生期D(e)为时间轴上有限个区间的集合,称这些区间的最左一个区间的左端点B(e)为事件e的开始时间,称这些区间的最右一个区间的右端点E(e)为事件e的终止时间。又设e和e′是两个事件,则:
(1) 同时发生运算“∧”:e∧e′=e′∧e表示事件e和e′同时发生的复合事件,其发生期为e和e′同时发生的时间,即D(e∧e′)=D(e′∧e)=D(e)∩D(e′),其中,∩表示集合中的“交”运算。
(2)选择发生运算“|”:e|e′=e′|e表示在其发生期中事件e和e′有一个且仅有一个发生的复合事件,即选一个发生的事件。D(e|e′)=D(e)|D(e′),其中等号右边的“|”为异或运算。
(3)合并发生运算“∨”:e∨e′=e′∨e表示事件e和e′只要有一个发生就发生的复合事件,其发生期为e和e′同时发生的时间。D(e∨e′)=D(e′∨e)=D(e)∪D(e′),其中“∪”表示集合中的“并”运算。
(4)相继发生运算“·”: e·e′表示事件e结束后马上发生e′事件,使e和e′连在一起发生的复合事件。B(e·e′)=B(e),E(e·e′)=E(e′),E(e)=B(e′)。
(5)之前发生运算“<”:<e表示当事件e开始发生时就终止的一个事件,其发生期为:
D(<e)=(-∞,B(e))。
(6)之后发生运算“>”: >e表示当事件e终止时就开始发生的一个事件,其发生期为:
D(>e)=(E(e),+∞)。
(7)不发生运算“”: e表示事件e不发生那个事件,其发生期为:D(e)=D(e), 其中等号右边的“”表示“补”运算。
事件的“粒度”是事件的一个特性,它表明触发事件的大小。如在某个表上定义一个删除事件,事件的粒度可以是被删除的每个元组,或满足条件元组的集合。事件的粒度如果是元组,则每删除一个元组将引发一个事件; 如果是元组的集合,则一个元组集引发一个事件。
事件检测是主动数据库系统实现中的关键技术。一个好的系统除了具有对原子事件的检测能力外,还能够支持对扩展事件类型的检测能力。已有的检测机制有:
(1)高优先级:事件监测作为在操作系统控制下的一个优先级高的独立进程来实现,保证它总能经常地被运行,以主动监视各种事件的发生。
(2)利用中断处理:在数据库系统中一旦系统规定的事件发生就产生一个中断,使系统调用事件检测器检测事件的发生,以形成事件信号。
(3)利用DBMS已有的内部组件: 如利用封锁管理检测更新事件。这种检测方法的不足是对这些原子事件的引发将涉及数据所具有的基本特性,如持久性。原子事件的监测应独立于数据的这些特性。
(4)在系统中预先申明能够产生事件的操作:一旦被说明的操作发生,系统就向事件监测器发事件发生的信号。