Я новичок в использовании механизма потока событий 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 )
Есть ли другие варианты? Проблемы с производительностью к любому из них?