- Daten in einer MySQL Tabelle sollen abgearbeitet werden sollen.
Die Reihenfolge der Bearbeitung muss nicht zwingend einer bestimmten Reihung folgen -- gelegentlich kann das aber auch nötig sein.
Damit das schneller erfolgt sollen mehrere PCs/Programminstanzen/Clients daran arbeiten.
Jeder Datensatz soll nur einmal bearbeitet werden.
Das ganze soll auch performant sein
edit: Clients sollen nach Bedarf zugeschaltet oder abgeschaltet werden können
Nun gibt es dazu die Möglichkeit einer Semaphordatei, die gesperrt wird solange die Abfrage eines Programms dauert. Die muss aber auf einem Netzwerklaufwerk liegen, was die Sache unelegant macht.
bisher habe ich folgende Strategie angewandt:
- Abfragen der nächsten 20 unbearbeiteten Datensätze
zufälliges Auswählen eines Datensatzes aus den 20
Versuch den ausgewählten Datensatz auf Rowlevel zu sperren
falls das nicht klappt alles von vorne.
Das hat in der Vergangenheit ganz gut geklappt, allerdings kam es immer wie der zu Lockingproblemen und Timingproblemen.
Die (recht große) DB konnte nicht schnell genug 'liefern' was die Clients ins Timeout geschickt hat.
Frage:
Gibt es eine elegantere Lösung? z.B. eine Variante wie SELECT LAST_INSERT_ID() bei autoincrement Feldern ?
Trigger?
Stored Procedure?
Danke im voraus