Benutzer-Werkzeuge

Webseiten-Werkzeuge


howto:datenmengen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
howto:datenmengen [2017/05/11 07:07]
jau MW-agg prüfen
howto:datenmengen [2021/08/11 13:31] (aktuell)
mr.gosh
Zeile 20: Zeile 20:
 <note tip>Man kann die Daten auch auf [[http://demo.volkszaehler.org/]] ablegen.</note> <note tip>Man kann die Daten auch auf [[http://demo.volkszaehler.org/]] ablegen.</note>
  
-===== 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:middleware:push-server|Push-Server]]. 
 === hart === === hart ===
 Wen die Vergangenheit nicht interessiert, der kann die Daten dafür löschen.  Wen die Vergangenheit nicht interessiert, der kann die Daten dafür löschen. 
Zeile 27: Zeile 29:
 delete FROM `data` where timestamp< (unix_timestamp(current_timestamp)-24*60*60)*1000 ; delete FROM `data` where timestamp< (unix_timestamp(current_timestamp)-24*60*60)*1000 ;
 </code> </code>
-Das Beispiel löscht alle Daten die vor den letzten 24h liegen. Läßt man das Script einmal am Tag laufen so hat man lediglich die Daten der letzten Stunden.+Das Beispiel löscht alle Daten die vor den letzten 24h liegen. Lässt man das Script einmal am Tag laufen so hat man lediglich die Daten der letzten Stunden.
  
 === 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://github.com/volkszaehler/volkszaehler.org/blob/master/misc/tools/vzcompress2.php|vzcompress2.php]] zur Verfügung. Von Haus aus hat der lokale User vz keine Rechte zum Löschen in der Datenbank, das muss man vorher ändern:+Dazu steht das Script [[https://github.com/volkszaehler/volkszaehler.org/blob/master/bin/vzcompress2|vzcompress2]] zur Verfügung. Von Haus aus hat der lokale User vz keine Rechte zum Löschen in der Datenbank, das muss man vorher ändern:
 <code> <code>
-mysql --user=root -praspberry+sudo mysql --user=root -praspberry
 Welcome to the MySQL monitor.  Commands end with ; or \g. Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 37217 [..] Your MySQL connection id is 37217 [..]
Zeile 48: Zeile 50:
  
 <code> <code>
-0 3 * * * cd /var/www/volkszaehler.org/misc/tools ; php vzcompress2.php >> /var/log/vzcompress.log+0 3 * * * cd /var/www/volkszaehler.org/bin ; php vzcompress2 >> /var/log/vzcompress.log
 </code> </code>
 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.
  
 ===== Performance der Middleware erhöhen: Datenaggregation / Cache ===== ===== Performance der Middleware erhöhen: Datenaggregation / Cache =====
-Bleiben die Daten in voller Auflösung erhalten, wird mit der Zeit die Middleware immer langsamer, da es aus den Daten die zur Anzeige benötigten suchen muss. Gerade bei grossen Zoomstufen (z.B. auf ein Jahr) kann es dann notwendig werden, dass die gesamte Datenbank eingelesen werden muss.+Bleiben die Daten in voller Auflösung erhalten, wird mit der Zeit die Middleware immer langsamer, da es aus den Daten die zur Anzeige benötigten suchen muss. Gerade bei großen Zoomstufen (z.B. auf ein Jahr) kann es dann notwendig werden, dass die gesamte Datenbank eingelesen werden muss.
 Abhilfe schafft hier die Daten ganzer Zeiträume, wie z.B. eines Tages, in einzelnen Datenpunkten zusammenzufassen (etwa Durchschnittstemperatur an diesem Tag). Dies erzeugt zwar mehr Daten in der Datenbank und benötigt somit mehr Platz auf der Festplatte. Allerdings kann auf die Daten effizienter zugegriffen werden, so dass sich unter dem Strich die Geschwindigkeit erhöht. Abhilfe schafft hier die Daten ganzer Zeiträume, wie z.B. eines Tages, in einzelnen Datenpunkten zusammenzufassen (etwa Durchschnittstemperatur an diesem Tag). Dies erzeugt zwar mehr Daten in der Datenbank und benötigt somit mehr Platz auf der Festplatte. Allerdings kann auf die Daten effizienter zugegriffen werden, so dass sich unter dem Strich die Geschwindigkeit erhöht.
  
 Die Lösung besteht aus zwei Komponenten. Die eine ist bereits im Frontend eingebaut und aktiviert sich automatisch, sobald sie passende Daten findet. Die andere besteht aus einer weiteren Tabelle mit Scripten die diese füllen. Die Lösung besteht aus zwei Komponenten. Die eine ist bereits im Frontend eingebaut und aktiviert sich automatisch, sobald sie passende Daten findet. Die andere besteht aus einer weiteren Tabelle mit Scripten die diese füllen.
  
-Zunächst muss die Option in der volkszaehler.conf.php aktiviert werden: (die findet ihr unter: /var/www/volkszaehler.org/etc ) 
-<code>$config['aggregation'] = true;</code> 
  
