0

我正在开发一个连接到节点并使用 PHP 获取它们的连接数据的工具。

我正在使用的架构是一个 Worker,它在构造函数中分叉自己的次数与必须处理的节点一样多,连接到节点并检索它们的连接数据(大约 5 个字段,字符串相对较短,整数较大)。

我面临的问题是,当一个不同的童工完成他的工作时,数据库连接会断开。一种方法是在每次孩子想要访问数据库时建立一个新的 mysql 连接。这是一个很好的做法吗?

为了授予数据库访问权限,我实现了一个类似单例的数据库类,但实际上该类并没有按预期使用一个连接,而是为每个 childworker 使用一个 mysql 连接。(我读到了“ShareNothing”或类似的现象

这很关键——我听说 mysql 连接限制默认应该在 100 左右。虽然我目前维护大约 60 个节点,但节点数量可能会在接下来的几个月内增加。我目前工作的公司在使用各种组件时非常严格,所以齿轮人不是一个选择。

我正处于缺乏想法的地步。我应该如何设计数据库访问权限来为越来越多的节点授予可扩展性?

编辑:应用程序通过 PHP CLI 运行。worker 启动他们的 run 函数,该函数包含一系列被 while 循环包围的动作。序列是这样构建的(伪代码 INC):

while(allowedToRun())
if(isConnectionStillOpen())
fetchDataFromNodes()
enterIdleRoutine
else
exit

因此,该应用程序旨在无限期运行

4

1 回答 1

0

连接断开是因为您正在删除它们,或者您每次加载新的 php 页面时都在启动新连接(这是 php 编程方式的默认行为,如果您需要更复杂的东西,您应该考虑迁移到 java 或其他中间件编程语言)。

顺便说一句,来自 php 手册

到服务器的链接将在脚本执行结束后立即关闭,除非它通过显式调用 mysql_close() 提前关闭。

http://php.net/manual/en/function.mysql-connect.php


这与打开的连接数无关,但您应该了解事务,以控制并发访问:

http://dev.mysql.com/doc/refman/5.0/en/commit.html

对表锁也做个读数也是个好主意

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

于 2013-07-05T10:18:40.183 回答