gpt4 book ai didi

php - PHP 并行计算的数据库架构最佳实践?

转载 作者:行者123 更新时间:2023-11-30 01:30:49 27 4
gpt4 key购买 nike

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

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

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

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

这很重要 - 我听说 mysql 连接限制默认情况下应该在 100 左右。虽然我目前维护着大约 60 个节点,但节点数量在接下来的几个月内可能会增加。我目前工作的公司在使用各种组件时受到非常严格的限制,因此 gearman 不是一个选择。

我正处于缺乏想法的阶段。我应该如何设计数据库访问来为不断增加的节点提供可扩展性?

编辑:应用程序通过 PHP CLI 运行。工作人员启动其 run 函数,其中包含由 while 循环包围的一系列操作。序列的构建如下(伪代码 INC):

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

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

最佳答案

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

顺便说一句,来自 php 手册

The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling 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

关于php - PHP 并行计算的数据库架构最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17485440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com