(有很多结构一样的产品表,表名不一样)先是一个循环产品表 查询每个产品表按条件筛选出来的产品。
然后再把得获取的产品循环一条一条的插入新建的一个表中。
刚开始的时候我用的两个foreach实现这个功能了,但是数据量太大了,一次执行的结果就是内存不够用,直接 504 Gateway Time-out 错误。数据库中只插入了1800多条数据,剩余的数据就没有插入了。
现在就是想寻求一种思路,怎么解决数据量太大,而内存不够用的问题?最好能给个demo。
(有很多结构一样的产品表,表名不一样)先是一个循环产品表 查询每个产品表按条件筛选出来的产品。
然后再把得获取的产品循环一条一条的插入新建的一个表中。
刚开始的时候我用的两个foreach实现这个功能了,但是数据量太大了,一次执行的结果就是内存不够用,直接 504 Gateway Time-out 错误。数据库中只插入了1800多条数据,剩余的数据就没有插入了。
现在就是想寻求一种思路,怎么解决数据量太大,而内存不够用的问题?最好能给个demo。
php foreach的时候会把每个值复制一次。
foreach ($tbs as $tb) { $rows = $tb->getRows(); foreach ($rows as $row) { insert($row); } }上述代码中,第一层循环中,每次循环都会把$tbs中的一项复制出来,放在$tb里,当$tb里字段过多,就挂了。 建议你用for试试,直接用 $tbs + 下标的形式操作
2 回答1.3k 阅读✓ 已解决
1 回答975 阅读✓ 已解决
2 回答843 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
2 回答899 阅读
1 回答886 阅读
1 回答817 阅读
php-cgi 不适合干这种事情(执行时间限制等等)。
这种大量数据的操作放到线下去执行吧。比如用 php 命令去调用对应的 php 脚本。
还有就是分批操作:把大任务拆分成几个小任务,分批去执行。