ORMでリンクをロードするための1つの大きなクエリではなく、いくつかの単純なクエリ

すぐに予約します。これはトレーニングポストでも新しいパラダイムの宣言でもありません))、むしろ私が決めた決定であり、広く正直な議論で議論したいと思います。

ここまでのところで、 Postsモデルを説明するPHPで記述されたORMがあり、他のモデルとの中間テーブルを介して多対多の関係があることを想像してくださいComments、Tags、Categories 。 問題は、関連データを一度に、または遅延読み込みで上げる最適な方法は何ですか?



データベースコミュニティで一般的な意見は、多くのjoin'ovを使用して1回の要求でデータを取得する方が良いというものです。DBMSはスマートであると言います。 私の練習では、大きなテーブルを持つ高負荷のプロジェクトで、いくつかの単純なクエリが、複数の結合を持つ1つの大きなクエリよりも速く動作する場合がありました。

ORM側では、1回のリクエストですべてのデータを上げることも最適なオプションではありません。ほとんどの場合、この場所で必要のない追加のデータが上げられる(または干渉する可能性があり、それでもセットから削除する必要がある)か、セットが必要だからですfindWithComments、findWithCategoriesAndTags、findWithAllRelationsなどのメソッドは避けられない重複を伴います。

したがって、リンク(モデルメソッド)をロードするには3つの方法があります。



ある種のユニバーサルORMの設計について話す場合、後者のオプションは私にとってより適切であると思われ、ORMは別のアプローチを許可すべきではありません。 メリットについてお話します。



このようなモデルの厳格な分離の弱点は、タグやカテゴリによる投稿など、多くの基準によって柔軟な検索をすぐに行う方法です。

一般的に、議論にあなたを招待します、他にどんな欠点がありますか、誰かがそのような決定から来た/行ったかもしれません、あなたはあなたのプロジェクトでそのようなORMを使用しますか?



All Articles