2010-09-16 46 views
4

我是在Java中使用Esper事件流引擎的新手。情景是事件以POJO的形式出現。他們有一個我想過濾的字段。過濾後的值將隨時間變化。每次發生更改時,我寧願不刪除並插入新的語句。使用Esper,我該如何執行事件的動​​態過濾?

實施例:

事件被稱爲 'MyEvent',並具有字段 ''。值可以是「」,「工作」或「學校」之一。 Web服務允許用戶更改值「」他們感興趣的 英超聲明看起來像

select * from MyEvent where source in ('home', 'school') 

因此,在任何時候,「學校」也被刪除,衝擊必須儘可能快地反映出來。問題是,如何最好地做到這一點?由於更新生效之間的延遲,我排除了緩存的數據庫調用。

思路是:

1)有一個叫做 'SourcesOfInterest' 流與 '源' 類型列表的領域,並更改該語句是:

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

經過一番抨擊之後,我用了第二個想法。

需要在配置被設置,在啓動之前的變量,使用

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

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

web服務所描述的,具有一組而不是數組的工作原理。

現在都好,而且性能不差可恥的,所以我用它去。