2017-06-29 14 views
0

テーブルに裏打ちされたJpaRepositoryの大きなデータセットを取得することを検討しています。選択肢は、エンティティのコレクション(List)またはPageを返し、結果をステップ実行することです。ご注意ください - 私はこのセットのすべてのレコードを正確に1回消費しなければなりません。これは、「最初から1つ目の大規模なデータセットとリターン」操作ではありません。ページデータ付きSpringデータOracle JPAパフォーマンス

ページングのアイデアは魅力的ですが、質問されたページごとに以前のn-1ページをプルアップする必要があるため、パフォーマンスがひどく(n^2)結果セット。

代わりにListの私の理解は、全体の結果セットがメモリにロードされるということです。 oracle JPA springにはバッキング結果セットがありません。だからここ

は、私の質問は

  1. ある正しい春データと連携List方法の私の理解ですか?それ以外の場合は、Listを使用します。
  2. 私が正しければ、ストリームの結果セットがありますか?
  3. 私が気づいていない第3の方法がありますか?
+0

ドン」 により、たとえば、リターンパラメータとしてSliceの代わりPageを使用することができ、それを回避するために、難読化レイヤー(別名「ORM」)を使用します。プレーンJDBCを使用して、 'ResultSet'を繰り返し処理します。次に、メモリ内の現在の行を保持する必要はありません。 –

+0

@a_horse_with_no_name、ありがとうございます。 forward-onlyの結果セットでJDBCを使用することはできますが、Springのデータを使用する代わりに、これがプロジェクトの残りの部分を使用するためです。 – Prashant

+1

パフォーマンスと(メモリ)効率を必要とする場合は、「直接」JDBCコールの代替手段はありません。 –

答えて

1

SDJでページ可能なメソッドは、すべての要求に応じてselect count(*) from ...を追加で呼び出します。私はこれが問題の理由だと思う。

Slice<User> getAllBy(Pageable pageable); 

それとも、ページネーションとエンティティのさえListを使用することができます:

List<User> getAllBy(Pageable pageable); 

追加info

関連する問題