Guten Morgen :) bestimmt jeder kennt das Problem, dass multithreaded einen Zähler zu inkrementieren, nicht ganz trivial ist. Dafür gibt es normalerweise Mutexe oder Synchronisierte Methoden, die immer nur einen Thread erlauben, einen Wert zu lesen, zu inkrementieren und zurückzuschreiben. Mein Problem ist jetzt, dass ich einen Zählerstand in einer Tabelle in meiner MYSQL Datenbank habe, der von mehreren Threads aus inkrementiert und zurückgeliefert werden müsste. Zwischen einer Query nach dem Zählerstand und dem Inkrementieren könnte ein anderer Thread das Gleiche tun, was dann Inkrements verlieren würde. Ich verwende Java + JDO + Datenucleus + MySQL. Sowas wie "INSERT ... ON DUPLICATE KEY UPDATE ..." wird von JDO/Datanucleus nicht unterstützt, das müsste also anders gehen. Hat da zufällig jemand eine Idee, wie man das machen kann? MfG Mampf
:
Verschoben durch Admin
Andreas Schwarz schrieb: > UPDATE xyz SET z=z+1 Update wird leider nicht von Datanucleus unterstützt ... Das muss leider anders gehen ... Eine Query, die mit etwas anderem als "SELECT" anfängt, wirft eine Exception:"Query must start with SELECT" oder so ähnlich ...
SELECT * FROM (UPDATE xyz SET z=z+1); ;P Müßte eigentlich die Anzahl geänderter Zeilen zurückliefern (ggf. das FROM weg oder so... hab gerade kein MySQL Server um das zu testen)
Mampf schrieb: > estimmt jeder kennt das Problem, dass multithreaded einen Zähler zu > inkrementieren, nicht ganz trivial ist. so ist das problem, such mal nach InterlockedIncrement (gibt es auch für linux)
Peter schrieb: > Mampf schrieb: >> estimmt jeder kennt das Problem, dass multithreaded einen Zähler zu >> inkrementieren, nicht ganz trivial ist. > > so ist das problem, such mal nach > > InterlockedIncrement > > (gibt es auch für linux) Vielen Dank, dass du dir die Zeit genommen hast, die ersten 2 Zeilen zu lesen ... ;-) Grüße, Mampf
Mampf schrieb: > Vielen Dank, dass du dir die Zeit genommen hast, die ersten 2 Zeilen zu > lesen ... ;-) ok, ich habe jetzt zu ende gelesen. in mysql gibt es doch auto_ident, abfragen kannst du es mit LAST_INSERT_ID()
Mampf schrieb: > Ich verwende Java + JDO + Datenucleus + MySQL. > > Sowas wie "INSERT ... ON DUPLICATE KEY UPDATE ..." wird von > JDO/Datanucleus nicht unterstützt, das müsste also anders gehen. > > Hat da zufällig jemand eine Idee, wie man das machen kann? hm.. du hast einen mapping layer, der dich nur selects selbst machen lässt? dann sollte der das irgendwie handlen können. alternative idee: pseudo-sequences mit stored procedures: http://www.mysqlperformanceblog.com/2008/04/02/stored-function-to-generate-sequences/ koarl
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.