Skip to content
FunksjonerPriserPartnerBloggHjelpOm ossKontakt
Kom i gangLogg inn
Tilbake til Bloggen
guides2026-09-136 min lesing

Flere servitører, ett bord: konfliktløsning på ordrenivå

Last-write-wins svikter når 4 servitører redigerer et banketts­bord for 20 gjester. Optimistisk låsing + 409 Conflict fra Antalya.

th

thMenu Team

thmenu.com

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.