2011-06-13 95 views
1

我正在構建訂購資源的網站。我有一個資源池(比如10個資源),當用戶想要訂購一個資源時,我檢查哪一個是免費的,並將其分配給用戶。 我使用MYSQL InnoDB表和鎖定使用從池中鎖定資源,同時允許其他人從資源池中訂購其他資源

update ResourceTable SET SOMEFIELD='1' 

但是行,如果第一個事務還不完,現在其他用戶正在搜索(使用

select * FROM ResourceTable WHERE SOMEFIELD!='1' LOCK IN SHARE MODE 

,用戶正在等待第一筆交易完成(雖然還有其他免費資源) 如果我刪除了LOCK IN SHARE MODE,我將得到一個應該被鎖定的資源

如何讓多個用戶訂購資源urces沒有等待?

(I雖然不知何故選擇未鎖定的行 - >在不存在MYSQL)

回答

0

的溶液可以是改變SOMEFIELD的值之前鎖定整個表。更新這個值是一個非常快速的操作,所以即使有幾個到你的站點的傳入請求需要幾乎同時訪問資源池,並且有一個請求正在改變SOMEFIELD的過程中,其他請求只能等待一小部分其次是釋放桌上的鎖。

+0

謝謝,但問題是,我正在尋找一個解決方案沒有鎖等待(因爲有其他免費資源) – Guy 2012-09-27 11:36:22