2008-09-02 69 views
60

使用PHP時可能會緩存數據庫連接,就像在J2EE容器中一樣?如果是這樣,怎麼樣?PHP中的連接池

+0

這個怎麼樣? https://github.com/junamai2000/mod_namy_pool – nam 2012-03-01 22:25:19

+0

您是否使用[mysql_pconnect()](http://www.php.net/mysql_pconnect)查看了持久連接? – 2008-09-02 15:44:57

回答

0

您不能手動實例化連接池。

但是,您可以使用「內置」連接池與mysql_pconnect功能。

8

我想你使用的是mod_php,對不對?

當一個PHP文件完成執行時,它的所有狀態都會被終止,因此沒有辦法(在PHP代碼中)執行連接池。相反,你必須依靠擴展。

您可以mysql_pconnect這樣您的連接在頁面結束後不會關閉,這樣它們就可以在下一個請求中被重用。

這可能只是你需要的,但這與連接池不同,因爲沒有辦法指定維護打開的連接數。

乾杯。

+3

連接可以被不同的用戶重用嗎?如果是這樣,爲什麼手冊說我們應該配置MySQL以避免連接太多? – omg 2009-08-30 14:28:40

43

在php中沒有連接池
mysql_pconnect and 連接池是兩個不同的東西。 有很多與mysql_pconnect有關的問題,首先您應該閱讀手冊並小心使用它,但這不是連接池。

連接池是應用程序服務器管理連接的一種技術。當應用程序需要連接時,它會嚮應用程序服務器請求連接,如果有空閒連接,應用程序服務器將返回其中一個連接的連接。

我們可以爲請到通過下面的鏈接做的PHP連接縮放:http://www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html

所以在PHP中沒有連接池。

由於Julio說apache會在當前請求結束時釋放所有資源。你可以使用mysql_pconnect,但是你受限於這個功能,你必須非常小心。其他選擇是使用單例模式,但沒有一個是共享。

這是一個很好的文章:http://blogs.oracle.com/opal/2007/01/highly_scalable_connection_poo.html

而且閱讀這一個http://www.apache2.es/2.2.2/mod/mod_dbd.html

+7

沒有連接池?哇。 – Justin 2011-07-13 22:35:18

10

持久連接都沒有像連接池。如果您在同一個請求/腳本執行上下文中創建多個數據庫連接,則只會重用php中的持久連接。在大多數典型的web dev場景中,如果您使用mysql_pconnect,您將最大限度地提高連接速度,因爲您的腳本將無法在下次請求時獲取對任何打開連接的引用。在php中使用db連接的最佳方式是創建一個db對象的單例實例,以便在腳本執行的上下文中重用連接。這仍然會導致每個請求至少有1分貝連接,但是它比每個請求連接多個分貝連接要好。

由於php的性質,在php中沒有真正的db連接池。Php不是一個應用程序服務器,它可以在請求之間坐在那裏,並管理對開放連接池的引用,至少在沒有某種重大黑客入侵的情況下。我認爲理論上你可以在php中編寫一個應用服務器,然後將其作爲一個命令行腳本運行,只需要在後臺放置一些數據庫連接,並將引用傳遞給其他腳本,但我不會知道這在實踐中是否可行,如何將命令行腳本中的引用傳遞給其他腳本,並且我懷疑它即使可以實現也會表現良好。無論如何,這主要是猜測。我只是注意到其他人發佈到apache模塊的鏈接,以允許prefork服務器(如php)的連接池。看起來有趣: https://github.com/junamai2000/mod_namy_pool#readme