Поделиться через


Окна моментальных снимков

В окне моментального снимка определено подмножество событий, произошедших за некоторый период времени, над которыми можно выполнить некоторые вычисления с множествами (например, статистические). Окна моментальных снимков располагаются на временной шкале между начальным и конечным временем события, поэтому они являются динамическими и управляются событиями. Благодаря возможности изменения отметок времени, они обладают большой гибкостью и могут быть использованы для самых разных целей.

Общее описание окон событий, сведения об их реализации и использовании в StreamInsight см. в разделе Использование окон событий.

Общие сведения об окнах моментальных снимков

Окна моментальных снимков определяются в соответствии со временем начала и окончания для событий в потоке, а не по фиксированной сетке вдоль временной шкалы. Размер и период времени окна определяется только событиями в потоке. Для каждой пары ближайших конечных точек события (время начала и время окончания) создается окно моментального снимка. Согласно этому определению, время начала и окончания всех событий приходятся на границы окна и никогда не располагаются между границами. Это означает, что окна моментальных снимков делят временную шкалу в соответствии с происходящими изменениями.

На следующем рисунке показан поток с тремя событиями. e1, e2 и e3. Вертикальные полосы показывают границы окон моментальных снимков, определенных этими событиями. Потоки событий, окрашенные в голубой цвет, представляют потоки событий, перемещающиеся по времени. Оранжевые прямоугольники показывают окна моментальных снимков и события, содержащиеся в каждом окне. Например, на основании времени начала и времени окончания в первом окне моментального снимка находится только событие e1. Однако события e1 и e2 перекрываются и поэтому включены во второе окно.

Иллюстрация окна моментального снимка

После того, как платформа применила политику ввода и распределила события по окнам (в настоящее время доступна только политика ввода), события отображаются так, как показано на следующем рисунке.

Окно моментального снимка с событиями, подогнанными под окно.

Это окна и события, которые являются входными данными для текущей операции с множествами. Важно знать поведение отсечения при применении определяемой пользователем критичной по времени агрегатной функции или оператора, которые имеют возможность проверять отметки времени входных событий.

Определение окна моментального снимка

Окна моментальных снимков не имеют параметров для определения окна. Эта применяемая по умолчанию политика окна предусматривает отсечение событий входа и выхода до размера окна.

var snapshotAgg = from w in inputStream.SnapshotWindow()
                  select new { sum = w.Sum(e => e.i) };

Аргументами окна моментального снимка в указанном выше примере являются статические свойства, которые возвращают экземпляры соответствующих классов политики. Эти свойства предоставляются для удобства работы.

Окно моментального снимка представляет собой мощную конструкцию, которую можно использовать для реализации скользящих окон. Скользящее окно — это окно во времени, которое не имеет фиксированного периода, а перемещается вместе с событиями. Его преимущество заключается в том, что такое окно регулирует свою длину в соответствии с входными событиями и поэтому не осуществляет никакого вывода, если вход не изменился. Это можно рассматривать как способ сжатия потока событий. Такая конструкция особенно полезна для выполнения статистической обработки внутри группы и применения операторов, входные данные которых содержат большое количество групп. В «прыгающем» окне каждая группа может производить результат для каждого из окон, независимо от частоты изменения входных данных. Дополнительные сведения см. в разделе Прыгающие окна.

Скользящее окно реализовано с помощью оператора моментального снимка, объединенного с соответствующим временным изменением входного потока. Изменение отметки времени (обычно расширение длительности события) сначала изменяет временной «охват» каждого из событий. Таким образом, моментальный снимок будет содержать все события, попадающие в этот интервал. Предположим, требуется рассчитать скользящее среднее для входного потока точечных событий за последние три минуты. На следующем рисунке показано, как применение метода AlterEventDuration() к входному потоку «растягивает» каждое из событий по временной шкале.

Окно моментального снимка с измененными отметками времени.

В этом потоке применяется оператор моментального снимка, а среднее значение по нужному полю события вычисляется в окне результата, как показано на следующем рисунке.

Окно моментального снимка с агрегатными результатами (средними).

События результата на этом рисунке описывают среднее по всем событиям за последние три минуты на каждый момент времени. Этот результат представляется интервальными событиями, длительность которых определяется неизменным значением среднего за заданный временной промежуток. Например, четвертое событие в этой последовательности предполагает, что среднее по всем событиям за последние три минуты было 1,5 (считая от любого момента в пределах этого события). Результирующее событие начинается сразу после того, как точечное событие с полезными данными 3 выпадает из трехминутного окна, а заканчивается сразу перед тем, как точечное событие с полезными данными 1 выпадает из окна, как показано на следующем рисунке.

Окно моментального снимка с результатами точечных событий.

С помощью LINQ это можно выразить следующим образом (предположим, что тип входного события содержит поле Value).

var result = from win in inputStream.AlterEventDuration(e => TimeSpan.FromMinutes(3)).SnapshotWindow()
             select new { average = win.Avg(e => e.Value) };

В общем случае, чтобы «отмотать назад» некоторый интервал времени при применении операции с множествами к моментальному снимку, время жизни события необходимо продлить в будущее. Для получения других результатов можно использовать другие типы операторов изменений времени жизни событий. Дополнительные сведения см. в разделе Изменения отметок времени.

См. также

Основные понятия

Агрегаты

TopK

Определяемые пользователем статистические функции и операторы

Изменения отметок времени

Окна количества

Прыгающие окна

Использование окон событий