問題タブ [eager-loading]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
831 参照

ruby-on-rails - Rails:ここで DB ヒットを最小限に抑えるにはどうすればよいですか? Eager ローディングは適用されません

この質問は少し具体的かもしれませんが、一般的な視点からも興味深いと思います。

Rails アプリでは、ユーザーは他のユーザーにサブスクライブできます。現在のユーザーがリスト内のユーザーにサブスクライブしているかどうかを確認する必要があるユーザーのリストを表示するとき。彼が購読している場合は、購読解除ボタンを表示し、その逆です。

全体が現在のユーザーに依存するため、熱心な読み込みは使用できません。したがって、リストに 20 人のユーザーを表示すると、DB で 20 の追加ヒットが生成されます。これは悪い習慣のように思えます。

この問題を解決する良い方法を考えています。私がこれまでに思いついた最善の解決策は、ログイン中に current_user がセッションでサブスクライブしたユーザーの ID をロードし、セッションの ID に対してすべての user.id をチェックすることです。しかし、ユーザーが多くの人にサブスクライブしている場合、これは他の問題につながる可能性があります. また、ユーザーがこのセッション中にユーザー リストをまったく見ない場合でも、すべてのサブスクリプションを読み込むのが最善の方法かどうかはわかりません。

私の頭に浮かんだ次善の策は、同じことをすることでしたが、ログイン中ではなく、代わりにユーザーリストがロードされたときに行いました。

どう思いますか?

0 投票する
2 に答える
1124 参照

ruby-on-rails - Railsの読み込みに熱心で、バグの可能性があります

Rails2.3.2アプリで

私は2つのモデルを持っています:

どういうわけか、コメントを熱心にロードしようとすると、エラーが発生します

Association_preload.rbの228行目から

これは既知の問題ですか、それとも私は何か間違ったことやサポートされていないことをしていますか?

私はこれについて少し議論を見つけるようです:http://groups.google.com/group/maine-ruby-users-group/browse_thread/thread/796cf58b62f9bc52

0 投票する
1 に答える
666 参照

php - PHP、SQLite を使用したイーガー ロードと多数のクエリ

n+1 クエリの問題があるアプリケーションがありますが、データを熱心にロードする方法を実装したところ、パフォーマンスがまったく向上しませんでした。私は ID マップを使用しているため、オブジェクトは 1 回しか作成されません。

これは、約 3000 オブジェクトのベンチマークです。

そして、これは熱心な読み込みを使用した場合の例です。

だから私の質問は

  1. 小さなクエリに関しては、SQLite は魔法のように電光石火のように高速ですか? (私は MySQL での作業に慣れています。)
  2. これは誰にとっても間違っているように見えますか?熱心な読み込みにより、パフォーマンスが大幅に向上するはずではありませんか?
0 投票する
3 に答える
5560 参照

c# - 自己参照テーブル内の SQL エンティティへの Linq の一括読み込み

Linq から SQL への関連する質問が 2 つあります。私のモデルがどのように見えるかを確認するには、下の画像を参照してください。

質問1

クラス/テーブルUser.AddedByUserにフィールドを熱心にロードする方法を理解しようとしています。Userこのフィールドは、User.AddedByUserIdフィールドの関係から生成されます。テーブルは自己参照型であり、Linq to SQL でUser.AddedByUserプロパティを熱心にロードする方法を見つけようとしています。つまり、Userエンティティがロード/フェッチされるたびに、User.AddedByUser と User.ChangedByUser もフェッチする必要があります。ただし、これが再帰的な問題になる可能性があることは理解しています...

アップデート 1.1:

次のように DataLoadOptions を使用しようとしました。

しかし、これは機能しません.2行目で次の例外が発生します:

例外は一目瞭然です。オブジェクト グラフは Cyclic であってはなりません。また、行 2 が例外をスローしなかったと仮定すると、重複キーであるため、行 3 は例外をスローしたと確信しています。

更新 1.2 :

以下も機能しません (上記のUpdate 1.1と組み合わせて使用​​されていません):

次の自明の例外がスローされます。

私は今、これを解決する方法について本当に途方に暮れています。助けてください!

質問2

Entity.ChangedByUser私のDBの他のすべてのテーブル、したがってLinq to SQLモデルには、 (外部キー/関係にリンクされたEntity.ChangedByUserId)およびEntity.AddedByUserEntity.AddedByUserId外部キー/関係にリンクされた) 2つのフィールドがあります

Linq to SQL でこれらのフィールドを熱心にロードするにはどうすればよいですか? クエリで単純な結合を行う必要がありますか? または他の方法がありますか?

自己参照テーブルでの Linq to SQL の熱心な読み込み http://img245.imageshack.us/img245/5631/linqtosql.jpg

