管理数据库系统中的事件-条件-操作规则的制作方法

文档序号:6655456阅读:206来源:国知局
专利名称:管理数据库系统中的事件-条件-操作规则的制作方法
技术领域
总的来说,本发明涉及数据库系统,更具体地,涉及用于管理数据库系统中的事件-条件-动作表达式的技术。
背景技术
规则通常使用在商业应用程序中,以实时地指导或影响商业行为。这些应用程序中的大多数需要以事件为中心的规则以监控在商业过程中新商业对象的创建或一些状态的变化。在旅游业的情况中,以事件为中心的规则的实例如下如果团体预订了到奥兰多的机票并预定了豪华汽车,则提供特定奥兰多旅馆的促销折扣。因此,根据这两个事件的发生,应用程序将自动为该团体提供促销。
在规则引擎的情况中,规则大体上分成两类(1)演绎或推理规则以及(2)反应或事件-条件-动作(ECA)规则。演绎规则使用正向和反向推理,以从现有的知识库中推断或演绎事实。ECA规则非常适于以事件为中心的问题,其处理状态变化以及怎样管理状态变化。
现有的商业规则引擎应用程序作为用于商业规则的储存库并且有利于将商业逻辑与应用程序逻辑分离。规则引擎定义一些规则语言以宣告规则的说明书,并定义一些接口以使应用程序与规则引擎交互作用。然而,由这种引擎管理的规则的类型本质上是演绎的。
某些形式的ECA规则可以用公式表示为演绎规则,并且可以通过为演绎规则而设计的规则引擎来管理。然而,由于处理演绎规则和ECA规则之间工作量的差异,为演绎规则设计的规则引擎对于管理ECA规则是无效的,原因如下。大多数演绎规则引擎使用RETE索引的变量来处理用于事实集的规则集。这些索引是完全基于存储器的,并且它们与为大事实集所定义的大规则集不是很相称。此外,这些索引对于高度动态的事实(在ECA规则中指定的典型事件)是无效的。另外,在多层环境中,基于存储器的规则引擎驻留在应用程序层中。因此,如果为其定义了规则的商业事件在数据库层中,那么这些事件需要被读取到应用程序层,以处理相应的规则,这就降低了这些规则引擎的性能。


