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, tendría que sobrescribir lo que existe actualmente en la base de datos o verificar que comenzaron a editar después del último cambio y obligarlos a descartar sus cambios o quizás darles la opción de arriesgarse. sobrescribir los cambios de otra persona.
Pensé en agregar los campos is_locked
y lock_timestamp
a la tabla de base de datos. Cuando un usuario comienza a editar el elemento, la fila cambiará is_locked
a verdadero y establecerá la marca de tiempo de bloqueo en la hora actual. Tendría una cierta cantidad de tiempo durante el cual se retiene la cerradura (por ejemplo, 5 minutos). Si alguien más intenta editar el elemento, recibirá un mensaje indicando que el elemento está bloqueado y cuando el bloqueo expira automáticamente. Si el usuario se retira mientras edita, el bloqueo caducará 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 caducado y se verá obligado a reiniciar la edición una vez que se actualicen los datos.
¿Sería este un buen método para prevenir la sobrescritura de 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 obtienen un candado para el mismo artículo, sin embargo, creo que es una condición de carrera con la que me siento cómodo).