Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam

2013-09-16 Diskussionsfäden Jakob Hirsch
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'));
...
 Diese Anfrage dauert ca. 6-7 Sekunden. Hat jemand eine Idee wie man
 dieses beschleunigen kann?

Der subquery macht einen table-scan über die komplette data-Tabelle, was
dauert natürlich entsprechend lange. So ist es kein Problem (wenn auch
nicht schön):

SELECT value FROM data WHERE channel_id=14 AND timestamp=(select
max(timestamp) FROM data WHERE channel_id=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).




Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam

2013-09-16 Diskussionsfäden Thorben Thuermer
On Mon, 16 Sep 2013 14:01:31 +0200
Jakob Hirsch j...@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'));
 ...
  Diese Anfrage dauert ca. 6-7 Sekunden. Hat jemand eine Idee wie man
  dieses beschleunigen kann?
 
 Der subquery macht einen table-scan über die komplette data-Tabelle, was
 dauert natürlich entsprechend lange.

achso, es gibt keinen index auf `id`...
den scan macht dann aber die haupt-query, nich die subquery.

 So ist es kein Problem (wenn auch nicht schön):
 SELECT value FROM data WHERE channel_id=14 AND timestamp=(select
 max(timestamp) FROM data WHERE channel_id=14);

wie schon gesagt, man wuerde doch eleganter schreiben:
select value from data where channel_id=14 order by timestamp desc limit 1;

 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


Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam

2013-09-16 Diskussionsfäden Andreas Goetz
Hallo Thorben,

2013/9/16 Thorben Thuermer r...@constancy.org

 On Mon, 16 Sep 2013 14:01:31 +0200
 Jakob Hirsch j...@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.

vg
Andreas


Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam

2013-09-16 Diskussionsfäden Justin Otherguy
Hi,

Am 16.09.2013 um 20:45 schrieb Andreas Goetz:

 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
sodele - ist nun drin. Sorry für die Verzögerung - Beta-Tester wären praktisch 
*hint*

Anders formuliert:
bitte testen und beschweren, wenn etwas kaputt ist.

@Andreas: fettes Merci für's Patchen!!!


Gruss, J.



Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam

2013-09-16 Diskussionsfäden Patrik Karisch
Servus,

Am 16. September 2013 20:53 schrieb Justin Otherguy 
jus...@justinotherguy.org:

 sodele - ist nun drin. Sorry für die Verzögerung - Beta-Tester wären
 praktisch *hint*

 Anders formuliert:
 bitte testen und beschweren, wenn etwas kaputt ist.

Für das wären Unit-Tests und ein CI-Server gedacht ^^ - travis-ci.org

Zumindestens für die großteil einer Applikation.

bg