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 [2018/04/01 15:09] – PR 688 jau | howto:datenmengen [2018/12/04 08:49] – wf_bitplan.com | ||
---|---|---|---|
Zeile 33: | 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 50: | 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 65: | Zeile 65: | ||
Die folgende Zeile aggregiert alle bestehenden Daten. Der Vorgang kann daher einige Stunden benötigen: | Die folgende Zeile aggregiert alle bestehenden Daten. Der Vorgang kann daher einige Stunden benötigen: | ||
< | < | ||
- | php / | + | php / |
</ | </ | ||
Einschränken auf eine einzelne UUID mittels: | Einschränken auf eine einzelne UUID mittels: | ||
< | < | ||
- | php / | + | php / |
</ | </ | ||
Zeile 76: | 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 92: | 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 " | ||
Zeile 134: | 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. | ||
+ | |||
+ | Der Aggregationseffekt von channelSum hängt von der Frequenz der Datenerhebung und der Länge des Intervals ab. Bei der Erhebung eines Wertes alle 15 Minuten und einer Zeitraumbreite von einem Tag werden 15x24 = 320 x weniger Daten geliefert. | ||
+ | < | ||
+ | -- | ||
+ | -- 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 mit Hilfe der obigen " | ||
+ | |||
+ | 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: 2021/08/11 13:31 von mr.gosh