Is het met MySQL mogelijk (i.c.m. InnoDB?) om een row te vergrendelen (select for update bijvoorbeeld?), zodat deze voor andere threads die een select uitvoeren onzichtbaar is?
Dit in verband met een queue die ik in een database wil opslaan, in een multithreaded, multi-server omgeving.
De status van een queue item wordt na toewijzing aan een thread veranderd van "WAITING" naar "ASSIGNED". Omdat het niet mogelijk moet zijn dat twee threads hetzelfde item te pakken krijgen, moet ik dit voorkomen.
Dit kan door:
a) Dit in software te implementeren (een soort van gateway die per thread, gesynchroniseert items toewijst)
b) Dit m.b.v. de database op te lossen, door row-level locking
Ik ben momenteel aan het testen met a), maar gezien de complexiteit van het verhaal, en daarmee de kans op bugs, is b) erg interessant gezien de simpliciteit, als het kan natuurlijk.
Kortom: kan ik rows vergrendelen, zodat ze voor andere threads onzichtbaar zijn, totdat de thread ze weer vrijgeeft, of de thread eindigt ?
Dit in verband met een queue die ik in een database wil opslaan, in een multithreaded, multi-server omgeving.
De status van een queue item wordt na toewijzing aan een thread veranderd van "WAITING" naar "ASSIGNED". Omdat het niet mogelijk moet zijn dat twee threads hetzelfde item te pakken krijgen, moet ik dit voorkomen.
Dit kan door:
a) Dit in software te implementeren (een soort van gateway die per thread, gesynchroniseert items toewijst)
b) Dit m.b.v. de database op te lossen, door row-level locking
Ik ben momenteel aan het testen met a), maar gezien de complexiteit van het verhaal, en daarmee de kans op bugs, is b) erg interessant gezien de simpliciteit, als het kan natuurlijk.
Kortom: kan ik rows vergrendelen, zodat ze voor andere threads onzichtbaar zijn, totdat de thread ze weer vrijgeeft, of de thread eindigt ?