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

cakePHPでの直SQL

今回はCakePHPにて直のSQLを書く方法を。 cakePHPにて大概の処理はもともと備わっているコマンドでなんとかなりますが、まれに直SQLを書いたほうがらくなこともあります。 書き方その1 [c …

no image

PHPコマンドに関して

今更ですが、使えると思ったPHPコマンドなど。 Contents1 php -r2 php -l3 php -a4 php -i, php -m php -r PHPをそのまま実行させる。 perlで …

no image

xdebugに関して

PHPでお手軽にできるdebugツールとしてxdebugを。 Contents1 利点2 インストール3 参考リンク 利点 var_dumpの結果が非常に見やすい(単純ですがこれが一番大きい理由です。 …

no image

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

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

no image

phpdocument

今回はphpのdocument生成ツールについて。 Contents1 phpdocument1.1 インストール1.2 使い方1.3 参考リンク phpdocument https://www.ph …

アーカイブ