Na banketu pro 1200 osob v Antalye Belek čtyři číšníci současně přidávají jídla na stejný kulatý stůl pro 20 lidí. Klasické "last-write-wins" tiše přepíše 14 položek. Zde popisujeme, jak jsme nasadili do produkce optimistické zamykání, 409 Conflict a retry pattern.
Proč last-write-wins nestačí
Jednoduché UPDATE orders SET items = ? WHERE id = ? ponechá jen poslední commit. Čtyři POST za 200ms a do kuchyně přijde 6 z 20 jídel.
Řešení: každý řádek má sloupec version. Klient ho přečte při otevření, posílá při uložení, server atomicky ověří.
Optimistické zamykání s verzemi
Přidejte version INTEGER a updated_at. PATCH:
- Klient:
{ items, expected_version: 7 }. - Server:
UPDATE ... WHERE id = ? AND version = 7. - 0 řádků →
409 Conflict+ aktuální stav.
409 Conflict + merge na klientovi
Bez auto-retry. Klient zobrazí aktuální objednávku, zvýrazní změny a vyžádá potvrzení. V Beleku pocitové konflikty klesly z 0,4 % na 0 %.
Append-only log order_events umožňuje snadný audit.
FAQ
Proč ne SELECT FOR UPDATE? Serializuje číšníky a snižuje propustnost.
Funguje na D1? Ano, atomický UPDATE na INTEGER je bezpečný.
A offline? Lokální fronta + expected_version, merge při reconnect.
Bylo to užitečné? Sdílejte to.
Související články
Co je QR menu? Kompletní průvodce pro restaurace
QR menu umožňuje hostům okamžitý přístup k vašemu jídelníčku přes smartphone — b…
Přechod z papírového na digitální QR menu: průvodce krok za krokem
Chcete zavést QR menu, ale nevíte, kde začít? Tento průvodce pokrývá fotografová…
Geo-cílené QR menu: různé jazyky podle IP návštěvníka
Jak 180místný all-inclusive resort v Antalyi směruje stejný QR kód na turecké, n…