mysql连接设计和并发连接

时间:2012-06-09 01:34:24

标签: php mysql

我的应用程序将托管在共享托管服务提供商中,限制为25个Mysql并发连接。以下是我连接数据库的代码

function dbConnect() {
$dbHost = 'localhost';
$dbUser = 'user';
$dbPass = 'pass';
$dbName = 'dbase';  
    mysql_connect($dbHost, $dbUser, $dbPass)or die(mysql_error());
    mysql_select_db($dbName) or die(mysql_error());
   }

我的应用程序更多是关于数据库查询。仅主页中至少有20个mysq_query。我编写主页的方式如下所示

include 'config.php';
dbConnect();

query1 ... //获取初始变量

导致多个查询的流程变量

query2 ... //处理结果

query3 ... //处理结果

等等......

查询20 ... //处理结果

我不能再将查询最小化了,因为大多数查询都是其他查询的先决条件。我预计每天至少有1000个用户,并且50%的用户可能会在同一时间或相隔至少几秒钟连接。

  1. 在连接到DB的设计上,我可以轻松达到连接限制设置吗?
  2. php是否在查询后立即关闭连接,这意味着它在第一次查询后关闭,然后在第二次查询后打开,然后在之后再次关闭,依此类推,即使我自己没有关闭连接
  3. 我的假设是否正确,上述场景自动消耗了20个并发连接?
  4. 提前致谢。

2 个答案:

答案 0 :(得分:2)

对于它的价值,对genpet的原始帖子的问题2.和3.的一些答案:

  1. 当且仅当(假设它未使用mysql_pconnect()打开)时,PHP才会关闭与MySQL的连接:

    • 您致电mysql_close()
    • 到达脚本的末尾
  2. 因此,如果您在同一个脚本中发送了20个查询,则只消耗1个连接

  3. 我想到了一个想法。考虑这种模式:

    • 打开/轮询与*_pconnect()
    • 的连接
    • 运行查询,处理结果
    • 尽快与*_close()
    • 发布连接
    • 如果您需要稍后在脚本
    • 中查询数据库,请再次打开/轮询

    这样,我相信可以解决低并发连接限制(即使我同意人们建议您的托管计划可能不适合满足您的需求)

    这是理论,但我没有尝试过。

答案 1 :(得分:0)

我不会在上面发表评论,因此这不是答案,而是我的第一条评论的延伸(“升级您的托管计划”)

IMO,你的连接设计还不行。 “die”是一个终端函数,如果你期望失败,那么构建一个重试选项和一个用户友好的错误处理函数。此外,每次打开和关闭数据库都是时间密集型的,您可能能够比关闭更快地挤出三个查询并再次打开一个(但这取决于几个因素,这可以减轻其他人建议的共享池添加。 )但我的建议是升级托管计划并“正常”开发。然后你的风格还可以,除了使用比“die”更友好的错误屏幕:-)以及pdo或mysqli,而不是mysql_ functions