Mailinglisten-Archive |
Hallo allerseitz! Ich habe ein Problem, bei dem ich nicht weiterkomme. (MySQL 3.23.33 WinNT) Wir haben mehere Rechner, die lesend und schreibend auf einen SQL-Server über ODBC zugreifen. Die Problemstellung ist wie folgt: Rechner1 fügt neue Records in eine Tabelle ein. Rechner[2-n] lesen diese Tabelle. Dabei soll ein bestimmter record nur von einem Rechner bearbeitet werden. In unserem Fall sind in der Tabelle aufträge, die mit priorität, start und endzeit angegeben sind. Einer der Rechner[2-n] soll nun die 1. 10 der Datensätze mit der geringsten prio, und gültigem start und end-datum bearbeiten. Dabei muss aber sichergestellt werden, dass kein anderer Rechner diesen Record sieht/versucht zu bearbeiten. Bisher habe ich folgenden ansatz: Ich führe einen einzigen SQL-Befehl aus, der mir von den gültigen aufträgen die 1. 10 mit der geringsten prio mit einer prio+(1000 * RECHNER_NUMMER) setzt. Dann nimmt kein anderer Rechner diese Aufträge mehr in beschlag, da die prio > 100 ist, und nun kann dieser eine rechner eine select-anfrage ausführen, um die soeben markierten records zu bekommen/bearbeiten. Das ganze setzt also darauf, das dieser eine update befehl die datensätze markiert, ohne dass ein update befehl eines anderen rechners zu gleichen zeit den gleichen record markiert..... Mein Problem ist allerdings, dass ich in einem update-befehl kein order by angeben kann, sprich ich schaffe es nicht, dass er mit nur die 1. 10 *mit der niedrigsten prio* markiert. Mein bisheriger Update-befehl: (Rechner 1) update auftrag set PRIO=PRIO+1000 where ((start_time<=now()) and (term_time>now()) and (prio<100)) limit 10; Damit sind die records markiert, kein anderer rechner bearbeitet sie, und Rechner 1 kann nun mit select * from auftrag where prio>=1000 and prio<2000; die markierten datensätze abarbeiten. kann mir jemand einen tipp geben? Die ganze Tabelle zu locken will ich verhindern, da das zu sehr ausbremst.... Es ist bei MySQL nicht möglich eine SELECT abfrage als datenquelle für einen update-befehl zu verwenden, oder ? bedanke mich im voraus... -- Florian Schmidt mailto:schmidt_florian_(at)_f-24.com http://www.f-24.com --- *** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive