500 likes | 665 Views
主动数据库. 牛丽娟 2009-10-21. 目录结构. 应用领域 研究现状 相关概念 结构(框架) 主要问题(核心技术). 引言. 利用传统的数据库技术,用户对数据的所有操作必须通过相应的命令来实现,换言之,数据库管理系统只能根据用户的命令被动地提供数据的服务。 对于突发的事件(如商品库存量低于某个特定值,库存商品临近保质期等)没有较高的应变能力。. 某大型电力建设单位的 MIS 建设. 设备管理模块的库存管理部分:要求某些设备维持一定的库存量,当库存量低于或高于某限定值时,系统要自动给用户提示;
E N D
主动数据库 牛丽娟 2009-10-21
目录结构 应用领域 研究现状 相关概念 结构(框架) 主要问题(核心技术)
引言 利用传统的数据库技术,用户对数据的所有操作必须通过相应的命令来实现,换言之,数据库管理系统只能根据用户的命令被动地提供数据的服务。 对于突发的事件(如商品库存量低于某个特定值,库存商品临近保质期等)没有较高的应变能力。
某大型电力建设单位的MIS建设 设备管理模块的库存管理部分:要求某些设备维持一定的库存量,当库存量低于或高于某限定值时,系统要自动给用户提示; 库存管理的设备、材料余额是非常重要的数据,经常要对它们进行查询统计,所以在实现时为保证效率,一般设立余额表用于记录各种设备、材料的余额,在多用户并发环境下要保证余额表数据的正确是比较困难的,这时要求随着设备、材料的出库、入库系统能自动更新余额表;
某大型电力建设单位的MIS建设 某些具有保质期的产品,比如油漆、涂料、胶粘剂等,要求在保质期到达前一段时问,系统能自动预警,当超过保质期时系统自动报警,并将超过保质期的产品自动从库存中减掉:对于将到交货期和超过交货期而未到货的设备,系统能主动提示。 工程管理模块要求对未按工程计划开工和完工的项目自动提示给用户;
某大型电力建设单位的MIS建设 财务管理模块,要求对财务超支项目报警; 质量检验模块要求在质检项目的质检日期前7天预警,前一天报警,请求用户查看究竟哪些项目将要质检。若预、报警后用户并没有查看究竟哪些项目将要质检,这时要求系统每隔20分钟预、报警一次,请求用户查看将要质检项目。
应用场景 (1)实时监控功能 (2)例外或错误情况的主动处理和自动恢复功能 (3)协同工作或协同解决问题(数据库系统中各子系统间的通信和同步功能) (4)自适应和学习功能
研究现状 • 国外: 典型的主动数据库系统研究 • 关系型主动数据库系统: • Starburst,POSTGRES,Ariel,SQL-3 • 面向对象型主动数据库系统: • HiPAC,SAMOS,Ode,Sentinel,REACH,Petri-AOODB • 国内: • 华中科技大学 -ARTDBMS(ARTS-I,ARTS-CS)
概念——主动数据库 所谓的主动数据库,是指在没有用户干预的情况下,能够主动地对系统内部或外部所产生的事件作出反应的数据库。 主动数据库系统是一种能根据各种事件的发生或环境的变化主动给用户提供相应信息服务的数据库系统,支持事件—条件—动作规则,通过事件监视器监视诸如数据库事务、时间事件、外部信号等事件的发生,执行规定的动作,使得数据库能提供主动服务的功能。 数据库系统在运行应用程序的过程中“在什么时候主动地执行什么动作”,是由一些事件的发生而引发的,即所谓“事件驱动”的。
与触发器不同 • 主动数据库中的事件相对于触发器的事件有如下不同: • 触发器中的事件是原子事件和简单的事件的组合,对于复杂事件和自定义事件没有处理; • 触发器中的事件没有事件特性的约束,主动数据库中的事件有立即,延迟,分离等特性。 • 在一些很简单的事件发生时主动触发一些较简单的动作或处理。
规则 规则表示在某一引发事件发生时,如何主动地执行其中包含的由用户预先设定的动作。 三元组<E,C,A>表示,其中E表示事件,C表示条件,A表示动作。 ON <event structure> IF <condition> THEN <action>
概念-事件(Event) 原子事件: 1)对象事件: 描述数据库状态的变化,包括数据的插入、删除、修改等操作 2)事务事件: 描述事务管理操作,包括事务的BEGIN,END,C OMMIT, ABORT。 3)时间事件: 描述系统的时间行为,它分为三种:绝对时间事件(AT),相对时间事件(EFORE/AFTER),周期时间事件(EVERY). 4)外部事件:为 了实 现 同一用户的各模块之间或不同用户之间相互传递信息,在系统中设立一些“信号”。 复合事件
概念-条件(Condition) • ECA规则中的条件是用来判断数据库的状态是否达到执行主动动作的标准。 • 常用的条件有: • (1)应用过程。规则的条件部分可以说明为某个应用程序语言所编写的过程,其返回值为真或假。 • (2)与数据库相关的条件。 • 数据库谓词。类似于关系数据库系统中SQL语言中的WHERE子句。 • 限定谓词。包括各种比较运算、集合运算、聚合/非聚合函数等所组成的表达式。 • 数据库查询。条件部分可以用数据库系统中的查询语句来说明,可以规定查询结果为真,则条件为真;也可以规定查询结果非空,则条件为真。
概念-动作(Action) • 当规则被触发且条件成立时,动作将被执行。一般地,可执行的动作有: • (1)应用程序。规则的动作部分可以说明为某个应用程序语言所编写的过程。 • (2)系统定义动作。包括将当前状态报告给用户等。 • (3)与数据库相关的动作。 • 第一、资料更新操作。动作说明为SQL的Insert,Delete或Update等操作。 • 第二、其它数据库命令。包括资料定义操作、事务控制操作(如事务的提交、回滚)、权限的授予或回收等。
主动数据库的模型 ADBS=DBS+RB+EM DBS用来存储数据和对数据进行维护、管理与运用; RB是一个由事件驱动的一组规则的集合; EM是一个随时监视RB中的事件是否己经发生的监视模块。
系统总的数据和控制流 作为事件的系统行为一旦发生,相应的事件探测器即可探测到,并给规则管理程序发信号; 规则管理程序根据事件信号激活有关的规则进行处理,调用相应的条件评价器; 条件评价器将评价结果返回给规则管理程序; 若条件满足,规则管理程序触发相应的规则,并调用规则到命令的转换程序; 规则转换为命令后,规则管理程序通知DBMS执行被触发的活动; 被触发活动执行完毕,系统继续正常运行。
执行模型 • 耦合方式 • 触发粒度 • 规则调度: • 规则冲突处理 • 触发规则的数量 • 联式(cascading)规则触发 • 规则终止性问题
耦合方式 • 规则执行是按照事件与条件、条件与动作之间的耦合方式执行的。 • 事件与条件的耦合方式有三种: • 立即式 • 延迟式 • 分离式 • 条件与动作
场景1 • 现有 • Rule1(E1,C1,A1) • Rule2(E2,C2,A2 ) • Rule3(E3,C3,A3 ) • Rule( E,C,A ) • 而E是由(E1,E2,E3)复合而成的,如果检测到了E,触发四条规则中的哪一个呢,如何调度?
触发粒度 规则的触发粒度表明事件发生与触发的规则是一对一还是多对一的关系。系统的状态转变是由不可分的操作序列产生的。 如果触发粒度为元组(Tuple),那么单个事件触发单条规则。如果触发粒度为集合(Set),那么一个事件发生的集合被用于触发一条规则。 例如,如果E-A耦合为立即式的一条规则R,其检测的事件为E,而在一事务内事件E的三个实例e1、e2、e3分别发生,那么触发粒度就决定了在触发阶段将产生多少条R规则实例。如果触发粒度为元组,那么相对每个e1、e2、e3将分别产生R规则。如果触发粒度为集合,那么相应事件集{e1、e2、e3}只产生一条R规则。
场景2——冲突 ALWAYS UPDATE EMP SE’I saIary=new.saIary WHERE name= “Mike” AND current.name=“Fred” ALWAYS UPDATE EMP SET salary=new.salary WHERE name= “Mike” AND current.name= “Bill” 这两条规则分别要求Mike的薪金与Fred的薪金和Bill的薪金保持一致,产生冲突。 ALWAYS UPDATE EMP SET salary=new.salary WHERE name一“Fred” AND current.name= “Bill” ALWAYS UPDATE EMP SET salary=new.salary WHERE name=“Mike” AND current.name=“Fred’’ REFUSE UPDATE EMP WHERE current.name=“Mike” AND new.salary>1 OOO 如果将Bill的薪金更新为1500,则将触发第一、二条规则,即将这一薪金值传播给Mike,而第三条规则又拒绝这种更新。
规则冲突处理 规则冲突处理——选择哪一条规则作为下一条要触发的规则。 规则的执行顺序会极大影响到执行结果,反映推理机的类型。 支持优先级调度策略——在定义规则时用优先级子句定义规则的优先级,产生冲突时,系统将触发优先级高的规则。
动态优先级方法 • 动态优先级方法有两种定义方式: 一,就是检查更新操作是否为一个新的更新操作,具有越新更新操作(事件出现越晚)的规则,优先级越高; 二,看条件的复杂程度,具有越复杂条件的规则,优先级越高。
静态优先级方法 • 静态优先级方法通常也有两种定义方式,一种由系统根据规则的创建时间定义,另一种作为规则的属性由用户自己定义。分别有两种不同的优先级机制: • 绝对优先级:用数字调度顺序排列规则,这样每条规则优先级的值都是一个确切的数字; • 相对优先级:同时触发的两条规则,对其中一条规则进行显式声明该规则必须在另一条规则之前点燃。
场景3 • 现有 • Rule1(E,C1,A1), • Rule2(E,C2,A2 ), • Rule3(E,C3,A3)。 • 三个规则都是针对同一种事件,但是判断的条件不同,执行不同的动作。当检测到E时,如何选择规则?
触发规则的数量 • 一个事件激活多条规则时的执行模式: • 串行式执行——用串行的方式依次点燃所有的规则实例; • 并行式执行——用并行的方式点燃所有的规则实例; • 用带饱和度的方式点燃规则实例,也就是说:先考虑一部分规则实例,并将这部分规则全部点燃,然后再考虑剩下的那部分规则实例; • 择一式执行——仅点燃规则实例中的一个或几个。
场景4 • 现有 • Rule1(E1,C1,A1) • Rule2(E2,C2,A2 ) • Rule3(E3,C3,A3) • 如果规则r1执行后,对数据库的操作A1是规则r2要检测的事件,则触发规则r2,同理,r2执行完后,触发r3的执行,具体如何实现?
级联式(cascading)规则触发 由于动作可能操作数据库并因而引发其它原子事件,因而可能造成级联式(cascading)规则触发。 级联触发可能是某条规则的自我触发直接产生的,也可能是多条规则的相互触发而间接产生的。
规则递归触发 置一个栈stack,用于保存以前规则的启动情况。每触发一条规则即检查栈中规则的启动情况并检查当前规则是否在同一状态下曾被触发,如果是,就中止当前规则的触发,从而中断循还。
递归触发的处理 参数rnum表示被当前命令触发的规则数,数组P存放被当前命令触发的规则在规则库中的编号
递归触发的处理(循环策略) 当规则动作作为事件而触发新的规则时,会引起级联触发。规则自身产生的级联触发有两种控制策略。 (1)顺序策略,即规则自身被触发后,前一条规则实例仍然继续执行,被触发的规则实例根据各自的优先级值顺序执行。 (2)递归策略,即规则自身被触发后,前一条规则实例的执行事务被挂起,转而开始执行被触发的规则。因此耦合方式为立即式的规则可在第一时间内被处理。
基本处理方法 级联触发处理方法是顺序策略和优先级策略相结合的方法来实现。即触发规则的规则继续执行,而被触发的规则按照优级顺序依次执行。
场景5 • 现有 • Rule1(E1,C1,A1) • Rule2(E2,C2,A2) • Rule3(E3,C3,A3) • 如果规则r1执行后,对数据库的操作A1是规则r2要检测的事件,则触发规则r2,同理,r2执行完后,触发r3的执行,r3的执行又触发r1,死循环了?
主动规则可终止性分析 由于数据库状态或其它事件的作用,系统中的某些规则被触发,因此开始了一个规则处理过程:规则动作的执行又能触发新的规则,ECA规则系统要依次处理所有被触发的实例。如果到某一时刻,没有在等待处理的规则,则称该处理过程已终止(terminate)。 可终止性定义:给定规则R,如果从任一状态触发的规则处理过程都肯定能终止,则称规则库R是可终止的,具有可终止性。
处理终止性问题的方法 • (1)非终止性作为一种可能被接受,由规则的设计者保证这种情况不发生。 • (2)以系统参数的形式给出一个固定的上限,规定在一次规则处理中最多可以处理的规则数目。当达到这个上限时,规则处理非正常终止。 • (3)对规则集的语法限制进行加强,确保规则的处理总是终止。 • 最简单的方法是禁止规则之间的互相触发; • 一个复杂一点的办法是允许规则之间的触发,但是不允许出现环路; • 另一个更精密复杂的办法是允许出现环路只要能保证每一个环路中的某个规则的条件最终会变为假。
规则终止性 由于一个规则动作的执行可能导致数据变化并因而触发其它规则,定义良好的规则集必须保证规则之间的相互触发不会无限地进行下去,即规则处理过程终止。 处理规则终止性有静态与动态两种策略,静态策略分析规则之间可能的触发关系,检测触发环路的存在性与可达性,进而推断无限触发的可能性,在发现可能不终止的情况下,通报规则定义者进一步检查和修改。
静态分析判断 静态分析判断通常是保守的,即只能给出终止和可能不终止的结论。分析判断终止的规则集其执行必然终止,而分析判断可能不终止的规则集其执行仍可能终止。对于后一种情况,如何减少误报率是值得深入研究的问题。
动态策略 动态策略在运行时检测规则的触发行为,发现触发环路,并判断环路上规则是否会无限的触发下去,并对可能无限触发的情况通报用户.
基于触发图与活化图的终止性分析 目前主动规则集终止性静态分析主要依据触发图(Triggering Graph),由于被触发规则条件为假时动作不能执行,完全基于TG图的分析结果是保守的。
触发图 令R为任意规则集,规则触发图TG(Triggering Graph)是由<R,TE>构成的有向图,其中r∈R表示规则结点,有向边(ri,rj)∈TE表示规则ri的执行可能产生某事件,该事件触发规则rj。特别,若(ri,ri)∈TE,则称ri为自触发规则。触发边在图中用带有箭头的实线表示。
活化图 令R为任意规则集,规则活化图AG(Activation Graph)是由<R,AE>构成的有向图,其中r∈R表示规则结点,有向边(ri,rj)∈AE表示规则ri的执行可能使规则rj的条件为真。特别,若(ri,ri)∈AE,则称ri为自活化规则。活化边在图中用带有箭头的虚线表示。
触发环 令TG=<R,TE>为触发图,若有规则r1,r2,…,rk∈R,(r1,r2)∈TE,(r2,r3)∈TE,…,(rk,r1)∈TE,则称ρ=(r1,r2,…,rk)为一触发环。触发环ρ上规则集合记为Cρ={r1,r2,…,rk}。
活化环 令AG=<R,AE>为活化图,若有规则r1,r2,…,rk∈R,(r1,r2)∈AE,(r2,r3)∈AE,…,(rk,r1)∈AE,则称σ=(r1,r2,…,rk)为一活化环。活化环σ上规则集合记为Cσ={r1,r2,…,rk}。
分析 触发环是规则执行呈现非终止行为的必要条件,如果TG中没有环路,则规则执行必然终止。 仅考虑TG图,相当于假定被触发规则条件恒为真,触发后动作必然执行,TG环意味非终止。 引入AG图,触发环中没有到达活化边的规则在被触发时条件为假,动作不会执行,TG环未必导致非终止。
归约 触发环和活化环是主动规则集呈现非终止行为的必要条件,对任意rk∈R,如果 (ri,rk)∈TG或 (rj,rk)∈AG,则规则rk不会执行多次,连同其相关边可由TG∪AG图中去掉,如此得到基本归约递归算法如下:
不可归约集 • 定义.对规则集合R使用基本归约算法后得到的规则集合R′称为不可归约集。 • 易见,不可归约集中的每一个规则至少有一条到达的触发边和一条到达的活化边。 • 根据文献的分析结果,在规则不包含优先级的情况下,多个被触发规则的执行次序随意确定,其中必有呈现非终止行为的排序,因而不可归约集即为非终止规则集。在规则包含优先级的情况下,多个被触发规则的执行次序由规则的优先级确定,其执行次序唯一,若该次序不导致非终止行为发生,则规则集仍呈终止行为。