2014年11月24日

50. DBの大量データから生成したcsv形式ファイルのHTTPダウンロード処理について

DBの大量データから生成したcsv形式ファイルのHTTPダウンロードを行う場合は、OutOfMemoryErrorを回避するため、下記の通り、ストリーミング処理すること。

1.フェッチ機能( preparedStatement.setFetchSize() )を利用する。
 これにより、一度に(DBから)すべての検索結果を受け取らなくなり、一時的にメモリを大量消費することがなくなる。
 ただし、(特にフェッチサイズが小さい場合)パフォーマンスとのジレンマになるため、注意する。
 (※ preparedStatement.executeQuery() を実行する前に呼び出す必要がある。)

2.(DBから)数件ずつ検索結果を受け取り、段階的にcsv形式ファイルをファイルストアに作成する(バッファリング機能を利用する)。

 例)
 new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encode));

3.ファイルストアのcsv形式ファイルを読み込みながら(バッファリング機能を利用する)、HTTPレスポンスに書き込む(バッファリング機能を利用する)。

 例)
 new BufferedInputStream(new FileInputStream(file));
 new BufferedOutputStream(response.getOutputStream());

この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック