2011-02-24 76 views
0

我想知道對於速度和精度做到這一點的最好辦法,這是我們的應用程序的功能:高併發計數器(信用管理)

  1. 檢查信用卡是1或以上(預檢查)
  2. 處理作業(需要一點時間)
  3. 工作完成後,檢查是否仍然存在學分,完成作業(積分數1或以上)
  4. 扣除信用
  5. 完成工作

該過程重複50,000次以上(使用隊列系統進行線程化),並且當前正在使用mysql數據庫來處理計數器。

除了mysql數據庫樣式計數器之外,還有更好的解決方案嗎?

我想喜歡的模式:

user_id | credit_count 

這是我應該用最好的模式? 線程只是鎖定行而不是扣除信用,而不是釋放下一個線程的行。

回答

0

不確定您在進程中使用哪種技術。

您可以以某種方式累積您的進程的語言中的計數,並且只能將計數器不時地轉儲到數據庫。 你不會增加每個請求的計數,但每n個請求...

+0

該應用程序在JAVA中,並且還在其他服務器上運行它的多個實例。此外它的重要性在於知道用戶在開始該過程之前是否還有任何信用。 – James 2011-02-24 12:20:43

0

有沒有看過memcached?如果你想堅持使用mysql,你可以將表更改爲內存表。

read this

+0

是的,我以前使用過memcached,但是我覺得它在我的應用程序中不會很好,因爲它需要保持數據存儲區中的用戶信用數量(我們可以在重新啓動時將其釋放)等。在線程應用程序中我沒有看到這個工作,因爲它會導致它不正確的計數。 – James 2011-02-24 17:22:16