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

PHPメモリ測定

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

no image

アプリケーションアーキテクチャについて 〜既存のMVCに関して〜

今回はアプリケーションのルーター以降のアーキテクチャに関して。主にMVCなどについて説明したいと思います。 Contents1 MVC(Model,Controller,View)1.1 トランザクシ …

no image

mb_convert_encodingに関して(文字コードの自動検出やその周辺)

以前Perlでもやりましたが、文字コードの自動検出に関して。 ちなみにcp932=SJIS-WINです。 参考リンク Perlでの動的改行コード読み込みに関して+cp932ネタ PHPの場合、mb_d …

no image

エラーハンドリング

エラーが起きた時にPHPだと画面に出ますが(出ない場合は画面が白くなります)、これを検知し、ログに吐いたり任意の処理をできるのがエラーハンドリングです。 フレームワークなどにはほぼこの仕組みが内在して …

no image

PHPでのPDF出力 テーブル

PDFで何かを出力する場合、ほとんどが納品書や請求書などの帳票でしょう。 これらもfpdfで出力することができます。 Contents1 ソース2 参考リンク ソース [crayon-66e628a7 …

アーカイブ