Locking

Maandag, 19 februari 2001
Wat te doen als twee gebruikers tegelijkertijd dezelfde gegevens willen wijzigen? Drie oplossingen:
  1. Geen locking
  2. Pessimistic locking
  3. Optimistic locking

Geen locking

Dit is de meest simpele vorm. De gebruiker die het laatst een update doet wint, de wet van de laatst sprekende.
Gebruiker 1   Leest A Schrijft B
Waarde in database A B C
Gebruiker 2   Leest A Schrijft C
In het voorbeeld hierboven schrijft gebruiker 2 het laatst. Zijn 'C' wint. De 'B' van gebruiker 1 gaat verloren.

Voordelen

  • Goedkoop te programmeren, geen bijzondere inspanning voor locking
  • Geschikt voor systemen waar slechts één gebruiker tegelijkertijd een waarde zal veranderen.

Nadelen

  • Gebruiker 1 krijgt ten onrechte de indruk dat zijn 'B' blijvend weggeschreven is.
  • Gebruiker 2 leest verouderende informatie. Gebruiker 2 ziet nooit de 'B' van gebruiker 1.

Pessimistic Locking

Hier geldt een blokkade voor anderen, zolang één gebruiker met een gegeven bezig is. De blokkade is pessimistisch, slechts voor het geval dat er later een update volgt.
Gebruiker 1   Leest A Schrijft B
Waarde in database A B C
Gebruiker 2   stop Wacht op Gebruiker 1 Leest B Schrijft C

Voordelen

  • Elke gebruiker is zeker dat zijn updates verwerkt zullen worden en gezien zullen worden door andere gebruikers.
  • Geschikt voor vrij statische systemen met ingewikkelde, tijdrovende updates, waar meestal maar één gebruiker tegelijk aan werkt.

Nadelen

  • Werkt enorm vertragend. Één gebruiker blokkeert alle andere gebruikers, zelfs als er uiteindelijk niet eens een update komt. Een gebruiker kan tijdens een update actie rustig met lunchpauze gaan en de anderen nodeloos lang laten wachten.
  • Er kan maar één gebruiker tegelijk gegevens wijzigen.
  • Moedigt aan tot langzaam en vertragend werken.

Optimistic Locking

Bij optimistic locking werkt de blokkade achteraf met een controle op de juiste versie.

In de database staan datum en tijd van de laatste versie. Bij een schrijfactie controleert de applicatie of de update nog wel met geldige gegevens werkt. Een gebruiker die met verouderde gegevens blijkt te werken moet z'n actie overnieuw doen.

Gebruiker 1   Leest A 09:00 Schrijft A 09:00 -> B
Waarde in database A 09:00 B 10:15 C 11:30
Gebruiker 2   leest A 09:00 Schrijft A 09:00 -> C stop Leest B 10:15 Schrijft B 10:15 -> C  

Voordelen

  • Eenmaal door het systeem bevestigd, is elke gebruiker er zeker van dat zijn updates verwerkt zijn en gezien door andere gebruikers zullen worden.
  • Geschikt voor systemen in een dynamische omgeving, met vele gebruikers die korte, snelle updates doen.
  • Gebruikers blokkeren elkaar niet. Degene met de eerste schrijfactie wint.
  • Stimuleert gebruikers om snel te werken.

Nadelen

  • Een gebruiker is pas zeker van succes als de schrijfactie is afgelopen.
  • Slecht voor langdurige updates.

Tot de volgende week,
Henk Jan Nootenboom