Ventanas de instantánea

Una ventana de instantánea define un subconjunto de eventos que caen dentro de algún período de tiempo y sobre el que puede realizar un cálculo basado en conjuntos como una agregación. Las ventanas de instantánea dividen la escala de tiempo a lo largo de las horas de finalización e inicio de los eventos, y son por tanto dinámicas y orientadas a eventos. Junto con las modificaciones de marca de tiempo, son muy flexibles y se pueden utilizar para diversos escenarios.

Para conseguir una descripción general de las ventanas de evento y su implementación y uso en StreamInsight, vea Utilizar ventanas de eventos.

Las ventanas de instantánea se definen según las horas de inicio y finalización de los eventos del flujo, en lugar de consistir en una cuadrícula fija a lo largo de la escala de tiempo. Solo los eventos del flujo definen el tamaño y el periodo de tiempo de la ventana. Por cada par de extremos (hora de inicio y hora de finalización) de evento más cercanos, se crea una ventana de instantánea. Según esta definición, todas las horas de inicio y finalización de eventos se sitúan en los límites de la ventana, nunca en ella. Dicho de otro modo, las ventanas de instantánea dividen la escala de tiempo según todos los cambios que se producen.

La siguiente ilustración muestra un flujo con tres eventos: e1, e2 y e3. Las barras verticales muestran los límites de ventana de instantánea definidos por estos eventos. Los flujos de eventos en azul son los flujos de eventos que se mueven en el tiempo. Los cuadros naranjas muestran las ventanas de instantánea y los eventos de cada ventana. Por ejemplo, según la hora de inicio y la hora de finalización, solo el evento e1 está en la primera ventana de instantánea. Sin embargo, los eventos e1 y e2 se superponen y, por consiguiente, se incluyen en la segunda ventana.

Ilustración de ventana de instantánea

Después de que el marco aplica la directiva de entrada que recorta los eventos a las ventanas (la única directiva de entrada actualmente disponible), los eventos aparecen como se muestra en la siguiente ilustración.

Ventana de instantánea con eventos ajustados a la ventana.

Estas son las ventanas y los eventos que se especifican en la operación basada en el conjunto la real. Describir el comportamiento de recorte es importante al aplicar a un operador o agregado dependiente del tiempo y definido por el usuario que puede inspeccionar las marcas de tiempo de eventos de entrada.

Las ventanas de instantánea no tienen ningún parámetro para la definición de la ventana. Las directivas de ventana predeterminadas recortan los eventos de entrada y salida al tamaño de la ventana.

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

Los argumentos para la ventana de instantánea del ejemplo anterior son propiedades estáticas que devuelven instancias de las clases de directiva correspondientes. Estas propiedades se proporcionan por motivos de comodidad.

Las ventanas de instantánea son estructuras eficaces que se pueden usar para implementar ventanas deslizantes. Una ventana deslizante es una ventana en el tiempo que se mueve con los eventos, en lugar de un período fijo. La ventaja de una ventana deslizante es que ajusta su longitud según los eventos de entrada y, por lo tanto, no genera ningún resultado si la entrada no cambió. Esto se puede considerar una manera de comprimir el flujo de eventos. Este tipo de diseño es especialmente útil para una agregación dentro de un operador Agrupar y aplicar, que tiene datos de entrada que constituyen un elevado número de grupos. Con una ventana de salto, cada grupo generaría un resultado para cada ventana, independientemente de la tasa de cambios de la entrada. Para obtener más información, vea Ventanas de salto.

Una ventana deslizante se implementa con el operador de instantánea emparejado con la modificación temporal adecuada del flujo de entrada. La modificación de la marca de tiempo (normalmente una extensión de la duración del evento) cambiará primero el "alcance" de cada evento a lo largo del tiempo. A continuación, la instantánea contendrá todos los eventos que entren dentro de esa duración. Por ejemplo, suponga que el objetivo es calcular el promedio de deslizamiento de un flujo de entrada de eventos de punto durante los últimos tres minutos. La siguiente ilustración muestra cómo una aplicación del método AlterEventDuration() en el flujo de entrada "ajusta" cada evento a lo largo de la escala de tiempo.

Ventana de instantánea con marcas de tiempo modificadas.

En ese flujo, se aplica el operador de instantánea y el promedio en el campo de evento deseado se calcula sobre las ventanas resultantes, como se muestra en la siguiente ilustración.

Ventana de instantánea con resultados agregados (promedio)

Los eventos resultantes de esta ilustración describen el promedio de todos los eventos dentro de los últimos tres minutos, en cada lapso de tiempo. Este resultado se representa mediante eventos de intervalo, que duran mientras el promedio no cambie dentro de esa franja temporal. Por ejemplo, el cuarto evento de esa serie valida que el promedio de todos los eventos durante los últimos tres minutos fue 1,5, medido desde cualquier punto dentro de ese evento. El evento de resultado se inicia cuando el evento de punto con la carga útil 3 sale de la ventana de tres minutos y el evento de resultado finaliza justo antes de que el evento de punto con carga útil 1 salga de la ventana, como se muestra en la siguiente ilustración.

Ventana de instantánea con resultados de evento de punto.

Con Language Integrated Query (LINQ), este escenario se expresa como sigue (suponiendo que el tipo de evento de entrada tiene un campo 'Valor').

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

En general para "mirar atrás" cierto tiempo al aplicar una operación basada en un conjunto a través de una instantánea, la duración de los eventos se deben ampliar hacia el futuro. Se pueden utilizar otros tipos operadores de modificación de la duración de los eventos para lograr resultados diferentes. Para obtener más información, vea Modificaciones de marca de tiempo.

Mostrar: