今天要完成一个业务:数据库中有450万条数据,有一个字段是空的。要访问一个api,获取到值后填上。
常规思路,是把所有的数据查询出来,循环数据,挨个请求接口,请求完接口,获得到返回值,修改数据库中这条记录。
理想很丰满,现实却很骨感,一执行直接报错。
Allowed memory size of 134217728 bytes exhausted
一看就知道是内存溢出,看看数据库,一条数据也没有改变。
这时候我们应该换一个思路,什么思路呢,我一条一条的执行应该没事吧。
说干就干,获取数据库中数据的总条数,
从1到这个总条数来一个for循环,每次只查一条记录,处理完了再处理下一条记录。再执行命令,果然好使
。数据库中的值也挨个填上了。
虽然速度上可能有些慢,看这速度,大概要执行到明天早上吧,但是总归是有效。