Heroku PHP背景工作者

时间:2017-05-01 09:32:18

标签: php ajax heroku background-process worker

在我的heroku应用程序中,我有一个需要超过30秒才能执行的任务,我无法增加执行时间,因为heroku不允许这样做。 我从前端的API中获取数据,然后使用AJAX将其发送到服务器以将此数据插入数据库。服务器中的此过程需要30多秒才能完成,它会给我一个超时错误。

我创建了Procfile,如下所示: worker: cd ~/www/ && ~/php/bin/php worker.php

文件worker.php获取使用AJAX发送的数据,然后将其插入数据库。

我在heroku仪表板中启用了工作程序

我想要实现的是仅当我单击启动ajax调用的按钮时才启动此工作程序。我不想使用heroku调度程序,因为此脚本每月只运行一次或客户端想要添加新产品。 此外,如果我使用调度程序,我不知道如何将数据从API发送到服务器。

如果无法做到这一点,是否有办法强制heroku增加执行时间?

谢谢

1 个答案:

答案 0 :(得分:0)

您需要的是优化您的SQL查询以减少执行时间。

根据您的评论说明,您尝试执行的操作是“UPSERT” - 更新现有行或插入(如果不存在)。

尝试谷歌sql upsert,你会发现更多信息。注意:upsert可以表示几种不同的情况,每种情况都需要以不同的方式处理。 read this article which helped me much on sql upsert

其他考虑因素是删除表中不必要的索引,这使得插入更慢,因为如果没有捆绑则重新索引每个插入。如果您仍在开发中,也适用于不必要的外键。

另一方说明,在另一篇文章中它说通常sql可以处理~40k插入/分钟,所以如果你插入超过15-20k,这是大约30s你可能应该考虑一个私人服务器或者升级heroku允许更多可能适合您需要的资源或执行时间。