2012-01-05 39 views
6

默認情況下,在Resque中,父進程分支和子進程創建到數據庫的新連接。如何使用Resque共享父代和子代之間的MySQL連接?

這可以工作,但如果你有幾十個工人,MySQL不能保持很多的連接打開,並開始引發錯誤。

有什麼解決方案讓孩子們使用他們父母的MySQL連接?

回答

3

不幸的是,沒有一種安全的方法可以將父連接的MySQL連接共享給兒童。我認爲你有兩個問題需要考慮:

  1. 最簡單的解決方法是調整你的MySQL服務器,以便它能夠接受更多的連接(即:http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html)。
  2. 查看Resque和/或設計的替代方案(即:beanstalkd,Redis等),可以避免創建到MySQL服務器的多個連接。
+0

我不得不使用大量的連接,以便能夠儘可能快地處理大量的數據。更改爲豆漿機或任何其他排隊系統不會改變它。使用redis進行存儲是個不錯的主意,但Resque使用它來排隊,這非常完美。 – marcgg 2012-01-12 17:27:21

+0

您確定除了允許更多連接之外沒有其他方法嗎? – marcgg 2012-01-12 17:29:58

+1

另一種選擇可能是使用「resque-jobs-per-fork」鏈接:http://github.com/samgranieri/resque-jobs-per-fork。這將允許您爲每個叉處理多個作業,從而減少所需的併發連接數。此主題也可能有所幫助:http://librelist.com/browser//resque/2010/6/28/reducing-database-churn/#fd6c9fec1ed29f2f06e10ce96b578dd0。 – 2012-01-12 18:44:10