我是在 Java 中使用 Esper 事件流引擎的新手。场景是事件以 POJO 的形式出现。他们有一个我想过滤的字段。过滤后的值会随着时间而改变。我宁愿不要在每次发生更改时删除并插入新语句。
例子:
事件名为“ MyEvent ”,并具有字段“ source ”。值可以是“家”、“工作”或“学校”之一。Web 服务允许用户更改他们感兴趣的“源”的值。EPL 语句看起来像
select * from MyEvent where source in ( 'home', 'school' )
所以在任何时候,“学校”都可能被取消,影响必须尽快体现出来。问题是,如何最好地做到这一点?由于更新生效之间的延迟,我已经排除了缓存的数据库调用。
想法是:
1) 有一个名为 'SourcesOfInterest' 的流,其类型为 List 的 'sources' 字段,并将语句更改为:
select * from MyEvent where source in (SourcesOfInterest.win:length(1).sources)
Web 服务将“SourcesOfInterest”事件插入此流,其中仅查看最近的事件。甚至不确定语法是否正确。
2) 让语句引用运行时变量。那么声明将是:
select * from MyEvent where source in ( mySourcesVariable )
Web 服务将调用
EPRuntime.setVariableValue( "mySourcesVariable", myArrayOfSources )
还有其他选择吗?这些中的任何一个的性能问题?