我一直在尝试使用 Laravel 的 Eloquent 分块技术,但是遇到了问题。考虑以下代码(这是我的问题的更简化版本):
$data = DB::connection('mydb')->table('bigdata')
->chunk(200, function($data) {
echo memory_get_usage();
foreach($data as $d) {
Model::create(
array(
'foo' => $d->bar,
...
//etc
));
}
}
当我运行以下代码时,我的内存输出如下:
19039816
21490096
23898816
26267640
28670432
31038840
那么在不跳转到 php.ini
并更改 memory_limit
值的情况下,有什么线索表明为什么它无效? 根据文档:“如果您需要处理大量(数千个)Eloquent记录,则使用“chunk”命令将允许您在不吃掉所有RAM的情况下执行。”
我在 foreach 函数之后尝试了 unset($data)
,但没有帮助。 有什么提示说明我如何利用 chunk
或者我是否误解了它的作用?
DB::disableQueryLog()
将解决我们的问题。 - tiffanyhwangini_set('memory_limit', $this->memorylimit);
- nielsstampe