[vz-dev] MAX 1800Watt

Steffen Vogel info at steffenvogel.de
Mon Dec 27 20:52:42 CET 2010


On Mon, 27 Dec 2010 14:05:11 +0100, Jakob Hirsch <jh at plonk.de> wrote:
> Justin Otherguy, 2010-12-27 13:03:
>> Ich schlage daher eine weitere kleine Änderung vor: - sollte der
>> timestamp, der in die db eingetragen werden soll, bereits vorhanden
>> sein (Kollision), legen wir nicht einen zweiten Eintrag mit dem
>> gleichen timestamp an, sondern erhöhen den "value" um eins
> 
> Finde ich auch sinnvoller. Dafür ist der value ja da.

ACK!
Wobei "value" meherere Aufgaben hat:

 - Sensoren, die keinen Verbrauch erfassen, speichern hier ihre Werte (zb.
Temperatur)
 - Controller, die direkt aggregierte/summierte Werte senden, speichern
hier den Verbrauch über das Intervall ab
 - Später wollen wir diese Aggregierung/Summierung noch nachträglich für
alte Werte einführen, um hier etwas Speicherplatz zu sparen und die DB zu
entlasten.
   (vgl. rrdtool; round robin databases)

>> Für die Implementierung fallen mir 2 Lösungen ein: - vor dem
>> Eintragen eines Impulses könnten wir nach dem timestamp suchen; nur
>> wenn dieser noch nicht vorhanden ist, tragen wir einen neuen ein;
>> anderenfalls erhöhen wir "value" (das ist vermutlich aber Blödsinn)
> 
> Muß halt in einer Transaktion erfolgen.

Soweit vom Datenbanksystem unterstützt, macht Doctrine das direkt.

>> - wir tragen ein (wie derzeit) und falls das SQL-Statement mit einem
>> Fehler endet (...schon vorhanden...) fragen wir den value ab und
>> inkrementieren diesen

> mysql hat genau für sowas "INSERT ... ON DUPLICATE KEY UPDATE
> value=value+VALUES(value)". In anderen DBMS muß man das dann wohl über
> Trigger machen. Ist nur die Frage, ob man sowas in Doctrine abbilden
> kann...

Das wird wohl eher etwas schwierig. Hier würde ich vorschlagen, das
timestamp Feld wieder unique zu machen.
Falls dann der selbe timestamp erneut eingefügt werden sollte, wird von
PDO eine exception geworfen.
Diese könnten wir mit try { } catch abfangen und den Werte mit per "UPDATE
value = value + 1" erhöhen.

Schön hier jemanden mit etwas weitergehenden Datenbankkentnissen auf der
Liste zu haben :)
So Kommentare helfen echt weiter ;)

gruß Steffen


More information about the volkszaehler-dev mailing list