复杂事件处理之持续查询语言(continuous query language)

上回书概括了复杂事件处理的工作模式,即以事件和事件反应处理规则的方式来描述事物的变化。可以使用复杂事件处理技术模拟一定范围内多个实体的运动变化,可以使用复杂事件处理技术实现从现实系统里获取需要信息,做出判断决策的过程。规则引擎和规则语言是复杂事件处理用到的一种技术手段来描述事件和规则,除此之外持续查询语言( continuous query language )也是常用的一种技术手段。

持续查询语言 CQL 使用类似 SQL 的语法来描述事件和事件反映处理规则。对于内存中大量的外部事件和内部对象, CQL 通过查询语句来做条件匹配,同时提供回调函数,当某个事件或者对象符合查询条件,就调用回调函数做相应的处理。 CQL 提供两种查询方式,快照方式和持续方式。 快照查询只做一次,持续查询类似规则引擎中的规则,只要事件和对象有变化,就执行查询做条件匹配,有匹配上的对象就调用相应的回调函数。这个过程一直会执行下去。列个 CQL 的查询语句,和 SQL 查询的语法相似。

"select agent_name, total_sales, zipcode from /Concepts/Sales where total_sales >= $min"

和规则语言来对比。 规则语言描述的规则包括三个部分对象类别,条件,动作。 CQL 描述的规则类似,包括待查询的对象类别 ( 写在 from 之后的字段 ) ,条件( where 子句)。动作是回调函数,一有符合条件的对象进入查询结果集,就执行一次回调函数。 CQL 支持待查询对象集合的窗口概念,其实就是按事件对象产生时间顺序,或者时间间隔,取出其中的一部分再按查询条件来匹配。

SQL 语言对比。 待查询的对象类别相当于表,回调函数相当于触发器。持续查询相当于视图加触发器的结合 ,只要有新的对象数据或者老的对象数据有变化,视图就发生变化同时调用触发器程序。所以也可以使用数据库实现来替代 CQL 实现。所有的事件和对象都有对应的表,新的事件和对象作为新记录插入表,使用视图来做条件匹配,触发器实现回调函数,当有匹配的记录调用触发器程序做相应处理。

虽然不知道 CQL 实现的具体机制,但由表象的功能上看, CQL 相当于在内存数据库里,定义事件和对象的表单,管理对应数据的插入,修改,删除。事件和对象有产生的时间戳属性来实现窗口机制。定义视图实现匹配规则,定义视图上的触发器实现动作,当规则匹配时执行触发器。我猜想 CQL 的实现机制大致如此,在内存建立存储结构保存大量对象,创建一定的索引来加速查询。持续查询语言( CQL, continuous query language )类似于内存数据库加视图加触发器的解决方案。 了解技术的本质原理就不会被纷繁的术语所迷惑,新技术要用的准用的好。

市面上几类常用的复杂事件处理产品 Coral8 Oracle CEP 用的都是 CQL TIBCO Business Event 是三合一的产品, 规则引擎, CQL 状态机都用了,公平的说在复杂事件处理领域 BE 还是最好用的产品。 对我个人而言,更喜欢用规则语言实现复杂事件处理的应用。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值