mySQL transactions (halen van records uit een queue tabel) probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Joost

Joost

05/05/2009 11:18:00
Quote Anchor link
Ik heb de volgende tabel, het is een queue tabel met een aantal akties erin.
Ik heb meerdere servers draaien die constand acties uit de tabel halen en deze afhandelen.
Elke server heeft zijn eigen id.

table: actions

heeft de volgende velden:
+----------+----+----------+------+
| action_id|lock|server_id|action|
+----------+----+----------+------+

Bijvoorbeeld met de inhoud:
|1| 0 |null|bla1 |
+-+-+----+----+
|2| 0 |null|bla2 |
+-+-+----+----+
|3| 0 |null|bla3 |
+-+-+----+----+
|4| 0 |null|bla4 |
+-+-+----+----+


Ik zit met het probleem dat het voor kan komen, dat meerdere servers de zelfde aktie kunnen uitvoeren omdat deze constand dingen aan het afhandelen zijn.
Ik wil natuurlijk dat elke aktie maar 1x wordt uitgevoerd en dat servers nooit de zelfde aktie kunnen oppakken.

Ik had zelf iets gelezen Transactions in MySQL, maar ik begrijp niet precies hoe ik dat hier zou moeten toepassen.

Zelf dacht ik aan de volgende query, maar ik denk niet dat deze helemaal juist is en het is nogal moeilijk te testen.

UPDATE actions SET server_id=$server_id WHERE action_id = (SELECT MIN(action_id) FROM actions WHERE sevrer_id IS NULL AND lock = 0) limit 1;
SELECT action FROM actions WHERE server_id = $server_id and lock=0;
Commit;
update actions set lock=1 where action_id = $action_id

Er is vast een beter manier on dingen met meerdere connecties uit een queue tabel te halen, maar op dit moment zie ik door de bomen het bos niet meer.
Als iemand enige suggesties heeft stel ik dat erg op prijs.

Alvast bedank!
Gewijzigd op 01/01/1970 01:00:00 door Joost
 
Er zijn nog geen reacties op dit bericht.



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.