In diesem und letzten Teil möchte ich beschreiben, wie ich die Performance Optimierung letztendlich umgesetzt habe. Die Idee war eine für Zeitserien optimierte Datenbank einzusetzen, die Influx-DB. Der eigentliche wichtige Punkt ist die Optimierung der Geschwindigkeit, in der die Anzeige aktualisiert wird. Am Beispiel des Dashboards für die Solar-Panels wird dieses deutlich. Das ursprüngliche Dashboard hat eine Ladezeit bis zu 45 Sekunden, das neue liefert die Daten auf Maus-Klick.

Dieses Dashboard zeigt jedes einzelne Panel an und 3 weitere Charts zeigen die Werte der gesamten Anlage. Bei diesen 11 Charts handelt es sich um 11 Abfragen auf die Datenbank. Da es sich hierbei um ein Chart handelt, welches auf die die aktuellen Daten fokussiert, ist es nicht notwendig die gesamte Datenbasis als Grundlage zu nehmen. Wie schon vermutet, hat die Anzahl und Menge der Daten Auswirkungen auf die Performance. Ich habe einfach einmal definiert, 2 Tage als Zeitfenster reicht mir aus.

Was habe ich geändert?

In der mySQL habe ich eine VIEW gespeichert die wie folgt ausschaut

SELECT CAST(CONCAT_WS(' ',`sensordata`.`DATUM`,`sensordata`.`Zeit`) AS DATETIME) AS `time`,`sensordata`.`SCHLUESSEL` AS `SCHLUESSEL`,`sensordata`.`WERT` AS `Leistung`
FROM `sensordata`
WHERE (`sensordata`.`SENSORID` = '11xxxxxxxxxx' OR `sensordata`.`SENSORID` = '11xxxxxxxxxx') AND `sensordata`.`SCHLUESSEL` LIKE 'HM1500%' AND `sensordata`.`DATUM` >= CURDATE() - INTERVAL 2 DAY
ORDER BY CONCAT_WS('-',`sensordata`.`DATUM`,`sensordata`.`Zeit`)

Was genau macht diese View jetzt anders und warum ist alles jetzt schneller? Die Abfrage erzeugt eine Tabelle mit 3 Spalten (time, SCHLUESSEL und Leistung) und reduziert die Daten, welche Grafana zur Anzeige zur Verfügung gestellt werden auf das Datenfenster 2 Tage.

Die mySQL DB liefert immer noch die Daten. jedoch ist diese View mit dem abgegrenzten Zeitfenster um ein vielfaches Schneller. Noch ein Hinweis, in der DB ist natürlich Indexierung eingeschaltet.

Fazit

Die Kleinigkeit mit der Abgrenzung auf wenige Tage hat einen signifikanten Sprung in der Geschwindigkeit gebracht. Selbst die Änderung von 2 auf 7 Tagen ist immer noch akzeptabel schnell. Für mich ist dieses die bessere Lösung, denn diese erfordert keine weitere Instanz einer DB und lässt sich quasi mit Boardmitteln in der mySQL DB lösen. Für Langzeitanalysen ist es akzeptabel mal länger auf die Daten zu warten.