Skip to content
FunkceCeníkPartneřiBlogNápovědaO násKontakt
ZačítPřihlásit se
Zpět na Blog
guides2026-09-136 min čtení

Více číšníků, jeden stůl: řešení konfliktů v objednávkové vrstvě

Last-write-wins selhává, když 4 číšníci edituji banketový stůl pro 20 hostů. Optimistické zamykání + 409 Conflict z resortu v Antalyi.

th

thMenu Team

thmenu.com

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.