PHP大量数据写入文档,如何异步处理?
目前环境是windows系统,laravel框架,要把大量数据库的数据写入文档,同步方法操作经常超时,所以考虑异步处理,该怎么弄?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
目前环境是windows系统,laravel框架,要把大量数据库的数据写入文档,同步方法操作经常超时,所以考虑异步处理,该怎么弄?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
你如果对定时任务或者队列什么的不是很了解,可以从最原始/基本的来,首先要知道怎么实现它,基本的思路得有。
就是你需要以
任务表
+定时脚本
的方式来实现。页面点击保存,然后就弹出提示用户,“您的文件正在导出/保存中,完成后会发消息或者邮件给您”。如果没有消息通知或者邮件的方式,可以直接提示,请稍后再来此页面查询结果。
然后你点击保存,后端的逻辑是这样:
0未执行
状态的任务1已完成
,执行其他后续操作,比如发邮件等任务表
子任务表
crontab
定时任务crontab,每分钟执行一次
用curl请求(不推荐):
用php执行脚本:
php 来执行脚本的话,可以采取锁
flock -xn /tmp/lock.lock
的方式来解决脚本由于超时,没有执行完毕又被执行一次的情况,甚至可以把执行结果保存到日志:1.如果是在网页操作,网关超时的话,建议换到服务端使用artisan命令执行;
2.如果是数据量过大造成内存溢出,建议调大php的内存限制,同时配合Laravel ORM的chunk方法,一次只取有限的数据进行处理;
3.如果是在终端执行artisan命令时间过长导致连接断开,可以试试nohup
4.如果是想要多线程并行处理,PHP也支持,可以自己写或者找个插件,注意控制好每个线程处理的数据范围不要重复。
”实在网页端,用户点击按钮,调用控制器方法执行数据写入到文档的操作,但是由于数据量过大,经常超时。服务端artisan命令怎么操作?没用过,完全不懂啊“
------如果界面上不是需要及时返回写入结果肯定是需要改成异步的,至于异步方案需要你的实际量实际大小和数据来源等综合考虑。
用队列吧,看laravel的文档比在这问的清楚
https://xueyuanjun.com/post/8993