Cron拥有大型流程

时间:2014-10-20 08:48:31

标签: php cron

我正在为电子商务网站编写脚本。它将允许客户订阅许多类别之一的更改。或者任何类别组合,因此发送给单个客户的电子邮件可能对该客户是唯一的。它将由cron每周运行一次。

这是一个繁忙的网站,最终可能会有成千上万的订阅,每个订阅需要处理,然后发送电子邮件。那么,问题是这样做的最佳方式是什么?

在单个文件中,该过程将不可避免地超时。

我可以运行单独的cron作业,直到订阅列表完成为止?或者可能将文件重定向到自己,直到列表完成?

有没有一种标准的方法可以做到这一点?感谢任何建议。

如果这是重复,我道歉。我搜索过,但找到合适的搜索字词很棘手。

1 个答案:

答案 0 :(得分:0)

批量执行更新。

  • 在表格中添加标记
  • 抓取标志仍为默认值的记录
  • 更新客户
  • 更新标志
  • 重复。

解释

我们需要在表格中创建一个“旗帜”

ALTER TABLE `foo`
ADD COLUMN `is_updated` tinyint(1) NOT NULL DEFAULT 0; //0 = not updated. 1 = updated

因此,在cron调用的文件中,我们可以执行以下操作来获取(下一个)1000个未处理的行;

SELECT * FROM `foo` WHERE `is_updated` = 0 ORDER BY `id` ASC LIMIT 1000

然后我们可以用这1,000个条目执行我们的实际逻辑,最后更新它们。

UPDATE `foo` SET `is_updated` = 1 ORDER BY `id` ASC LIMIT 1000

注释

  • 根据您正在进行的处理量,我肯定会建议在非高峰时段执行此操作,或将其发送到专用于此任务的从属服务器。
  • 创建排队表可能值得同时插入一旦更新特定类别后需要更新的客户,并从此表中获取客户电子邮件(但仍使用“标志”的想法进行更新分批)。
  • 阅读this,了解有关立即发送大量电子邮件的提示。
  • 阅读this,了解有关多线程客户更新流程的答案。