2010-12-01 5 views
2

J'ai créé un programme de planification de bureau qui utilise jQuery pour publier dans un fichier PHP qui insère ensuite un rendez-vous dans une base de données pgSQL. Ce n'est pas encore arrivé mais je peux prévoir ce problème à l'avenir - deux employés de bureau essaient de fixer un rendez-vous dans le même créneau en même temps, créant une condition de concurrence et un ensemble de données clients serait perdu, ou au moins Je devrais le sortir d'un journal. Je me demandais s'il y avait un drapeau que je pourrais définir dans la base de données, si j'ai besoin de créer un programme de gatekeeper pour contrôler les connexions du serveur, ou s'il y a une sorte de mutex/lock/sémaphore que je peux utiliser avec javascript/php/sql pour empêcher l'apparition de cette condition de concurrence.Ajax/JQuery accès à la base de données/mutex

Répondre

3

Vous pouvez le verrouiller avec un indicateur de base de données, ou une meilleure stratégie consiste à détecter les collisions, car cela ne se produit que dans de rares cas.

Pour détecter le problème, vous pouvez enregistrer un horodatage dans la base de données contenant la dernière mise à jour. Envoyez-le avec le formulaire et comparez l'horodatage avant de mettre à jour l'enregistrement. Si l'horodatage a changé, présentez l'utilisateur avec toutes les données et demandez-lui ce qu'il veut faire. Cela permet au deuxième utilisateur qui enregistre de modifier ses modifications en fonction des données précédemment enregistrées s'il le souhaite.

Il existe d'autres moyens de résoudre ce problème, et la bonne solution dépend de la nature du problème spécifique.

+0

Merci pour l'idée de l'horodatage! Il est facilement implémenté en plus de mon calendrier actuel. Je vais essayer, puis mettre à jour comment ça se passe. – busbina

Questions connexes