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

上回书概括了复杂事件处理的工作模式,即以事件和事件反应处理规则的方式来描述事物的变化。可以使用复杂事件处理技术模拟一定范围内多个实体的运动变化,可以使用复杂事件处理技术实现从现实系统里获取需要信息,做出判断决策的过程。[b]规则引擎和规则语言是复杂事件处理用到的一种技术手段来描述事件和规则,除此之外持续查询语言(continuous query language)也是常用的一种技术手段。[/b]
持续查询语言CQL使用类似SQL的语法来描述事件和事件反映处理规则。对于内存中大量的外部事件和内部对象,CQL通过查询语句来做条件匹配,同时提供回调函数,当某个事件或者对象符合查询条件,就调用回调函数做相应的处理。CQL提供两种查询方式,快照方式和持续方式。快照查询只做一次,持续查询类似规则引擎中的规则,只要事件和对象有变化,就执行查询做条件匹配,有匹配上的对象就调用相应的回调函数。这个过程一直会执行下去。列个CQL的查询语句,和SQL查询的语法相似。
"select agent_name, total_sales, zipcode from /Concepts/Sales where total_sales >= $min"
[b]和规则语言来对比。[/b]规则语言描述的规则包括三个部分对象类别,条件,动作。CQL描述的规则类似,包括待查询的对象类别(写在from 之后的字段),条件(where子句)。动作是回调函数,一有符合条件的对象进入查询结果集,就执行一次回调函数。CQL支持待查询对象集合的窗口概念,其实就是按事件对象产生时间顺序,或者时间间隔,取出其中的一部分再按查询条件来匹配。
[b]和SQL语言对比。[/b]待查询的对象类别相当于表,回调函数相当于触发器。[b]持续查询相当于视图加触发器的结合[/b],只要有新的对象数据或者老的对象数据有变化,视图就发生变化同时调用触发器程序。所以也可以使用数据库实现来替代CQL实现。所有的事件和对象都有对应的表,新的事件和对象作为新记录插入表,使用视图来做条件匹配,触发器实现回调函数,当有匹配的记录调用触发器程序做相应处理。
虽然不知道CQL实现的具体机制,但由表象的功能上看,CQL相当于在内存数据库里,定义事件和对象的表单,管理对应数据的插入,修改,删除。事件和对象有产生的时间戳属性来实现窗口机制。定义视图实现匹配规则,定义视图上的触发器实现动作,当规则匹配时执行触发器。我猜想CQL的实现机制大致如此,在内存建立存储结构保存大量对象,创建一定的索引来加速查询。[b]持续查询语言(CQL, continuous query language)类似于内存数据库加视图加触发器的解决方案。[/b]了解技术的本质原理就不会被纷繁的术语所迷惑,新技术要用的准用的好。
市面上几类常用的复杂事件处理产品Coral8, Oracle CEP用的都是CQL。TIBCO 的Business Event 是三合一的产品, 规则引擎,CQL, 状态机都用了,公平的说在复杂事件处理领域BE还是最好用的产品。 对我个人而言,更喜欢用规则语言实现复杂事件处理的应用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章