4

我是在 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 )

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

4

1 回答 1

4

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

需要在配置中设置的变量,在启动之前,使用

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

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

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

现在一切都很好,而且性能也不错,所以我会接受它。

于 2010-09-27T17:28:53.017 回答