Share via


Concetti di StreamInsight

 

In questo argomento viene descritto il modo in cui i dati vengono rappresentati ed elaborati in un programma di Microsoft StreamInsight. Scopo dell'argomento è fornire una descrizione dei concetti di base associati all'elaborazione di eventi complessi in StreamInsight. All'inizio dell'argomento vengono descritte le strutture di dati e, successivamente, le entità di StreamInsight tramite cui i dati vengono elaborati o gestiti.

Sequenze di dati

StreamInsight funziona con tre tipi diversi di sequenze di dati:

  • Pull: una sequenza di dati pull è un elenco ordinato di oggetti dello stesso tipo, implementati tramite l'interfaccia IEnumerable<>. Un consumer di questa sequenza potrebbe accedervi in modo iterativo utilizzando il framework LINQ-to-Objects. Per ulteriori informazioni, vedere LINQ to Objects.

  • Push: una sequenza di dati push è un elenco ordinato di oggetti dello stesso tipo, implementati tramite l'interfaccia IObservable<>. Con l'origine dati la sequenza viene indirizzata a uno o più consumer di dati il cui accesso viene effettuato utilizzando il dialetto LINQ Reactive Framework. Per ulteriori informazioni, vedere la pagina relativa a Reactive Extensions.

  • Flusso temporale: un flusso temporale è una sequenza di eventi in cui è disponibile un set univoco di caratteristiche. Un flusso temporale viene implementato tramite l'interfaccia IStreamable<> e può essere elaborato utilizzando operatori LINQ di StreamInsight.

Flussi temporali

Un flusso temporale è un tipo specifico di flusso di dati riconosciuto da StreamInsight. Si tratta di una sequenza di dati potenzialmente infinita in cui ogni evento è costituito da un payload e da un componente temporale tramite cui viene identificata l'ora di inizio e l'ora di fine dell'evento. Negli esempi è incluso un flusso di ticker per le azioni che fornisce il prezzo di azioni diverse su un mercato man mano che queste cambiano nel tempo o un flusso di sensori di temperatura che fornisce i valori di temperatura segnalati dal sensore nel tempo.

Di seguito sono riportate la caratteristiche univoche di un flusso temporale:

  1. In ogni evento del flusso è disponibile un timestamp.

  2. Nel flusso sono contenuti eventi speciali denominati Current Time Increment (CTI) tramite cui viene indicata la completezza degli eventi nel flusso fino a quel momento.

  3. Negli eventi del flusso viene rispettato il modello CTI, cioè quando un CTI viene visualizzato nel flusso temporale, in nessun altro evento nel flusso sarà disponibile un timestamp precedente quello dell'evento CTI.

Eventi

I dati sottostanti rappresentati in un flusso temporale vengono compressi in eventi. Un evento è l'unità di base dei dati elaborati da StreamInsight. Ciascun evento è costituito da un'intestazione e da un payload. In un'intestazione di evento sono contenuti i metadati tramite cui vengono definiti il tipo di evento e uno o più timestamp con cui viene stabilito l'intervallo di tempo per l'evento. Il payload è una struttura di dati .NET contenente i dati associati all'evento. I campi definiti nel payload sono definiti dall'utente e i relativi tipi sono basati sul sistema di tipi .NET.

StreamInsight supporta due tipi di evento: INSERT e CTI (Current Time Increment). Con il tipo di evento INSERT viene aggiunto un evento con il relativo payload nel flusso di eventi, insieme a un'ora di inizio e un'ora di fine per l'evento. Il tipo di evento CTI è un evento di punteggiatura speciale con un unico campo in cui viene fornito un timestamp corrente. Con l'evento CTI viene indicata la completezza degli eventi esistenti nel flusso fino a quel momento e viene consentito a una query di accettare ed elaborare gli eventi i cui timestamp applicazione non corrispondono al relativo ordine di arrivo nella query.

Per ulteriori informazioni sugli eventi di StreamInsight e sulla modalità di utilizzo degli eventi CTI, vedere Struttura dell'evento.

Entità di StreamInsight

Con un programma di StreamInsight vengono creati e utilizzati cinque tipi di base di entità: origine, sink, soggetto, associazione e processo.

Origine

Un'origine è un generatore di dati.

Per supportare la composizione di query LINQ sulle sequenze e sui flussi temporali, in StreamInsight vengono esposte le implementazioni delle specializzazioni IQueryable, IQbservable e IQStreamable dei tipi di origine. Queste interfacce vengono definite rispettivamente negli spazi dei nomi System.Linq, System.Reactive.Linq e Microsoft.ComplexEventProcessing.Linq. Per ulteriori informazioni, vedere IQueryable, IQbservable e IQStreamable.

Sink

Un sink è un consumer di dati. Un sink può essere un observer in un'origine IObservable/IStreamable oppure un oggetto IStreamableSink in un'origine IStreamable.

Nota


A causa della natura del contratto IEnumerable, in cui un consumer (enumeratore) viene ottenuto direttamente dall'enumerabile, non è disponibile alcun concetto di sink Enumerator.

Soggetto

Un soggetto è sia un producer sia un consumer di dati e consente inoltre di condividere calcoli e stati in più producer e consumer. Con un soggetto vengono implementate le interfacce IObservable e IObserver, consentendo al soggetto sia di sottoscrivere le origini Observable sia di accettare le sottoscrizioni dell'observer.

Nota


I soggetti non supportano direttamente l'interfaccia IStreamable.

Associazione

Un'associazione è una composizione eseguibile in origini, sink e soggetti. Si tratta della logica utilizzata per connettere le origini ai sink.

Processo

Un processo è un'esecuzione denominata di un'associazione.

Vedere anche

Distribuzione di entità di StreamInsight in un server StreamInsight
Pianificazione e architettura (StreamInsight)