123 lines
9.3 KiB
TeX
123 lines
9.3 KiB
TeX
%!TEX root = ../Thesis.tex
|
|
\section{Grundlagen}
|
|
|
|
\gls{TSDB} gehören zu den NoSQL Datenbanken und sind besonders darauf optimiert, mit Time Series Data zu arbeiten. Daruch 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 die letzen Daten sondern die Veränderung 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 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{{Funktionen von Time Series Database}}
|
|
%
|
|
%Um mit Time Series Data arbeiten zu können sind für eine \gls{TSDB} enige wichtige FUnktionen notwendig. Die wichtigesten Funktionen einer
|
|
%\gls{TSDB} ist es Time Series Data zu speichern. Hier muss
|
|
%
|
|
%
|
|
%hese include time-stamp data storage and compression, data lifecycle management, data summarization,
|
|
%ability to handle large time series dependent scans of many records, and time series aware queries.
|
|
%
|
|
%Im Aufbau unterscheiden sich \gls{TSDB} vorallendingen darin das sie nur dazu
|
|
|
|
\subsection{{Unterschiede zwischen Time Series und relationalen Datenbanken}}
|
|
|
|
%Umschreiben und andere Quellen verwenden
|
|
|
|
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 notwendig ist.
|
|
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 sich mit \gls{TSDB} auskennen und 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 Seires Data werden keine Update Befehle durchgeführt, da
|
|
neue Daten immer nur als neuer Datenpunkt 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. Daher sind \gls{TSDB} 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 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}}
|
|
|
|
% Wenn ich zu viele Seiten habe kommt das Bild in den Anhang
|
|
\begin{figure}[hbt]
|
|
\centering
|
|
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
|
|
\caption{DB-Engines Ranking} % Überschrift
|
|
\includegraphics[width=1\textwidth]{img/DB-Engines-Ranking} % Pfad
|
|
\source{https://db-engines.com/de/ranking?msclkid=4f2a29e5d08811ec95ccd74f8f5146ab} % Quelle
|
|
\label{fig:db-ranking}
|
|
\end{minipage}
|
|
\end{figure}
|
|
|
|
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 finde sich in diesem Kapitel.
|
|
|
|
\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}} |