質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

5162閲覧

【Laravel】Eloquentのchunkで指定するカウントの決め方

Archsted

総合スコア452

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/05/19 09:26

お世話になります。

LaravelのEloquentには大量のレコードを扱う際にメモリの使用量を抑えるためのchunkメソッドがありますが
これに指定するカウント数はどのように見積もったらいいか、というのが質問となります。

###経緯

以前Laravel5.2でシステムを構築した際、とある夜間バッチを作成しました。
数十万人のユーザ毎に様々な集計をして、集計結果テーブルにUPDATEするものです。
処理の基点となるユーザをいくつかのwhere条件と共にgetメソッドで取得し、結果のCollectionを変数に格納。
その後foreachでループ処理……とした所、処理が完了するまで1時間近くかかるものとなってしまいました。
開発時にはデータ数が少なかった事もあり、運用前に本番に近いデータを入れ込んだ時になって発覚した問題です。

メモリの問題だろうという事で、chunkメソッドを使った処理に書き直した所、処理時間が大幅に改善しました。
ただ指定カウントによっては10分以上結果が変わる事もあり、どれくらいが一番パフォーマンスが良いか調べるため、
当時は**色々な数を10回ずつ施行して平均処理時間が一番短いものを採用する、**といった力技でした。

サーバのスペック、テーブルのカラム数、入っているデータのサイズといった、
様々な要素によって可変するだろうという予想はしているのですが、
小さすぎても大きすぎても処理時間が遅くなってしまうため、いい塩梅を見積もるよい方法は無いでしょうか。
(あるいは、大体このくらいを指定しておけば大丈夫といった情報でも可)
特に今回はテストで計測出来る環境があったからよかったものの、そうでない時(テストデータが少ない、スペックが異なる等)もあるため、事前にある程度の見積もりは取れるようにしておきたいと思った次第です。

よろしくお願いします。

###補足
chunkの他にカウンタが不要なcursorメソッドもある事は把握しておりますが、
今回の質問ではあくまでもchunkを利用した時とさせてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Eloquentに対するwithメソッドの数やchunkループ中の処理量、他のスケジュールしているバッチ数等によりますが、2000〜5000くらいを目安に設定しています。
大量件数を処理する場合はorderByを設定した上で、chunkByIdを利用すると少し速いです。

投稿2017/05/20 07:43

aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Archsted

2017/05/21 23:30

ご回答ありがとうございました。 他の方の目安値がどのくらいか聞きたかったので、助かります。 また、恥ずかしながらchunkByIdの存在を初めて知りました。 速度改善に繋がる有益な情報ありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問