0 投票する
1 に答える
795 参照

ruby - Datamapper の多対多の関係に対する戦略的な Eager Loading?

私はRuby 用のオープンソース ORM であるDataMapperを使用しています。現時点では、DataMapper は 1 対多の関係に Strategic Eager Loading (SEL) を使用できますが、N+1 クエリが発生する多対多には使用できません。これを正しく機能させるためにハックしたいのですが、それを行う場所が見つかりません。したがって、2つの部分からなる質問:

  1. テストスイートを実行して、これが失敗していることを示すにはどうすればよいですか (nb. 現在、失敗するはずのすべての仕様が保留中としてマークされています)。
  2. 1 対多のリレーションシップの SEL はどこでどのように実装されますか?
0 投票する
1 に答える
2116 参照

c# - NHibernateでの子および子の子コレクションの積極的な読み込み

NHibernateが小さな階層のデータを読み込もうとして問題が発生しました。私のドメインモデルは次のようになります。

そして、私は与えられた祖父母のためにすべての親と子供を熱心にロードしたいと思います。このLinq-to-NHクエリは、正しいSQLを作成し、GrandParentを期待どおりにロードします(この例では、祖父母に2つの親があり、それぞれに2つの子オブジェクトがあると想定しています。つまり、合計4つの子オブジェクトです)。

grandparent.Parentsコレクションには4つのアイテムが含まれており、そのうち2つは重複しています。DistinctRootEntityResultTransformerは1レベルの深さのコレクションでのみ機能するようです。したがって、Parentsコレクションは、各親が持つ子オブジェクトの数に応じて複製されます。

NHに個別の親オブジェクトのみを含めることは可能ですか?

どうもありがとう。

0 投票する
2 に答える
2040 参照

grails - 多対多のリレーションシップによる Eager Loading - Grails (GORM)

各本には多くの著者を含めることができます。また、各著者は多くの本を執筆できます。

今、私はいつできますか:

今、私は各著者を連れて行き、彼が関連する本を手に入れることができるはずだと考えています:

これで、再帰的になることがわかります (stackoverflow につながります)。熱心なフェッチを行っているときに、それが正確にどのように機能するかを知っている人はいますか?

0 投票する
7 に答える
24663 参照

ruby-on-rails - Railsアソシエーションが熱心にロードされているかどうかを判断する方法は?

Railsアソシエーションが熱心にロードされているかどうかを判断する方法を知っている人はいますか?

私の状況:アソシエーションの1つが熱心にロードされる場合と、ロードされない場合がある結果セットがあります。熱心にロードされていない場合は、ActiveRecordの検索を使用して関連付けを検索したいと思います。熱心にロードされている場合は、detectを使用したいと思います。

たとえば、アイテムモデルにshipping_infoオブジェクトの「has_many」配列があるとします。それで:

アイテムが熱心にロードされる場合、最も効率的なロードは次のとおりです。

アイテムが熱心にロードされていない場合、最も効率的なロードは次のとおりです。

しかし、それが熱心にロードされているかどうかがわからない限り、レコードを効率的に取得するためにどのコードを呼び出すべきかわかりません。熱心にロードされていないときに最初の方法を使用すると、必要以上に多くのDBレコードを検索する必要があります。また、熱心にロードされたときに2番目のメソッドを使用すると、熱心にロードされたオブジェクトは無視されます。

0 投票する
1 に答える
1439 参照

entity-framework - 複雑なクエリで Entity Framework の一括読み込みが失敗する

次のクエリを実行すると、テーブルの読み込みに失敗します。

この問題に関連する記事をいくつか見つけました。具体的には、 Alex James の記事「インクルードを実際にインクルードする方法」です。このソリューションには、1 つの注意事項があります。

これが機能するには、最終的な選択はエンティティでなければなりません。つまり、新しいものを選択するのではなく、投稿を選択してください {…}

これは明らかに上記のコード ブロックの問題です。熱心な読み込みを中断しない、この問題に対する既知の回避策は他にありますか?

0 投票する
4 に答える
2284 参照

ruby-on-rails - Rails エラー: 結合 + インクルード

私は次のモデルを持っています:

公開されているすべての画像を取得しようとしていると同時に、それらの画像を所有している人々を熱心に読み込もうとしています:

Rails は :include を好まないようです (:person が 2 つのモデルで参照されているためだと思います)。これは私が得るエラーです( :include オプションをドロップすると消えます):

"ActiveRecord::StatementInvalid: Mysql::Error: 一意のテーブル/エイリアスではありません: 'people'"

実際の JOIN コマンドを文字列として書き出して :include オプションに渡すことでこれを回避できますが、これは Rails-y ではないため、これを行うためのよりクリーンな方法があることを望んでいました。

どんな助けでも大歓迎です。

ありがとう!