2014-10-09 3 views
1

Я пытаюсь решить простую задачу: 1. Я хочу сопоставить возникновение 3-х событий A, B, C в случае, если они произойдут за последние 10 секунд.WSO2 cep: Как бороться с несколькими объединениями?

Таким образом, Siddhi поддерживает только 2 соединения в запросе, я думаю, что я не могу его решить. В документации есть предложение использовать несколько запросов и соединить их вместе, как этот

from A#window.time(10 sec) as a 
join B#window.time(10 sec) as b on a.id == b.id 
select a.id 
insert into tempA 

from tempA#window.time(10 sec) as a 
join C#window.time(10 sec) as c on c.id == a.id 
select * 
insert into finalResult 

Но это приводит к неверным результатам, так как данные в потоке Темпа могут жить дольше, временные окна не выровнены.

Возможно, я что-то не хватает. Любой совет? Благодаря

ответ

0

Чтобы решить эту проблему, вы можете попробовать следующий подход:

  1. Для каждого входящего события, добавьте метку времени. (Вы также можете сделать это в самом вашем клиенте, а вместо того, чтобы делать это в СЕР.)
  2. Заменить временные окна с external time windows
  3. Использование ранее добавленного поля отметки времени в качестве эталона времени для внешних временных окон

Поскольку временные метки будут глобальными в этом случае, и все внешние окна времени будут работать в соответствии с ними, это должно работать должным образом.

Смежные вопросы