2013-03-12 56 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