这个程序不会调用的太频繁,但就是需要花费几分钟时间(可能需要进行数千次 MySQL 查询)。而且随着数据量的增加,需要花费的时间可能会更长一些。不知道像这种需要花费一定时间才能执行完毕的 PHP 页面会不会给服务器或程序带来各种问题?如果会的话顺便求个解决方案。
这个程序不会调用的太频繁,但就是需要花费几分钟时间(可能需要进行数千次 MySQL 查询)。而且随着数据量的增加,需要花费的时间可能会更长一些。不知道像这种需要花费一定时间才能执行完毕的 PHP 页面会不会给服务器或程序带来各种问题?如果会的话顺便求个解决方案。
|
tegicApr 23, 2018
1
内存消耗过大,应用蹦了咋整?
|
|
3
fpm 里面最好的是环境太方便了,你在执行长时间脚本的时候这样:
set_time_limit(0); ini_set('memory_limit', '-1'); ignore_user_abort(true); 这时候 fpm 会完全被占用,并发多了会有问题,如果你有 redis 的话可以通过 redis 控制并发;没有的话 mysql 有个 get_lock 控制并发。。。另外很重要的一点就是你需要实时拿到结果,在数据运算的 loop 中你把中间信息存到一张 mysql 表中,然后页面上 ajax 去实时读取进度 我这个方案是实战经过检验的 |
|
gouchaoerApr 23, 2018
4
如果另外弄一个 php-cli 的 cron 那杨维持这个环境才麻烦
|
|
5
我觉得你首先应该想一下怎么优化代码,毕竟一直下去,天知道服务器和数据库抗不扛得住。
|
|
6
这种是定时任务吧 一般放在凌晨执行。数据量大的话,可以考虑把表和数据复制一份到线下。这样就对线上没有任何影响了
|
|
lihongjie0209Apr 23, 2018
7
如果我一直访问这个页面, 你的服务器是不是就爆了?
|
|
jswhApr 23, 2018
8
后台定时脚本,结果写入文件,页面读文件内容
|
|
2MEApr 23, 2018
9
最近重构项目源代码 有和你类似的定时脚本 用的是 gouchaoer 的方法(因为我发现这帖子没 2 楼 不敢说是几楼)
控制并发 大概几分钟跑完 几千条甚至上万条 sql 原来没控制并发的时候内存爆掉是常事 不过我读了他代码发现是代码太烂了 其实四五条 sql 就能查完 改完之后几秒就完事了 首先你要检查你的 sql 是不是有问题 然后在考虑用楼上的方法 |
|
reexamineApr 23, 2018
10
楼上提醒才发现没有这个帖子没有 2 楼,bug 吗?
|
|
11
耗时较长的任务还是用异步队列吧,可以参考 laravel queue.守护一个后台处理脚本,用户请求了就立即返回,等用户下次调用查看结果请求
|
|
lsidoApr 23, 2018 via iPhone
12
竟然没人推荐用 python 做,不符合 v 站逻辑
|
|
mingyunApr 23, 2018
13
分开队列处理吧
|
|
15
@lihongjie0209 我也担心这个问题。不过好在这个页面是在后台管理里调用的,而且权限设定的较高,一般一天只会调用 1-2 次。
|
|
wenzhoouApr 24, 2018 via Android
17
严重怀疑处理逻辑有问题。江湖老中医也得找到病根了再下药不迟。
|
|
18
随着数据量的增加,需要花费的时间可能会更长一些.... 从这句看来业务设计上有很大的问题呀
|
|
startarApr 24, 2018 via Android
19
用任务队列做
|
|
HarveyDentApr 24, 2018
20
你想想怎么把 1000 次查询的 SQL 该写成几条吧。
|
|
swat199538Apr 24, 2018
21
这个是干嘛的做系统维护工作的?维护工作写定时脚本在 CLI 里面执行呀。
|
|
vincenttoneApr 24, 2018
22
八成是个统计逻辑,写个定时统计就可以了吧。队列或者 crontab 就可以了。
|
|
abccccabcApr 24, 2018
23
4 楼的方案行得通。
我之前的公司就这样做,主要是跑一些东西。 |
|
24
|
|
25
@turan12 即使是实时统计系统也可以做成异步处理,前提是你的数据变化是否频繁,不频繁可以展示的时候显示计算时间和数据变化时间,或者显示查询中之类,这都是产品问题了。
还有就是你的查询八成是可以做成并行的,第一次或者 n 次的总查询完成后,可以多个线程并行。用的是 php 的话,可以考虑用 ev 扩展或者 swoole 之类的起并行。 |
|
26
@vincenttone 数据变化的还是很频繁的,基本是秒级。不过并行却是个很好的思路,之前没想到。
|
|
vincenttoneApr 25, 2018
27
@turan12 嗯 并行的时候注意数据库连接的占用,尽量复用应该问题不大
|
|
28
@vincenttone 嗯,多谢提醒!
|
|
han8guiJun 8, 2018
29
服用数据库实例的话,就没啥问题。
|
|
swat199538May 17, 2019
30
@turan12 我也推荐异步处理方式。前端等待结果就行了。
|