mysql insert race-condition

How do you stop race-Bedingungen in MySQL? das problem bei der hand ist, verursacht durch einen einfachen Algorithmus:

  1. wählen Sie eine Zeile aus der Tabelle
  2. wenn es nicht existiert, legen Sie es

und dann entweder erhalten Sie eine doppelte Zeile, oder wenn Sie verhindern, dass es via unique/primary keys, ein Fehler.

Nun normalerweise würde ich denken, Transaktionen Hilfe hier, aber da die Zeile nicht vorhanden ist, wird die Transaktion nicht wirklich helfen (oder bin ich etwas fehlt?).

Sperrtabelle klingt wie ein overkill, vor allem, wenn die Tabelle aktualisiert wird mehrere Male pro Sekunde.

Die einzige andere Lösung, die ich denken kann, ist GET_LOCK() für jede id, aber gibt es nicht einen besseren Weg? Gibt es keine Skalierbarkeit, auch hier? Und auch, tun Sie es für jede Tabelle klingt ein bisschen unnatürlich, wie es klingt wie ein sehr häufiges problem in der high-concurrency-Datenbanken zu mir.

InformationsquelleAutor tpk | 2008-11-05

Schreibe einen Kommentar