Je crée une application de bureau qui conserve les données dans le cloud. Une préoccupation que j'ai est de commencer à modifier un élément dans l'application et de le laisser pendant un certain temps, ce qui rend les données obsolètes. Cela peut évidemment aussi se produire si 2 personnes essaient de modifier le même élément en même temps. Quand ils ont terminé leur édition et veulent enregistrer les données, je devrais soit écraser ce qui existe actuellement dans la base de données, soit vérifier qu'ils ont commencé à éditer après la dernière modification et les forcer à annuler leurs modifications ou peut-être leur donner la possibilité de risquer écraser les changements de quelqu'un d'autre.
J'ai pensé à ajouter un champs is_locked
et lock_timestamp
à la table DB. Lorsqu'un utilisateur commence à modifier l'élément, la ligne devient is_locked
true et définit l'horodatage du verrouillage sur l'heure actuelle. J'aurais alors un certain temps pendant lequel le verrou est maintenu (ex. 5 minutes). Si quelqu'un d'autre tente de modifier l'élément, il recevra un message lui indiquant que l'élément est verrouillé et que le verrouillage expire automatiquement. Si l'utilisateur s'éloigne pendant la modification, le verrou expirera automatiquement après une période de temps relativement courte et une fois qu'il le fera, l'utilisateur sera averti que le verrou a expiré et sera obligé de redémarrer la modification après la régénération des données.
Serait-ce une bonne méthode pour empêcher l'écrasement des données périmées? Est-ce exagéré (je ne m'attends pas à ce que l'application soit utilisée par plus de quelques personnes simultanément sur un seul compte).
(Une autre préoccupation que j'ai est que 2 personnes obtiennent un verrou pour le même article, mais je pense que c'est une condition de course avec laquelle je suis à l'aise.)