Moin Bobby,
ich habe 5 Simultane Prozesse, die sich Daten aus einer Tabelle holen und abarbeiten. Ich möchte dass dabei die Prozesse nicht die selben Daten bearbeiten. Wie kann ein Prozess einen Datensatz holen, abarbeiten und danach aus der Datenbank löschen? Wie wäre da der beste Ansatz mit PDO?
MyISAM kann keinen row level lock. Verwendest du also MyISAM, musst du zwangsläufig die Tabelle locken. Um die Lock Times möglichst kurz zu halten, würde ich an deiner Stelle hier eine zusätzliche Spalte in\_progress BOOLEAN NOT NULL DEFAULT false
oder so anlegen. Dann kannst du die Tabelle locken, Datensätze auslesen bis du einen findest, der noch nicht in Bearbeitung ist, die Spalte auf true
setzen und dann den Lock lösen. Für das DELETE
nach Abschluss des Scrapings brauchst du dann keinen Lock mehr.
Wenn du InnoDB benutzt, reicht es in einer Transaktion einen row level lock zu machen (SELECT ... FOR UPDATE
), die Spalte auf true
zu setzen und dann die Transaktion zu commit
en, da brauchst du den table lock nicht.
LG,
CK