InfluxDB
"InfluxDB ist eine Datenbank für Zeitreihen" (Wikipedia)
Im Gegensatz zu einer klassischen relationellen Datenbank wie z.B. MySQL, ist InfluxDB dafür optimiert, Daten mit einem Zeitbezug zu speichern, und ist bei der Wiedergabe sehr effizient
- Daten aus einem spezifischen Zeitbereich zu liefern, z.B. “Werte der letzten 2 Tage”
- Daten aus einem Datensatz zu verarbeiten, z.B: “Maximalwerte der letzen 2Tage, über ein 1-stündiges Fenster”
- Datensätze anhand von Tags zu selektieren, z.B. “Werte der letzten 2 Tage der Sensoren sens1 und sens2”
Im Oberlab wird Projektbezogen eine InfluxDB in einer virtuellen Maschine auf dem Oberlab Server betrieben.
InfluxDB ist mittlerweile in der Version 2 verfügbar, die von den Daten und der InfluxQL Sprache sind mit der Version 1 und der Sprache Flux inkompatibel.
Datenstrukturen
In MySQL muß die Datenstruktur beim Erstellen der Tabellen festgelegt werden. Danach werden pro Zeile die verschiedenen Spalten mit Daten befüllt.
Bei InfluxDB werden die Strukturen der Tabellen (nennt sich “bucket”) dynamisch angepasst, d.h. neue “Spalten” werden automatisch erzeugt wenn der Datensatz neue “Spalten” beinhalten.
An sich gibt es keine “Spalten”, sondern 2 verschiedene Datentypen: Werte und Tags
InfluxDB Befehle
Bucket erstellen
CREATE DATABASE openhab_db
Benutzer anlegen
CREATE USER openhab WITH PASSWORD 'AnotherSuperbPassword456-'
GRANT ALL ON openhab_db TO openhab
GRANT READ ON openhab_db TO grafana
Passwort eines Benutzers ändern
influx user password -n johndoe -t My5uPErSecR37t0k3n
set password for "testuser" = 'testing'
Backup/restore
influxd backup -portable -database db <path-to-backup>
influxd restore -portable -db db <path-to-backup>
Daten einspeisen
Siehe auch https://docs.influxdata.com/influxdb/v2/write-data/
Datenstruktur einsehen
show measurements
show series
show tag keys
show field keys
show retention policies
Daten selektieren
Siehe auch https://docs.influxdata.com/influxdb/v2/query-data/
Datenexport zu csv
influx -username USER -password PASSWORD -database "oberlab" -execute 'SELECT *
FROM "autogen"."counter" WHERE ("sensor" =~ /^(pxc-0001-oberlab)$/) AND time >= 1669845600000ms and time <= 17
01295200000ms' -format csv > /etc/influxdb2/test2.csv