119 lines
9.8 KiB
TeX
119 lines
9.8 KiB
TeX
%!TEX root = ../Thesis.tex
|
|
\section{Grundlagen}
|
|
|
|
In diesem Kapitel werden die Grundlagen von \gls{TSDB} und Time Series Data erklärt.
|
|
\gls{TSDB} gehören zu den NoSQL Datenbanken und sind besonders darauf optimiert, mit Time Series Data zu
|
|
arbeiten. Dadurch können die große Mengen an
|
|
Time Series Data verarbeiten, durchsuchen und speichern.\footnote{\cite[vgl.][]{ComputerWeekly}}
|
|
|
|
\subsection{Time Series Data}
|
|
|
|
Um \gls{TSDB} zu verstehen, muss als erstes geklärt werden, was Time Series Data überhaupt ist und wie sie sich von anderen Daten unterscheiden.
|
|
Wie der Name schon impliziert, ist Time Series Data eine Reihe von Daten, die über einen Zeitraum gesammelt worden sind. Es wird also nicht nur der Endwert aufgezeichnet,
|
|
sonder die Veränderung über einen Zeitraum. Diese Daten können z.B. Servermetriken, %Anwendungs Leistungsüberwachung, finde ich kein besseres Wort für weglassen
|
|
Netzwerkdaten, \gls{IOT} Sensordaten, Ereignisse, Klicks, Marktgeschäfte und viele andere Arten von Daten sein.
|
|
Time Series Data können gut daran erkannt werden, dass die Zeit eine wichtige Achse bei der Darstellung der Werte ist.\footnote{\cite[vgl.][1\psqq]{PaulDix}}
|
|
|
|
Manchmal ist es nicht notwendig, alle Daten zu erfassen. Zum Beispiel wird in vielen Anwendungen nur der letze Login gespeichert.
|
|
Mehr ist auch für die Funktion nicht notwendig. Allerdings können zusätzliche Informationen gewonnen werden, wenn nicht
|
|
nur der letze Datenpunkt sondern die Veränderung über einen Zeitraum aufgezeichnet wird.
|
|
So kann zum Beispiel festgestellt werden, wie oft und wann sich der Kunde einloggt und ob es dabei ein Muster gibt. Anhand dieser Daten können Kunden
|
|
dann kategorisiert werden.\footnote{\cite[vgl.][]{DataScienceTeam2020}}
|
|
|
|
Eine weitere Besonderheit von Time Series Data ist, dass sie sich nicht verändert. Wenn die Daten einmal erfasst wurden wird an ihnen nichts mehr verändert.
|
|
Es werden nur neue Daten hinzugefügt.\footnote{\cite[vgl.][]{SamFangman2019}}
|
|
|
|
\subsection{{Aufbau von Time Series Datenbanken}}
|
|
|
|
\gls{TSDB} sind darauf ausgelegt Key Value paare zu Speichern. Der Key in einem Key Value Datensatz ist eine
|
|
Wert über den die Value referenziert wird. Im Value Teil werden die Daten zum dazugehörigem Key gespeichert.
|
|
Der Wert der Value kann ein primitiver Datentyp sein oder auch ein Objekt das in einen primitiven Datentyp
|
|
umgewandelt worden ist.
|
|
\footnote{\cite[vgl.][]{Key-Value}}
|
|
|
|
Ein Datenpunkt in einer Time Series Database besteht aus mehreren key Value Paaren. Einige Dieser Key Value Paare sind sogenannte Tags.
|
|
Diese Tags sind Werte die sich zwischen den Datenpunkten nicht ändern wie zum Beispiel die Position eines Sensors oder die Kundenummer
|
|
eines Kunden der sich gerade eingeloggt hat. Anhand dieser Tags können die Datenpunkte durchsucht werden. Die eigentlichen Messwerte
|
|
des Sensors oder andere Daten die erfasst werden sollen werden auch als Key Value Paar gespeichert. Zum Beispiel wird als Name
|
|
Temperatur und als Wert 25,2 angeben. Ein Datenpunkt kann mehrere Messwerte haben. Außerdem wird jeder Datenpunkt mit einem Timestamp
|
|
versehen nach welchem er Indexiert wird.\footnote{\cite[vgl.][]{hazelcast}} Eine gute Veranschaulichung wie die Daten in einer \gls{TSDB} aufgebaut sind zeigt das InfluxDB
|
|
Line Protokoll in \cref{list:lineproto}.
|
|
%https://hazelcast.com/glossary/time-series-database/
|
|
|
|
\subsection{{Unterschiede zwischen Time Series und relationalen Datenbanken}}
|
|
|
|
Um Time Series Data zu speichern, ist es nicht unbedingt erforderlich, eine \gls{TSDB} zu nutzen. Auch relationale Datenbanken können Time Series
|
|
Data speichern. Einer der wichtigsten Unterschiede zwischen einer \gls{TSDB} im Gegensatz zu einem \gls{RDBMS} ist es, dass kein Datenbank Schema benötigt wird.
|
|
Wenn Time Series Daten in einer Rationalen Datenbank geschrieben werden sollen, müssen erst entsprechende Tabellen angelegt werden, in denen die Daten immer im
|
|
gleichen Format abgelegt werden müssen. Im Gegensatz dazu können in einer \gls{TSDB} die Daten einfach schemafrei in die Datenbank geschrieben werden. Ein
|
|
weiterer Vorteil ist, dass \gls{TSDB} im Gegensatz zu relationalen Datenbanken besser und einfacher Skaliert werden
|
|
können.\footnote{\cite[vgl.][]{InfluxDataSQL}}
|
|
|
|
Aber \gls{TSDB} haben nicht nur Vorteile. Wie in \cref{fig:db-ranking} zu sehen, sind sie viel weniger verbreitet als nicht zeit basierte Datenbank Systeme. Dadurch gibt
|
|
es viel weniger Entwickler die Erfahrungen mit \gls{TSDB} haben. Auch auch das Ökosystem um die Datenbank ist deutlich kleiner. Außerdem sind \gls{RDBMS}
|
|
dadurch, dass es sie viel länger gibt, sehr stabil und sehr gut unterstützt.\footnote{\cite[vgl.][]{InfluxDataSQL}}
|
|
|
|
\gls{RDBMS} arbeiten nach dem \gls{CRUD} Prinzip, welches für Time Series Data nicht optimal ist. Auf Time Series Data werden keine Update Befehle durchgeführt, da
|
|
neue Daten immer nur angehängt werden. Auch das Löschen von Daten wird nicht sehr häufig durchgeführt und im Gegensatz zu \gls{RDBMS}
|
|
meistens gleichzeitig auf einer großen Menge an Datensätzen. \gls{TSDB} sind auf diese Besonderheiten optimiert und daher besser dafür geeignet, mit Time Series Data zu arbeiten und weisen auch eine
|
|
höhere Performance auf.\footnote{\cite[vgl.][]{InfluxDataSQL}}
|
|
|
|
\subsection{Verbreitete DBMS}
|
|
|
|
Aktuell gibt es wie in \cref{fig:db-ranking} zu sehen, einige beliebte Mulit-Model Datenbanken, die als \gls{TSDB} genutzt werden können.
|
|
So können die Datenbanken wie MongoDB, Redis, Teradata und Couchbase mit Time Series Daten arbeiten. Die erste reine \gls{TSDB} im Ranking ist InfluxDB
|
|
auf Platz 29.\footnote{\cite[vgl.][]{dbranking}}
|
|
|
|
Allerdings haben Datenbanken, die nur auf das verarbeiten von Time Series Data ausgelegt sind, deutliche Performance Vorteile
|
|
gegenüber Multi Model Datenbanken. In einem Vergleich von InfluxDB und MongoDB, hat InfluxDB eine 2,4 mal bessere
|
|
Schreibperformance als MongoDB und ist beim Lesen sogar 5,7 mal schneller. InfluxDB benötigt außerdem 20 mal weniger
|
|
Speicherplatz auf der Festplatte, um die gleiche Menge an Daten zu speichern.\footnote{\cite[vgl.][]{InfluxDBvsMongo}}
|
|
|
|
% Der Teil kommt in die Arbeit wenn ich zu wenig Seiten habe
|
|
%Wie in \cref{fig:tsdb-ranking} zu sehen ist influxDB die mit Abstand belibteste \gls{TSDB}. Unter den gezeigten Datenbanken ist Prometheus eine
|
|
%besonderheit denn dieses Datenbanksystem ist d
|
|
|
|
%\begin{figure}[hbt]
|
|
%\centering
|
|
%\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
|
|
%\caption{TSDB Ranking} % Überschrift
|
|
%\includegraphics[width=1\textwidth]{img/TSDB-Engines-Ranking}\\ % Pfad
|
|
%\source{https://db-engines.com/de/ranking/time+series+dbms} % Quelle
|
|
%\label{fig:tsdb-ranking}
|
|
%\end{minipage}
|
|
%\end{figure}
|
|
|
|
\subsection{{Entwicklungsumgebung}}
|
|
|
|
Um mit InfluxDB zu arbeiten wird eine Umgebung zum ausführen von Docker Containern benötigen, in welchen wir InfluxDB und Jupyter Notebooks betreiben.
|
|
Der eigentliche Code wird dann in Jupyter Notebooks mit Python entwickelt. Die Grundlagen über die Eingesetzen Tool und Techniken werden grob in diesem Kapitel
|
|
erläutert.
|
|
|
|
\subsubsection{{Docker und Docker-Compose}}
|
|
%Docker
|
|
Docker ist eine Software für das erstellen und verwalten von Containern. Mit Docker ist es möglich Anwendungen samt ihrer Umgebung in einer Einheit
|
|
zusammenzufassen, so das diese einfach auf anderen System ausgeführt werden können. Dabei hat jeder Container ein eigenes Dateisystem und ein eigens
|
|
Betriebssystem. Allerdings teilen sich Container und Hostsystem den Kernel des Hostsystems. Dadurch hat diese Art der Virtualisierung deutlich
|
|
weniger Overhead als andere Virtualisierungstechniken. Zusätzlich wird das Betriebssystem innerhalb des Containers maximal reduziert so das nur
|
|
noch benötigte Komponenten vorhanden sind. Wichtig ist es das immer nur möglichst eine Anwendung in einem Container zu finden ist.
|
|
Durch die Virtualisierung sind die einzelnen Container voneinander getrennt.\footnote{\cite[vgl.][54\psqq]{DanielStender2020}}
|
|
|
|
%Docker Compose
|
|
Allerdings bestehen einige Anwendungen aus mehreren Komponenten, diese können durch mehrere Docker Container abgebildet werden. Um die Verwaltung von
|
|
mehreren Container zu erleichtern kann Docker-Compose genutzt werden. Mithilfe von Docker Compose können größere Umgebungen in einem Compose File
|
|
verwaltete werden. Hier werden die Umgebungsvariablen, Container Image oder Dockerfiles, Ports, Storage und weiteres in einer Datei definiert.
|
|
Mithilfe dieser definition kann Docker Compose eine komplexe Umgebung mit nur einem Befehl initialisieren.\footnote{\cite[vgl.][151\psqq]{DanielStender2020}}
|
|
|
|
\subsubsection{{Python und Jupyter Notebooks}}
|
|
%Python
|
|
Python ist eine universelle Prozedurale und Imperative Programmiersprache die 1994 in der ersten Version veröffentlicht wurde. Der Name ist eine Huldigung an Monty Python und
|
|
wurde nicht nach einer Schlange benannt, auch wenn das Logo eine Schlange ist. Python ist unter der freien PFS Lizenz lizenziert wodurch es auch in
|
|
kommerziellen Anwendung genutzt werden kann. Python ist eine Interpretierte Sprache. Das heißt das sie nicht zu einer ausführbaren Datei kompiliert wird
|
|
sondern von einem Interpreter interpretiert wird. Außerdem ist Python eine unter Programmieranfängern sehr beliebte Sprache die auch sehr viel in den
|
|
Bereichen DataSience, DeepLerning, Naturwissenschaften und Linux Systemprogrammierung eingesetzt wird.\footnote{\cite[vgl.][66\psqq]{DanielStender2020}}
|
|
|
|
% Jupyter Notebooks
|
|
Jupyter Notebooks ist eine Webbasierte Open-Source Anwendung mit dem Ziel Code in den Sprachen Python, R, und Julia einfach zu schreiben, bearbeiten,
|
|
auszuführen und einfach zu teilen. Ein Notebook besteht immer aus Zellen. Eine Zelle kann Code oder Markdown Formatierten Text anzeigen. Jede Zelle
|
|
kann einzeln ausgeführt werden. Dadurch kann ein Programm sehr einfach und verständlich dargestellt und erklärt werden. Es ist auch möglich neue Notebooks
|
|
und Dateien im Webinterface von Jupyter Notebooks selbst anzulegen.\footnote{\cite[vgl.][91\psqq]{NikitaSilaparasetty2020}} |