我正在考虑设计一个事件处理系统。 规则本身不是问题。 令我困惑的是如何存储事件数据,以便我可以有效地回答问题/事实,如:
如果过去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小时内”,并且能够每秒处理数千个事件。
答案 0 :(得分:0)
Esper分析规则并仅存储派生状态(聚合等,如果有的话),并且如果规则需要,还存储事件的子集。 Esper允许定义Opher Etzion和Peter Niblet所描述的上下文。我建议阅读。通过指定上下文,Esper可以最小化它保留的状态量,并使查询更容易阅读。
答案 1 :(得分:0)
在一定长度的时间窗口内存储发生的事件并不困难。如果必须考虑其他约束,问题会变得更加困难:此处会指出对规则的分析,以便您可以维护与约束匹配的事件集。
将事件存储在(外部)数据库中会太慢。