我是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 )
还有其他选择吗?其中任何一个的性能问题?
答案 0 :(得分:4)
经过一番抨击之后,我在问题中使用了第二个想法。
在启动之前,需要使用
在配置中设置变量 Set<String> mySetOfValues = new HashSet<String>();
esperConfiguration.addVariable( mySourcesVariable, Set.class, mySetOfValues );
Web服务按照描述工作,使用Set而不是数组。
现在一切都很好,而且表现也不是很糟糕,所以我会继续使用它。