Estou criando um aplicativo de desktop que persiste os dados na nuvem. Uma preocupação que tenho é começar a editar um item no aplicativo e deixá-lo por um tempo, fazendo com que os dados fiquem obsoletos. Obviamente, isso também pode acontecer se duas pessoas tentarem editar o mesmo item ao mesmo tempo. Quando eles terminam a edição e desejam salvar os dados, eu precisaria sobrescrever o que existe atualmente no banco de dados ou verificar se eles começaram a editar após a última alteração e forçá-los a descartar as alterações ou talvez dar a opção de arriscar substituindo as alterações de outra pessoa.
Pensei em adicionar um campo is_locked
e lock_timestamp
na tabela DB. Quando um usuário começa a editar o item, a linha muda is_locked
para true e define o registro de data e hora do bloqueio para o horário atual. Eu teria então uma quantidade de tempo durante a qual a trava é mantida (por exemplo, 5 minutos). Se alguém tentar editar o item, receberá uma mensagem informando que o item está bloqueado e quando o bloqueio expira automaticamente. Se o usuário se afastar durante a edição da trava expirará automaticamente após um período relativamente curto e, uma vez feito, o usuário será avisado de que a trava expirou e será forçado a reiniciar a edição após a atualização dos dados.
Esse seria um bom método para evitar a substituição de dados obsoletos? É um exagero (não espero que o aplicativo seja usado por mais de algumas pessoas simultaneamente em uma única conta).
(Outra preocupação que tenho são duas pessoas que travam o mesmo item, mas acredito que essa é uma condição de corrida com a qual me sinto confortável.)