Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment éviter les conditions de concurrence lors de la réservation d'hôtel en ligne

Une solution consiste à ajouter deux colonnes à une table de la base de données. Une colonne est l'identifiant de session ou l'identifiant de l'utilisateur ou quoi que ce soit de l'utilisateur qui se voit proposer la salle. La deuxième colonne est un horodatage indiquant quand cette offre expirera.

Ensuite, dans votre application, affichez uniquement les salles dont l'horodatage a expiré dans la colonne de mise en attente. (Définissez l'horodatage initial sur 0 pour qu'il commence par expirer.) Lorsqu'une salle est sélectionnée, vérifiez à nouveau la colonne. S'il y a un horodatage non expiré, l'utilisateur reçoit un message "désolé, vous avez été trop lent". Sinon, placez-y un horodatage de 15 minutes dans le futur ou autre, et continuez.

Vous voyez souvent cela sur les sites de voyage et les sites d'achat de billets où il est écrit quelque chose comme "Nous vous réservons ces sièges pendant encore 14 minutes. Veuillez terminer la transaction d'ici là ou elle sera libérée bla bla bla."