【问题标题】:Architecture needed to reduce mysql connections in AJAX/PHP/MYSQL减少 AJAX/PHP/MYSQL 中 mysql 连接所需的架构
【发布时间】:2013-02-27 14:14:24
【问题描述】:

背景:

我通过 AJAX 将变量传递给 php 文件。 php 文件连接到服务器并检索它传递回 javascript 的结果。每次用户单击请求按钮时都会发生这种情况(大约每 5 秒)。因此对于每个用户,php 文件(以及 mysql 连接)每 5 秒调用一次。

问题:

如上所示,mysql 连接数高得不切实际。

问题:

有没有更好的架构,而不是拥有这么多的 mysql 连接,我宁愿拥有更少的连接。

我已经阅读了一些关于 mysql_pconnect 的内容。但是如果我必须升级,因为我在某个地方读到 mysqli 不支持它,会发生什么?单个 mysql_pconnect 可以处理多少个查询?如果有人建议 mysql_pconnect 那么如何实现呢?

【问题讨论】:

  • 你有哪个版本的 PHP。 pconnect 自 5.5.0 起已弃用,请查看 man 页面
  • 我的版本支持 pconnect (5.1)。这就是为什么我想知道当我需要升级时会发生什么。
  • 当您升级到 5.5 以上时,您需要从 pconnect 迁移到另一种方法。

标签: php mysql web-architecture


【解决方案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。应该就是这些了。

【讨论】:

  • 我不认为更改 gto mysql_pconnect 应该这样做,因为它不会解决减少多个连接数的问题。不知何故,我需要一种方法来保存连接标识符并在以后对 php 文件的请求中重用它。你不这么认为吗?
  • pconnect 将为您保存连接标识符。 Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use ( mysql_close() will not close links established by mysql_pconnect()).
  • 但是当再次调用 php 时,它不会创建新的 pconnect 而是重新使用旧的 pconnect?
  • 根据手册页,它应该重用旧的。如果它们存在。假设用户名/密码和其他连接选项与它相同。检查man页面
  • 哦..你是对的。我的愚蠢错误没有自己检查。
【解决方案2】:

您正在寻找的是用于数据库连接的单例设计模式。但它也有它的权衡。数据库单例设计的示例代码如下。

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)

如果您使用 Google 搜索,您可以找到大量示例和信息。希望这会有所帮助

【讨论】:

  • 是的。感谢您向我展示了一个起点。将帮助自己了解其余信息。
  • 这不适用于@user1517108,因为您使用的是 PHP 5.1。在 PHP 5.3 之前的版本中,单例是不可能的。根据静态关键字的手册页
  • @user1517108 pconnect 本质上是一个连接池。由 PHP 管理。正常的连接池是不可能的,因为当脚本终止时池会被破坏......在 PHP 5.1 中没有办法拥有持久的用户定义对象。
猜你喜欢
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多