Skip to content
OminaisuudetHinnoitteluKumppanitBlogiOhjeMeistäYhteystiedot
AloitaKirjaudu sisään
Takaisin blogiin
guides2026-09-136 min lukemista

Useita tarjoilijoita, sama pöytä: tilauskerroksen konfliktit

Last-write-wins pettää, kun 4 tarjoilijaa muokkaa 20 hengen banketti­pöytää. Optimistinen lukitus + 409 Conflict Antalyan resortista.

th

thMenu Team

thmenu.com

Antalya Belekin 1200 hengen banketissa neljä tarjoilijaa lisää annoksia samaan 20 hengen pyöreään pöytään yhtä aikaa. Klassinen "last-write-wins" ylikirjoittaa hiljaa 14 tuotetta. Tässä kerromme, miten viemme optimistisen lukituksen, 409 Conflictin ja uudelleenyrityskuvion tuotantoon.

Miksi last-write-wins ei riitä

Yksinkertainen UPDATE orders SET items = ? WHERE id = ? säilyttää vain viimeisen committin. Neljä POSTia 200 ms:ssa, ja keittiöön päätyy 6 annosta 20:stä.

Ratkaisu: jokaiselle riville version-sarake. Klientti lukee sen avatessaan ja lähettää tallennuksessa; palvelin varmistaa atomisesti.

Optimistinen lukitus versioinnilla

Lisää version INTEGER ja updated_at. PATCH:

  • Klientti: { items, expected_version: 7 }.
  • Palvelin: UPDATE ... WHERE id = ? AND version = 7.
  • 0 riviä → 409 Conflict + nykytila.

409 Conflict + yhdistely klientillä

Ei automaattista uudelleenyritystä. Klientti näyttää uusimman tilauksen, korostaa muutokset ja pyytää vahvistuksen. Belekissä koetut konfliktit putosivat 0,4 %:sta 0 %:iin.

Append-only-loki order_events tekee auditoinnista helppoa.

FAQ

Miksei SELECT FOR UPDATE? Se sarjallistaa tarjoilijat ja heikentää suorituskykyä.

Toimiiko D1:ssä? Kyllä, atominen UPDATE INTEGERille on turvallinen.

Entä offline? Paikallinen jono + expected_version, merge yhdistyttäessä.

Oliko tästä hyötyä? Jaa se.