2

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

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...// 处理结果

等等直到....

query 20...// 处理结果

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

  1. 在连接数据库的设计上,我会很容易达到设置的连接限制吗?
  2. php是否在查询后立即关闭连接,这意味着它在第一次查询后关闭,然后在第二次打开并在之后再次关闭,依此类推,即使我自己没有关闭连接
  3. 我的假设是否正确,即上述场景自动消耗了 20 个并发连接?

提前致谢。

4

2 回答 2

2

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

  1. PHP 关闭您与 MySQL 的连接当且仅当(假设它没有打开mysql_pconnect()):

    • 你打电话mysql_close()
    • 你到达脚本的结尾
  2. 因此,如果您在同一脚本中发送 20 个查询,则仅消耗 1 个连接

一个想法突然出现在我的脑海中。考虑这种模式:

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

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

这是理论,虽然,我还没有在现实中尝试过。

于 2012-06-09T09:51:05.530 回答
0

它不会让我将此作为上面的评论发布,因此这不是答案,而是我的第一条评论的扩展(“升级您的托管计划”)

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

于 2012-06-09T02:07:29.847 回答