提问,怎么使用 PHP 短时间内处理大量数据
业务需求
- 现在数据库里面有5000个左右的数据
- 每隔3分钟我要调用外部API接口更新每个数据的状态,也就是说我要调用5000次
- 3分钟内必须更新完成,因为3分钟以后还要更新,每一次都要留下log,落下一次就有可能造成金额损失
- 更新一个数据大概会用掉1~1.2秒的时间
面临的问题
以这个处理速度来看的话,3分钟内是肯定不能处理完5000个数据的更新,而且这个数据量很有可能增加,假设1~1.2秒的处理时间已经没有优化的空间。
这个项目是用Laravel6, PHP7.2.8构建的,现在是用laravel自带的schedule::run cron 每3分处理一次,现在是测试阶段,所以只处理100个左右,但是到线上的话就得处理5000个了
有什么方法解决呢
个人的想法
- 是把数据分散开来,并列执行 (具体怎么施行还没想清楚)
- 真想不出来了
各位有什么好的建议吗?不吝赐教
2020-04-13 最近情况
这个系统现在向不用队列的方向发展
而是在Kernel.php中写死代码添加了PHP process
$offset_3 = 0;
$limit_3 = 100;
$totalKeywordCount = 500;
do {
$schedule->command('autoprocess:min3', [$offset_3, $limit_3])->cron('*/3 * * * *')->runInBackground();
$offset_3 += $limit_3;
} while ($offset_3 + $limit_3 < $totalKeywordCount);
这么整的话5000个可能是够呛,但是首先要确定这个方法的极限处理量,所以待我继续更新项目的走势吧。
这种一般是写个命令,然后队列执行的吧。另外 每隔3分钟调用接口,处理数据,你应该还需要考虑数据覆盖的问题