2013-07-04 48 views
0

我實現一個事件預訂網站。從商店的角度來看,只有當座位實際預訂給顧客時,座位才能從數據庫中減少。併發事件預訂

我的問題是關於併發的。例如,假設存在可用座位數量爲1的事件。

如果2個用戶試圖同時購買同一個活動座位,當其中一位顧客成功支付了座位時,我希望第二個客戶不能支付 座位,因爲座位已被預訂。

是否有可能作出這樣的保留,以便其他用戶不能預訂?

+0

是的,你可以。在你的數據庫查詢中,檢查seatLeft'insert into booking values(...,...)where seatsLeft> 0',你只需要檢查插入的行數,然後向用戶顯示一個合適的消息。 – Multithreader

+0

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

回答

0

如果你的數據庫並不能保證你這樣的併發支持(我不是那些專家),我會建議落實爲您的應用特殊的內部服務,將負責預訂座位。

所有異步請求訂艙將被放入隊列同步,這將被BookingService消耗。然後結果消息將被髮送給發行者。

這樣一來,用一個單一的預定實體,不會有種族可能,因此沒有重複預訂。