스냅숏 창

 

스냅숏 창은 특정한 시간 기간 내에 속하면서 해당 기간 동안 집계와 같은 집합 기반 계산 몇 가지를 수행할 수 있는 이벤트의 하위 집합을 정의합니다. 스냅숏 창은 시간대를 이벤트의 시작 시간과 종료 시간을 따라 나누며 따라서 동적이고 이벤트를 기반으로 합니다. 타임스탬프 수정과 함께 매우 유연하며 다양한 시나리오에 사용할 수 있습니다.

이벤트 창에 대한 일반적인 설명과 StreamInsight에서의 구현 및 사용법에 대해서는 이벤트 창 사용을 참조하십시오.

스냅숏 창 이해

스냅숏 창은 시간대를 따르는 고정된 표 형태가 아닌 스트림에 있는 이벤트의 시작 시간과 종료 시간에 따라 정의됩니다. 창의 크기와 기간은 스트림의 이벤트를 통해서만 정의됩니다. 가장 근접한 이벤트 끝점의 각 쌍(시작 시간과 종료 시간)에 대해 스냅숏 창이 만들어집니다. 이 정의에 따르면 모든 이벤트 시작 시간과 종료 시간은 창 경계에 속하며 그 사이에 있지 않습니다. 즉, 스냅숏 창은 발생하는 모든 변경 내용에 따라 시간대를 나눕니다.

다음 그림에서는 세 개의 이벤트(e1, e2, e3)가 포함된 스트림을 보여 줍니다. 세로 막대에는 이러한 이벤트로 정의되는 스냅숏 창 경계가 표시됩니다. 연한 파란색 이벤트 스트림은 시간에 따라 이동하는 이벤트 스트림을 나타냅니다. 주황색 상자에는 스냅숏 창과 각 창에 포함된 이벤트가 표시됩니다. 예를 들어 시작 시간과 종료 시간을 기반으로 하면 첫 번째 스냅숏 창에는 e1 이벤트만 포함됩니다. 그러나 e1 이벤트와 e2 이벤트가 겹치므로 두 번째 창에는 이 두 이벤트가 모두 포함됩니다.

SnapshotWindowForEvents

프레임워크가 이벤트를 창에 맞게 자르는 입력 정책(현재 사용 가능한 유일한 입력 정책)을 적용한 후 이벤트는 다음 그림과 같이 표시됩니다.

SnapshotWindowForEvents2

실제 집합 기반 연산에 입력되는 창과 이벤트입니다. 입력 이벤트의 타임스탬프를 조사할 수 있는 시간이 중요한 사용자 정의 집계 또는 연산자를 적용할 때는 자르기 동작을 이해하는 것이 중요합니다.

스냅숏 창 정의

스냅숏 창에는 창 정의를 위한 매개 변수가 없습니다. 기본 창 정책은 입력 및 출력 이벤트를 창 크기에 맞게 자릅니다.

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

위의 예에서 스냅숏 창에 대한 인수는 해당하는 정책 클래스 인스턴스를 반환하는 정적 속성입니다. 이러한 속성은 사용자 편의를 위해 제공됩니다.

스냅숏 창은 슬라이딩 윈도우를 구현하는 데 사용할 수 있는 강력한 구조입니다. 슬라이딩 윈도우는 고정된 기간이 아니라 시간적으로 이벤트와 함께 움직이는 창입니다. 슬라이딩 윈도우의 장점은 길이가 입력 이벤트에 따라 조정되기 때문에 입력이 변경되지 않으면 출력을 생성하지 않는다는 점입니다. 이는 이벤트 스트림을 압축하는 방법으로 볼 수 있습니다. 이러한 디자인은 많은 그룹을 구성하는 입력 데이터를 사용하여 그룹 및 적용 연산자 내에서 집계를 수행할 때 특히 유용합니다. 도약 창을 사용하면 입력 변경 비율에 독립적으로 각 그룹이 각 창마다 결과를 생성합니다. 자세한 내용은 도약 창을 참조하십시오.

슬라이딩 윈도우는 입력 스트림의 적절한 임시 수정과 쌍을 이루는 스냅숏 연산자로 구현됩니다. 일반적으로 이벤트 기간의 연장인 타임스탬프 수정 작업을 수행하면 시간 경과에 따라 각 이벤트의 "범위"가 먼저 변경됩니다. 그런 다음 스냅숏에는 이 기간에 속하는 모든 이벤트가 포함됩니다. 예를 들어 마지막 3분 동안 시점 이벤트 입력 스트림의 슬라이딩 평균을 계산하는 것이 목적이라고 가정하겠습니다. 다음 그림은 입력 스트림에 AlterEventDuration() 메서드를 적용하여 그림에서처럼 시간대에 따라 각 이벤트를 "늘리는" 방법을 보여 줍니다.

SnapshotWindowForEvents3

이 스트림에서는 그림과 같이 Snapshot 연산자가 적용되며 결과 창에 대해 원하는 이벤트 필드의 평균이 계산됩니다.

SnapshotWindowForEvent4

이 그림에서 결과 이벤트는 마지막 3분 동안 각 시간 지점에서 모든 이벤트의 평균을 기술합니다. 이 결과는 해당 시간대 내에서 평균이 변경되지 않은 한 계속 지속되면서 간격 이벤트로 표현됩니다. 예를 들어 이 계열에서 네 번째 이벤트는 마지막 3분 동안 해당 이벤트 내의 모든 지점에서 측정된 모든 이벤트의 평균이 1.5였음을 보여 줍니다. 다음 그림과 같이 결과 이벤트는 페이로드가 3인 시점 이벤트가 3분이라는 창 외부에 놓일 때 시작되며, 페이로드가 1인 시점 이벤트가 해당 창 외부에 놓이기 직전에 결과 이벤트가 종료됩니다.

SnapshotWindowForEvents5

LINQ(통합 언어 쿼리)를 사용하면 이 시나리오는 다음과 같이 표현됩니다(입력 이벤트 유형에 필드 'Value'가 있다고 가정).

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

일반적으로 스냅숏을 통해 집합 기반 연산을 적용할 때 특정 시간을 "다시 확인"하려면 이벤트 수명이 미래 시간까지 연장되어야 합니다. 다른 결과를 얻으려면 다른 유형의 이벤트 수명 수정 연산자를 사용할 수 있습니다. 자세한 내용은 타임스탬프 수정을 참조하십시오.

참고 항목

집계
TopK
사용자 정의 집계 및 연산자
타임스탬프 수정
개수 창
도약 창
이벤트 창 사용