2013-02-26 65 views
0

我正在尋求在java中設計多線程應用程序的算法,其中每個線程都將數據寫入數據庫。我想控制每秒寫入數據庫的記錄數。java速率限制邏輯

應用程序獲取RPS(記錄每秒)參數並大致生成那麼多負載。

+2

你做了什麼工作?什麼研究?你有什麼嘗試? – Gray 2013-02-26 19:28:24

+2

各種想法在這裏:http://stackoverflow.com/questions/14638349/java-thottling-mechanism – irreputable 2013-02-26 19:28:48

+5

耶穌,這不是一個真正的問題?當然這個問題沒有很好的定義,但這是所有問題的缺陷。它是發現問題的質量保證過程的一部分。這個特別的問題是相當合理的,讀者基本上明白了什麼是追求,讀者可以提出有用的想法。 – irreputable 2013-02-26 20:16:46

回答

3

如果你可以使用外部庫,番石榴有可能根本你問這是什麼一個RateLimiter類:

速率限制器經常被用來限制在哪一些物理或邏輯資源被訪問的速度。這與Semaphore相反,它限制了併發訪問的數量而不是速率。

+0

這個解決方案可能會浪費機會 - 如果我每天被允許喝兩杯啤酒,並且在頭16個小時內我沒有喝酒,我會失去1杯啤酒。目前還不清楚這對於OP的問題是好還是壞。 – irreputable 2013-02-26 19:37:29

+0

@irreputable他的要求不是很精確 - 這可能或可能不是一個好的解決方案。但它會是一種控制每秒寫入db的記錄數量的方法。 – assylias 2013-02-26 19:38:43

+1

謝謝Assylias。它有助於。那些關閉了我的問題,說它沒有準確定義的人,應該遠離訪問這個線程。 – 2013-02-26 21:56:48

1

您可以創建一個允許對象的BlockingQueue並且有一個額外的幫助程序線程,該線程每秒向隊列添加一次額外許可的RPS數量。寫入線程會阻塞隊列,並且不會寫入,直到他們成功地從隊列頂部彈出一個許可證。

+0

它可以在空閒時間累積許可證,然後在一秒鐘內釋放它們。它確實長時間工作。問題往往是要求不準確。 – irreputable 2013-02-26 19:31:59

+0

您可以添加許多功能,最大尺寸,以便在一秒鐘內更均勻地分散負載,並提供大量創意。雖然問題不是那麼具體! – Affe 2013-02-26 19:34:12