Frage

Ich bin ziemlich neu mit mehreren Threads in einer Datenbank zu arbeiten (die meisten meiner Karriere ist auf dem Frontend ausgegeben).

Heute habe ich versucht, eine einfache PHP-Anwendung testet ich zum Speichern von Werten in einer MySQL schrieb db ISAM Tabellen Transaktionen mit Tabellensperren zu emulieren.

Ich schrieb eine Blog-Post über das Verfahren hier:

Testing Mit JMeter

Aus meinen Ergebnissen meiner einfache PHP-Anwendung erscheint die transaktionale Integrität intakt zu halten (wie in meinen csv-Dateien aus den Daten ersichtlich das gleiche wie die Daten zu sein ich aus der Datenbank reextrahiert):

CSV-Dateien:

alt csv für al

Abfrage von Daten für beide Benutzer Nach JMeter Testlauf:

alt  alt „ loading=

Bin ich richtig in meiner Annahme, dass die Transaktionsdatenintegrität intakt ist?

Wie testen Sie für Nebenläufigkeit?

War es hilfreich?

Lösung

Warum InnoDB nicht verwenden und die gleiche Wirkung ohne manuelle Tabellensperren bekommen?

Auch, was schützen Sie vor? Betrachten wir zwei Benutzer (Bill und Steve):

  1. Bill Lasten Datensatz 1234
  2. Steve lädt Rekord 1234
  3. Steve ändert Datensatz 1234 und legt
  4. Bill wartet ein bisschen, dann aktualisiert die veraltete Datensatz 1234 und einreicht. Diese Änderungen clobber Bills.

Die Tabellensperre bietet keine höhere Datenintegrität als die native MyISAM Tabellensperren. MyISAM wird die Tabelle Dateien nativ sperrt, wenn erforderlich, zur Beschädigung von Daten zu stoppen.

In der Tat, der Grund InnoDB zu verwenden, um über MyISAM ist, dass es Zeile tun wird anstelle von Tabellensperren verriegelt. Es unterstützt auch Transaktionen. Mehrere Updates für verschiedene Datensätze einander und komplexe Updates für mehrere Datensätze nicht blockieren wird blockiert, bis die Transaktion abgeschlossen ist.

Sie müssen die Chance, dass zwei Updates auf demselben Datensatz prüfen, zur gleichen Zeit für Ihre Anwendung passieren werden. Wenn es wahrscheinlich ist, Tisch / Zeilensperren nicht das zweite Update blockiert, es verschiebt es nur, bis das erste Update abgeschlossen ist.

EDIT

Von dem, was ich mich erinnere, hat MyISAM ein spezielles Verhalten für Einsätze. Es muss nicht auf den Tisch überhaupt für einen Einsatz sperren, wie es gerade ist bis zum Ende der Tabelle angehängt wird. Das kann für Tabellen mit eindeutigen Indizes oder nicht-autoincrement Primärschlüssel nicht wahr sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top