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.
Aiheeseen liittyvät artikkelit
Mikä on QR-valikko? Kattava opas ravintoloille
QR-valikko antaa asiakkaille välittömän pääsyn ruokalistallesi älypuhelimen kaut…
Paperisesta ruokalistasta QR-digitaalimenüün: askel askeleelta -opas
Haluatko ottaa QR-menüt käyttöön mutta et tiedä mistä aloittaa? Tämä opas kattaa…
Geokohdistetut QR-ruokalistat: eri kielet vierailijan IP:n mukaan
Miten 180-paikkainen all-inclusive-lomakeskus Antalyassa ohjaa saman QR-koodin t…