原论文:High-PerformanceComplex Event Processing over Streams
本篇论文的算法是基于SASE语言。对该语言不作详细介绍,这里只描述模式匹配的算法。
1. 基于查询计划的方法
1.1 基本查询计划
SASE中的查询计划由6个操作符的某个子集组成:
Ø 序列扫描(sequencescan)
Ø 序列构造(sequenceconstruction)
Ø 选择(selection)
Ø 窗口(window)
Ø 否定(negation)
Ø 转换(transformation)
考虑一个具体的例子,查询Q3:
在该查询中,A、B、C、D表示四种不同的事件类型。WHERE子句包含了3个谓词:(1)两个等值测试,attr1和attr2是A、B、C、D 共有的属性;(2)A类型事件属性attr3的一个简单谓词;(3)比较A和B类型事件的attr4属性的谓词。大写字母T表示指定的窗口大小。
图1显示了Q3的基本查询计划和一个事件流的例子。
图1 查询Q3的执行计划
在图1下方的事件流中,小写字母表示事件,对应的大写字母表示事件类型,每个事件底下的数字是事件的时间戳。圆角矩形表示查询计划中的操作符,从下往上,它们依次是:
序列扫描和构造(Sequence Scan and Construction,简写为SSC)
序列扫描和序列构造总是一起使用。对于使用了SEQ结构的查询来说,SSC处理SEQ的正组件,这些正组件组成了原SEQ中一个“子序列类型”。例如,Q3的子序列类型是(A,B,D),其中删除了“!C”。
SSC把事件流转换进入一个事件流序列中;每个事件序列表示唯一的SSC子序列类型匹配。在图1中,SSC的输出创建了7个事件序列。
SSC包含序列扫描操作符(SS->),它扫描事件流,检测子序列类型中对应的匹配序列;还包含序列构造操作符(SC<-),用来创建所有的事件序列。之后会详细介绍它们。
选择(Selection)
选择操作符通过使用所有的谓词,过滤每个事件序列,将满足条件的序列输出。图1中,选择操作符过滤出了7个输入事件序列中的3个。
窗口(Window)
窗口操作符把WITHIN子句的限制条件加到了模式匹配中。对于每个事件序列,它检查第一个和最后一个事件的时间戳的差值是否小于窗口大小T。