4

batch-sizeマッピング内で一般的にどのように使用されているかをお聞きしたいと思います。一般に、マップされたコレクションに特定の番号を設定しますか?もちろん、のような他のフェッチ戦略については知っていますがjoin fetch、後処理中にフィルタリングする必要がある場合があります。これにより、多くの遅延読み込みがトリガーされる可能性があります。バッチサイズをたとえば100に設定すると、そのような場合のパフォーマンスが大幅に向上することがわかりました。

マップされたコレクションにこのプロパティを一般的に設定しますか?そうでない場合は、なぜですか?何か不利な点はありますか?

4

1 に答える 1

4

コレクションまたは親エンティティに設定batch-sizeすると、ほとんど同じことが行われます。

batch-size実際に行っているのは、問題SELECT N+1を取り上げてそれを条件に変えることSELECT N/batch-size + 1です。

欠点があります。それは、正しい数値を設定することの違いのバランスを取る必要があることです。バッチサイズを大きくしすぎると、ロードするデータが多すぎます。小さくしすぎると、クエリが多すぎます。これをどのようにバランスさせるかは議論の余地があり、テストを設定せずに測定することは不可能です。

私はこれをマイクロ最適化と考えています。これは、select / n+1の問題を実際に減らすことができるため重要です。ただし、シナリオごとに個別に正しいフェッチ戦略を選択することほど重要ではありません。これにより、全体としてより優れた戦略が実現します。

また、これは本番環境の問題であると考えており、実際のデータに対して実際のユーザーに対してテストする必要があります。

ちなみに、私は常にbatch-sizeページングサイズと同じになるように設定していますが、なぜそれがちょうどいいと感じるのか私に聞かないでください!

于 2012-04-26T11:28:00.920 に答える