问答 / 0 / 4 / 创建于 4年前
比如我有50万个用户,我要怎么循环着50万条数据然后计算保存到数据库
必须的
update users set interest = balance * 0.001
定时起多个脚本去处理每条数据。 这里主要注意脚本处理的数据不要重复,可以按时间或者id分布等,分任务执行。 第一个脚本跑前10条,第二个跑后10条之类的
多起几个这个脚本进程就行了
$redisKey = 'jobs'.date('Ymd'); if(!Redis::exist($redisKey){ // 任务队列不存在则创建 $ids = '查库需要处理的记录id'; Redis::rpush($redisKey, $ids); } $idsToDeal = Redis::lrange($redisKey, 0, 'n条'); // 取 n 条处理处理 // 处理这些 id 对应的记录。 // 如果查库的话,可以批量查出来再处理,不然循环查表对数据库有压力 // 可选。如果处理失败,可以再 Redis:rpush 回去
我理解这里的问题应该是大用户基数的处理。计算的话逻辑部分躲不开。 1、首先我觉得处理方式应该是启用计划任务取处理 2、然后就是怎样处理节省时间降低数据库压力的问题: 第一可以采用分页的形式取处理用户产生利息的相关数据库操作。用户越多时间越长。第二:为了缩短处理时长可以使用swoole协程处理。
我要举报该,理由是:
必须的
update users set interest = balance * 0.001
定时起多个脚本去处理每条数据。 这里主要注意脚本处理的数据不要重复,可以按时间或者id分布等,分任务执行。 第一个脚本跑前10条,第二个跑后10条之类的
我理解这里的问题应该是大用户基数的处理。计算的话逻辑部分躲不开。 1、首先我觉得处理方式应该是启用计划任务取处理 2、然后就是怎样处理节省时间降低数据库压力的问题: 第一可以采用分页的形式取处理用户产生利息的相关数据库操作。用户越多时间越长。第二:为了缩短处理时长可以使用swoole协程处理。