Compartilhar via


Janela de instantâneo

Uma janela de instantâneo define um subconjunto de eventos que se enquadram em determinado período de tempo e no qual você pode realizar alguma computação baseada em conjunto, como uma agregação. As janelas de instantâneo dividem a linha do tempo ao longo das horas de início e término de eventos e, portanto, são dinâmicas e acionadas por eventos. Junto com modificações de carimbo de data/hora, elas são muito flexíveis e podem ser usadas para vários cenários.

Para obter uma descrição geral de janelas de eventos, bem como de sua implementação e uso no StreamInsight, consulte Usando janelas de eventos.

Noções básicas sobre janelas de instantâneo

As janelas de instantâneo são definidas de acordo com as horas de início e de término dos eventos no fluxo, e não com uma grade fixa ao longo da linha do tempo. O tamanho e o período da janela só são definidos pelos eventos no fluxo. Para cada par de pontos de extremidade do evento mais próximo (hora de início e hora de término), é criada uma janela de instantâneo. Segundo essa definição, todas as horas de início e de término do evento caem em limites de janela, não havendo um meio termo. Ou seja, as janelas de instantâneo dividem a linha do tempo de acordo com todas as alterações ocorridas.

A ilustração a seguir mostra um fluxo com três eventos: e1, e2 e e3. As barras verticais mostram os limites da janela de instantâneo que são definidos por esses eventos. Os fluxos de eventos em azul-claro representam os fluxos de eventos que se movem com o passar do tempo. As caixas laranja mostram as janelas de instantâneo e os eventos contidos em cada janela. Por exemplo, com base na hora de início e na hora de término, apenas o evento e1 está na primeira janela de instantâneo. No entanto, os eventos e1 e e2 estão se sobrepondo e, por isso, estão incluídos na segunda janela.

Ilustração da janela de instantâneo

Depois que a estrutura aplica a diretiva de entrada que recorta eventos nas janelas (a única diretiva de entrada atualmente disponível), os eventos aparecem como mostrado na ilustração a seguir.

Janela de instantâneo com eventos cortados para a janela.

Estas são as janelas e os eventos que são inseridos na operação baseada em conjunto real. É importante compreender o comportamento de recorte ao aplicar um operador ou agregação com diferenciação de hora definida pelo usuário, que é capaz de inspecionar os carimbos de data/hora de eventos de entrada.

Definição de uma janela de instantâneo

As janelas de instantâneo não têm parâmetros para a definição de janela. As políticas de janela padrão recortam os eventos de entrada e saída de acordo com o tamanho da janela.

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

Os argumentos da janela de instantâneo no exemplo anterior são propriedades estáticas que retornam instâncias das classes de política correspondentes. Essas propriedades são fornecidas por conveniência.

As janelas de instantâneo são construções avançadas que podem ser usadas para implementar janelas deslizantes. Uma janela deslizante é uma janela no tempo que se move com eventos, em vez de em um período fixo. A vantagem de uma janela deslizante é que ela ajusta sua duração de acordo com os eventos de entrada e, consequentemente, não gera qualquer saída se a entrada não tiver sido alterada. Isso pode ser visto como uma forma de compactar o fluxo de eventos. Esse design é especialmente útil para uma agregação dentro de um operador de Agrupamento e de Aplicação, com dados de entrada que constituem um número elevado de grupos. Com uma janela de salto, cada grupo geraria um resultado para cada janela, independentemente da taxa de alteração da entrada. Para obter mais informações, consulte Janelas de salto.

Uma janela deslizante é implementada com o operador de instantâneo emparelhado com a modificação temporal apropriada do fluxo de entrada. A modificação de carimbo de data/hora (normalmente uma extensão da duração de evento) alterará primeiro com o passar do tempo a "cobertura" de cada evento. O instantâneo conterá todos os eventos que se enquadrarem nessa duração. Por exemplo, suponha que a meta seja computar a média deslizante de um fluxo de entrada de evento de ponto nos últimos três minutos. A ilustração a seguir mostra como uma aplicação do método AlterEventDuration() no fluxo de entrada "alonga" cada evento ao longo da linha de tempo, como mostrado na ilustração a seguir.

Janela de instantâneo com carimbos de data e hora modificados.

Nesse fluxo, o operador Snapshot é aplicado e a média no campo de evento desejado é computada nas janelas resultantes, como mostrado na ilustração a seguir.

Janela de instantâneo com resultados (médios) agregados.

Os eventos resultantes desta ilustração descrevem a média de todos os eventos nos últimos três minutos, em cada ponto no tempo. Esse resultado é representado por eventos de intervalo, permanecendo enquanto a média não for alterada nesse período de tempo. Por exemplo, o quarto evento dessa série declara que a média de todos os eventos durante os últimos três minutos foi de 1,5, medida em qualquer ponto desse evento. O evento de resultado inicia quando o evento de ponto com carga 3 fica fora da janela de três minutos, e o evento de resultado termina imediatamente antes do evento de ponto com carga 1 ficar fora da janela, conforme mostrado na ilustração a seguir.

Janela de instantâneo com resultados de eventos pontuais.

Usando LINQ (consulta integrada à linguagem), esse cenário é expresso como a seguir (pressupondo-se que o tipo de evento de entrada tenha um campo 'Value').

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

Em geral, para "verificar de novo" um determinado período de tempo ao aplicar uma operação baseada em conjunto através de um instantâneo, os tempos de vida de evento devem ser estendidos no futuro. Para se obter resultados diferentes, podem ser usados outros tipos de operadores de modificação de tempo de vida de evento. Para obter mais informações, consulte Modificações de carimbo de data/hora.

Consulte também

Conceitos

Agregações

TopK

Agregações e operadores definidos pelo usuário

Modificações de carimbo de data/hora

Janelas de contagem

Janelas de salto

Usando janelas de eventos