CEP如何规则引擎存储时间数据?

时间:2014-12-16 19:47:13

标签: time-series drools complex-event-processing esper

我正在考虑设计一个事件处理系统。 规则本身不是问题。 令我困惑的是如何存储事件数据,以便我可以有效地回答问题/事实,如:

如果过去10分钟内A类事件的数量等于N,     并且在过去M小时内每分钟B类型的平均事件是Z,     并且另一个指标的当前运行平均值是Y ... 然后     解雇一些事件(或存储新的事实/事件)。

Esper / Drools / MS StreamInsight如何存储他们的时间相关数据,以便他们可以有效地计算事件流属性? ¿他们只是将它存储在SQL数据库中并连续查询它们吗?

预先处理规则,以便他们事先知道需要存储哪些“知识”?

由于

编辑:我发现我想要的是事件流处理,wikipedia example显示了我想要做的事情:

WHEN Person.Gender EQUALS "man" AND Person.Clothes EQUALS "tuxedo"
FOLLOWED-BY
  Person.Clothes EQUALS "gown" AND
  (Church_Bell OR Rice_Flying)
WITHIN 2 hours
ACTION Wedding

问题仍然存在:你如何实现这样的数据存储?关键是“在2小时内”,并且能够每秒处理数千个事件。

2 个答案:

答案 0 :(得分:0)

Esper分析规则并仅存储派生状态(聚合等,如果有的话),并且如果规则需要,还存储事件的子集。 Esper允许定义Opher Etzion和Peter Niblet所描述的上下文。我建议阅读。通过指定上下文,Esper可以最小化它保留的状态量,并使查询更容易阅读。

答案 1 :(得分:0)

在一定长度的时间窗口内存储发生的事件并不困难。如果必须考虑其他约束,问题会变得更加困难:此处会指出对规则的分析,以便您可以维护与约束匹配的事件集。

将事件存储在(外部)数据库中会太慢。