2013-03-12 33 views
1

背景:架構需要在AJAX/PHP/MYSQL中減少mysql連接

我通過AJAX將變量傳遞給php文件。 php文件連接到服務器並檢索返回到javascript的結果。每次用戶點擊請求按鈕(大約每5秒)就會發生這種情況。因此,對於每個用戶,每5秒調用一次php文件(以及mysql連接)。

ISSUE:

正如上述可知,MySQL的連接的數量是不切實際高。

問題:

是否有更好的架構,而不是有這麼多的MySQL連接,我寧願有較少的連接。

enter image description here

我看了一下mysql_pconnect一點點。但是,如果我必須升級,會發生什麼情況,因爲我讀了mysqli不支持它的地方?一個mysql_pconnect句柄可以處理多少個查詢?如果有人建議mysql_pconnect那麼如何實現它?

+0

你有哪個版本的PHP。 pconnect從5.5.0開始已棄用,請查看[man](http://php.net/manual/en/function.mysql-pconnect.php)頁面 – fredrik 2013-03-12 06:46:20

+0

我的版本支持pconnect(5.1)。這就是爲什麼我想知道當我需要升級時會發生什麼。 – user1517108 2013-03-12 06:50:37

+0

當您升級到5.5以上時,您需要從pconnect遷移到另一種方法。 – fredrik 2013-03-12 06:52:51

回答

1
Is there a better architecture where instead of having so many 
mysql connections, I can rather have fewer connections. 

不知道,但我認爲對你來說,建議的pconnect是最好的選擇。除非你現在可以使用mysqli或PDO_mysql?

I have read a little bit about mysql_pconnect. 
But what happens if I have to upgrade since I read somewhere that mysqli doesnt support it? 

當升級到PHP 5.5以上時,您可能需要更改方法。

How many queries can a single mysql_pconnect handle? 

無限制,只要連接保持有效。如果沒有可用的空閒連接,則創建一個新連接。

If anyone suggests mysql_pconnect then how to implement it? 

將您當前的mysql_connect調用更改爲mysql_pconnect。這應該是全部。

+0

我不認爲changin gto mysql_pconnect應該這樣做,因爲它不會解決降低多個連接數量的問題。不知何故,我需要一個方法來保存連接標識符,並在將來對php文件的請求中重用它。你不這麼認爲嗎? – user1517108 2013-03-12 07:05:27

+0

[pconnect](http://php.net/manual/en/function.mysql-pconnect.php)將爲您保存連接標識符。第二,當腳本執行結束時,與SQL服務器的連接將不會關閉。相反,鏈接將保持打開以供將來使用(mysql_close()不會關閉由mysql_pconnect()建立的鏈接)' – fredrik 2013-03-12 07:06:30

+0

但是當再次調用php時,它不會創建新的pconnect而不是重新使用舊的pconnect? – user1517108 2013-03-12 07:07:58

1

您正在尋找的是用於數據庫連接的單例設計模式。但它也有折衷。數據庫單例設計的代碼示例如下。

define('DB_NAME', "test"); 
define('DB_USER', "root"); 
define('DB_PASS', "rootpass"); 
define('DB_HOST', "localhost"); 

class Connection{ 
    private static $connection_; 

    private function __construct(){ 
     $con = mysql_connect(DB_HOST, DB_USER, DB_PASS); 
     mysql_select_db(DB_NAME, $con); 
     Connection::$connection_ = $con; 
    } 

    public static function getConnection(){ 
     if(!Connection::$connection_) 
      new Connection; 
     return Connection::$connection_; 
    } 

} 

$con = Connection::getConnection(); 

Read more

php singleton database connection, is this code bad practice?

How static vs singleton classes work (databases)

你可以找到噸例子和信息,如果你谷歌。希望這有幫助

+0

是的。感謝您給我一個出發點。將幫助我自己的其他信息。 – user1517108 2013-03-12 06:51:42

+0

這對@ user1517108不起作用,因爲你有PHP 5.1。在PHP berfore 5.3中,單例不可能。根據靜態關鍵字 – fredrik 2013-03-12 06:56:25

+1

@ user1517108的手冊頁,pconnect本質上是一個連接池。由PHP管理。正常的連接池是不可能的,因爲在腳本終止時池會被銷燬......在PHP 5.1中沒有辦法持久化用戶定義的對象。 – fredrik 2013-03-12 07:12:36