好日子所有,訪問幾乎在同一時間同一數據超過1級的客戶
我在C#.NET 4.0框架的工作,和數據庫爲Microsoft SQL Server 2008 R2。
有一個系統讓用戶做禮物贖回。當用戶點擊「兌換」按鈕,系統會:在禮品清單
- 首先檢查之前更新customer_gift表,
- 和更新gift_inventory表爲特定的禮物。
如果庫存小於0,它會提示錯誤信息告訴用戶禮品已經完成,然後取消兌換過程。
中有以下條件的問題發生:
禮物只有在庫存1個數量現在。
客戶傑克點擊「兌換」按鈕2013-11-11 09:22:27.780
。 Customer Jess點擊「兌換」按鈕2013-11-11 09:22:27.497
。
他們點擊「兌換」按鈕的時間不同只有0.0283秒。
因此,也許不同的時間太短,他們都被成功兌換禮品,因爲該系統(第一客戶)更新gift_inventory表,系統(第二個客戶)已獲得來自庫存數據(禮品之前A),因此,系統仍然讓第二個客戶繼續,因爲庫存仍然等於1.
我想出了一種方法來解決這個問題,其描述如下: 創建一個新的列gift_inventory表,名稱lock
,數據類型爲Boolean
。當客戶點擊兌換按鈕,並在系統檢查禮品庫存之前,將布爾值設置爲true
。因此,如果第二個客戶嘗試訪問禮品庫存,並發現該系統會等待1秒鐘,然後再次嘗試訪問,直到lock
= false
,然後才訪問並獲取庫存數據。
但是,我認爲這是一個很好的解決方案。我認爲這可能會導致數據庫變慢。
任何想法和建議?
一句話: 「交易」 - 谷歌它。 – Joe