2011-02-16 90 views
2

在Java世界中,應用程序服務器非常適合集中「昂貴」的資源,如數據庫連接。另一方面,在動態語言中,大多數堆棧與池化資源,尤其是數據庫連接無關。數據庫連接池是否重要?

E.g.對於流行的PHP + MySQL組合,我很少見到它與持久連接一起使用,這可以被認爲是窮人聯網連接。

如果池DB連接的概念並不廣泛實施,這是否意味着性能/可擴展性的收益可能不是那麼重要,在現實生活中的部署?

回答

3

的主要原因連接池是建立在第一種情況下連接的開銷。我已經看到這在過去需要0.5秒。

在高事務環境,保持連接打開,併發送多個請求下的連接,一前一後的能力有顯著的節約。因此,如果您忽略這種有用的模式,您可能無法在較低的事務數據庫中看到收益,但是您的應用程序不會擴展。

這也有助於在一個更加清晰的方式打開的連接管理的數量。

0

如果池DB 連接的概念並不是廣泛 實現的,這是否意味着 性能/可擴展性的收益可能 不那麼重要,在 現實生活中的部署?

這只是意味着沒有內置的PHP連接池。並不意味着你不能使用一個,但是,例如在Postgres中你可以使用PGPool。

0

連接輪詢經常使用,因爲一些數據庫廠商限制,你必須根據你的許可的特定數據庫的連接數。開源數據庫沒有這種限制,因爲它們是免費的。所以這對於MySQL來說並不是什麼問題。

另一個原因是使用連接查詢是限制數據庫服務器當前連接數,因爲每個新的連接消耗大量的內存,你不希望用盡你的服務器內存。

持續連接的問題是,它們永遠不會關閉,直到客戶端進程死亡。客戶端進程實際上是處理PHP請求的Web服務器進程。因此,如果您將Web服務器配置爲限制同時發生的請求數量,則還會限制已打開的持久數據庫連接的數量。您可以在Apache中將MaxClients參數設置爲一個合理的值,而不會耗盡您的服務器RAM。

順便說一句,將所有靜態內容(CSS,JavaScript,圖像等)移動到單獨的多線程Web服務器(Nginx,lighttpd等)也是明智之舉,這樣同時用戶訪問不會讓你的Apache分支到很多進程。

+0

我不確定第一段是否爲真。連接是重量級對象,因此需要彙集。並不是特定的數據庫服務器不能處理100或1000的連接。 – cherouvim 2011-02-16 21:44:58

0

我的一般觀點是連接池一般不用於速度不像其他問題那麼重要的環境中。例如,AOLServer使用動態語言(Tcl),但具有高性能並使用連接池。