Sto creando un'applicazione desktop che persiste i dati nel cloud. Una preoccupazione che ho è un inizio a modificare un elemento nell'applicazione e lasciarlo per un po 'facendo in modo che i dati diventino obsoleti. Questo può ovviamente accadere anche se 2 persone provano a modificare lo stesso oggetto contemporaneamente. Quando hanno terminato la loro modifica e vogliono salvare i dati, avrei bisogno di sovrascrivere ciò che esiste attualmente nel database o verificare che abbiano iniziato la modifica dopo l'ultima modifica e costringerli a scartare le loro modifiche o forse dare loro l'opzione di rischiare sovrascrivendo i cambiamenti di qualcun altro.
Ho pensato di aggiungere un campo is_locked
e lock_timestamp
la tabella DB. Quando un utente inizia a modificare l'elemento, la riga cambia is_locked
in true e imposta il timestamp di blocco sull'ora corrente. Avrei quindi un po 'di tempo per il quale si tiene il blocco (es. 5 minuti). Se qualcun altro prova a modificare l'elemento, riceverà un messaggio che dice che l'oggetto è bloccato e quando il blocco scade automaticamente. Se l'utente si allontana durante la modifica, il blocco scadrà automaticamente dopo un periodo di tempo relativamente breve e una volta fatto l'utente verrà avvisato che il blocco è scaduto e sarà costretto a riavviare la modifica dopo l'aggiornamento dei dati.
Sarebbe un buon metodo per prevenire la sovrascrittura di dati non aggiornati? È eccessivo (non mi aspetto che l'applicazione venga utilizzata da più persone contemporaneamente su un singolo account).
(Un'altra preoccupazione che ho è che 2 persone ottengano un lucchetto per lo stesso oggetto, tuttavia credo che sia una condizione di gara con cui mi sento a mio agio.)