howto:datenmengen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
howto:datenmengen [2017/04/25 19:38] – vzlogger duplicates, agg jau | howto:datenmengen [2018/11/30 09:58] – [Aggregieren mit mySQL] wf_bitplan.com | ||
---|---|---|---|
Zeile 20: | Zeile 20: | ||
<note tip>Man kann die Daten auch auf [[http:// | <note tip>Man kann die Daten auch auf [[http:// | ||
- | ===== Daten löschen ==== | + | ===== Daten löschen ===== |
+ | Die Frage wie viel Daten man entfernen kann ist oft ein Kompromiss welche Daten man jetzt braucht und wie viel davon in der Zukunft noch von Interesse ist. Ein Ansatz die Aktualdaten zu haben ohne die Datenbank zu nutzen ist der [[software: | ||
=== hart === | === hart === | ||
Wen die Vergangenheit nicht interessiert, | Wen die Vergangenheit nicht interessiert, | ||
Zeile 31: | Zeile 33: | ||
=== weich === | === weich === | ||
Bei diesem Ansatz werden auch die Daten gelöscht. Die Daten werden immer mehr ausgedünnt je weiter man in die Vergangenheit geht. So behält man z.B. alle Daten von heute, behält von den letzten 2 Wochen nur eine Messung pro Minute und von der Zeit davor nur eine pro Viertelstunde. | Bei diesem Ansatz werden auch die Daten gelöscht. Die Daten werden immer mehr ausgedünnt je weiter man in die Vergangenheit geht. So behält man z.B. alle Daten von heute, behält von den letzten 2 Wochen nur eine Messung pro Minute und von der Zeit davor nur eine pro Viertelstunde. | ||
- | Dazu steht das Script [[https:// | + | Dazu steht das Script [[https:// |
< | < | ||
mysql --user=root -praspberry | mysql --user=root -praspberry | ||
Zeile 48: | Zeile 50: | ||
< | < | ||
- | 0 3 * * * cd / | + | 0 3 * * * cd / |
</ | </ | ||
Die Anzahl der Daten die gelöscht werden soll, sowie die Zeiträume sind frei konfigurierbar am Ende des Scriptes. | Die Anzahl der Daten die gelöscht werden soll, sowie die Zeiträume sind frei konfigurierbar am Ende des Scriptes. | ||
Zeile 61: | Zeile 63: | ||
< | < | ||
- | Die folgende | + | Die folgende |
< | < | ||
- | php / | + | php / |
- | php / | + | </ |
+ | |||
+ | Einschränken auf eine einzelne UUID mittels: | ||
+ | < | ||
+ | php / | ||
</ | </ | ||
Zeile 70: | Zeile 76: | ||
Das Script legt nur an, was noch nicht angelegt wurde und läuft daher nur kurz: | Das Script legt nur an, was noch nicht angelegt wurde und läuft daher nur kurz: | ||
< | < | ||
- | */10 * * * * php / | + | */10 * * * * php / |
- | 1 * * * * php / | + | 1 * * * * php / |
- | 0 1 * * * php / | + | 0 1 * * * php / |
</ | </ | ||
Zeile 86: | Zeile 92: | ||
der Eintrag für " | der Eintrag für " | ||
< | < | ||
- | */10 * * * * flock -n / | + | */10 * * * * flock -n / |
</ | </ | ||
Anm.: Die Einträge für " | Anm.: Die Einträge für " | ||
+ | |||
+ | === Aggregation prüfen === | ||
+ | Den aktuellen Zustand der Aggregation (aktiv, Anzahl der Datensätze, | ||
+ | < | ||
===== Geringere Auflösung durch selteneres Messen ===== | ===== Geringere Auflösung durch selteneres Messen ===== | ||
Zeile 124: | Zeile 134: | ||
^ " | ^ " | ||
^ " | ^ " | ||
+ | |||
+ | ===== Aggregieren mit mySQL ===== | ||
+ | **Function channelSum** | ||
+ | Die folgende mySQL Hilfsfunktion berechnet die " | ||
+ | der höchste und der niedrigste Wert gesucht. Es gilt sum=max - min für solche Zähler. | ||
+ | < | ||
+ | -- | ||
+ | -- Volkszähler mySQL function to sum up channel data for a given time period | ||
+ | -- | ||
+ | -- params | ||
+ | -- channel_id | ||
+ | -- from_time | ||
+ | -- to_time | ||
+ | -- | ||
+ | CREATE FUNCTION channelSum(channel_id INT, from_time DATE, to_time DATE) | ||
+ | RETURNS DOUBLE | ||
+ | DETERMINISTIC | ||
+ | BEGIN | ||
+ | | ||
+ | | ||
+ | | ||
+ | FROM data d | ||
+ | WHERE d.timestamp between unix_timestamp(from_time)*1000 and unix_timestamp(to_time)*1000 and d.channel_id=channel_id; | ||
+ | | ||
+ | END | ||
+ | </ | ||
+ | |||
+ | **Daily Tabelle** | ||
+ | Das folgende mySQL Script erzeugt eine " | ||
+ | Im Beispiel werden die Werte für den Zeitraum 2014-01-01 bis 2018-11-30 aufsummiert. Für die Erzeugung von 7450 Einträgen hat diese Abfrage ca. 2700 Sekunden Zeit gebraucht. | ||
+ | |||
+ | Als Basis diente eine SQL-Abfrage zur Erzeugung einer Liste von Tagen siehe: https:// | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | create table daily as | ||
+ | select | ||
+ | dates.from_date, | ||
+ | from ( | ||
+ | select | ||
+ | date_add(' | ||
+ | date_add(' | ||
+ | from ( | ||
+ | SELECT @row := @row + 1 as row FROM | ||
+ | (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t, | ||
+ | (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t2, | ||
+ | (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t3, | ||
+ | (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t4, | ||
+ | (SELECT @row:=-1) r | ||
+ | ) sequence | ||
+ | where date_add(' | ||
+ | join entities | ||
+ | join properties p on e.id=p.entity_id | ||
+ | join properties r on e.id=r.entity_id | ||
+ | where p.pkey=' | ||
+ | and e.type=' | ||
+ | </ | ||
===== Aufrüstung: | ===== Aufrüstung: |
howto/datenmengen.txt · Zuletzt geändert: 2024/05/18 10:16 von jau