[vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam

Sven peitz sven.peitz at gmx.net
Tue Sep 17 20:39:35 CEST 2013


Am 16.09.2013 20:45, schrieb Andreas Goetz:
> Hallo Rainer,
>
> 2013/9/16 Rainer Gauweiler <volkszaehler at moppl.inka.de 
> <mailto:volkszaehler at moppl.inka.de>>
>
>     Hallo zusammen,
>
>     Am 16.09.2013 16:41, schrieb Andreas Goetz:
>
>         Hallo Thorben,
>
>         2013/9/16 Thorben Thuermer <r00t at constancy.org
>         <mailto:r00t at constancy.org> <mailto:r00t at constancy.org
>         <mailto:r00t at constancy.org>>>
>
>
>             On Mon, 16 Sep 2013 14:01:31 +0200
>             Jakob Hirsch <jh at plonk.de <mailto:jh at plonk.de>
>         <mailto:jh at plonk.de <mailto:jh at plonk.de>>> wrote:
>              > Sven peitz, 2013-09-14 11:07:
>              > > $result1=mysql_query("SELECT value FROM data WHERE id
>         = (select
>             max(id)
>              > > FROM data WHERE channel_id LIKE  '14')");...
>              > Allerdings sollte man nicht ohne Grund direkt auf der DB
>             arbeiten. Das
>              > Vorgehen wie von Andreas Götz ist auch deutlich einfacher
>             (Abfrage mit
>              > from=now).
>
>             from=now...
>             funktioniert doch aber wie gehabt nur bei erfassung
>         absoluter staende.
>             ansonsten war die methode doch "from=<x> seconds ago"...?
>             also so, dass im im angegebenen zeitraum (mit now = nur
>         aktuelle
>             sekunde)
>             genug werte erfasst sind, damit der interpreter in der
>         middleware
>             daraus etwas berechnen kann.
>             also bei s0-zaehlern mindestens zwei impulse, etc...
>             oder wurde da middleware-seitig was geandert?
>
>             - Thorben
>
>
>         Das sollte funktionieren da die MW (schon immer?) mittels zweier
>         SQL-Queries den jeweils letzten und nächsten Datenpunkt außer des
>         angefragten Zeitraumes ermitteln und from... to... entsprechend
>         erweitern. Für now() gäbe es also immer den aktuellen und letzten
>         Timestamp und damit die Möglichkeit einen aktuellen
>         Periodenverbrauch zu
>         berechnen.
>
>
>     Tut bei mir nicht und tat es noch nie:
>     {"version":"0.2","data":{"uuid":"*snip*","average":0,"consumption":0,"rows":0}}
>
>     Wir hatten da auch auf dem Raspi Probleme und haben damals den
>     Zeitraum erweitert, damit sicher Daten da waren.
>
>     Aber gab es nicht auch "kürzlich" einen Patch der das Verhalten
>     gebaut hat? Meine Installation hier ist ca ein Jahr alt.
>
>
> Du hast Recht. Was ich geschrieben habe stimmt zwar, allerdings ist 
> der Code noch nicht im Repository angekommen, sondern steht noch in 
> meinem Pull Request: 
> https://github.com/volkszaehler/volkszaehler.org/pull/47
> Das Problem ist, dass die MW ohne diese Fixes je nach Sensortyp auch 
> mal 3 Tuple braucht um etwas sinnvolles zu liefern. Mit Pull Request 
> sind es immer genau zwei Tupel die benötigt werden, damit klappt dann 
> auch die Abfrage per "now". "now - x seconds" ist keine 
> allgemeingültige Lösung da man ja nicht wissen kann wann ein Sensor 
> Daten liefert...
>
> vg
> Andreas
>
Hallo,
vielen Dank für eure Antworten,.
seit eben ist mein sql Zugang beim Provider wieder frei und ich kann 
weiter testen.

Ein from=now bringt bei mit folgendes:

{"version":"0.2","data":{"uuid":"**snip**","average":0,"consumption":0,"rows":0}}


Ein select value from data where channel_id=14 order by timestamp desc 
limit 1;

ist wirklich schnell und bring den aktuellen Wert zu Tage.
Ich hoffe mein Provider fühlt sich damit nicht wieder überlastet.
Ein from=3seconds%20ago funktioniert auch und ist schnell.
Mal sehen was geschickter Weise zu verwenden ist.

Viele Grüße
Sven


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-dev/attachments/20130917/0c9b5503/attachment.html>


More information about the volkszaehler-dev mailing list