Spreminjanje zapisov v multiuser okolju?

Kako kaj rešujete spreminjanje zapisov v bazi v multiuser okolju?

Govorim o težavi, kjer dva uporabnika hkrati spreminjata zapis in eden prepiše drugemu njegove spremembe. Torej implementacija optimistic concurrency control za REST API, ki je stateless in ob updatu recorda dejansko ne veš, katere podatke uporabnik zares spreminja.

Zaenkrat sem zadevo rešil tako, da imam ločen GET action za record, ki ga mislim updatati, v njem pa ob vsaki vrednosti columna podam še current revision ID, torej ID zadnje spremembe te kolone. PATCH request potem skupaj s posodobljenimi vrednostmi pošlje še ta revision ID, backend pa preveri, če je ta revision še vedno current. Če je, posodobi podatke, če ni, sproži collision error.

Moje okolje, kjer to implementiram, je Ruby on Rails + PostgreSQL, ampak za debato to ni prav hudo važno, dobre/boljše rešitve me zanimajo bolj teoretično, implementiral jih bom že.