我想就如何创建一个数据库连接类提出一些建议,该类在PHP中每秒可处理200至600个连接。有关使用方法或服务器设置的任何建议,将不胜感激。
答案 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()调用将使用相同的连接。