Optymistyczna współbieżność

Gdy dwie osoby edytują ten sam rekord, druga zapisana zmiana po cichu nadpisuje pierwszą. Blokada rekordu temu zapobiega, ale wstrzymuje pozostałych, dopóki ktoś trzyma go otwartego. Poznasz lżejsze podejście, które zakłada, że konflikty są rzadkie. Odczytujesz rekord razem z wersją, odsyłasz tę wersję ze zmianą, a zapis zostaje odrzucony, jeśli ktoś w międzyczasie zmienił dane. Dzięki temu decyzje zapadają zawsze na podstawie aktualnych danych.

Pierwszy artykuł tłumaczy tę ideę, porównuje ją z blokowaniem i pokazuje, dlaczego ma znaczenie w rozproszonych bazach danych i w Event Sourcingu. Drugi pokazuje, jak obsłużyć ją w web API za pomocą standardowych nagłówków HTTP. Serwer wysyła wersję w nagłówku ETag, klient odsyła ją w If-Match, a nieaktualna zmiana dostaje status 412 Precondition Failed. Przykłady są w TypeScripcie.

Czytaj po kolei, bo drugi artykuł zakłada znajomość pierwszego.

  1. Optimistic concurrency for pessimistic times

    2020-12-16Apparently, one of the worst things you can wish someone is “may you live in interesting times”. In these interesting times of ours, I wanted to write something to cheer…
  2. How to use ETag header for optimistic concurrency

    2021-11-03In my article “Optimistic concurrency for the pesimistic times”, I described the premises for optimistic concurrency handling. As a reminder, we assume that conflict…