Sto creando un'applicazione desktop che persiste i dati nel cloud. Una delle preoccupazioni che ho è un inizio per modificare un elemento nell'applicazione e lasciarlo per un po 'causando la stasi dei dati. Questo può ovviamente accadere anche se 2 persone provano a modificare lo stesso oggetto nello stesso momento. Quando finiscono la loro modifica e vogliono salvare i dati, avrei bisogno di sovrascrivere ciò che esiste attualmente nel database o controllare che abbiano iniziato a modificare dopo l'ultima modifica e forzarli a scartare le modifiche o dare loro la possibilità di rischiare sovrascrivere le modifiche di qualcun altro.
Ho pensato di aggiungere campi is_locked
e lock_timestamp
alla tabella DB. Quando un utente inizia a modificare l'elemento, la riga cambierà is_locked
in true e imposterà il timestamp del blocco sull'ora corrente. Avrei quindi un po 'di tempo per il quale è tenuto il blocco (ad esempio 5 minuti). Se qualcun altro tenta di modificare l'oggetto, riceverà un messaggio che dice che l'oggetto è bloccato e quando il blocco scade automaticamente. Se l'utente si allontana mentre modifica il blocco scadrà automaticamente dopo un periodo di tempo relativamente breve e una volta che l'utente verrà avvisato che il blocco è scaduto e sarà costretto a riavviare la modifica dopo che i dati sono stati aggiornati.
Questo sarebbe un buon metodo per prevenire la sovrascrittura di dati non aggiornati? È eccessivo (non mi aspetto che l'applicazione venga utilizzata da più di alcune persone contemporaneamente su un singolo account).
(Un'altra preoccupazione che ho sono 2 persone che ottengono un lucchetto per lo stesso oggetto, tuttavia credo che sia una condizione di gara con cui mi trovo a mio agio.)