-Die folgende Zeilen legen die zusätzliche Tabelle an und aggregieren 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:
 <code> <code>
-php /var/www/volkszaehler.org/misc/tools/aggregate.php create +php /var/www/volkszaehler.org/bin/aggregate run -m full -l day -l hour -l minute
-php /var/www/volkszaehler.org/misc/tools/aggregate.php run -m full -l day -l hour -l minute+
 </code> </code>
  
-Mit den folgenden Einträgen in einer crontab hält man den Cache aktuell. Erstellt wird die crontab mit: 'crontab -e'.\\+Einschränken auf eine einzelne UUID mittels: 
 +<code> 
 +php /var/www/volkszaehler.org/bin/aggregate run <UUID> -m full -l day -l hour -l minute 
 +</code> 
 + 
 +Mit den folgenden Einträgen in einer crontab hält man den Cache aktuell. Erstellt wird die crontab mit: ''crontab -e''.\\
 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:
 <code> <code>
-*/10 * * * *  php /var/www/volkszaehler.org/misc/tools/aggregate.php run -m delta -l minute >/dev/null +*/10 * * * *  php /var/www/volkszaehler.org/bin/aggregate run -m delta -l minute >/dev/null 
-1 * * * *  php /var/www/volkszaehler.org/misc/tools/aggregate.php run -m delta -l hour >/dev/null +1 * * * *  php /var/www/volkszaehler.org/bin/aggregate run -m delta -l hour >/dev/null 
-0 1 * * *  php /var/www/volkszaehler.org/misc/tools/aggregate.php run -m delta -l day >/dev/null+0 1 * * *  php /var/www/volkszaehler.org/bin/aggregate run -m delta -l day >/dev/null
 </code> </code>
  
Zeile 86: Zeile 91:
 der Eintrag für "minute" sieht dann also so aus: der Eintrag für "minute" sieht dann also so aus:
 <code> <code>
-*/10 * * * *  flock -n /tmp/flock-vz_aggregate.lock php /var/www/volkszaehler.org/misc/tools/aggregate.php run -m delta -l minute >/dev/null+*/10 * * * *  flock -n /tmp/flock-vz_aggregate.lock php /var/www/volkszaehler.org/bin/aggregate run -m delta -l minute >/dev/null
 </code> </code>
 Anm.: Die Einträge für "hour" und "day" werden nicht mit sich selbst kollidieren (...); wenn diese also kollidieren, dann mit "minute"; so laufen also höchstens 3 Aggregate-Jobs gleichzeitig (minute, hour, day) Anm.: Die Einträge für "hour" und "day" werden nicht mit sich selbst kollidieren (...); wenn diese also kollidieren, dann mit "minute"; so laufen also höchstens 3 Aggregate-Jobs gleichzeitig (minute, hour, day)
 +
 +=== Im Falle eines Docker-Setups zu beachten ===
 +Bei dem Einsatz von Docker funktionieren bestimmte Teile der Anleitung etwas anders. Es muss z.B. erstmal der Docker Container betreten werden. Welche ID der Dockercontainer hat findet Ihr mittels des folgenden Befehls heraus:
 +<code>
 +docker ps | grep volkszaehlerorg_volkszaehler
 +</code>
 +
 +danach könnt ihr den docker Container betreten mittels des folgenden Befehls:
 +<code>
 +docker exec -it --user root hier-die-id-von-eben-eintragen sh 
 +</code>
 +
 +hier kann die aggregation dann mittels des leicht angepassten Befehls von oben durchgeführt werden:
 +<code>
 +php /vz/bin/aggregate run -m full -l day -l hour -l minute
 +</code>
  
 === Aggregation prüfen === === Aggregation prüfen ===
Zeile 106: Zeile 127:
  
 === duplicates === === duplicates ===
-Es kann vorkommen das sich ein Zählerstand oder Momentanwert über längere Zeit nicht verändert. Dennoch geht vzlogger davon aus das jeder gleich wichtig ist und schickt ihn an die Middleware weiter was zu aufeinander folgenden Datensätzen mit identischem Wert führt. //duplicates// ist ein Parameter in der Kategorie //channels// der vzlogger.conf der diese Folgedaten reduziert.+Es kann vorkommen, dass sich ein Zählerstand oder Momentanwert über längere Zeit nicht verändert. Dennoch geht vzlogger davon aus, dass jeder gleich wichtig ist und schickt ihn an die Middleware weiter was zu aufeinander folgenden Datensätzen mit identischem Wert führt. //duplicates// ist ein Parameter in der Kategorie //channels// der vzlogger.conf der diese Folgedaten reduziert.
 <code | vzlogger.conf> <code | vzlogger.conf>
       "duplicates": 3600,</code>       "duplicates": 3600,</code>
howto/datenmengen.1494479263.txt.gz · Zuletzt geändert: 2017/05/11 07:07 von jau