Steuerung der Datenvorhaltung innerhalb der InfluxDB

Die Time-Series Datenbank InfluxDB kann hunderte/tausende Datenpunkte in der Sekunde verarbeiten. Hast du eine sehr große Loxone Installation mit vielen Statistiken, kann dies deinen Speicherplatz nicht unerheblich beeinflußen - vor allem auf Jahre oder Jahrzehnte gesehen. Eine Möglichkeit dem zu entgehen, ist das Downsampling der Daten. Die neusten Daten werden dabei in einer hohen Auflösung für eine kürzere Zeit vorgehalten, ältere Daten dabei zusammengefasst um diese für einen langen Zeitraum speichern zu können.

Hierbei stehen innerhalb der InfluxDB zwei Features zur Verfügung - Continuous Queries und Retention Policies, welche den Prozess des Downsamplings der Daten übernehmen.

Definitionen

Ein Continuous Query ist ein InfluxQL Query (Datenbank Abfrage Befehl), der automatisch, von Zeit zu Zeit innerhalb der Datenbank ausgeführt wird.

Eine Retention Policy ist ein Teil der InfluxDB Datenstruktur, die beschreibt für wie lange die Datenbank bestimmte Daten behält, also speichert. Hierbei kann eine Datenbank über mehrere Retention Policies verfügen. Wenn keine Retention Policy angegeben wurde, werden alle Daten behalten.

Daten

Als Beispiel nehmen wir die Daten aus einem Loxone Smarthome in dem eine Temperatur mit dem Datenlogger aufgezeichnet wird:

1 2 3 4 5 6 name: Temperatur WZ SmartSocket time month uuid value year ---- ----- ---- ----- ---- 2020-10-13T09:01:27Z 10 0f605e3e-0386-1c7f-ffffefc088fafadd 30.3 2020 2020-10-13T09:01:40Z 10 0f605e3e-0386-1c7f-ffffefc088fafadd 30.2 2020 2020-10-13T09:02:39Z 10 0f605e3e-0386-1c7f-ffffefc088fafadd 30 2020

Hier können wir sehen, dass innerhalb von weniger als 1,5 Minuten drei Datenpunkte in der Datenbank gelandet sind.

Unser Ziel

Wir gehen nun davon aus, auf lange Sicht nur an Daten, mit einem Durchschnitt innerhalb einer Stunde interessiert zu sein. Dafür benutzen wir Retention Policies und Continuous Queries um folgendes zu erreichen:

  • Automatisches aufbereiten der Daten mit jeder Änderung in stündliche Daten

  • Automatisches löschen der rohen Daten nach einem Jahr

Bitte beachte das die Retention Policies und Continuous Queries, nur auf Daten angewendet werden können, ab dem Zeitpunkt der Erstellung der Retention Policies und Continuous Queries.

Aufrufen des InfluxDB CLI

Um die folgenden Befehle für die Datenbank absetzten zu können, muss zunächst das Kommandozeilen- Interface geöffnet werden. Verbinde dich dazu mit deinem Gerät auf welchem die Datenbank läuft und führe den folgenden Befehl aus:

1 $ influx -precision rfc3339

Erstellen der Standard Retention Policy für ein Jahr

Wir erstellen nun die neue Standard Retention Policy die die Daten für ein Jahr vorhalten soll:

1 > CREATE RETENTION POLICY "ein_jahr" ON "<datenbank|lxlogger_ms-serialNumber>" DURATION 52w REPLICATION 1 DEFAULT

Diese Abfrage erstellt eine Retention Policy mit dem Name ein_jahr in der Datenbank lxlogger_<ms-serialNumber>. Diese Policy behält die Daten für die Dauer von 52 Wochen (52w) und gilt dabei als Standard für die Datenbank lxlogger_<ms-serialNumber>.

Downsampling der Daten

Jetzt da wir die Retention Policy erstellt haben, wollen wir zusätzlich einen Continuous Query erstellen, um die hochaufgelösten Daten zusammen zu fassen (Downsampling) und in einer zweiten Datenbank zu speichern:

1 2 3 4 5 6 > CREATE CONTINUOUS QUERY "cq_1h" on "<datenbank|lxlogger_ms-serialNumber>" BEGIN SELECT mean("value") AS "mean_value" INTO "ein_jahr"."downsampled_temperatur_wz_smartsocket" FROM "Temperatur WZ SmartSocket" GROUP BY time(1h) END

Diese Abfrage erstellt den Continuous Query mit dem Namen cq_1h in der Datenbank lxlogger_<ms-serialNumber>. cq_1h sagt der Datenbank dabei, das der Durchschnitt’s- Wert aus einer Stunde, für den Wert des Felds value und das Measurement Temperatur WZ SmartSocket in der Standard Retention Policy ein_jahr berechnet werden soll. Außerdem soll die Datenbank die Ergebnisse in das Measurement downsampled_temperatur_wz_smartsocket in die Retention Policy ein_jahr, mit dem Name mean_value schreiben. InfluxDB wird nun die Abfrage jede Stunde für die letzte Stunde ausführen.

Ergebnis

An diesem Beispiel kannst du also sehen, wie aktuelle Daten für die Auswertung benutzt und mit weniger genauen Daten aus der Vergangenheit verglichen werden können.

Weitere Lektüre

Um mehr über Continuous Queries und Retention Policies zu erfahren wechsle bitte zur Dokumentation von InfluxDB.