Estoy creando una aplicación de escritorio que persiste los datos en la nube. Una de las preocupaciones que tengo es comenzar a editar un elemento en la aplicación y dejarlo por un tiempo haciendo que los datos se vuelvan obsoletos. Obviamente, esto también puede suceder si 2 personas intentan editar el mismo elemento al mismo tiempo. Cuando terminen su edición y quieran guardar los datos, necesitaría sobrescribir lo que existe actualmente en la base de datos o verificar que comenzaron a editar después del último cambio y forzarlos a descartar sus cambios o quizás darles la opción de arriesgarse sobrescribir los cambios de otra persona.
Pensé en agregar campos is_locked
y lock_timestamp
en la tabla DB. Cuando un usuario comienza a editar el elemento, la fila cambiará is_locked
a verdadero y establecerá la marca de tiempo de bloqueo a la hora actual. Entonces tendría algo de tiempo durante el cual se mantiene el bloqueo (por ejemplo, 5 minutos). Si alguien más intenta editar el elemento, recibirá un mensaje que dice que el elemento está bloqueado y cuando el bloqueo caduca automáticamente. Si el usuario se retira mientras edita, el bloqueo expirará automáticamente después de un período de tiempo relativamente corto y una vez que lo haga, se le advertirá al usuario que el bloqueo ha expirado y se verá obligado a reiniciar la edición después de que se actualicen los datos.
¿Sería este un buen método para evitar sobrescribir datos obsoletos? Es excesivo (no espero que la aplicación sea utilizada por más de unas pocas personas al mismo tiempo en una sola cuenta).
(Otra preocupación que tengo es que 2 personas obtengan un candado para el mismo artículo, sin embargo, creo que es una condición de carrera con la que me siento cómodo).