[vz-dev] Aggregationsmode "DELTA"

Andreas Goetz cpuidle at gmail.com
Mon Oct 28 16:57:53 CET 2013


Ich denke jetzt nochmal laut...

2013/10/28 Andreas Goetz <cpuidle at gmail.com>

> Moin,
>
> 2013/10/28 Thorben Thuermer <r00t at constancy.org>
>
>> ...
>>
>> > Im Ergebnis führt das dazu, dass das FE hässliche "Rampen" an den
>> Stellen
>> > anzeigt wo von 0-Werten (bzw. Stellen in der DB mit längeren
>> Intervallen)
>> > wieder auf Daten übergegangen wird.
>>
>> beschraenkt sich das problem nicht drauf, jeweils die erste UND die letzte
>> null drinzulassen?
>> wenn du die letzte loescht, kann die middleware halt nichtmehr sagen, in
>> welchem zeitraum die naechste aenderung stattgefunden hat,
>> und verteilt sie halt auf den gesamten zeitraum seit dem letzten wert.
>>
>
> Schon getestet- tut es leider nicht. Das Problem ist "so gross", wie Tupel
> zusammengezählt werden. Wenn z.B. 2 Tupel am Ende vom Vortag aus 0 und x
> auf x/2 aggregiert werden und die ersten beiden Tupel vom Foleetag (0 und
> y) auf y/2 aggregiert, dann bedeutet das schlimmstenfalls eine Rampe von
> x/2 bis y/2 ohne dass die 0 jeweils im FE angezeigt wird. Je mehr Tupel
> aggegiert werden desto größer die Abweichung.
>

Das Problem ist dass wir im Moment (wenn das FT tupels=xyz übergibt) Pakete
schnüren. Seit dem entsprechenden Patch macht das die Datenbank:

    $sql = 'SELECT MAX(aggregate.timestamp) AS timestamp,
SUM(aggregate.value) AS value, COUNT(aggregate.value) AS count '.
           'FROM ('.
           '    SELECT timestamp, value, @row:=@row+1 AS row '.
           '     FROM data WHERE channel_id=?' . $sqlTimeFilter .
           ') AS aggregate '.
           'GROUP BY row DIV ' . $packageSize .' '.
           'ORDER BY timestamp ASC';


> In Griff kriegen liesse sich das nur wenn das FE einen irgendwie einen
> Hinweis bekommen wird dass zwischendurch die 0 "steht"  und die Daten
> ausgedünnt sind.
>
>
Was spräche denn jetzt dagegen, stattdessen äquidistante Stücke zu
schneiden, also nach timestamp DIV $packageSize zu gruppieren? und den
entsprechenden Timestamp im Select hochzuzählen? Das Ganze noch mit IFNULL
Statements ergänzt sollten wir in der Lage sein, fehlende (Null-)Werte zu
ergänzen. Performance to be tested.
Dann besteht natürlich wieder die Gefahr, dass wir zwischen zwei
Zählerwerten eine Null erfinden falls sich da kein weiterer Messwert
anfindet- Tuples darf also nicht granularer werden als Messwerte wirklich
vorliegen.

Wär hätte Lust einen Prototyp zu bauen und Performance zu testen??

vg
Andreas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-dev/attachments/20131028/4f9e3060/attachment.html>


More information about the volkszaehler-dev mailing list