为了账号安全,请及时绑定邮箱和手机立即绑定

PHP查询大批量MySQL疑问?

PHP查询大批量MySQL疑问?

沧海一幻觉 2019-05-11 09:29:00
整体环境:Apache2.4.25+PHP5.6+MySQL5.5.57需求:比如用户表中有2万条数据,需要将这些数据先查出,然后根据用户组表中对应设置的比例,计算用户应该升级还是降级,再进行更新操作。问题:当用户量小的时候,没有任何问题,直接浏览器执行,运行结束,所有任务完成。但是当用户量超过6000后,发现浏览器中会报ApacheServer错误我的PHP代码中也增加了ignore_user_abort(true);和set_time_limit(0);做法:我目前的解决方案是,将这条任务拆分成若干个小任务,单个执行,这样虽然能解决了,但是不是长久之计啊。因为用户量还是会增加的。疑问:想问下,大神们,你们是如何处理这种情况的?因为代码原先不是我写的,只是接手后,用户增长到6000以上了,才发现这个问题的。中间我想调试下,用ob_flush()flush()看看过程的,结果完全失效,怎么弄都没反应,后来改用日志记录查看,才发现,每次每条任务,只能执行到大概2500左右的位置,就会自己挂掉。查看服务器资源,cpu和内存也没有满,数据库连接数也没有满,而且因为之前的频繁请求出错,我现在数据库已经改成长连接了。所以,唠叨了这么多,还是想问,大神们,你们在遇到这种任务的时候,是如何执行的?也是和我这边一样,同一个请求,一直等响应吗?还是有其他方法??
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

ignore_user_abort(true)和set_time_limit(0);设置后还是超时报错,那就是apache的超时时间没有设置
这个需求是一定要手动触发然后实时返回的吗?我的理解是,这是一个定时的计算任务,比如每天凌晨计算一次那种这样的情况下,写成一个PHP脚本,用crontab做成定时任务是一种比较好的解决方案
最后给一个用浏览器触发的解决方案:在JS里面拆分任务而不是PHP,分成多个AjaxHTTP请求,保证每个请求不超过30秒,这样多长时间都可以执行
                            
查看完整回答
反对 回复 2019-05-11
  • 2 回答
  • 0 关注
  • 422 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信