通过实例示出了本发明,但本发明不限于此,在附图中,相同的参考标号表示相似的元件,其中图1是示出了根据实施例的数据库中ECA信息的直观表示和这种信息之间交互作用的示意图;
图2是示出了根据实施例的用于管理数据库中的事件-条件-动作表达式的方法;以及图3是示出了可以实施本发明实施例的计算机系统的框图。
具体实施例方式
描述用于管理数据库系统中的表达式的技术。更具体地,描述用于通过数据库启用的(database-enabled)规则引擎来管理数据库系统中的事件-条件-动作表达式的技术。
在以下的描述中,为了说明的目的,阐述了大量具体的细节以提供对本发明的彻底理解。然而,很明显,没有这些具体的细节本发明也可以实施。在其它实例中,公知的结构和设备以框图的形式示出,以避免不必要地使本发明模糊。
以下专利的全部内容结合于此作为参考于2002年6月11日授权的题为“Content Based Publish-And-Subscribe System Integratedin a Relational Database System”的美国专利第6,405,191号;以及于2002年12月31日授权的题为“Approach for Publishing Data in aRelational Database System”的美国专利第6,502,093号。
概述使用数据库可用的或以数据库为中心的规则引擎包括接收并将ECA表达式存储在数据库中。这种表达式指定(1)定义符合事件结构的事件的事件结构;(2)对应于事件结构的用于响应并相对于事件发生的评估的条件,例如,事件实例;以及(3)用于响应于满足一个或多个条件的事件所执行的动作。
这种条件存储在数据库表的列中,例如EXPRESSION数据类型列。因此,在规则运行数据库会话(即,相对于一个或多个事件评估规则的数据库会话)期间,当符合指定事件结构的事件发生时,则该事件被检测出,并且通过确定该事件是否满足任何一个条件来评估条件。如果该事件满足一个或多个具有相应动作的条件集,则由数据库服务器执行相应的动作,或者数据库服务器使该动作在数据库系统的外部执行。
这里描述的规则引擎通过管理关系数据库中的ECA规则而与现有的规则引擎不同。从而,诸如可伸缩性、可靠性和安全性的优点很容易扩展到诸如商业规则处理的规则处理。另外,定义了规则的事件在本质上是有关系的,并且标准结构化查询语言(SQL)的子集可用于识别感兴趣事件的发生以及用评估针对事件发生的条件。此外,丰富的SQL语言,例如,与XML结合,可用于表示复杂的商业规则。
存储数据库中事件-条件-动作规则在一个方面,规则表示为存储在数据库中作为规则集的表达式。在ECA规则的情况下,规则包括(1)定义符合事件结构的事件的事件结构,(2)针对所评估的相应事件的条件,以及(3)用于响应于事件对条件的满足所执行的动作优先(action preference)。
利用所描述的数据库启用的规则引擎,SQL查询语言可用作规则语言的基础。因此,表达式可以表示为SQL查询。简单的规则条件类似于查询的WHERE子句,该查询中FROM子句表示相应的事件结构。例如,如果FlightInfo表存储关于旅行社所有客户的预订机票信息,那么以下查询可以识别出预定乘坐美国联合航空公司到奥兰多的机票的所有客户。
SELECT CustId FROM FlightInfo
WHERE ToCity=‘Orlando’and Airline=‘United’上述查询识别出存储在FlightInfo表中的所有现有的美国联合航空公司到奥兰多的预订。然而,如果只需要识别他们进行(例如,实时)的新预订,上述查询应该映射到能够监控新数据(例如,事件)的规则。在这种情况下,FlightInfo表可以配置为用于规则的事件结构,或者事件结构可以用于与使用具有匹配结构的对象类型的暂态应用程序数据一起合作。上述查询的WHERE子句可用于规则条件,当预订与该规则匹配时,规则动作可以是一些执行动作的应用程序逻辑。例如,操作可以是提供租车促销、提供打折等。
使用形成规则语言的基础的SQL,所以可在相应规则集表上使用INSERT、UPDATE、和DELETE操作来执行在规则集中添加新规则和更新或删除现有规则。此外,在规则表上简单的SELECT操作使得用户可以浏览规则集中的规则。
事件结构事件结构在抽象级别上描述明确识别那种类型事件发生的基本因素。在一个实施例中,事件结构由描述事件(例如,商业事件)具体特征的属性集所定义,并且事件结构在数据库中表示为对象类型。例如,商业事件能够捕获添加到用户旅行计划中的飞行信息。在数据库中,相应的事件结构可以表示为如下所指定的对象类型。
<pre id="pre0001" xml:space="preserve" listing-type="sequence">CREATE or REPLACE TYPE AddFlight AS OBJECT( CustId NUMBER, Airline VARCHAR(20), FromCityVARCHAR(30), ToCity VARCHAR(30), Depart DATE, Return DATE)。</pre>
在另一个实施例中,为存储在数据库中关系表中的数据定义规则。在这种情况中,从存储数据的表的结构获得用于规则集的事件结构,并且将事件识别为数据状态的变化(例如,通过INSERT或UPDATE操作)。
为特定的应用程序定义的一组规则被认为是规则集,并且组成规则集的规则共享用于它们的条件的公共事件结构。规则集被捕获作为数据库中的关系表,其中,属于规则集的规则是规则集表中的行。
组成事件组成事件可在数据库中定义为多个本原事件的组合。在数据库中,为本原事件和组成事件定义的规则具有相似的操作特性。在一个实施例中,组成事件结构表示为具有嵌入式类型的对象类型。组成事件中的每个嵌入式类型表示一个本原事件。与组成事件相关的每个本原事件可在独立于发生另一个相关本原事件的另一个过程过程中发生。
在实施例中,当事件的一些部分(例如,一个或多个本原事件)发生时,递增地评估为组成事件所定义的规则。递增评估相关本原事件的结果不断地存储在数据库中。
条件使用在相应事件结构中定义的变量表示针对评估事件的规则条件。例如,简单的规则条件类似于查询的WHERE子句,查询中的FROM子句表示相应的事件结构。在基于规则的典型系统中,有效过滤条件的大集合对系统的可伸缩性是很关键的。不同于对表中行的大集合执行多个查询的典型数据库设计,基于规则的系统相对于所评估的事件可具有大量的条件。因此,期望在数据库启用的规则引擎中存储并处理条件的独特方法,例如,使用下面描述的EXPRESSION数据类型。
EXPRESSION数据类型在实施例中,规则集表的规则条件列配置有在题为“ManagingExpressions IN A Database System”并公开为US-2003-0212670-A1的美国专利申请第10/254,383号中描述的表达式数据类型,其全部内容结合于此作为参考。
例如,条件可以存储在数据库表中的VARCHAR2或CLOB列中。例如,通过将一些元数据与列相关联,这种列可被构造为EXPRESSION数据类型的列。此外,存储条件的列与相关事件结构相关。与事件结构相关的VARCHAR2或CLOB列组成EXPRESSION列。存储在EXPRESSION列中的值最初期望遵守SQL-WHERE子句格式。这些条件可以引用在相应的事件结构中定义的所有属性,以及用户环境中有效的任何系统变量和用户定义的函数用于组成事件的条件可以将为由两个或多个本原事件组成的组成事件定义的规则映射到等效联接查询。例如,假定客户的预订飞行信息和租车信息分别存储在两个表-FlightInfo和CarInfo中,可以将具有涉及飞行预订以及租车预订(为了提供旅馆促销)的条件的规则映射到下面示出的等效SQL查询实例。
<pre id="pre0002" xml:space="preserve" listing-type="sequence">SELECT Flt.CustId FROM FlightInfo Flt,CarInfo CarWHERE Flt.ToCity=′Orlando′and Flt.Airline=′United′and Flt.CustId=Car.CustId and Car.CarType=′Luxury′</pre>
XML-扩展SQL语法然而,规则可具有关于与每个本原事件相关的数据何时可用的独特要求以及用于将本原事件创建时间包括在规则定义中的相关需要。从而,在实施例中,具有联接条件,等效联接查询的WHERE子句基于本原事件分成单独的条件。然后这些部分用于在SQL条件内使用一些XML标签来表示复杂规则条件。例如,上述规则的WHERE子句映射到以下规则条件。
<pre id="pre0003" xml:space="preserve" listing-type="sequence">&lt;condition&gt; &lt;and join=″Flt.CustId=Car.CustId″&gt; &lt;obiect name=″Flt″&gt;Airline=′United′and ToCity=′Orlando′&lt;/object&gt;&lt;object name=″Car″&gt;CarType=′Luxury′&lt;/object&gt; &lt;/and&gt; &lt;/condition&gt;</pre>因此,等效查询的FROM子句中的每个表映射到本原事件,并且这些本原事件的组合表示用于规则集的组合事件。使用该XML扩展SQL语法,可以实现支持在规则条件中支持瞬时、否定、any、和排序语义的实施例,这在传统的SQL WHERE子句语法中是不可能的。将在下面描述这些语义。
瞬时事件当在指定的时间帧内检测到或没有检测到事件时,包括瞬时事件的规则被激活。包括瞬时事件的规则的实例如下如果金牌客户订货,并且所订的物品在订货的12小时内发货,那么增加服务质量的统计。可以指定这种规则以使用隐含在诸如SQL数据数据类型的每个本原事件中的时间信息变量。
表示上述规则的语句的实例可以如下形成。
<pre id="pre0004" xml:space="preserve" listing-type="sequence">ON PlaceOrder(OrderId,ItemId,CustType,..)order, ShipOrder(OrderId,TrackingNo,..)shipIF &lt;condition&gt;&lt;and join=“order.OrderId=ship.OrderId andship.rlm$crttime-order.rlm$crttime&lt;1/2”&gt; &lt;object name=“order”&gt;CustType=‘Gold’&lt;/object&gt; &lt;object name=“ship”/&gt; &lt;/and&gt;&lt;/condition&gt; THENIncrementQOSStats(ship.rlm$crttime-order.rlm$crttime)</pre>否定可以使用XML扩展SQL语法指定使用否定的规则条件,当在指定的时间帧内没有检测到事件时,执行与使用否定结构的条件相关的动作。这种规则经常用于在基于事件的应用程序中引发异常。涉及否定的规则的实例如下如果金牌客户订货,并且所订物品在订货的24小时内没有发货,那么通知客户服务。
表示上述规则的语句的实例可以如下形成。
<pre id="pre0005" xml:space="preserve" listing-type="sequence">ONPlaceOrder(OrderId,ItemId,CustType,..)order,ShipOrder(OrderId,TrackingNo,..)ship</pre><pre id="pre0006" xml:space="preserve" listing-type="sequence">IF&lt;condition&gt; &lt;and join=“order.OrderId=ship.OrderId”&gt; &lt;object name=“order”&gt;CustType=‘Gold’&lt;/object&gt; &lt;not by=“sysdate+1”&gt; &lt;object name=“ship”/&gt; &lt;/not&gt; &lt;/and&gt;&lt;/condition&gt;THEN AlertRepresentative(OrderId,‘123’,‘Delayed Order’)</pre>上述条件中的“not”元素仅当检测到其他本原事件(例如,金牌客户订货)时被激活。如果在指定的时间帧内检测到在“not”元素中的对象,则不执行该操作。
Any n可以使用XML扩展SQL语法指定使用“Any n”的规则条件,当检测到指定事件的any n事件时,执行与使用这种结构的条件相关的动作。涉及“any n”的规则的实例如下如果顾客将价值超过$100的可携式摄像机镜头、镜头过滤器、和IR光项目中的两项添加到购物车中,则向顾客建议三脚架。
表示上述规则的语句的实例可以如下形成。
<pre id="pre0007" xml:space="preserve" listing-type="sequence">ON AddItem(ItemId,Accessory,Price,..)Item1, AddItem(ItemId,Accessory,Price,..)Item2,</pre><pre id="pre0008" xml:space="preserve" listing-type="sequence"> AddItem(ItemId,Accessory,Price,..)Item3IF &lt;condition&gt; &lt;any count=2&gt; &lt;object name=“Item1”&gt; Accessory=‘Lens’and Price&gt;100&lt;/object&gt; &lt;object name=“Item2”&gt;Accessory=‘Lens Filter’&lt;/object&gt; &lt;object name=“Item3”&gt;Accessory=‘IR Light’&lt;/object&gt; &lt;/any&gt; &lt;/condition&gt;THEN SuggestItem(‘Tripod’)</pre>排序可以使用XML扩展SQL语法指定具有排序需要的规则条件,当以指定顺序或序列检测出指定事件时,执行与使用这种结构的条件相关的动作。涉及排序规则的实例如下如果顾客以指定的顺序将价值超过$100的可携式摄像机镜头、镜头过滤器、和IR光添加到购物车,则向顾客建议三脚架。
表示上述规则的语句的实例可以如下形成。
<pre id="pre0009" xml:space="preserve" listing-type="sequence">ON AddItem(ItemId,Accessory,Price,..)Item1, AddItem(ItemId,Accessory,Price,..)Item2, AddItem(ItemId,Accessory,Price,..)Item3IF</pre><pre id="pre0010" xml:space="preserve" listing-type="sequence"> &lt;condition&gt; &lt;and sequence=”yes”&gt;&lt;object name=“Item1”&gt;Accessory=‘Lens’and Price&gt;100&lt;/object&gt;&lt;object name=“Item2”&gt;Accessory=‘Lens Filter’&lt;/object&gt;&lt;object name=“Item3”&gt;Accessory=‘IR Light’&lt;/object&gt;&lt;/any&gt; &lt;/condition&gt;THEN SuggestItem(‘Tripod’)</pre>动作与ECA规则相关的操作可以是能够由数据库服务器执行或启动的任何操作。例如,这包括发送e-mail、安排用于稍后执行的作业、修改存储在其它关系表中的数据,以及生成新商业事件。每个规则定义包括用于确定和执行适当动作的动作优先集。例如,动作优先可以是将被传递到承载该动作的固定函数的标量值(例如,e-mail地址)集,或者是当满足规则条件时(例如,评估为真)执行的SQL或PL/SQL命令(例如,INSERT语句)集。在规则集创建时指定用于规则集的动作优先的精确列表。
图1是示出根据实施例的数据库中ECA信息的直观表示以及这种信息之间的交互作用的示意图。这里描述的数据库启用的规则引擎的功能围绕着规则集的概念,规则集在作为规则定义的储存库(repository)的关系数据库表中被捕获。
图1将AddFlight事件结构描述为定义对应于AddFlight事件结构的事件实例的对象类型。如所描述的,在实施例中表示为一组SQL表达式的规则集存储在数据库表中,其描述为图1的TravelPromotion规则集表。ECA规则映射到规则集表中的行。存储有规则集的表具有规则标识符列、规则条件列、以及规则动作优先列。如用事件结构和规则条件列之间的虚线所示的,事件结构与规则集表的规则条件列相关,因为使用在事件结构中声明的变量来指定规则条件。换言之,事件结构可被认为是用于规则条件列的元数据。此外,从应用了条件的事件结构的属性中导出规则条件。
图1还示出了被添加到数据库的事件实例AddFlight,其与AddFlight事件结构一致。事件实例具有在相应事件结构中定义的属性的值。例如,响应于商业事件,可创建具有被例示为事件结构对象类型的对象的相关事件信息的事件实例。响应于数据库中事件实例的到达,相对于包括在事件实例对象中的属性值来评估TravelPromotion规则集表中的规则条件,以确定是否满足任何条件。
如果事件实例满足在规则动作优先列中具有相应动作的任何条件,则执行动作回叫(call back)程序PromoAction以执行动作程序OfferPromotion,动作程序具有传递到动作程序的来自规则动作优先列的适当值作为自变量。代表上述规则的语句的实例可以如下形成。
<pre id="pre0011" xml:space="preserve" listing-type="sequence">PROCEDURE PromoAction( rlm$event AddFlight, rlm$rule TravelPromotion%ROWTYPE)isBEGIN --OfferPromotion是执行适当动作的PL/SQL程序-- OfferPromotion(rlm$event.CustId, rlm$rule.PromoType,</pre><pre id="pre0012" xml:space="preserve" listing-type="sequence"> rlm$rule.OfferedBy);END.</pre>事件结构,规则集表和动作回叫程序一般都被作为规则集创建过程的一部分而创建。
评估规则集一旦规则放置在规则集中,该规则可对一个或多个事件评估。从数据库连接到断开,规则运行时会话可被定义为从数据库连接到到断开的数据库会话,其中,处理一个或多个事件。除了面向会话(session oriented)的规则处理,能够使用回叫机制来实现用于满足规则的动作的立即执行。例如,回叫机制可以作为为每个满足条件所调用的PL/SQL程序而实现。可以通过使用与条件相关的动作优先以及满足该条件的事件来执行规则动作。在一个实施例中,冲突解决标准用于解决事件所满足的多个条件之间的冲突,并且通过下面描述的规则集排序特性在规则集创建时被说明性地指定。
测试针对每个事件发生的每个规则集是典型的线性时间解决方案。当定义了大型规则集时,该方法对于大量数据项是不可扩张的。用于评估规则集(即,相对于一个或多个事件发生评估一个或多个条件)的过程可随着不同的实施方式而变化。在题为“ManagingExpressions In A Database System”并公开为US-2003-0212670-A1的美国专利申请第10/254,383号中描述了可用于相对于事件发生从大规则集中评估条件的过程的一个实例。
所引用的过程使用索引机制以有效地评估大条件集,从而,加快对于给定的一个或多个事件的规则集的评估。可以在EXPRESSION数据类型的列上定义该索引,从而,基于与索引的使用相关的计算代价,查询优化程序可以确定用于规则集评估的索引的使用。在实施中,创建持久数据库对象以维持用于规则集的索引,在索引创建时预处理规则集增加(populate)这些数据库对象。此外,使用对存储规则的表上的DML操作,维持存储在这些对象中的信息以反映规则集的任何改变。
根据实施例,表达式过滤器是一组用于管理规则的PL/SQL包和API,并且对于给定的事件,通过使用SQL或一些其它查询语言查询使在条件中表达的标准与给定的事件相匹配来过滤条件。表达式过滤器包括两部分EVALUATE运算符和表达式过滤器索引类型,其在US-2003-0212670-A1中进行了描述。
表达式过滤器索引类型可用于为存储在VARCHAR2、CLOB或BFILE的数据库列类型中的任意条件集创建索引。然而,预期到除上述索引类型以外另一索引类型(可用于存储为数据类型的条件上)的使用,因此,其在本发明实施例的范围内。EVALUATE运算符可用于处理存储在EXPRESSION列中的条件。该运算符可用在标准SQL语句的WHERE子句中以过滤用于事件的条件。EVALUATE运算符接受存储条件和给定数据项(例如,事件)的列的名称作为自变量,并且EVALUATE运算符内部地使用表达式集元数据以评估传入的用于数据项的表达式。
使用GROUP BY子句、ORDER BY子句、HAVING子句等可将对存储有条件的表的查询扩展到包括多表联接和任何其他数据库查询操作。此外,考虑到通过将其中存储有条件的表和存储有被处理的事件数据的表相联接,来为一批事件过滤条件集。
此外,由于规则集和索引结构对象(如果可用)被持久地存储在数据库中,在广泛使用主存储器的方法中遇到的与规则集大小相关的存储器限制不适于本实施例。相反地,根据所需,根据本实施例的操作可将必要的数据库块存储到数据库高速缓冲存储器。
数据库视图在规则会话内,通过被称作规则集结果视图的数据库视图,所处理事件的列表和匹配条件的列表与相关动作优先一起是可存取的。在实施例中,在规则集创建时刻创建规则集结果视图,并且允许同时发生的规则会话使用相同的视图名称为每个相应会话显示适当的结果。
将规则会话结果呈现在视图中的能力使得用户能够对结果执行额外的操作,作为集,并因此识别用于动作执行的条件子集。例如,如果在规则会话中处理的事件与建议10%、15%、20%折扣作为各自动作优先的三个不同的条件相匹配,那么对规则集结果视图的查询能够识别条件和提供最大折扣的事件组合。因此,规则集结果视图可用于支持匹配条件中的复杂冲突解决标准。
来自规则集结果视图的结果还能够用于调度数据库外部的动作。例如,可从应用服务器将事件注入规则引擎处理,可以查询规则集结果视图以查找所有匹配条件,并且来自该视图的结果可以用于调度应用服务器中的一些动作。
规则集特性当管理和处理添加到系统中的事件时,数据库启用的规则引擎实施随规则集不同而不同的各种事件管理策略。这种策略可以在规则集创建时被说明性地设置,并可应用于给定规则集中的所有规则。
事件消耗可被设置的一个事件管理策略称作消耗。消耗策略的使用允许指定事件是否能够用于唯一满足单一条件或共享地满足多个条件。如果只用于单一条件,那么事件由其满足的给定条件“消耗”,从而,在做出这种决定以后,从数据库中将相关的事件信息删除。另一方面,如果事件没有被指定为条件满足时被消耗,那么就不从数据库中删除事件信息,并且关于事件的条件评估可以继续。
事件的持续时间可以被设置的一个事件管理策略称作持续时间。持续时间策略的使用允许指定未消耗的本原事件的生存期、或持续时间。例如,在期满前,给定的本原事件可被指定持续直到发生事件的交易结束,或直到发生事件的数据库会话结束。在期满时,从数据库删除事件信息,因此,不再对相关条件进行评估。再例如,给定的本原事件可被指定持续特定的时间段。
规则评估的排序可以被设置的一个事件管理策略称作排序。排序策略的使用允许指定对于构成组成事件的本原事件进行评估的规则的顺序(因此,条件对应于给定规则)。因为给定的本原事件可以组成能够满足一个以上规则的一个以上的组成事件,所以排序策略可用于指定冲突解决策略,以避免与各个规则所满足的条件相关的动作之间的冲突。在实施例中,基于事件属性和动作优先的SQL ORDER BY子句用于指定排序策略。另外,排序策略可以和消耗策略一起使用,以避免满足具有矛盾动作的多个条件,这是因为在根据排序策略针对可能潜在地被事件满足的多个条件进行评估之前,根据消耗策略删除满足条件的事件。
管理数据库系统中的表达式参照上述描述,图2是示出根据实施例的用于管理数据库中的事件-条件-动作表达式的方法的流程图。例如,图2的方法由一个或多个数据库服务器执行,每个数据库服务器管理并有利于对特定数据库的访问,处理客户请求以访问数据库,并处理来自数据库的数据。
在块202中,接收识别事件结构、一个或多个相关条件以及一个或多个相关动作(其中,每个均在先前进行了描述)的表达式。例如,规则可以用下列ECA(事件-条件-动作)表示法表达,或者可以用任何其他的表示法表达,例如用标准SQL语句。
ON&lt;event structure&gt;
IF&lt;condition&gt;
THEN &lt;action&gt;
在块204中,如图1的实例所示,表达式存储在数据库内的一个或多个表中。因此,块206中,在数据库会话(先前称作规则运行数据库会话)期间,当符合事件结构的事件发生时检测到事件的发生。例如,当将图1中所描述的事件实例添加到数据库时,规则引擎基于包括在事件实例中的属性,检测该事件实例符合特定事件结构。在从存储事件数据的表的结构中导出事件结构的情况下,事件发生被检测为数据状态中的变化(例如,通过INSERT或UPDATE语句)进一步在数据库会话期间,在块208中,确定在块206检测到的事件发生是否满足在块204中存储在数据库中的表达式中所指定的任何条件。因为规则引擎已经知道事件发生所符合的事件结构,并且事件结构与规则条件列相关,规则引擎能够确定相对于事件发生将评估哪个条件。
在块210中,如果事件发生满足具有相应动作的一个或多个规则条件的任何集,那么导致实现相应的动作。动作可完全在数据库内实现或执行,或者可在数据库外部执行(例如,由应用服务器执行)。例如,如上所述,通过动作回叫程序引发动作的执行。
可以重复块206-210的步骤,以在给定数据库会话中处理期望多的事件发生。在单个会话中,多个事件发生可被分组并被批处理,或者当事件发生添加到数据库中时,多个事件发生可独立地在各自的会话中被处理。
对于每个与组成事件结构相关的本原事件发生,可重复块206和208,根据诸如持续时间策略的规则集属性,将每个本原事件的结果持久存储在数据库中至少直至所有其他同属的本原事件被处理或直至本原事件期满。在组成事件的情况中,一旦每个与组成事件结构相关的本原事件完成了块206和块208,那么如果适合可执行块210。
因为事件相关的数据和关于这种数据的规则驻留在相同的储存库中,这里描述的技术提供了数据库启用的规则引擎的使用,规则引擎处理关于关系数据的规则,而不将数据读取到配置在客户和数据库之间的计算层中的中间件应用程序。因此,事件-条件-动作处理比使用中间件规则引擎更有效。此外,因为数据库启用的规则引擎支持组成事件以及持久存储对于构成组成事件的本原事件条件的递增评估,所以对规则集尺寸或能被处理的事件数量没有限制。此外,不同于每次规则集被加载到存储器中时都需要初始化和激活的基于存储器的中间件规则引擎,只要数据库启动则由数据库启用的规则引擎使用的规则集总是启动的,并准备好接收新规则和事件。
硬件综述图3是示出可实施本发明实施例的计算机系统300的框图。计算机系统300包括总线302或用于传递信息的其它通信机构,以及用于处理信息的与总线302连接的处理器304。计算机系统300还包括诸如随机存取存储器(RAM)或其他动态存储装置的主存储器306,其连接至总线302,用于存储将由处理器304执行的信息和指令。在执行将要由处理器304执行的指令期间,主存储器306还可以用于存储临时变量或其它中间信息。计算机系统300还包括连接至总线302的用于存储静态信息和用于处理器304的指令的只读存储器(ROM)308或其它静态存储器装置。提供诸如磁盘、光盘、或磁光盘的存储装置310并连接至总线302,用于存储信息和指令。
计算机系统300可以经由总线302连接至诸如阴极射线管(CRT)或液晶显示器(LCD)的用于将信息显示给计算机用户的显示器312。包括字母数字和其它键的输入装置314连接至总线302,用于将信息和命令选择传递给处理器304。另一种类型的用户输入装置是诸如鼠标、跟踪球、或光标方向键的光标控制316,用于将方向信息和命令选择传递给处理器304,并且用于控制光标在显示器312上的运动。输入装置一般在两个轴线(第一轴线(例如x)和第二轴线(例如y))上具有两个自由度,使得该装置在平面内指定位置。
本发明涉及用于实施这里所描述的技术的计算机系统300的使用。根据本发明的一个实施例,响应于执行包括在主存储器306中的一个或多个指令的一个和多个序列的处理器304,通过计算机系统300执行那些技术。这种指令可从诸如存储装置310的另一个计算机可读介质读入主存储器306。执行包括在主存储器306中的指令序列使得处理器304执行这里描述的处理。在可选的实施例中,可以使用硬连线电路取代软件指令或与软件指令结合以实施本发明。从而,本发明的实施例不限于硬件电路和软件的任何具体的结合。
这里使用的术语“计算机可读介质”指的是任何参与将指令提供给处理器304用于执行的介质。这种介质可以采取许多形式,包括但不限于非易失性介质、易失性介质、和传输介质。例如,非易失性介质包括光盘、磁盘或磁光盘,例如存储装置310。易失性介质包括动态存储器,例如主存储器306。传输介质包括同轴电缆、铜线和光纤,包括构成总线302的线。传输介质也可以采用声波或光波的形式,例如在无线电波和红外数据通信中生成的那些。
例如,计算机可读介质的通常形式包括软盘、软磁盘、硬盘、磁带、或任何其它磁介质、CD-ROM、任何其它光介质、穿孔卡、纸带、任何其它具有孔图样(pattern)的物理介质、RAM、PROM、FLASH-EPROM、任何其它存储芯片或盒式磁盘、如下面所描述的载波、或任何其它计算机可从中读取的介质。
各种形式的计算机可读介质可用于将一个或多个指令的一个或多个序列传送给处理器304用于执行。例如,最初可在远程计算机的磁盘上携带指令。远程计算机可将指令加载到其动态存储器中并使用调制解调器通过电话线发送指令。计算机系统300本地的调制解调器能够在电话线上接收数据并使用红外发射机将该数据转换成红外信号。红外探测器可以接收在红外信号中携带的数据,并且适当的电路可将数据放置在总线302上。总线302将数据传送到主存储器306,处理器304从主存储器306恢复数据并执行指令。由主存储器306接收的指令可在由处理器304执行之前或之后随意地存储在存储装置310上。
计算机系统300还包括连接至总线302的通信接口318。通信接口318提供连接至局域网322的连接到网络链路320的双路数据通信。例如,通信接口318可以是综合业务数字网(ISDN)卡或调制解调器,以将数据通信连接提供给电话线的相应类型。作为另一个实例,通信接口318可以是局域网(LAN)卡,以将数据通信连接提供给可兼容的LAN。还可以实现无线连接。在任何一种实现中,通信接口318发送和接收携带表示各种类型信息的数字数据流的电、电磁或光信号。
网络链路320典型地通过一个或多个网络将数据通信提供给其它数据装置。例如,网络链路320可通过局域网322将连接提供给主机324或提供到由网络服务提供商(ISP)326操作的数据设备。ISP326又通过现在通常称作“互联网”328的世界范围数据包数据通信网来提供数据通信服务。局域网322和互联网328均使用传送数字数据流的电、电磁或光信号。经过各种网络的信号和在网络链路320上并经过通信接口318的信号(传送到计算机系统300和来自计算机系统300的数字数据)是传输信息的载波的示例性形式。
计算机系统300可以通过网络、网络链路320和通信接口318发送消息和接收包括程序代码的数据。在互联网实例中,服务器330可通过互联网328、ISP326、局域网322和通信接口318传送用于应用程序的请求代码。
所接收的代码可以在它被接收时由处理器304执行,和/或存储在存储装置310中或其它非易失性存储器中用于稍后执行。以此方式,计算机系统300可以以载波的形式获得应用程序代码。
扩展和可选方案通过上述描述并在最有助于理解实施例的背景的情况下描述本发明的可选实施例。此外,参照其具体实施例描述了本发明。然而,显而易见,在不背离本发明更广泛精神和范围的情况下,可以对其进行各种修改和改变。例如,示出了使用SQL的实施例,然而,这里所描述的技术不限于与SQL一起使用,也可以应用其它的数据查询语言。因此,说明书和附图是用于说明本发明而不是用于限制本发明。
另外,在该说明书中以特定的顺序阐述了特定的处理步骤,按字母顺序和字母数字的标签可用于识别特定的步骤。除非在描述中具体声明,本发明的实施例不必限于执行这些步骤的任何特定顺序。具体地,标签只用于方便识别步骤,而并不是指定或要求执行这些步骤的特定顺序。
权利要求
1.一种用于管理数据库系统中的表达式的方法,所述方法包括以下计算机执行步骤接收识别事件结构、一个或多个相关条件以及一个或多个相关动作的表达式,其中,所述事件结构定义符合所述事件结构的事件;将所述表达式存储在所述数据库内的表中;在数据库会话期间,通过检测符合所述事件结构的事件何时发生来检测所述事件的发生;以及确定所述事件的所述发生是否满足所述条件中的任何一个;以及如果所述事件的所述发生满足与一个或多个相应动作相关的所述条件中的一个或多个条件的任意集,则引起所述一个或多个相应动作的执行。
2.根据权利要求1所述的方法,其中,接收表达式包括接收识别用描述相应事件的特征的属性集来定义的所述事件结构的表达式,并且其中,所述事件结构表示为所述数据库中的对象类型。
3.根据权利要求1所述的方法,其中,接收表达式包括接收将所述事件结构识别为具有两个或多个本原事件的组成事件结构的表达式,每一个所述本原事件在所述数据库中表示为嵌入在所述组成事件结构中的对象类型。
4.根据权利要求3所述的方法,其中,检测包括通过检测符合所述组成事件结构的第一本原事件结构的事件何时发生来检测所述本原事件的第一本原事件的发生;其中,确定包括确定所述第一本原事件的所述发生是否满足任意所述条件;所述方法还包括以下计算机执行步骤将所述确定的结果持久地存储在所述数据库中;通过检测符合所述组成事件结构的第二本原事件结构的事件何时发生来检测所述本原事件的第二本原事件的发生;确定所述第二本原事件的所述发生是否满足任意所述条件;确定是否所述第一本原事件的所述发生和所述第二本原事件的所述发生都满足任意所述条件;以及其中,引起执行包括如果所述第一本原事件的所述发生和所述第二本原事件的所述发生满足任意具有一个或多个相应动作的一个或多个条件集,则执行所述一个或多个相应动作。
5.根据权利要求3所述方法,还包括以下计算机执行步骤接收信息,所述信息指定在所述两个或多个本原事件的第二本原事件的发生发生之前所述两个或多个本原事件的第一本原事件的发生有效的周期;以及其中,确定包括根据所述信息确定所述第一本原事件的所述发生和所述第二本原事件的所述发生是否满足任意所述条件。
6.根据权利要求3所述方法,还包括以下计算机执行步骤接收指定相对于所述本原事件评估所述条件的顺序的信息;以及其中,确定包括以根据所述信息的所述顺序中确定所述本原事件是否满足所述条件。
7.根据权利要求1所述方法,其中,接收表达式包括接收识别从所述数据库中的表的结构中导出的事件结构的表达式,所述数据库存储表示事件发生的数据。
8.根据权利要求7所述的方法,其中,检测所述事件的发生包括检测所述数据被改变。
9.根据权利要求1所述的方法,其中,将所述表达式存储在表的列中包括将一个或多个条件作为EXPRESSION数据类型存储在所述表的EXPRESSION列中。
10.根据权利要求1所述的方法,其中,接收表达式包括接收识别在所述数据库上表示为SQL查询的条件。
11.根据权利要求1所述的方法,还包括以下计算机执行步骤以SQL操作的形式,接收对所述表达式的所述一个或多个条件的修改。
12.根据权利要求1所述的方法,还包括以下计算机执行步骤在数据库会话期间,提供对数据库视图的访问,所述视图包括已经被确定满足任意所述条件的事件发生列表;所述事件发生列表中事件发生所满足的条件列表,以及符合所述条件列表中的条件的动作列表。
13.根据权利要求12所述的方法,还包括以下计算机执行步骤响应于来自所述数据库系统的用户的请求,对所述视图执行操作。
14.根据权利要求13所述的方法,其中,执行操作包括执行操作以解决所述事件发生列表中的事件发生所满足的两个或多个条件中的冲突。
15.根据权利要求13所述的方法,其中执行操作包括执行包括调度用于在所述数据库系统外部执行的动作的操作。
16.根据权利要求1所述的方法,还包括以下计算机执行步骤当确定所述事件的所述发生满足一个或多个条件的所述集时,接收指定确定步骤将停止的消息;以及当确定所述事件的所述发生满足一个或多个条件的所述集时,停止确定所述事件的所述发生是否满足任意所述条件。
17.根据权利要求1所述的方法,其中,接收表达式包括接收识别时间条件的表达式;其中,在事件的发生满足条件集的第一条件之后的特定时间内,如果事件的发生满足所述条件集的第二条件,则所述时间条件指定所述一个或多个动作的相关动作将被执行;以及其中,确定包括根据所述时间条件来确定事件的发生是否满足所述第一和第二条件。
18.根据权利要求1所述的方法,其中,接收表达式包括接收标识否定条件的表达式;其中,在事件的发生满足条件集的第一条件之后的特定时间内,如果事件的发生不满足所述条件集的第二条件,则所述否定条件指定所述一个或多个动作的相关动作将被执行;以及其中,确定包括根据所述否定条件来确定事件的发生是否满足所述第一条件和第二条件。
19.根据权利要求1所述的方法,其中,接收表达式包括接收标识一组条件的表达式,当一个或多个事件的发生满足所述一组条件中的特定数量的条件时,所述一组条件触发执行所述一个或多个相应动作;其中,所述特定数量小于所述一组条件中的条件的数量;以及其中,确定包括确定一个或多个事件的发生是否满足所述一组条件的所述特定数量的条件。
20.根据权利要求1所述的方法,其中,接收表达式包括接收识别顺序条件组的表达式;其中,如果一个或多个事件的发生以特定顺序满足所述顺序条件组中的所述条件,则所述顺序条件组指定所述一个或多个动作的相关动作将被执行;以及其中,确定包括确定一个或多个事件的发生是否以所述特定顺序满足所述顺序条件组的所述条件。
21.一种计算机可读介质,其携带一个或多个指令序列,当由一个或多个处理器执行所述指令序列时,引起所述一个或多个处理器执行权利要求1-20任意一项中所述的方法。
22.一种系统,包括用于接收识别事件结构、一个或多个相关条件以及一个或多个相关动作的表达式的装置,其中,所述事件结构定义符合所述事件结构的事件;用于将所述表达式存储在所述数据库内的表中的装置;用于在数据库会话期间,通过检测符合所述事件结构的事件何时发生来检测所述事件的发生的装置;用于在所述数据库会话期间,确定所述事件的所述发生是否满足任意所述条件的装置;以及用于如果所述事件的所述发生满足与一个或多个相应动作相关的所述条件的一个或多个条件任意集,则引起所述一个或多个相应动作的执行的装置。
全文摘要
使用数据库启用的规则引擎包括接收ECA表达式并将其存储在数据库表的列中。ECA表达式指定(1)定义符合事件结构的事件的事件结构;(2)用于相对于符合事件结构的事件的发生进行评估的条件;以及(3)用于响应于满足一个或多个条件的事件所执行的动作。在相对于一个或多个事件规则的评估中,基于事件与指定事件结构的一致来检测事件,并且通过确定事件是否满足任意条件来评估条件。如果事件满足具有相应动作的一个或多个条件的集,则由数据库执行相应动作或者数据库使动作在数据库外部执行。
文档编号G06F7/00GK1938703SQ200580010481
公开日2007年3月28日 申请日期2005年3月22日 优先权日2004年3月30日
发明者阿拉温达·亚拉曼基 申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1