2013-07-04 7 views
0

J'implémente un site de réservation d'événements. Du point de vue de l'atelier, le siège doit être réduit de la base de données seulement lorsque le siège a été réservé au client.Concurrence dans la réservation d'événements

Ma question concerne la concurrence. Par exemple, supposons qu'il existe un événement dont la quantité de siège disponible est 1.

Si 2 utilisateurs essayent d'acheter le même siège d'événement en même temps, lorsqu'un de ces clients a payé le siège avec succès, je veux le second le client ne peut pas payer le siège parce que le siège est déjà réservé.

Est-il possible de faire une telle réservation afin que les autres clients ne puissent pas réserver?

+0

oui sûr que vous pourriez. Dans votre requête de base de données, vérifiez si seatsLeft 'insère dans les valeurs de réservation (..., ...) où seatsLeft> 0' vous avez juste besoin de vérifier le nombre de lignes insérées et ensuite afficher un message approprié à l'utilisateur. – Multithreader

+0

voir http://stackoverflow.com/questions/7455726/handling-the-concurrent-request-while-persisting-in-oracle-database –

Répondre

0

Si votre base de données ne vous garantit pas un tel support de concurrence (et je ne suis pas un expert sur ceux-ci), je suggère de mettre en place un service interne spécial pour votre application.

Toutes les demandes de réservation asynchrones seraient placées dans une file d'attente synchronisée, qui serait consommée par BookingService. Ensuite, le message de résultat serait envoyé à l'émetteur. De cette façon, avec une seule entité de réservation, il n'y aura pas de courses possibles et donc pas de double réservation.