Het kan voorkomen dat een database record door een gebruiker via een webinterface bewerkt wordt. Ik wil dan voorkomen, dat iemand anders dezelfde record op dezelfde moment ook bewerkt.
Daar bestaan er verschillende methoden voor, met locking.Wanneer ik mij inlees in de methoden, zit ik mij af te vragen wat een battle-proven beste methode is.
Zo heb je bijvoorbeeld in dezelfde tabel naast de record, dat bewerkt wordt, een veld "locked" met positieve of negatieve waarde. Wanneer dit veld een positieve waarde is, dan is de record locked.
Maar wat als de gebruiker ondertussen de browser afsluit, zonder de record op te slaan? Dan blijft dit record voor andere gebruikers altijd locked, en kan niemand meer erbij.
.
Ik zat te denken om een apart tabel (locking-tabel) te hanteren, met daarin slechts de ID's en date-time waarden. De ID's zijn gekoppeld aan de correspodenderende ID's in de records tabel.
Om minuut wordt er een Ajax request naar een script uitgevoerd, met daarin de ID. De ID in locking-tabel wordt vervolgens bijgewerkt met meest recente tijdstip.
Wanneer een record in de locking tabel voorkomt, dan is deze locked.
Nachts draait een cronjob. Die cronjob schoont alle records in de locking tabel, die ouder zijn dan 2 minuten. Zo heb je het probleem niet dat een record in de browser nog niet opgeslagen is, terwijl de client inactief is. Maar dit lijkt mij vrij omslachtig, en er zullen wel situaties zijn die ik nog niet voorzien heb.
Zijn er hier nog Tweakers die eerder met locking implementaties gewerkt hebben, en hier kunnen delen wat voor hen het beste gewerkt heeft?
Daar bestaan er verschillende methoden voor, met locking.Wanneer ik mij inlees in de methoden, zit ik mij af te vragen wat een battle-proven beste methode is.
Zo heb je bijvoorbeeld in dezelfde tabel naast de record, dat bewerkt wordt, een veld "locked" met positieve of negatieve waarde. Wanneer dit veld een positieve waarde is, dan is de record locked.
Maar wat als de gebruiker ondertussen de browser afsluit, zonder de record op te slaan? Dan blijft dit record voor andere gebruikers altijd locked, en kan niemand meer erbij.

Ik zat te denken om een apart tabel (locking-tabel) te hanteren, met daarin slechts de ID's en date-time waarden. De ID's zijn gekoppeld aan de correspodenderende ID's in de records tabel.
Om minuut wordt er een Ajax request naar een script uitgevoerd, met daarin de ID. De ID in locking-tabel wordt vervolgens bijgewerkt met meest recente tijdstip.
Wanneer een record in de locking tabel voorkomt, dan is deze locked.
Nachts draait een cronjob. Die cronjob schoont alle records in de locking tabel, die ouder zijn dan 2 minuten. Zo heb je het probleem niet dat een record in de browser nog niet opgeslagen is, terwijl de client inactief is. Maar dit lijkt mij vrij omslachtig, en er zullen wel situaties zijn die ik nog niet voorzien heb.
Zijn er hier nog Tweakers die eerder met locking implementaties gewerkt hebben, en hier kunnen delen wat voor hen het beste gewerkt heeft?