大規模な MySQL 結果の効率的なストリーミング
Spring アプリケーションの開発において、巨大な MySQL テーブルからデータを取得することは、潜在的に大きな課題となる可能性があります。 OutOfMemoryExceptions が発生します。これは、MySQL JDBC ドライバーのデフォルトの動作では、結果セット全体がメモリにロードされるためです。
フェッチ サイズの設定: 不十分な対策
この問題を軽減するには開発者は、statement.setFetchSize(Integer.MIN_VALUE) メソッドを使用してフェッチ サイズを設定することがよくあります。ただし、これだけでは包括的な解決策ではありません。 Statement#setFetchSize() のドキュメントに記載されているように、フェッチ サイズはドライバーにヒントを提供するだけであり、尊重される場合もされない場合もあります。
MySQL JDBC ドキュメントの再確認
MySQL JDBC ドライバーのドキュメントを詳しく調べると、大規模な結果をストリーミングするためのより微妙なアプローチが明らかになります。ストリーミングを有効にするには、次のようにステートメントを作成する必要があります:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);
ストリーミングの注意事項
このアプローチの実装には、次のような注意事項があります:
メモリ割り当てを再考してください
フェッチ サイズを設定し、ステートメントの作成を調整する場合は、 OutOfMemoryError を解決するには、根本原因は Java メモリ内のデータの保存にある可能性があります。結果セット全体をキャッシュするのではなく、結果セットが使用可能になったらすぐに処理することを検討してください。これには大幅なコードの変更が必要になる場合があり、完全な書き換えが必要になる可能性があります。
以上がOutOfMemoryErrors を回避するために Spring で大規模な MySQL 結果セットを効率的にストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。