テーブルから何百万ものデータをフェッチしようとしています。Java Play Framework 2.0 を使用していますが、問題があります。クエリに制限を設定するとうまく機能し、すべてのデータを要求すると次のようなエラーがスローされます
Exception in thread "pool-3-thread-1" java.lang.OutOfMemoryError: Java heap space
誰でもここで私を助けることができますか?
テーブルから何百万ものデータをフェッチしようとしています。Java Play Framework 2.0 を使用していますが、問題があります。クエリに制限を設定するとうまく機能し、すべてのデータを要求すると次のようなエラーがスローされます
Exception in thread "pool-3-thread-1" java.lang.OutOfMemoryError: Java heap space
誰でもここで私を助けることができますか?
マニュアルからの引用:
デフォルトでは、ドライバはクエリのすべての結果を一度に収集します。これは大規模なデータ セットには不便な場合があるため、JDBC ドライバーはデータベース カーソルに基づいて ResultSet を作成し、少数の行のみをフェッチする手段を提供します。
(私のものを強調)
マニュアルでは、すべてをメモリにロードしないようにドライバーを構成する方法について詳しく説明しています:
http://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor
データベースによっては、 java.sql.Statement.setFetchSize が役立つ場合があります。Play Framework には詳しくありませんが、JDBC でフェッチ サイズを設定できます。