NEWS
SQL-Adapter, Werte nach Alter verdichten
-
Hi all,
als Nicht-SQL-Spezialist suche ich eine Möglichkeit, die per SQL-Adapter in Mysql geloggten Werte nach Alter zu verdichten. Also z.B. die Außentemperatur pro Tag im laufenden Monat laufend bei Änderung, nach 1 Monat nur noch Höchst-/Niederst- und Durchschnittstemperaturen pro Tag und von Vorjahren ggf. diese nur noch pro Woche oder Monat vorzuhalten. Dabei sollten die Intervalle und Verdichtungstypen allgemein und je Adapter und Datenpunkte parametrierbar sein.
Hat so etwas jemand schon gemacht?
Wäre dies eine Anregung für die Weiterentwicklung des SQL-Adapters?
Dank & Gruß -
Generell ist das machbar
Datenbanken und SQL sind in der Regel darauf ausgelegt kontinuierliche Aufzeichnungen zu haben und dann bei der Abfrage die entsprechenden Aggregation durchzuführen.
In deinem Fall wären das zwei Abfragen, einmal für den laufenden Monat beziehungsweise meinst du sicherlich für die letzten X Tage
Und einmal für die Höchst und Tiefstwerte für die Zeit davor.
Wenn das beispielsweise alles in einem Diagramm angezeigt werden soll, kann man diese beiden Abfragen auch mit einem UNION zusammenfassen.Wenn du eine echte Bereinigung der Tabellen haben möchtest, könnte man die Höchst und Tiefstwerte mit einer anfüge Abfrage hinzufügen (insert into) und die dann überflüssigen Einzelwerte löschen.
Wenn Festplatten Speicherplatz nicht unbedingt so die Rolle spielt und die Tabellen richtig indiziert sind, würde ich die erste Möglichkeit ohne löschen empfehlen. Lieber dann irgendwann mal alte Daten, wenn sie wirklich nicht mehr benötigt werden dann löschen. Beispielsweise nach einem Jahr
Wenn du dich für das Löschen entscheidest, würde ich die Werte aber in eigenen Tabellen vorhalten
-
@tomrey
Ich gruppiere regelmäßig die geloggten Werte in der MariaDB.
Ich zeichne viele Werte im 20 Sekunden Takt auf und habe die Historie der letzten Jahre in der DB gesammelt. Die ich natürlich auch ungern verlieren möchte. Aktuell laufen pro Jahr ca 30 Millionen Datensätze auf, Tendenz steigend. Da mein winziger DB Server damit überfordert ist, aggregiere ich die Werte ab und an.
Das mache ich über einen GROUP BY auf eine Zeitperiode. Im ersten Jahr sind es bei mir 10 Min, dann immer länger.
Da das Skript nicht so häufig läuft, mache ich das per Hand und für alle ID's.