私は、Java で Esper イベント ストリーム エンジンを使用する初心者です。シナリオは、イベントが POJO として入ってくるというものです。彼らは私がフィルタリングしたいフィールドを持っています。フィルタリングされた値は、時間の経過とともに変化します。変更が発生するたびに新しいステートメントを削除して挿入するのは避けたいと思います。
例:
イベントの名前は「MyEvent」で、フィールドは「source」です。値は、' home '、' work '、または ' school ' のいずれかです。Web サービスにより、ユーザーは関心のある「source」の値を変更できます。EPL ステートメントは次のようになります。
select * from MyEvent where source in ( 'home', 'school' )
したがって、「学校」はいつでも削除でき、その影響はできるだけ早く反映されなければなりません。問題は、これをどのように実現するのが最善かということです。更新が有効になるまでの待ち時間のため、キャッシュされたデータベース呼び出しを除外しました。
アイデアは次のとおりです。
1) List 型の「sources」フィールドを持つ「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 )
他のオプションはありますか?これらのいずれかに対するパフォーマンスの問題はありますか?