Dies ist eine alte Version des Dokuments!
InfluxDB
InfluxDB eignet sich hervorragend dafür sich wiederholende Messwerte aus dem IoT-Umfeld in einer Datenbank zu speichern. Dazu reicht Anfangs bereits ein Raspberry PI aus.
Wichtig ist es die grundlegenden Konzepte von InfluxDB zu verstehen. Leider ist die offizielle Doku hier nur mäßig hilfreich, weil Sie immer die Nähe zu SQL betont, was aber leicht dazu führen kann, dass man auf die falsche Fährte gerät.
InfluxDB speichert Daten nicht in relationalen Tabellen!
Daten werden in einer oder mehreren Zeitreihen (Measurements
) gespeichert, wobei jede Zeitreihe ein in sich konsistentes Datenschema
aufweisen muss. Man kann verschiedene Schemas nicht mischen oder anpassen. Sollte sich das Datenformat ändern, legt man
einfach eine neue Zeitreihe an.
Die Gliederungsebenen sind:
Database
- Sammlung von ZeitreihenMeasurement
- Folge von zusammengehörigen Datenpunkten mit dem gleichen Schema (Zeitreihe)Series
- eine logisch zusammenhängende Folge von Datenpunkten mit der gleichen 'Tag'-KombinationPoint
- ein einzelner Messwert in einer Zeitreihe
Das Datenschema wird anders als bei relationalen Datenbanken nicht in der Datenbank erzeugt. Statt dessen es ist Aufgabe der Datenquelle das Datenformat festzulegen (beim ersten Schreiben eines Datenpunktes). Man kann das Datenformat auch nicht nachträglich ändern, sondern startet einfach eine neue Zeitreihe mit dem geänderten Format.
Die Daten in Messpunkten können für die spätere schnelle Suche und Gruppierung indiziert werden. Dazu wird das Datenfeld
als Tag
gekennzeichnet (Achtung, Tags werden immer als Strings interpretiert!). Die weiteren Daten werden als Fields
bezeichnet und als Name/Wert Paare gespeichert die als Datentypen float
, integer
und boolean
unterstützen.
Jedem Messpunkt ist ein timestamp
zugeordnet. Dieser wird entweder von der Datenquelle mitgeliefert, oder von InfluxDB
erzeugt.
Am einfachsten versteht man das, wenn man das LineProtokoll benutzt: https://docs.influxdata.com/influxdb/cloud/reference/syntax/line-protocol/