Мне интересно, какой самый лучший или самый идиоматический c способ предоставить все события в окне пользовательской функции. Следующий пример построен на основе примеров стилей цен акций, используемых в онлайн-документации Esper.
Предположим, у нас есть следующий запрос Esper:
select avg(price), custom_function(price) from OrderEvent#unique(symbol)
Возвращает часть avg(price)
среднее значение самой последней цены для каждого символа. Предположим, что мы хотим, чтобы custom_function
работал аналогичным образом, но для этого нужны сложные логики c - он хотел бы перебирать каждое значение в окне каждый раз, когда требуется результат (например, методы обнаружения выбросов могут нуждаться в таком алгоритме) .
Чтобы было ясно, я требую, чтобы алгоритм выглядел примерно так:
custom_function(window):
for each event in window:
update calculation
, и не существует разумного способа обновить вычисления, когда события входят или выходят из окна.
Настраиваемая агрегация может достичь этого путем отправки и переноса событий в набор, но это становится проблематичным c при использовании примитивных типов. Это также кажется расточительным, так как предположительно esper уже имеет коллекцию событий в окне, поэтому мы предпочитаем не дублировать это.
В документах Esper упоминается много способов настройки, см. этот шаблон решения, например. Также упоминается, что «pull API» может повторять все события в окне.
Какие подходы считаются лучшими для решения проблемы такого типа?