使用Esper,如何执行事件的动​​态过滤?

时间:2010-09-16 21:05:59

标签: java events stream esper

我是Java中使用Esper事件流引擎的新手。场景是事件以POJO形式出现。他们有一个我想要过滤的字段。过滤后的值会随时间而变化。我希望每次发生更改时都不删除并插入新的语句。

示例:

活动名为“ MyEvent ”,其字段为“来源”。值可以是“主页”,“工作”或“学校”之一。 网络服务允许用户更改他们感兴趣的“来源”的值。 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 )

还有其他选择吗?其中任何一个的性能问题?

1 个答案:

答案 0 :(得分:4)

经过一番抨击之后,我在问题中使用了第二个想法。

在启动之前,需要使用

在配置中设置变量

Set<String> mySetOfValues = new HashSet<String>();

esperConfiguration.addVariable( mySourcesVariable, Set.class, mySetOfValues );

Web服务按照描述工作,使用Set而不是数组。

现在一切都很好,而且表现也不是很糟糕,所以我会继续使用它。

相关问题