2012-06-21 52 views
0

我正在建立一個php/mysql的平臺,允許用戶以一定比例的產品。基本上,他們選擇他們想要出價的百分比以及他們想要在例如1.2。同步數據庫更新/檢查競價平臺

我遇到的問題是,如果同一產品同時出現多個出價,則需要對出價進行排隊,以便只有在有效出價處理完畢後才能處理。例如,如果有1.2%的可用價值20%,兩個用戶同時以1.2的價格出價20%,則每個出價的過程爲: 1 -----選擇當前出價 2 -----如果出價仍然可用 3 -----出價

這裏的問題是,如果兩個「檢查是否可用」都發生在任何一個「地點出價」之後,那麼兩個出價都會去通過並有效地導致股票發行。

有沒有排隊這個過程的方法,所以在下一個可以運行之前,整個步驟1-3都會發生。

我最初的想法是使用一個緩存表來存儲所有的出價,然後每隔幾秒鐘運行一個cron,它將按緩存表中ID的順序處理並相應地通知,但是這看起來似乎不可行作爲服務器的高流量系統會受到打擊。

任何幫助非常讚賞

+0

閱讀關於交易和鎖(在mysql中) – zerkms

+0

由於檢查和更新之間有一個php層,數據庫的格式並不重要,因爲2個查詢必須運行任何1個出價,第一個檢查是否他們是可用性,第二個實際出價。由於地方出價是增加一個新的行,而不僅僅是更新一個現有的行,那麼行被鎖定的面將不會有所作爲 –

+0

這應該由數據庫來解決,因爲具體數據庫提供了所有的工具來處理高併發性(它們是事務和鎖) – zerkms

回答

0

我在PHP級別通過首先將出價注入爲「已接受的出價」來解決此問題,以便任何後續出價都會失敗。然後,我運行支票查看出價是否正常,如果出價沒有被移除,是否按照新的出價按要求更新了表格。

0

如果兩個出價永遠無法是相同的我會在數據層解決它。基於item_id,bid_value和其他任何必須唯一的項目在出價表上創建一個唯一的關鍵字。第二次插入將失敗,並且您可以讓用戶知道他們被毆打到帖子

+0

不錯的想法,但不幸的是,如果在拍賣開始時有100%可用,則對於兩個用戶來說完全可行的是將兩個10%的出價放置在1.2,因爲這將剩下80%可用在1.2 –