På et banket for 1200 couverts i Antalya Belek legger fire servitører samtidig retter til det samme runde bordet for 20 personer. Klassisk "last-write-wins" overskriver i stillhet 14 varer. Slik satte vi optimistisk låsing, 409 Conflict og retry-mønsteret i produksjon.
Hvorfor last-write-wins svikter
Enkel UPDATE orders SET items = ? WHERE id = ? beholder kun siste commit. Fire POSTs på 200 ms, og kjøkkenet ser 6 retter av 20.
Løsning: hver rad får en version-kolonne. Klienten leser den ved åpning, sender den ved lagring, serveren sjekker atomært.
Optimistisk låsing med versjonering
Legg til version INTEGER og updated_at. PATCH:
- Klient:
{ items, expected_version: 7 }. - Server:
UPDATE ... WHERE id = ? AND version = 7. - 0 rader →
409 Conflict+ nåværende tilstand.
409 Conflict + merge på klient
Ingen auto-retry. Klienten viser nyeste ordre, fremhever endringer og venter på bekreftelse. I Belek falt opplevd konfliktrate fra 0,4 % til 0 %.
Append-only-logg order_events gjør audit enkelt.
FAQ
Hvorfor ikke SELECT FOR UPDATE? Serialiserer servitører og senker throughput.
Fungerer på D1? Ja, atomær UPDATE på INTEGER er trygt.
Hva med offline? Lokal kø + expected_version, merge ved reconnect.
Var dette nyttig? Del det.
Relaterte artikler
Hva er en QR-meny? Komplett guide for restauranter
En QR-meny gir gjestene øyeblikkelig tilgang til menyen din via smarttelefon — u…
Bytte fra papirmeny til digital QR-meny: steg for steg
Vil du innføre QR-menyer, men vet ikke hvor du skal begynne? Denne guiden dekker…
Geo-målrettede QR-menyer: ulike språk basert på besøkendes IP
Hvordan et 180-seters all-inclusive resort i Antalya ruter samme QR til tyrkiske…