9

そのため、Eloquentでlaravelのチャンクを試してみましたが、問題が発生しました。次のコードを検討してください(私の問題のより単純化されたバージョン):

$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またはそれが何を誤解したかについての手がかりはありますか?

4

2 に答える 2

1

データをチャンクしてもメモリ使用量は減りません。データベースを直接使用してページネーションのように行う必要があります。

id などで 200 の順序で開始する最初のフェッチのように、最初の 200 を処理した後、次の 200 の結果を求める where 句を使用してそのクエリを再度起動します。

于 2016-07-28T10:35:52.313 に答える