[JDO + MySQL] Einen zähler implementieren

Gast #1867159
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
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.