php - 每天多次在 PHP 中可扩展地处理大量复杂的数据库数据

标签 php mysql database-design optimization cron

我很快就要从事一个给我带来问题的项目。

这将需要在一天中定期处理数万条记录,可能超过一百万条。处理将涉及几个(可能很复杂的)公式和几个随机因子的生成,将一些新数据写入单独的表,并用一些结果更新原始记录。这需要对所有记录进行一次,理想情况下,每三个小时一次。该网站的每个新用户都会添加 50 到 500 条需要以这种方式处理的记录,因此数量不会稳定。

代码还没有写,因为我还在设计过程中,主要是因为这个问题。我知道我将需要使用 cron 作业,但我担心处理这种大小的记录可能会导致站点卡住、运行缓慢,或者每三个小时就会激怒我的托管公司。

我想知道是否有人对类似主题有任何经验或提示?我以前从未在如此大的范围内工作过,据我所知,这对服务器来说是微不足道的,不会造成太大问题。只要在接下来的三个小时内处理完所有记录,我不在乎它们是否不会同时处理(尽管理想情况下,属于特定用户的所有记录都应在同一批处理中处理),所以我我一直在想我是否应该每 5 分钟、15 分钟、每小时进行一次批处理,无论什么可行,以及如何最好地处理这个问题(并使其以对所有用户公平的方式进行扩展)?

最佳答案

下面我将描述我将如何解决这个问题(但会花费您金钱并且可能不是理想的解决方案):

  1. 您应该使用 VPS(一些 cheap VPS 的快速列表)。但我想你应该多做一些research找到最适合您需求的 VPS,如果您想在不惹恼托管公司的情况下完成任务(我相信您会的)
  2. 您不应该使用 cronjobs,而应该使用消息队列,例如 beanstalkd排队您的消息(任务)并离线进行处理。使用消息队列时,如果需要,您还可以限制处理。

不是很必要,但我会以这种方式解决它。

  1. 如果性能真的是一个关键问题,我会(至少)有两个 VPS 实例。一个 VPS 实例处理来自访问您站点的用户的 http 请求,一个 VPS 实例执行您想要的离线处理。这样您的用户/访客就不会注意到您正在进行的任何繁重的离线处理。
  2. 由于阻塞的特性,我也可能不会使用 PHP 进行离线处理。我会使用 node.js 之类的东西来进行这种处理,因为 node.js 中没有任何阻塞,这会快得多。
  3. 我也可能不会将数据存储在关系数据库中,而是使用快如闪电的速度 redis作为数据存储。 node_redis是一个速度极快的 node.js 客户端

关于php - 每天多次在 PHP 中可扩展地处理大量复杂的数据库数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4699105/

相关文章:

PHP IMagick RGB 到 CMYK 反转?

php - 具有最少字符数的排序规则*对于散列密码是必需的*

javascript - 如何将 API 数据提取到 Graphql 模式

java - 我面临这个问题 E/catch === : org. json.JSONException:SorrySignUpFirst 没有值

php - 如何以 Javascript 和 PHP 都能理解的方式表示公式?

PHP Mysql 数组之间

mysql - 使用 View 作为数据库中模块之间的数据接口(interface)

database-design - 如何在 YII 框架中添加复合主键

MySQL 数据库说明

mysql - phpMyAdmin 主键指示器在文本上显示为灰色