2011-02-27 60 views
2

我正在運行一個rails 2.3.5應用程序,它支持我將mysql連接集中到我的數據庫。但我記得讀到我的雜種服務器是單線程的。擁有連接池到單線程應用程序有什麼意義?有沒有辦法多線程我的應用程序?導軌連接池如何工作?

另外,不要連接池明白,紅寶石1.8具有「綠色環保」的主題?

乾杯!

回答

5

管理連接

連接池的像的Mongrel /乘客/等單線程服務器的主要好處是,連接建立/保持在機架處理程序以外的主要的Rails請求的處理。這允許連接被建立一次或多次,因爲它以不同的方式被使用。目標是重新使用已建立的連接並儘量減少連接數量。這應該防止在給定的請求處理週期內甚至可能在請求之間重新連接(如果我沒有記錯的話)。

多個併發連接

雖然大多數使用情況(雜種/乘客)是單線程的,只能使用一次一個單一的連接 - 有JRuby和環境具有完全多線程/應用服務器支持。 Rails已經被線程安全的,因爲2.2

TL; DR:

池自動建立連接。有些人確實使用來自池的多個併發數據庫連接。

+0

這是否意味着,如果我有在MySQL配置150個MAX_CONNECTIONS在池中軌道的每一個連接創建將消耗這些連接的150最大的一個? 換句話說,如果我的應用程序是使用我可以設置在database.yml中池等於max_connections的數量DB中的唯一一個? – xentek

+2

只有當您有一個應用程序實例時纔會這樣。如果您有20名工人一個乘客服務器,每一個都可能消耗到最大池大小。 – Winfield

+0

換句話說,'pool * workers = max_connections'? – xentek