Unterschiede zwischen Time Series und Relationalen Datenbanken
Einsatz Vorteile und Installtion am Beispiel von InfluxDB
Einleitung
Time Series Datenbanken sind Datenbanksysteme, die speziell für die Verwaltung und Analyse von Zeitreihendaten entwickelt wurden. Zeitreihendaten sind Daten, die im Laufe der Zeit erfasst wurden und typischerweise mit Zeitstempeln versehen sind. Solche Daten stammen oft aus der Überwachung von Systemen, Sensoren, Maschinen, Netzwerken oder Anwendungen. Einige Beispiele für Zeitreihendaten sind Temperaturmessungen, Luftfeuchtigkeit, Aktienkurse, Wetterdaten, Verkehrsdaten, Stromverbrauch, Leistungsdaten und viele mehr.
Time Series Datenbanken bieten im Vergleich zu traditionellen Datenbanksystemen wie relationalen Datenbanken einige Vorteile. Zum Beispiel können sie große Mengen von Zeitreihendaten effizient speichern, verwalten und analysieren. Sie bieten auch spezielle Funktionen und Abfragesprachen, die auf Zeitreihendaten zugeschnitten sind und es Benutzern ermöglichen, komplexe Analysen durchzuführen und Muster oder Trends zu erkennen.
Time Series Datenbanken wurden in den letzten Jahren immer beliebter, da die Menge an Daten, die von Sensoren und anderen Überwachungssystemen generiert werden, rapide zunimmt. Unternehmen müssen in der Lage sein, diese Daten in Echtzeit zu erfassen, zu speichern und zu analysieren, um wertvolle Erkenntnisse zu gewinnen und fundierte Entscheidungen zu treffen. Time Series Datenbanken wurden daher entwickelt, um den Anforderungen von Big Data und der Internet of Things (IoT) gerecht zu werden.
Einige der bekanntesten Time Series Datenbanken sind InfluxDB, TimescaleDB, Prometheus, OpenTSDB und Graphite. Diese Datenbanksysteme sind Open-Source-Software und werden von einer wachsenden Community von Entwicklern und Anwendern unterstützt.
Was war die erste Time Series Datenbank?
Es gibt keine eindeutige Antwort darauf, welche Datenbank als erste Time Series Datenbank bezeichnet werden kann, da verschiedene Datenbanksysteme im Laufe der Zeit Funktionen und Eigenschaften entwickelt haben, die für die Verwaltung von Zeitreihendaten geeignet sind.
Allerdings gilt die IBM’s „Historical Data Storage System“ (HDSS), das in den 1980er Jahren entwickelt wurde, als eine der ersten Datenbanken, die sich auf die Speicherung und Verwaltung von Zeitreihendaten konzentriert hat. Es wurde speziell für die Verwaltung von Leistungsdaten in Echtzeit entwickelt, um das Verhalten von Stromnetzen zu überwachen.
In den 1990er Jahren entstanden weitere Datenbanksysteme, die sich auf Zeitreihendaten spezialisierten, wie zum Beispiel das System RPL (Real-time Process Language) von Schlumberger und das System PI (Plant Information) von OSIsoft. Diese Systeme wurden für die Überwachung und Steuerung von industriellen Prozessen eingesetzt.
Mit dem Aufkommen von Big Data und IoT in den letzten Jahren haben sich Time Series Datenbanken zu einem wichtigen Teil der IT-Infrastruktur vieler Unternehmen und Organisationen entwickelt. Eine der bekanntesten und am weitesten verbreiteten Time Series Datenbanken heute ist InfluxDB, das im Jahr 2013 eingeführt wurde.
Vorteile einer Time Series Datenbank gegenüber einer Relationalen Datenbank
Eine Time Series Datenbank ist eine Art von Datenbank, die speziell für die Speicherung von Zeitreihendaten entwickelt wurde. Im Gegensatz dazu ist eine Relationale Datenbank eine Datenbank, die auf der relationalen Modellierung basiert, in der Daten in Tabellen mit Zeilen und Spalten organisiert werden.
Ein Vorteil einer Time Series Datenbank gegenüber einer Relationalen Datenbank ist, dass sie speziell für die Verwaltung und Analyse von Zeitreihendaten optimiert ist. Zeitreihendaten werden in der Regel in hohen Volumina und Geschwindigkeiten generiert und sind häufig mit Schwankungen verbunden, die sich im Laufe der Zeit ändern können. Eine Time Series Datenbank ist darauf ausgelegt, diese Daten effektiv zu speichern und zu verwalten, um schnelle und genaue Analysen durchzuführen.
Ein Beispiel, bei dem eine Time Series Datenbank von Vorteil sein kann, ist ein Unternehmen, das Daten von Sensoren überwachen muss, um Trends oder Muster zu erkennen. Diese Sensoren können in einer Produktionsanlage oder in einem Gebäude zur Überwachung von Temperatur, Luftfeuchtigkeit, Stromverbrauch usw. eingesetzt werden. Da diese Sensoren kontinuierlich Daten generieren, müssen sie in Echtzeit erfasst und verarbeitet werden, um Probleme rechtzeitig zu erkennen und zu beheben.
Eine Relationale Datenbank könnte diese Daten speichern, jedoch wäre die Speicherung von großen Mengen an Zeitreihendaten in Tabellen nicht effizient und könnte zu Performanceproblemen führen. Eine Time Series Datenbank hingegen kann diese Daten effizient in speziell für die Speicherung von Zeitreihendaten optimierten Strukturen speichern und verwalten. Dies ermöglicht es, schnelle Analysen durchzuführen und Trends oder Muster in Echtzeit zu erkennen.
Zusammenfassend lässt sich sagen, dass eine Time Series Datenbank gegenüber einer Relationalen Datenbank den Vorteil hat, dass sie speziell für die Verwaltung und Analyse von Zeitreihendaten optimiert ist. Dies führt zu einer besseren Performance und Genauigkeit bei der Analyse von Zeitreihendaten und kann für Unternehmen von entscheidender Bedeutung sein, die auf eine Echtzeitüberwachung von Sensordaten angewiesen sind, um Probleme rechtzeitig zu erkennen und zu beheben.
Benchmarkvergleiche zwischen Time Series Datenbanken und Relationalen Datenbanken
Um die Leistungsfähigkeit von Time Series Datenbanken im Vergleich zu Relationalen Datenbanken zu demonstrieren, wurden verschiedene Benchmarks durchgeführt. Hier sind einige Beispiele:
Benchmark von InfluxData: InfluxData ist ein bekannter Anbieter von Time Series Datenbanken. In einem Benchmark, der von InfluxData durchgeführt wurde, wurden InfluxDB (eine Time Series Datenbank) und PostgreSQL (eine Relationale Datenbank) verglichen. Dabei wurden Daten von 10 Millionen Messwerten in einem Zeitraum von 60 Minuten gespeichert und abgefragt. Das Ergebnis zeigte, dass InfluxDB bis zu 100-mal schneller war als PostgreSQL.
Benchmark von TimescaleDB: TimescaleDB ist eine Relationale Datenbank, die speziell für die Verwaltung von Zeitreihendaten entwickelt wurde. In einem Benchmark von TimescaleDB wurde die Leistung von TimescaleDB mit der von InfluxDB verglichen. Dabei wurden 1 Milliarde Datensätze von Temperatur- und Feuchtigkeitssensoren gespeichert und abgefragt. Das Ergebnis zeigte, dass TimescaleDB bis zu 20-mal schneller war als InfluxDB bei der Speicherung von Daten und bis zu 3-mal schneller bei der Abfrage von Daten.
Benchmark von Prometheus: Prometheus ist ein Open-Source-System zur Überwachung von Systemen und Anwendungen. In einem Benchmark von Prometheus wurden Prometheus und Graphite (eine Relationale Datenbank) verglichen. Dabei wurden 2,5 Millionen Messwerte in einem Zeitraum von 15 Minuten gespeichert und abgefragt. Das Ergebnis zeigte, dass Prometheus bis zu 1.000-mal schneller war als Graphite.
Diese Benchmarks zeigen, dass Time Series Datenbanken gegenüber Relationalen Datenbanken in der Regel eine bessere Performance aufweisen, wenn es darum geht, große Mengen von Zeitreihendaten zu speichern und abzufragen. Allerdings sollten Benchmarks immer mit Vorsicht betrachtet werden, da sie stark von der Datenmenge, den Abfragemustern und anderen Faktoren abhängen können.
InfluxDB
InfluxDB ist eine Open-Source-Datenbank, die speziell für die Speicherung und Analyse von Zeitreihendaten entwickelt wurde. Es wurde im Jahr 2013 von InfluxData entwickelt und ist in Go geschrieben, einer Programmiersprache, die für ihre Leistung und Effizienz bekannt ist.
InfluxDB ist eine NoSQL-Datenbank und unterstützt eine spezielle Abfragesprache namens InfluxQL, die speziell für die Verarbeitung von Zeitreihendaten entwickelt wurde. Die Datenbank verwendet eine Columnar-Struktur, um Daten effizient zu speichern und Abfragen schnell auszuführen. InfluxDB kann auch in Echtzeit Daten schreiben und Abfragen beantworten, wodurch es für Anwendungen geeignet ist, die schnelle und kontinuierliche Updates erfordern.
InfluxDB ist in der Lage, eine Vielzahl von Datenquellen zu integrieren, darunter Sensoren, Maschinen, Netzwerke, Anwendungen und Protokolle wie Syslog, SNMP und HTTP. Es bietet auch native Unterstützung für Datenvisualisierungswerkzeuge wie Grafana, um Benutzern die einfache Darstellung und Analyse von Daten zu ermöglichen.
InfluxDB ist in der IT-Industrie sehr beliebt und wird von vielen Unternehmen und Organisationen eingesetzt, um Daten in Echtzeit zu sammeln und zu analysieren. Es wird auch von vielen Entwicklern und Datenwissenschaftlern genutzt, um Zeitreihendaten zu erforschen und Einblicke in das Verhalten von Systemen, Prozessen und Anwendungen zu gewinnen.
Installation von InfluxDB
Hier ist eine Schritt-für-Schritt-Anleitung, wie man InfluxDB auf einem Linux-System installieren kann:
Öffne ein Terminalfenster auf deinem Linux-System.
Stelle sicher, dass du Root- oder Administratorrechte hast, um Software zu installieren.
Führe den folgenden Befehl aus, um die neueste Version von InfluxDB herunterzuladen:
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.9_linux_amd64.tar.gz
- Entpacke das heruntergeladene Archiv mit dem folgenden Befehl:
tar xvfz influxdb-1.8.9_linux_amd64.tar.gz
- Wechsle in das Verzeichnis mit dem entpackten InfluxDB:
cd influxdb-1.8.9-1/
- Führe den folgenden Befehl aus, um InfluxDB zu installieren:
sudo ./usr/bin/influxd
- Überprüfe, ob InfluxDB erfolgreich installiert wurde, indem du den folgenden Befehl ausführst:
sudo service influxdb status
Wenn InfluxDB ausgeführt wird, sollte der Befehl den Status „active“ anzeigen.
- Öffne deinen Webbrowser und navigiere zur URL http://localhost:8086/. Du solltest die InfluxDB-Startseite sehen.
Herzlichen Glückwunsch! Du hast InfluxDB erfolgreich installiert. Du kannst nun mit der Arbeit mit der Datenbank beginnen und Daten speichern und abfragen.
InfluxDB
- Öffne ein Terminalfenster und starte InfluxDB mit dem folgenden Befehl:
influxd
- Öffne ein weiteres Terminalfenster und starte die InfluxDB-Shell mit dem folgenden Befehl:
influx
- Erstelle eine neue Datenbank mit dem folgenden Befehl:
CREATE DATABASE testdb
Dies erstellt eine neue Datenbank namens „testdb“.
- Wechsle in die Datenbank mit dem folgenden Befehl:
USE testdb
- Erstelle eine Messung mit dem Namen „cpu“ mit dem folgenden Befehl:
CREATE MEASUREMENT cpu
- Füge einige Datenpunkte in die Messung „cpu“ ein. Zum Beispiel:
INSERT cpu,host=myhost,region=us-west value=0.64
INSERT cpu,host=myhost,region=us-west value=0.42
INSERT cpu,host=myhost,region=us-east value=0.80
Dies fügt drei Datenpunkte in die „cpu“-Messung ein, die den Wert der CPU-Auslastung für verschiedene Hosts und Regionen darstellen.
- Frage die Daten in der Messung ab, um sicherzustellen, dass sie korrekt eingefügt wurden, mit dem folgenden Befehl:
SELECT * FROM cpu
Dies gibt alle Datenpunkte in der „cpu“-Messung zurück.
Herzlichen Glückwunsch! Du hast erfolgreich eine kleine Beispieldatenbank in InfluxDB erstellt.
Hier ist ein Beispiel Python-Skript, mit dem du Daten aus einer InfluxDB-Datenbank auslesen kannst:
Wichtigsten Befehle in InfloxDB
Datenbanken und Messungen
Befehl | Beschreibung |
---|---|
SHOW DATABASES | Liste aller Datenbanken anzeigen |
CREATE DATABASE <name> | Erstellt eine neue Datenbank |
DROP DATABASE <name> | Löscht eine Datenbank |
USE <name> | Wechselt zur angegebenen Datenbank |
SHOW MEASUREMENTS | Liste aller Messungen in der aktuellen Datenbank anzeigen |
SHOW TAG KEYS FROM <measurement> | Liste aller Tag-Schlüssel für eine Messung anzeigen |
SHOW FIELD KEYS FROM <measurement> | Liste aller Feld-Schlüssel für eine Messung anzeigen |
Abfragen
Befehl | Beschreibung |
---|---|
SELECT <field(s)> FROM <measurement> | Abfrage der Felder einer Messung |
SELECT <field(s)> FROM <measurement> WHERE <tag> = '<value>' | Abfrage mit Tag-Filter |
SELECT <field(s)> FROM <measurement> WHERE time > now() - 1h | Abfrage mit Zeitfilterung |
SELECT COUNT(<field>) FROM <measurement> | Anzahl der Zeilen in einer Messung zählen |
SELECT MEAN(<field>) FROM <measurement> | Mittelwert des Felds in einer Messung berechnen |
SELECT MEDIAN(<field>) FROM <measurement> | Median des Felds in einer Messung berechnen |
SELECT DISTINCT(<tag>) FROM <measurement> | Liste aller eindeutigen Werte für einen Tag in einer Messung |
Daten schreiben
Befehl | Beschreibung |
---|---|
INSERT <measurement>,<tag>=<value> <field>=<value> | Schreibt Daten in eine Messung |
INSERT <measurement> <field>=<value> | Schreibt Daten in eine Messung ohne Tags |
Fortgeschrittene Themen
Befehl | Beschreibung |
---|---|
GROUP BY time(<interval>) | Daten in der Abfrage gruppieren |
ORDER BY time DESC | Ergebnisse nach Zeit absteigend sortieren |
LIMIT <num> | Anzahl der zurückgegebenen Ergebnisse begrenzen |
DROP SERIES FROM <measurement> WHERE <tag> = '<value>' | Serie basierend auf einem Tag-Filter löschen |
DELETE FROM <measurement> WHERE time < now() - 1h | Daten basierend auf einem Zeitfilter löschen |
Dies ist jedoch nur eine kurze Zusammenfassung einiger der wichtigsten Befehle. Für eine vollständige Liste und detailliertere Informationen sollten Sie die offizielle Dokumentation von InfluxDB konsultieren.
from influxdb import InfluxDBClient
# Verbindung zur InfluxDB-Datenbank herstellen
client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('testdb')
# Abfrage der Daten aus der 'cpu'-Messung
query = 'SELECT * FROM cpu'
result = client.query(query)
# Ausgabe der Ergebnisse
print(result)
Dieses Skript verwendet die Python-Bibliothek influxdb
, um eine Verbindung zu einer InfluxDB-Datenbank herzustellen. Zunächst wird eine Verbindung zur Datenbank hergestellt und die zu verwendende Datenbank wird ausgewählt. Dann wird eine Abfrage ausgeführt, um alle Datenpunkte aus der cpu
-Messung abzurufen. Das Ergebnis wird in der Variablen result
gespeichert. Schließlich wird das Ergebnis auf der Konsole ausgegeben.
Natürlich musst du die host
– und port
-Parameter entsprechend deiner InfluxDB-Installation anpassen. Außerdem musst du möglicherweise die Anmeldeinformationen für den Zugriff auf die Datenbank angeben, wenn du eine sichere Verbindung verwendest.
Time Series DBs im KMU Umfeld
Es gibt viele Anwendungen im Bereich des Internet of Things (IoT), bei denen Time Series Datenbanken zum Einsatz kommen. Hier sind einige Beispiele:
Überwachung von Sensoren: Time Series Datenbanken werden häufig eingesetzt, um Daten von Sensoren in Echtzeit zu speichern und zu analysieren.
Überwachung von Maschinen: Time Series Datenbanken können auch zur Überwachung von Maschinen eingesetzt werden, um Ausfälle und Probleme frühzeitig zu erkennen.
Smart Grids: In Smart Grids werden Time Series Datenbanken eingesetzt, um Energieerzeugung und -verbrauch zu überwachen und zu optimieren.
Smart Homes: In Smart Homes werden Time Series Datenbanken eingesetzt, um Daten von verschiedenen Geräten zu speichern und zu analysieren.