StreamInsight 서버 개념
이 항목에서는 데이터가 StreamInsight 서버에서 표시되고 작동하는 방식과 데이터를 이 서버로 가져오고 서버 외부로 전송하는 방식에 대해 설명합니다. 여기서 Microsoft StreamInsight의 CEP(복합 이벤트 처리)와 관련된 기본 개념을 익히는 데 필요한 설명을 제공합니다. 먼저 데이터 구조에 대해 설명한 다음 데이터에 대해 작동하거나 데이터를 처리하는 StreamInsight 서버 구성 요소에 대해 설명합니다.
스트림
StreamInsight의 모든 데이터는 스트림으로 구성됩니다. 각 스트림에서는 시간에 따라 변화하는 데이터 컬렉션(종료되지 않을 수 있음)을 설명합니다. 예를 들어 주식 종목 스트림에는 주식 시장에서 시간에 따라 바뀌는 여러 주가를 제공하고 온도 센서 스트림에는 시간에 따라 센서에서 보고하는 온도 값을 제공합니다.
다양한 장치의 전력 소모량을 측정하는 일련의 전원 측정기를 모니터링하는 전원 모니터링 시나리오를 가정해 보겠습니다. 이러한 전원 측정기는 전력 소모량(1/10와트 단위) 및 판독값에 연결된 타임스탬프가 포함된 데이터를 정기적으로 전송합니다. 다음 표에서는 3미터의 전원 측정기 판독값을 보여 줍니다. 여기서 각 전원 측정기는 매 초마다 전원 판독값을 내보낸다고 가정합니다.
시간 |
MeterID |
소모량 |
---|---|---|
2009-07-27 10:27:23 |
1 |
100 |
2009-07-27 10:27:24 |
1 |
200 |
2009-07-27 10:27:51 |
2 |
300 |
2009-07-27 10:28:52 |
2 |
100 |
2009-07-27 10:27:23 |
3 |
200 |
이 정보는 시간에 따라 변화하는 값으로 표시할 수 있으므로 데이터를 스트림에 표시할 수 있습니다. 이 스트림에서 지정된 데이터를 사용하는 경우 이 스트림에 대한 쿼리는 지정된 기간 동안의 최고 또는 최저 소모량 값을 기록한 측정기를 반환하거나, 시간에 따라 최고 전원 소모량을 기록한 상위 10개 측정기 목록을 반환할 수 있습니다.
이벤트
스트림에 표시되는 기본 데이터는 이벤트로 패키지됩니다. 이벤트는 StreamInsight 서버에서 처리하는 데이터의 기본 단위입니다. 각 이벤트는 다음과 같은 부분으로 구성됩니다.
헤더. 이벤트 헤더에는 이벤트 종류를 정의하는 메타데이터와 이벤트의 시간 간격을 정의하는 하나 이상의 타임스탬프가 포함됩니다. 타임스탬프는 응용 프로그램을 기반으로 하며 StreamInsight 서버에서 제공하는 시스템 시간이 아닌 데이터 원본에서 제공하는 시간입니다. 타임스탬프는 표준 시간대를 인식하며 24시간제를 기준으로 하는 DateTimeOffset 데이터 형식을 사용합니다. StreamInsight 서버는 모든 시간을 UTC 날짜/시간으로 정규화하며 타임스탬프 필드에 UTC 플래그가 설정되어 있는지 입력을 확인합니다.
페이로드. 이벤트와 연결된 데이터를 포함하는 .NET 데이터 구조입니다. 페이로드에 정의된 필드는 사용자 정의 필드이며, 이들 필드의 형식은 .NET 형식 시스템을 기반으로 합니다.
해당 응용 프로그램 타임스탬프가 쿼리에 도착한 순서에 해당하는 스트림의 이벤트를 "올바른 순서"라고 합니다. 그렇지 않은 경우 이벤트를 "잘못된 순서"로 도착했다고 합니다. StreamInsight 서버는 이벤트가 잘못된 순서로 도착해도 쿼리 작성기가 명시적으로 그렇지 않도록 지정하는 경우가 아니면 쿼리 출력은 이벤트가 순서대로 도착한 것과 같음을 보장합니다. 스트림 내의 일반적인 이벤트 도착 패턴은 다음과 같습니다.
파일이나 테이블의 레코드와 같은 안정적 속도
소매점 바코드 스캐너의 데이터와 같은 중간 및 임의 속도
웹 클릭이나 기상 계측과 같이 갑자기 증가할 수 있는 중간 속도
이벤트 헤더
이벤트 헤더는 이벤트 종류와 이벤트 임시 속성을 정의합니다.
이벤트 종류
이벤트 종류는 이벤트가 스트림의 새 이벤트인지 스트림의 기존 이벤트 완료를 선언하는 이벤트인지를 나타냅니다. StreamInsight에서는 INSERT 및 CTI(현재 시간 증분)의 두 가지 이벤트 종류가 지원됩니다.
INSERT 이벤트 종류는 페이로드가 포함된 이벤트를 이벤트 스트림에 추가합니다. INSERT 이벤트의 헤더는 페이로드 외에 이벤트 시작 시간과 종료 시간도 식별합니다. 다음 다이어그램에서는 INSERT 이벤트 종류의 레이아웃을 보여 줍니다.
헤더 |
페이로드 |
---|---|
Event kind ::= INSERT StartTime ::= DateTimeOffset EndTime ::= DateTimeOffset |
Field 1 … Field n as CLR types |
CTI 이벤트 종류는 스트림에서 기존 이벤트의 완료를 나타내는 공간적 ‘중단’ 이벤트입니다. CTI 이벤트 구조는 현재 타임스탬프를 제공하는 단일 필드로 구성되며, CTI 이벤트는 두 가지 용도로 사용됩니다.
먼저, CTI 이벤트는 해당 응용 프로그램 타임스탬프가 쿼리에 도착한 순서에 해당하지 않는 이벤트를 쿼리에서 허용 및 처리할 수 있도록 합니다. CTI 이벤트는 실행 시에 들어오는 후속 INSERT 이벤트가 CTI 타임스탬프 이전의 이벤트 기록을 수정할 수 없음을 StreamInsight 서버에 알립니다. 즉, CTI 이벤트가 실행되고 나면 INSERT 이벤트의 시작 시간이 CTI 이벤트 타임스탬프보다 이전일 수 없습니다. 이와 같이 이벤트 스트림의 “완료”가 표시되면 StreamInsight 서버가 기간 이동 또는 상태가 누적된 기타 집계 연산자의 결과를 해제할 수 있으므로 시스템 전체에서 이벤트 흐름 효율성을 유지할 수 있습니다.
또한 CTI 이벤트는 쿼리의 짧은 대기 시간을 유지할 수 있도록 합니다. CTI가 자주 발생하면 쿼리에서 보다 높은 빈도로 결과를 내보냅니다.
중요 |
---|
입력 스트림에 CTI 이벤트가 존재하지 않을 경우 쿼리에서 출력이 생성되지 않습니다. |
자세한 내용은 응용 프로그램 시간 이동을 참조하십시오.
다음 다이어그램에서는 CTI 이벤트 종류의 레이아웃을 보여 줍니다.
헤더 |
---|
Event kind ::= CTI StartTime ::= DateTimeOffset |
이벤트 모델
이벤트 모델은 임시 특성을 기준으로 이벤트의 셰이프를 정의합니다. StreamInsight에서는 세 가지 이벤트 모델(지점, 간격, 가장자리)이 지원됩니다. 간격 이벤트는 가장 일반적인 유형이고 가장자리와 지점은 특수한 유형입니다.
간격
간격 이벤트 모델은 페이로드가 지정된 기간 동안 유효한 이벤트를 나타냅니다. 간격 이벤트 모델에서는 이벤트의 시작 시간과 종료 시간이 모두 이벤트 메타데이터에 제공되어야 합니다. 간격 이벤트는 해당하는 특정 시간 간격에만 유효합니다. 이벤트 페이로드의 유효성과 관련하여 이벤트 시작 시간은 경계에 포함되지만 종료 시간은 경계에서 제외됩니다.
다음 다이어그램에서는 간격 이벤트 모델의 레이아웃을 보여 줍니다.
메타데이터 |
페이로드 |
---|---|
Event kind ::= INSERT StartTime ::= DateTimeOffset EndTime ::= DateTimeOffset |
Field 1 … Field n as CLR types |
간격 이벤트의 예로는 전자파의 폭, 경매 입찰 유효 기간, 주식 호가가 특정 기간 동안 유효한 주식 종목 작업 등이 있습니다. 앞서 설명한 전원 모니터링 예제에서 다음 간격 이벤트를 사용하여 전원 측정기 이벤트 스트림을 표시할 수 있습니다.
이벤트 종류 |
시작 |
종료 |
페이로드(소모량) |
---|---|---|---|
INSERT |
2009-07-15 09:13:33.317 |
2009-07-15 09:14:09.270 |
100 |
INSERT |
2009-07-15 09:14:09.270 |
2009-07-15 09:14:22.255 |
200 |
INSERT |
2009-07-15 09:14:22.255 |
2009-07-15 09:15:04.987 |
100 |
지점
시점 이벤트 모델은 단일 시점의 이벤트 발생을 나타냅니다. 시점 이벤트 모델에는 이벤트의 시작 시간만 필요합니다. StreamInsight 서버는 시작 시간에 틱(기본 시간 데이터 형식의 최소 시간 단위)을 추가해 유효한 종료 시간을 유추하여 이벤트의 유효한 시간 간격을 설정합니다. 이벤트 종료 시간이 경계에서 제외된다는 점을 고려했을 때 시점 이벤트는 해당하는 단일 시작 시간 인스턴스에만 유효합니다.
다음 다이어그램에서는 시점 이벤트 모델의 레이아웃을 보여 줍니다.
메타데이터 |
페이로드 |
---|---|
Event kind ::= INSERT StartTime ::= DateTimeOffset |
Field 1 … Field n as CLR types |
측정기 판독값, 전자 메일 도착, 사용자의 웹 클릭, 주식 시세, Windows 이벤트 로그에 입력되는 항목 등을 시점 이벤트의 예로 들 수 있습니다. 앞서 설명한 전원 모니터링 예제에서 다음 시점 이벤트를 사용하여 전원 측정기 이벤트 스트림을 표시할 수 있습니다. 종료 시간은 시작 시간 + 1틱(t)으로 계산됩니다.
이벤트 종류 |
시작 |
종료 |
페이로드(소모량) |
---|---|---|---|
INSERT |
2009-07-15 09:13:33.317 |
2009-07-15 09:13:33.317 + t |
100 |
INSERT |
2009-07-15 09:14:09.270 |
2009-07-15 09:14:09.270 + t |
200 |
INSERT |
2009-07-15 09:14:22.255 |
2009-07-15 09:14:22.255 + t |
100 |
가장자리
가장자리 이벤트 모델은 이벤트 페이로드가 지정된 기간 동안 유효하나 이벤트가 StreamInsight 서버에 도착할 때는 시작 시간만 확인할 수 있는 이벤트 발생을 나타냅니다(종료 시간은 미래의 최대 시간으로 설정됨). 이벤트 종료 시간은 나중에 제공 및 업데이트됩니다. 가장자리 이벤트 모델에는 발생 시간 및 가장자리 유형의 두 가지 속성이 포함됩니다. 이 두 속성은 가장자리 이벤트의 시작 지점 또는 종료 지점을 정의합니다.
다음 다이어그램에서는 가장자리 이벤트 모델의 레이아웃을 보여 줍니다.
메타데이터 |
페이로드 |
---|---|
Event kind ::= INSERT Edge time ::= DateTimeOffset Edge type ::= START | END |
Field 1 … Field n as CLR types |
가장자리 이벤트의 예로는 Windows 프로세스, ETW(Windows용 이벤트 추적)의 추적 이벤트, 웹 사용자 세션, 아날로그 신호 양자화 등이 있습니다. 가장자리 이벤트 페이로드의 유효한 시간 간격은 시작 이벤트 타임스탬프와 종료 이벤트 타임스탬프 간의 차입니다. 다음 다이어그램에서 페이로드 값이 ‘c’인 이벤트에서 현재 지정 시간에는 알려진 종료 날짜가 없습니다.
이벤트 종류 |
가장자리 유형 |
시작 시간 |
종료 시간 |
페이로드 |
---|---|---|---|---|
INSERT |
시작 |
t0 |
DateTimeOffset.MaxValue |
a |
INSERT |
종료 |
t0 |
t1 |
a |
INSERT |
시작 |
t1 |
DateTimeOffset.MaxValue |
b |
INSERT |
종료 |
t1 |
t3 |
b |
INSERT |
시작 |
t3 |
DateTimeOffset.MaxValue |
c |
그 외 다수 |
다음 그림에서는 위의 표에 정의된 시작 시간과 종료 시간을 기준으로 하는 가장자리 이벤트를 사용한 아날로그 신호 양자화를 보여 줍니다. 이러한 연속 신호는 모든 새 값에 대해 END 가장자리와 START 가장자리를 모두 제출해야 함을 의미합니다. 그림에 설명되어 있는 가장자리는 t1에서 t3까지의 시간에 포함된 이벤트를 참조합니다.
이벤트 모델 선택과 관련된 성능 고려 사항
문제를 위한 올바른 이벤트 모델을 선택하는 것이 중요합니다. 예를 들어 일정 기간 지속되는 이벤트가 있고 이벤트의 시작 및 종료 시간을 결정하는 기능이 응용 프로그램에 있는 경우 간격 이벤트를 사용하여 모델링하는 것이 좋습니다. 이벤트 도착 시에 이벤트의 종료 시간을 모르는 경우에는 이벤트를 시점 이벤트로 모델링하고 일정 기간 동안 연장되도록 해당 수명을 변경한 다음 잘라내기 작업을 사용하여 해당 이벤트의 종료가 인식될 경우 수명을 수정할 수 있습니다. 고려할 수 있는 다른 대안은 이러한 이벤트를 가장자리 이벤트로 모델링하는 것입니다.
가장자리 이벤트는 매우 편리한 이벤트 모델이지만 몇 가지 성능 문제를 알고 있어야 합니다. 가장자리 이벤트는 완전히 정렬되어 도착할 경우, 즉 모든 가장자리 시작이 시작 시간에 정렬되고 모든 가장자리 종료가 종료 시간에 정렬되며 이벤트의 결합된 순서도 제시간에 정렬된 경우 가장 잘 작동합니다. 예를 들어 가장자리 이벤트의 순서가 다음과 같다고 가정해 봅니다.
이벤트 종류 |
가장자리 유형 |
시작 시간 |
종료 시간 |
페이로드 |
INSERT |
시작 |
1 |
DateTimeOffset.MaxValue |
a |
INSERT |
종료 |
1 |
10 |
a |
INSERT |
시작 |
3 |
DateTimeOffset.MaxValue |
b |
INSERT |
종료 |
3 |
6 |
b |
INSERT |
시작 |
5 |
DateTimeOffset.MaxValue |
c |
INSERT |
종료 |
5 |
20 |
c |
이 순서는 타임스탬프에서 정렬되지 않습니다(1, 10, 3, 6, 5, 20). 대신에 (1, 3, 5, 6, 10, 20)에서와 같이 가장자리 이벤트가 완전히 정렬된 경우 쿼리 처리 성능에 끼치는 영향이 줄어듭니다. 이러한 정렬을 설정한 다음 처리하는 것은 쉬운 일입니다. 문제를 두 개의 쿼리로 분할합니다. 첫 번째 쿼리는 가장자리 이벤트를 입력으로 수신하고 완전히 정렬한 다음 이러한 정렬된 가장자리 이벤트를 출력하는 빈 쿼리일 수 있습니다. 두 번째 쿼리는 이 입력을 가져와 주요 논리를 수행할 수 있습니다. 이러한 쿼리를 두 개의 개별 쿼리로 정의한 다음 동적 쿼리 컴퍼지션을 사용하여 결합해야 합니다. 자세한 내용은 런타임에 쿼리 작성을 참조하십시오.
이벤트 페이로드
이벤트 페이로드는 이벤트와 연결된 데이터를 포함하는 .NET 데이터 구조입니다. 페이로드의 필드는 사용자 정의 필드이며 필드 형식은 .NET 형식 시스템을 기반으로 합니다. 페이로드 필드에는 대부분의 CLR 스칼라 및 기본 형식을 사용할 수 있으며 중첩 형식은 지원되지 않습니다.
어댑터
어댑터는 StreamInsight 서버로 들어오는 이벤트 스트림과 서버에서 나가는 이벤트 스트림을 변환 및 전달합니다. StreamInsight에서는 도메인 관련 이벤트 원본 및 출력 장치(싱크)에 대해 어댑터를 빌드할 수 있도록 하는 매우 유동적인 어댑터 SDK를 제공합니다. 어댑터는 C# 프로그래밍 언어로 구현되며 어셈블리로 저장됩니다. 어댑터 클래스는 디자인 타임 중에 템플릿으로 작성되어 StreamInsight 서버에 등록되며 런타임 중에 서버에서 어댑터 인스턴스로 인스턴스화됩니다.
입력 어댑터
입력 어댑터 인스턴스는 데이터베이스, 파일, 주식 종목 피드, 네트워크 포트, 센서 등의 외부 소스에서 들어오는 이벤트 스트림을 허용합니다. 입력 어댑터는 들어오는 이벤트를 제공된 형식으로 읽은 다음 이 데이터를 StreamInsight 서버에서 사용할 수 있는 이벤트 형식으로 변환합니다.
데이터 원본에 대해 특정 이벤트 원본을 처리하려면 입력 어댑터를 만듭니다. 이벤트 원본에서 단일 이벤트 유형만 생성하는 경우 어댑터를 형식화하여 특정한 단일 이벤트 유형을 내보내도록 구현할 수 있습니다. 형식화된 어댑터를 사용하면 모든 어댑터 인스턴스가 동일한 고정 페이로드 형식(필드 수 및 해당 유형이 사전에 확인됨)을 생성합니다. 이러한 이벤트의 예로는 특정 장치에서 내보내는 주식 종목 피드 데이터 또는 센서 데이터가 있습니다. 이벤트 원본이 각 상황에서 다른 유형을 내보내는 경우, 즉 이벤트에 다른 페이로드 형식이 포함되거나 페이로드 형식을 사전에 확인할 수 없는 경우에는 형식화되지 않은 어댑터를 구현합니다. 형식화되지 않은(일반) 어댑터를 사용하는 경우 이벤트 페이로드 형식은 쿼리 바인딩 시 구성 사양의 일부분으로 어댑터에 제공됩니다. 이러한 원본의 예로는 파일에 저장되는 데이터의 형식을 쿼리 인스턴스화 시까지는 알 수 없는 여러 필드가 포함된 CSV 파일 또는 테이블의 스키마에 따라 다른 이벤트가 생성되는 SQL Server 테이블의 어댑터가 있습니다. 런타임에는 형식화 여부에 관계없이 단일 어댑터 인스턴스가 항상 특정 단일 유형의 이벤트를 내보냅니다. 형식화되지 않은 어댑터는 어댑터 구현 시 이벤트 유형을 정의하는 대신 쿼리 바인딩 시에 이벤트 유형 지정을 허용할 수 있도록 유동적인 구현을 제공합니다.
출력 어댑터
출력 어댑터를 만들어 StreamInsight 서버에서 처리한 이벤트를 받고, 출력 장치(싱크)에 필요한 형식으로 이벤트를 변환한 다음 해당 데이터를 장치로 내보냅니다. 출력 어댑터 디자인 및 만들기는 입력 어댑터 디자인 및 만들기와 비슷합니다. 형식화된 출력 어댑터는 특정 이벤트 페이로드용으로 디자인되는 반면, 형식화되지 않은 출력 어댑터는 쿼리를 인스턴스화할 때 런타임에만 이벤트 유형에 적용된다는 점이 다릅니다.
자세한 내용은 입력 어댑터 및 출력 어댑터 만들기를 참조하십시오. 핵심 어댑터 API는 모든 이벤트 원본 또는 이벤트 싱크에 대해 구현하기 위한 최대 유연성을 제공합니다. 또한 StreamInsight는 IObservable 또는 IEnumerable 인터페이스를 구현하는 더 높은 추상화 수준에서 이벤트 소스와 싱크를 지원합니다. 자세한 내용은 Observable 및 열거 가능 이벤트 원본 및 이벤트 싱크 사용(StreamInsight)을 참조하십시오.
이벤트 처리 및 분석
StreamInsight에서 이벤트 처리 과정은 사용자가 정의하는 쿼리 논리를 기준으로 하는 쿼리로 구성됩니다. 이러한 쿼리는 시간이 중요한 입력 데이터(로깅된 데이터 또는 실시간 데이터)의 잠재적 무한 피드를 가져와 데이터에 대해 몇 가지 계산을 수행한 다음 결과를 적절한 방식으로 출력합니다.
쿼리 템플릿
쿼리 템플릿은 쿼리 컴퍼지션의 기본 단위입니다. 즉, 쿼리 템플릿은 입력 어댑터에서 StreamInsight 서버로 제출한 이벤트를 연속적으로 분석 및 처리하고 출력 어댑터에서 사용하는 이벤트 스트림을 생성하는 데 필요한 비즈니스 논리를 정의하는 구조입니다. 예를 들어 들어오는 전원 소모량 이벤트에 대해 미리 설정해 둔 특정 임계값을 초과한 지정된 기간 동안의 최대값 또는 최소값을 계산할 수 있습니다.
특정 작업 단위를 수행하도록 쿼리 템플릿을 작성한 다음 보다 복잡한 쿼리 템플릿으로 작성할 수 있습니다. 어댑터는 C# 언어와 결합된 LINQ로 작성됩니다. LINQ는 호스트 언어로 완벽하게 통합되는 방식으로 집합에 대한 선언적 계산을 표현할 수 있도록 하는 언어 플랫폼입니다. 이 플랫폼에서는 선언적 이벤트 처리 기능을 동일한 개발 플랫폼의 융통성 있는 프로시저 프로그래밍과 함께 사용할 수 있으며 두 프로그래밍 패러다임 간의 불일치로 인한 문제가 없습니다.
StreamInsight 서버는 표현 쿼리 및 분석 작성을 위한 다음과 같은 기능을 제공합니다.
추가 이벤트 속성 제공을 위한 계산
단위 변환 등의 사용 사례에서는 수신 이벤트에 대해 계산을 수행해야 합니다. StreamInsight 서버에서 프로젝션 연산을 사용하면 페이로드에 필드를 더 추가하고 입력 이벤트의 필드에 대해 계산을 수행할 수 있습니다. 자세한 내용은 프로젝션을 참조하십시오.
이벤트 필터링
경고 알림 등의 사용 사례에서는 모니터링 중인 장비에서 특정 페이로드 필드가 작동 임계값을 초과하는지 확인해야 할 수 있습니다. 일반적으로 특정 특성을 충족하는 이벤트 하위 집합만이 이러한 사용 사례와 연관이 있습니다. 이러한 특성이 포함되지 않은 이벤트는 처리할 필요가 없으며 삭제해도 됩니다. 필터 작업을 수행하면 이벤트 페이로드에 대해 부울 조건자를 표현할 수 있으며 조건자를 만족하지 않는 이벤트를 삭제할 수 있습니다. 자세한 내용은 필터링을 참조하십시오.
이벤트 그룹화
모든 온도 센서의 온도 판독값을 제공하는 이벤트 스트림이 있다고 가정해 보겠습니다. 모든 이벤트가 단일 이벤트 스트림을 통해 제공되는 경우에는 센서 위치나 센서 ID를 기준으로 들어오는 이벤트를 분할할 수 있습니다. StreamInsight 서버는 위치, ID 등의 이벤트 속성을 기준으로 들어오는 스트림을 분할한 다음 다른 연산을 적용하거나 각 그룹에 대한 쿼리 조각을 개별적으로 완료할 수 있도록 하는 그룹화 작업을 제공합니다. 자세한 내용은 그룹 및 적용을 참조하십시오.
시간 기준 창
시간에 따른 이벤트 그룹화는 많은 시나리오를 가능하게 하는 중요한 개념입니다. 예를 들어 고정된 기간 동안 발생한 실패 횟수를 확인하여 해당 횟수가 임계값을 초과하면 경고를 실행할 수 있습니다. 도약 창과 슬라이딩 윈도우를 사용하면 이벤트 스트림에 대해 창을 정의해 이러한 종류의 분석을 수행할 수 있습니다. 자세한 내용은 이벤트 창 사용을 참조하십시오.
집계
단일 이벤트를 확인하지 않아도 되는 경우에는 평균, 합계, 개수 등의 집계 값을 대신 확인할 수 있습니다. StreamInsight 서버는 일반적으로 시간 창에서 작동하는 sum, count, min, max 및 average 계산을 위한 기본 제공 집계를 제공합니다. 자세한 내용은 집계를 참조하십시오.
상위 N개 후보 확인
이벤트 스트림에서 특정 메트릭에 따라 순위가 가장 높은 후보 이벤트를 확인하는 사용 사례에서는 특수한 종류의 집계 연산이 필요합니다. TopK 연산을 사용하면 스트림의 이벤트 필드에 대해 설정한 순서를 기준으로 이러한 항목을 확인할 수 있습니다. 자세한 내용은 TopK를 참조하십시오.
다른 스트림의 이벤트 일치
일반적인 사용 사례 중 하나는 여러 스트림에서 받은 이벤트를 확인하는 사례입니다. 예를 들어 이벤트 원본은 이벤트 데이터에서 타임스탬프를 제공하므로 특정 스트림의 이벤트와 두 번째 스트림의 이벤트가 시간상 밀접하게 관련된 경우에만 두 스트림이 일치하도록 지정할 수 있습니다. 또한 일치시킬 이벤트와 일치 시기 등에 대해 제약 조건을 추가로 적용할 수도 있습니다. StreamInsight 서버에서는 이 두 태스크를 모두 수행하는 유용한 조인 연산을 제공합니다. 먼저 두 원본에 있는 이벤트의 시간이 서로 겹치면 일치하는 것으로 지정한 다음 페이로드 필드에 지정된 조인 조건자를 실행합니다. 이 일치 작업의 결과에는 첫 번째 이벤트와 두 번째 이벤트의 페이로드가 모두 포함됩니다. 자세한 내용은 조인을 참조하십시오.
다른 스트림의 이벤트를 하나로 결합
여러 데이터 원본에서 제공하는 동일한 유형의 이벤트를 같은 쿼리로 피드하려는 경우가 있습니다. StreamInsight 서버에서 제공하는 통합 연산을 사용하면 여러 입력 스트림을 단일 출력 스트림으로 멀티플렉싱할 수 있습니다. 자세한 내용은 통합을 참조하십시오.
사용자 정의 확장 프로그램
일부 사례에서는 StreamInsight 서버의 기본 제공 쿼리 기능이 충분하지 않을 수 있습니다. 도메인 관련 확장을 허용하기 위해 StreamInsight 서버의 쿼리는 .NET 어셈블리를 통해 제공되는 사용자 정의 기능을 호출할 수 있습니다. 사용자 정의 함수 외에 사용자 지정 집계나 쿼리 연산자도 정의 및 구현할 수 있습니다. 자세한 내용은 사용자 정의 함수 및 사용자 정의 집계 및 연산자를 참조하십시오.
자세한 내용은 LINQ에서 쿼리 템플릿 작성을 참조하십시오. StreamInsight용 LINQ 쿼리 작성에 대한 자세한 지침은 Hitchhiker의 StreamInsight 쿼리 가이드를 참조하십시오.
쿼리 인스턴스
쿼리 템플릿을 특정 입력 및 출력 어댑터에 바인딩하면 쿼리 인스턴스가 StreamInsight 서버에 등록됩니다. 바인딩한 쿼리는 StreamInsight 서버에서 시작, 중지 및 관리할 수 있습니다. 입력 어댑터를 통해 데이터를 StreamInsight 서버로 가져온 후에는 데이터에 대해 계산을 계속 수행할 수 있습니다. 즉, 고정 쿼리는 서버로 도착하는 개별 이벤트를 처리한 다음 입력 이벤트 도착에 대한 응답으로 출력 이벤트를 내보냅니다. 다음 그림에서는 런타임의 StreamInsight 쿼리 및 어댑터를 보여 줍니다. 입력 어댑터 인스턴스를 쿼리 인스턴스에 바인딩할 때 StreamInsight 서버가 이벤트를 사용 및 처리합니다. 그런 다음 처리된 데이터는 동일한 쿼리 인스턴스에 바인딩된 출력 어댑터 인스턴스로 밀어넣기됩니다.