お世話になります。
LaravelのEloquentには大量のレコードを扱う際にメモリの使用量を抑えるためのchunk
メソッドがありますが
これに指定するカウント数はどのように見積もったらいいか、というのが質問となります。
###経緯
以前Laravel5.2でシステムを構築した際、とある夜間バッチを作成しました。
数十万人のユーザ毎に様々な集計をして、集計結果テーブルにUPDATEするものです。
処理の基点となるユーザをいくつかのwhere条件と共にgetメソッドで取得し、結果のCollectionを変数に格納。
その後foreachでループ処理……とした所、処理が完了するまで1時間近くかかるものとなってしまいました。
開発時にはデータ数が少なかった事もあり、運用前に本番に近いデータを入れ込んだ時になって発覚した問題です。
メモリの問題だろうという事で、chunk
メソッドを使った処理に書き直した所、処理時間が大幅に改善しました。
ただ指定カウントによっては10分以上結果が変わる事もあり、どれくらいが一番パフォーマンスが良いか調べるため、
当時は**色々な数を10回ずつ施行して平均処理時間が一番短いものを採用する、**といった力技でした。
サーバのスペック、テーブルのカラム数、入っているデータのサイズといった、
様々な要素によって可変するだろうという予想はしているのですが、
小さすぎても大きすぎても処理時間が遅くなってしまうため、いい塩梅を見積もるよい方法は無いでしょうか。
(あるいは、大体このくらいを指定しておけば大丈夫といった情報でも可)
特に今回はテストで計測出来る環境があったからよかったものの、そうでない時(テストデータが少ない、スペックが異なる等)もあるため、事前にある程度の見積もりは取れるようにしておきたいと思った次第です。
よろしくお願いします。
###補足
chunk
の他にカウンタが不要なcursor
メソッドもある事は把握しておりますが、
今回の質問ではあくまでもchunk
を利用した時とさせてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/21 23:30