4

私は、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 )

他のオプションはありますか?これらのいずれかに対するパフォーマンスの問題はありますか?

4

1 に答える 1

4

いくつかのフレアの後、私は質問の2番目のアイデアを使用しました。

変数は、起動前に構成で設定する必要があり、

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

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

Webサービスは、配列の代わりにSetを使用して、説明どおりに機能します。

今はすべて順調で、パフォーマンスも悪くないので、一緒に行きます。

于 2010-09-27T17:28:53.017 に答える