skillup

技術ブログ

PHP

eagar loading vs lazy loading

投稿日:

以前DBからのデータ取得問題でディフォルトだとlazy loadingが発生し、俗にいうN+1問題が発生するので、eagar loadingにすべきみたいな記事を書きました。

joinとeager loading

このときにlazy loadingってどんなメリットがあるのだろう・・と思っていたのですが、大量データをDBから取得する際に、メリットがあると気づきました。

eager loadingとlazy loading

そもそもの前提としてのeagerloadingとlazy loadingですが、一般的にはDBの例の中ででてくることが多いと思います。

例えばJOINなどでデータを取得する際が一番わかりやすいのですが、

eager loadingだと一気にデータを取得しますのでループでデータを発行する際などはイレギュラーなケースでなければ、基本eagerローディングが良いと思います。

よく出てくるのが以下の例だと思います。

【Laravel】Eagerロードについて解説

eager loadingの場合データを取得する際にまとめてデータを取得するので、クエリの発行回数が少なくなります。

で、肝心のlazy loadingですが、そもそもの意図は遅延処理です。webページを読み込んだときに全てのデータを読み込んでから表示されるわけではなく、だんだんと表示されていきます。(画像なんかが多いページだとだんだん画像が表示されることがあるとおもいます。)

この場合、すべての画像を読み込むのが時間がかかるため、このような処理にしているのだと思います。

なのでDBからデータを取得する際も、効果を発揮するケースとしては、大量のデータを取得し、順々にループさせていく・・処理になります。chunkとほぼ同じですね・・

一般的には以下のように

  • 大量データを取得する際に一気に読み込むとメモリを圧迫する
  • 分割処理をすることでメモリを節約できる

などのケースで使います。

LazyCollection備忘録

Laravel クエリビルダ記法まとめ#分割処理

集約の実装とLazy Loading
 

-PHP
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

dateTimeの使い方

phpの日付ライブラリであるdateTimeについて。 Contents1 過去のリンク2 頻出表現3 リンク 過去のリンク CakePHP3 日付ライブラリ(Time)について http://ski …

no image

メールパーサー(mailparseとphp-mime-mail-parser)に関して

以前、POP3を使ったメール受信というエントリーでメールパーサーをインストールしたんですが、他のライブラリをインストールする機会があったんでメモ。 https://github.com/php-mim …

no image

PHPメモリ測定

プログラムのメモリ測定に関して。今回はWordPressの処理に関してです。 まずはソースから。 処理を入れているファイルはルートディレクトリ直下のindex.phpです。 [crayon-675c5 …

no image

cakePHP3 serialize&compact

Contents1 serialize2 compact serialize cakePHP3の記述で

みたいな記述をよく見かけていま …

no image

call_user_funcについて

call_user_funcについて。 call_user_funcはメソッドを動的に呼ぶことができるメソッドの1つで、コールバック関数を使いたいときに使われます。JavaScriptでは比較的多いと …

アーカイブ