2009-03-20 18 views
2

Je développe une application php/mysql qui gère plusieurs utilisateurs simultanés. Je pense à la meilleure approche à adopter pour verrouiller/mettre en garde contre les enregistrements en cours de visionnage/d'édition.verrouillage de l'enregistrement de l'application multi-utilisateur - meilleure méthode?

Le scénario à éviter est deux utilisateurs qui regardent l'enregistrement, l'un effectuant un changement, puis l'autre faisant de même - avec la possibilité qu'un changement pourrait remplacer le précédent. Dans les dernières versions de WordPress, ils utilisent une certaine méthode pour détecter cela, mais cela ne semble pas totalement fiable - renvoyant souvent des faux positifs, du moins selon mon expérience. Je suppose qu'une certaine forme d'ajax doit être en place pour «pinguer» l'application et lui faire savoir que l'enregistrement est toujours en cours de visualisation/modification (sinon, un utilisateur peut simplement fermer la fenêtre de leur navigateur, puis comment l'application sache que). Une autre solution que j'ai pu voir est de vérifier la dernière mise à jour quand un enregistrement est soumis pour mise à jour, pour voir si entre temps il a été mis à jour ailleurs - et ensuite offrir à l'utilisateur le choix de continuer ou d'abandonner ses propres changements . Peut-être que j'abuse du mauvais arbre en termes de solution - quelles sont les expériences des gens dans la mise en œuvre de cette exigence (ce qui doit être assez commun)?

Répondre

6

Je ferais ceci: Conserver le temps de la dernière modification sous la forme d'édition. Comparer cette fois sur la soumission avec l'heure stockée dans la base de données. Si elles sont identiques, verrouillez la table, mettez à jour les données (avec l'heure de modification) et déverrouillez la table. Si les heures sont différentes, informez-en l'utilisateur et demandez l'étape suivante.

+0

C'est certainement l'approche que je préconisais - beaucoup plus rapide à mettre en œuvre que toute autre solution de luxe, et plus fiable. – BrynJ

+0

Vous pouvez toujours construire la solution AJAX en plus de cette idée - ping ou demander l'horodatage soit juste avant de sauvegarder ou régulièrement, puis demander à l'utilisateur ce qu'ils aimeraient faire - peut-être donner une option de 'sur-écriture' si leur niveau d'utilisateur est tel qu'ils sont autorisés. – Paul

1

Bonne idée avec la comparaison d'horodatage. Il est peu coûteux à mettre en œuvre, et c'est une opération peu coûteuse à exécuter en production. Il suffit d'écrire la logique pour renvoyer à l'utilisateur le message d'état indiquant que son écriture/mise à jour ne s'est pas produite parce que quelqu'un l'a battu. Peut-être envisager de stocker le nom d'utilisateur sur chaque mise à jour dans un champ appelé quelque chose comme «LastUpdateBy», et le renvoyer à l'utilisateur dont la mise à jour a été préemptée. Juste un peu de délicatesse pour l'utilisateur. Nice dans le sens de l'entreprise, peut-être pas dans un environnement où il pourrait ne pas être approprié.

+0

Bonne idée avec la notification de l'utilisateur - Je stocke déjà un horodatage et un ID utilisateur de la dernière mise à jour. – BrynJ