Используя Esper, как я могу выполнить динамическую фильтрацию событий? - PullRequest
4 голосов
/ 17 сентября 2010

Я новичок в использовании механизма потока событий Esper в Java. Сценарий таков, что события появляются как POJO. У них есть поле, которое я хочу отфильтровать. Отфильтрованные значения будут меняться со временем. Я бы предпочел не удалять и не вставлять новое утверждение каждый раз, когда происходит изменение.

Пример:

Событие называется ' MyEvent ' и имеет поле ' source '. Значение может быть одним из ' home ', ' работа ' или ' школа '. Веб-сервис позволяет пользователям изменять значения для « source », которые им интересны. Заявление EPL будет выглядеть как

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

Таким образом, в любое время «школа» может быть удалена, и воздействие должно быть отражено как можно быстрее. Вопрос в том, как лучше это сделать? Я исключил вызовы из кэшированной базы данных из-за задержки между вступлением в силу обновления.

Идеи:

1) Иметь поток с именем 'SourcesOfInterest' с полем 'sources' типа List и изменить инструкцию на:

select * from MyEvent where source in (SourcesOfInterest.win:length(1).sources)

Веб-служба вставляет события 'SourcesOfInterest' в этот поток, где просматриваются только самые последние. Даже не уверен, что синтаксис правильный.

2) У оператора есть ссылка на переменную времени выполнения. Тогда утверждение будет:

select * from MyEvent where source in ( mySourcesVariable )

Веб-служба будет вызывать

EPRuntime.setVariableValue( "mySourcesVariable", myArrayOfSources )

Есть ли другие варианты? Проблемы с производительностью к любому из них?

1 Ответ

4 голосов
/ 27 сентября 2010

После некоторого колебания я использовал вторую идею в вопросе.

Переменная должна быть установлена ​​в конфигурации перед запуском, используя

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

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

Веб-служба работает, как описано, с Set вместо массива.

Теперь все хорошо, и производительность не так уж и плоха, так что я продолжу.

...