[TASK] Generic commit.

This commit is contained in:
Jan Philipp Timme 2016-09-26 12:24:01 +02:00
parent 3cd2e42e75
commit 456fdc1332

View File

@ -391,12 +391,12 @@ Von Transaktionen im Handel über Messereignisse von Sensoren bis hin zu Benutze
Um Complex Event Processing durchführen zu können, wird eine CEP-Engine benötigt. Eine CEP-Engine ist eine Software, welche Ereignisdatenströme konsumiert und durch die Auswertung benutzerdefinierter CEP-Regeln verarbeitet. Aufgrund der großen Datenvolumen, die eine CEP-Engine verarbeiten muss, werden Ereignisse nur für die Dauer der Verarbeitung im Speicher gehalten\footnote{Dieser Parameter hängt meist von der Größe der verwendeten Sliding Windows ab.} und nicht persistiert. Um Complex Event Processing durchführen zu können, wird eine CEP-Engine benötigt. Eine CEP-Engine ist eine Software, welche Ereignisdatenströme konsumiert und durch die Auswertung benutzerdefinierter CEP-Regeln verarbeitet. Aufgrund der großen Datenvolumen, die eine CEP-Engine verarbeiten muss, werden Ereignisse nur für die Dauer der Verarbeitung im Speicher gehalten\footnote{Dieser Parameter hängt meist von der Größe der verwendeten Sliding Windows ab.} und nicht persistiert.
\paragraph{CEP-Regeln} \paragraph{CEP-Regeln}
Eine CEP Regel definiert Bedingungen, die in einem Ereignisdatenstrom gesucht werden sollen, gefolgt von Aktionen, die bei zutreffenden Bedingungen ausgeführt werden sollen. Passen Ereignisse aus dem Datenstrom auf die Bedingungen, so matcht die Regel. Die in der Regel definierten Aktionen werden dann ausgeführt --- die Regel feuert. Eine CEP Regel definiert Bedingungen, die in einem Ereignisdatenstrom gesucht werden sollen, gefolgt von Aktionen, die bei zutreffenden Bedingungen ausgeführt werden sollen. Passen Ereignisse aus dem Datenstrom auf die Bedingungen, so matcht die Regel. Die in der Regel definierten Aktionen werden dann ausgeführt --- die Regel feuert\cite{hsh:cep}.
\paragraph{Ereignisse} \paragraph{Ereignisse}
Ein Ereignis trägt neben inhaltlichen Informationen über den Vorgang durch den es ausgelöst wurde auch eine eindeutige ID sowie einen Zeitstempel mit sich. Während der Zeitstempel den Zeitpunkt der Ereignisauslösung angibt, dient die ID zur eindeutigen Abgrenzung von anderen Ereignisssen, die vom selben Typ sind oder zum selben Zeitpunkt entstanden sind. Da es bedingt durch Übertragunglatenz und weitere technische Randbedingungen möglich ist, dass die Ereignisdaten zeitverzögert bei der CEP-Engine ankommen, wird der Zeitstempel ebenfalls benötigt, um die zeitlichen Beziehungen zwischen den Ereignissen zu erhalten. Ein Ereignis trägt neben inhaltlichen Informationen über den Vorgang durch den es ausgelöst wurde auch eine eindeutige ID sowie einen Zeitstempel mit sich. Während der Zeitstempel den Zeitpunkt der Ereignisauslösung angibt, dient die ID zur eindeutigen Abgrenzung von anderen Ereignisssen, die vom selben Ereignistyp sind oder zum selben Zeitpunkt entstanden sind. Da es bedingt durch Übertragunglatenz und weitere technische Randbedingungen möglich ist, dass die Ereignisdaten zeitverzögert bei der CEP-Engine ankommen, wird der Zeitstempel ebenfalls benötigt, um die zeitlichen Beziehungen zwischen den Ereignissen zu erhalten.
Jedes Ereignis trägt eine geringe Menge von Daten mit sich, die für das Ereignis spezifische Informationen enthalten. Dies können beispielsweise Daten von Sensoren, Angaben über eine Benutzersitzung oder Statusdaten eines Systems sein. Diese Daten sind jedoch nur \emph{Momentaufnahmen} und verlieren mit fortschreitender Zeit meist an Gültigkeit. Jedes Ereignis trägt abhängig von seinem Ereignistypen eine geringe Menge von Daten mit sich, die für das Ereignis spezifische Informationen enthalten. Dies können beispielsweise Daten von Sensoren, Angaben über eine Benutzersitzung oder Statusdaten eines Systems sein. Diese Daten sind jedoch nur \emph{Momentaufnahmen} und verlieren mit fortschreitender Zeit meist an Gültigkeit.
Dafür treten diese primitiven Ereignisse häufig mit einer sehr hohen Frequenz auf, da ein Vorgang bei seiner Durchführung eine Vielzahl von Ereignissen auslösen kann. Betrachtet man beispielsweise einen aus dem Stand anfahrenden PKW bis zu seiner Erreichung von 30km/h, so würde man zusätzlich zu periodisch gemeldeten Messwerten aus dem Motorraum und Informationen über Gangwechsel des Getriebes eine Flut von Informationen darüber erhalten, wie die Pedale durch den Fahrer bedient wurden oder wie das Lenkrades eingeschlagen wurde. Dafür treten diese primitiven Ereignisse häufig mit einer sehr hohen Frequenz auf, da ein Vorgang bei seiner Durchführung eine Vielzahl von Ereignissen auslösen kann. Betrachtet man beispielsweise einen aus dem Stand anfahrenden PKW bis zu seiner Erreichung von 30km/h, so würde man zusätzlich zu periodisch gemeldeten Messwerten aus dem Motorraum und Informationen über Gangwechsel des Getriebes eine Flut von Informationen darüber erhalten, wie die Pedale durch den Fahrer bedient wurden oder wie das Lenkrades eingeschlagen wurde.
@ -465,7 +465,7 @@ Ein \enquote{Hello World}-Softwarepaket zur Demonstration der Engine, welches un
\section{Auswahl der Engine für die Arbeit} \section{Auswahl der Engine für die Arbeit}
Da in dieser Arbeit die Verarbeitung von RDF-Ereignisdatenströmen anhand einer konkreten CEP-Engine erläutert werden soll, muss nun eine Entscheidung für eine CEP-Engine gefällt werden. Um einen möglichst einfachen Einstieg in die Thematik zu bekommen, soll die vorgestellte Engine möglichst wenig zusätzlichen Aufwand hervorrufen. Somit sind folgende Kriterien für die Auswahl der Engine verwendet worden: Da in dieser Arbeit die Verarbeitung von RDF-Ereignisdatenströmen anhand einer konkreten CEP-Engine erläutert werden soll, muss nun eine Entscheidung für eine CEP-Engine gefällt werden. Um einen möglichst einfachen Einstieg in die Thematik zu bekommen, soll die vorgestellte Engine möglichst wenig zusätzlichen Aufwand hervorrufen. Somit sind folgende Kriterien für die Auswahl der Engine verwendet worden:
\begin{itemize} \begin{itemize}
\item Gut erkennbarer Workflow zur Verwendung der Engine \item Workflow zur Verwendung der Engine klar strukturiert
\item Verwendung wenig verschiedener Programmiersprachen \item Verwendung wenig verschiedener Programmiersprachen
\item Verwendung sehr verbreiteter Programmiersprachen \item Verwendung sehr verbreiteter Programmiersprachen
\item Transparente Implementierung der Engine durch Verwendung bekannter Technologien \item Transparente Implementierung der Engine durch Verwendung bekannter Technologien
@ -518,12 +518,16 @@ Wie aus Listing~\ref{lst:sample_abstract_event_data} zu erkennen ist, ist jedes
\section{Sprachkonzepte für CEP-Regeln} \section{Sprachkonzepte für CEP-Regeln}
Um die Ereignisdatenströme von RDF-Quadrupeln nun in der C-SPARQL-Engine verarbeiten zu können, werden CEP-Regeln benötigt, die im eigentlichen Verarbeitungsprozess verwendet werden, um die Ereignisdaten auszuwerten. Diese Regeln beschreiben Bedingungen für die einströmenden Ereignisse, auf die sie --- sobald sie matchen --- die in der Regel definierten Aktionen ausgeführen. Listing~\ref{lst:sample_abstract_cep_rule} zeigt eine CEP-Regel in abstrakter Notation. Um die Ereignisdatenströme von RDF-Quadrupeln nun in der C-SPARQL-Engine verarbeiten zu können, werden CEP-Regeln benötigt, die im Verarbeitungsprozess verwendet werden, um die Ereignisdaten auszuwerten. Im Fall der C-SPARQL-Engine sind CEP-Regeln als CSPARQL-Queries zu formulieren.
Um den Einstieg in den CSPARQL-Akzent der C-SPARQL-Engine zu erleichtern, wird zunächst eine abstrakte Notation für CEP-Regeln eingeführt, anhand derer im Folgenden die Möglichkeiten innerhalb von CSPARQL-Queries erläutert werden sollen.
Listing~\ref{lst:sample_abstract_cep_rule} zeigt eine CEP-Regel in abstrakter Notation.
\begin{lstlisting}[label={lst:sample_abstract_cep_rule}, caption={CEP-Regel in abstrakter Notation}] \begin{lstlisting}[label={lst:sample_abstract_cep_rule}, caption={CEP-Regel in abstrakter Notation}]
CONDITION (Event1 as e1, Event2 as e2)[within last 10min] CONDITION
e1.foo > 500 AND e2.origin != "Mars"
ACTION ACTION
create new Event3(foo=(e1.baz+e2.baz/3), bar=e2.origin)
\end{lstlisting} \end{lstlisting}