为大量多个连接创建连接类的最佳方法

时间:2019-05-21 22:54:58

标签: php mysql mysqli

我想就如何创建一个数据库连接类提出一些建议,该类在PHP中每秒可处理200至600个连接。有关使用方法或服务器设置的任何建议,将不胜感激。

3 个答案:

答案 0 :(得分:0)

MySQL的max_connections必须设置为覆盖连接总数。 back_log。积压仅作为linux sysctl net.core.somaxconn(默认值为128)有效。

考虑线程缓存也很重要,以确保不会在每个连接中都创建线程。

推荐阅读mysql client connections。调整与您的MySQL版本相关的引用。

我没有PHP建议。建议使用https://dba.stackexchange.com/解决数据库问题,http://serverfault.com/可能会提示您很多连接。不要使用小型VM服务器,并希望获得出色的性能。

答案 1 :(得分:0)

从PHP的角度来看,没有什么特别的事情要做。明智设计的任何类都可以。您仅需确保每个脚本执行一次连接即可完成。如果您的代码是传统的PHP意大利面条,那么单例即可。但是,对于面向对象的代码,请考虑使用依赖注入。

每秒200至600个连接也没什么大不了的。如果您的数据库操作速度很快,则不需要那么多的并发连接。例如,如果您的PHP脚本工作了0.1秒,则需要适度的60个并发连接,这没什么大不了的。

答案 2 :(得分:-1)

MySQL默认并发连接数为150。 您的限制远不止于此。 您将必须实施 线程缓存 表缓存 查询缓存

在PHP中,您将必须使用单例类进行连接,以便重新使用连接。小前是

function connect()
{
   static $connection;
      if($connection == null)
      {
        $dsn = "mysql://{$username}:{$password}@{$hostName}/{$databaseName}";

            $connection = DB::connect($dsn);

            if (DB::isError($connection))
            {
                echo "db connect error";
                return FALSE;
            }  
      }
}

在代码中,对connect()的每次调用都不会最终创建一个新的连接。仅在第一次调用connect()时创建一个新的连接,随后的connect()调用将使用相同的连接。