发送批量请求

时间:2012-04-01 21:06:58

标签: php mysql unix

我有一个执行以下操作的守护程序

  • 从mysql数据库中检索网站成员(我使用LIMIT 1000一次检索1000行)
  • 将有关这些成员的信息发送给第三方服务器
  • 将每个成员标记为已处理
  • 睡2秒
  • 检索下一批1000个“未处理”成员并发送给第三方服务器。 等等。

我想知道php守护进程(我正在使用系统守护程序库)是否是完成上述任务的最佳方法。

我担心浪费太多内存(因为PHP已知)

我也担心向第三方服务器发送多个请求,因为在高流量的一天,可能会有很多非收据。

我是否可以使用守护进程以外的工具来完成此任务?考虑到有可能必须在mysql表中处理超过100K的行,并且任务是时间敏感的,我可以实现哪些方法来提高效率。另外,我应该考虑在什么时候添加更多服务器?

谢谢!

2 个答案:

答案 0 :(得分:1)

对于与第三方服务器进行同步作业,cron应该是一个非常好的选择。 考虑以下“改进”:

1)一个锁定文件,用于防止多个作业并行启动并从您运行的其他进程中获取额外资源。并且还要避免重复处理数据。

2)如果您还没有实施“信息更新”和“同步时间”检查。例如,如果用户A在同步后没有遭受任何更改,则不会再次同步他。

3)考虑您需要同步数据的频率,以及它是否必须是选择查询中的实时因素。结合用户/时间分配和其他因素,您迁移最终会有一段时间,因为您的脚本不会同步那么多帐户。

4)执行自己的内存清理,取消设置变量,取消链接文件甚至重用相同的变量,这样就不会在脚本中只使用1次垃圾变量。小心这一点,因为它可能导致代码混淆。

当您将它们发送到php进行处理时,还要考虑使用较小的数据集。数据库喜欢大数据集,而php则不喜欢。

答案 1 :(得分:0)

我建议您使用Perl,因为它具有更高的内存和性能效率,并且它具有更多功能,可以与系统集成并作为守护程序运行。

现在是时候添加更多服务器了。我假设第三方服务器有足够的资源来处理许多记录。因此,如果您的资源不足,我建议使用MySQL复制将您的数据库复制到其他服务器并在那里运行上面提到的守护进程。