【问题标题】:mysql connection design and concurrent connectionsmysql连接设计和并发连接
【发布时间】:2012-06-09 01:34:23
【问题描述】:

我的应用程序将托管在共享托管服务提供商中,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...// 处理结果

等等直到....

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

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

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

提前致谢。

【问题讨论】:

  • 使用PDO(也就是说,如果它在您的服务器上提供)。不要使用mysql_ 函数(mysqli_ 家族比那些稍好)。
  • 对于通过系统的每个请求(至少)有 20 个查询,如果可能,您需要在请求的会话中缓存请求者(用户)可缓存的数据库存储数据,而不是为每个单独的请求重新查询要求。希望您的数据架构不是经过设计的,因此您不能这样做。
  • 希望您能够利用connection pooling
  • @JaredFarrish 我是数据库设计的新手,是的,如果需要,大部分结果都会放在 SESSION 上,但我仍然需要更多的连接来填充 SESSION。
  • 看看我的链接和mysql_pconnect()。如果你真的会有 500 个并发用户,也许 100-150 个并发请求,所有这些操作都在服务器上来满足请求,并且服务器是共享主机?嗯。嗯。

标签: php mysql


【解决方案1】:

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

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

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

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

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

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

不过,这是理论,我还没有真正尝试过。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我预见到痛苦和咬牙切齿的眼泪。这只是共享服务器上的其他人。有386,会出差吗?也许麻烦不会在前面,但我想知道如何。
    • @Robbie 谢谢。 'die' 仅在开发阶段使用,以便我轻松调试。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2014-09-11
    相关资源
    最近更新 更多