Also anstatt nur die reinen Schaltzeiten mit dem entsprechenden Zeitpunkt / Zeitraum zu speichern und dann bei einer Abfrage diese Zeiten aufzusummieren, werden die Daten bereits aufsummiert gespeichert.
Nix anderes hatte ich vor?!
Ich will immer den aktuellen Saldo abspeichern, nicht die Perioden.
Will ich später einen bestimmten Bereich abfragen so reicht eine Abfrage am Ende und eine am Anfang. Die Differenz daraus ist die Änderung während des Bereichs.
Das Argument, das die Abfragen sonst langsam sind, muss aber in dem Fall erstmal belegt werden, wenn ein Hinweis das es keine so gute Idee ist Daten vorverarbeitet zu speichern damit entkräftet werden soll.
Ich habe ein Beispiel, bei dem S0 Impulse gespeichert werden:
Ich habe einen Wasserzähler, der seit Oktober 2016 (sind ja nur 1,5 Jahre, also noch nicht soooo viel) bis heute 458733 Datensätze geloggt hat.
Wenn ich mit der Volkszähler App v9.7 den Wasserzähler abfrage, dann addiert er glatte 46 Sekunden lang alle S0 Impulse zusammen, bis das Ergebnis kommt. Das ist mir zu langsam.
Wenn ich in die Datenbank schauen würde und den letzten Wert abfrage, und dieser die Information enthält die ich suche, (nämlich zum Beispiel 613390,5L) dann dauert die Abfrage des Wertes nur Millisekunden.
Übrigens dauert es 38 Sekunden, wenn ich die aktuell 458733 Datensätze des Wasserzählers in der Administration der Datenbank folgendermaßen abfrage:
SELECT * FROM data WHERE channel_id = '16'
Is ja auch kein Wunder, dass es dauert bis man ein paar hunderttausend Datensätze abgefragt und aufaddiert hat.
Aber warum muss man denn ein paar hunderttausend Werte abfragen und aufaddieren, wenn man anstatt dummen S0 Bits auch die wirkliche Anzahl der Impulse speichern kann?
Statt hundertausende Daten abfragen und addieren zu müssen, reicht dann die Abfrage von einem einzigen Datensatz.
Will man einen Bereich wissen muss man nur zwei Datensätze abfragen und die Differenz bilden.
Das geht dann logischerweise Faktor mehrere hunderttausendfach schneller
Und genau das ist der Grund, warum ich von S0 Impulse nix halte und sie so oft wie möglich versuche zu vermeiden.
...addiert mir das die Datenbank (und mit einem guten Cache ist das sau schnell), dann ist die Abfrage plötzlich nicht mehr so langsam.
An die Datenbank geht man nicht direkt per SQL dran, sondern über eine API einer Middleware.
Die Datenbank läuft auf einem RaspberryPi3. Der ist sicherlich nicht so sauschnell wie irgendwelche "richtigen" Datenbankserver.
Ich habe mir Datenbank ja nicht selber ausgedacht und selber angelegt. Ich bin quasi nur ein User, der sich eine Software installiert hat und diese nutzt, die sich ganz andere Leute ausgedacht und konzipiert haben. Die haben auch die Middleware, den Logger und die API geschrieben. Ich bin nur ein User davon.
Liebe Grüße,
Chris