ハイバネートクエリの結果からCSVを生成しようとしていますが、最大200k行を含むことができ、作成されたCSVは約30MBです。オブジェクトリストからCSVを生成
私はパフォーマンスを何か近くで受け入れるのに苦労しています。 現在、私の休止状態のクエリは、オブジェクトのリストを返します。 次に、StringBuilderを使用してCSV文字列を生成します。 それからバイト配列を取得し、バイト配列をresponse.outputstream.write()メソッドに渡します。
このサイズのCSVを効率的に生成するにはどうすればよいですか?
マイサービス
List<Object> objectList = hibernateDao.getObjectList(objectList);
StringBuilder sb = new StringBuilder();
sb.append("field1_id,field2,field3,field14");
for(Object object : objectList){
sb.append("\n");
sb.append(object.field1());
sb.append(",");
sb.append(object.field2());
sb.append(",");
sb.append(object.field3());
...
...
sb.append(",");
sb.append(object.field14);
}
byte[] bytes = sb.toString().getBytes();
return bytes;
私のコントローラは[]
response.setHeader("Content-Type", "text/comma-separated-values");
response.getOutputStream().write(objectService.getListByteArray());
はストリーミングを使用しています。メモリに膨大なファイルを作成してからストリームしないでください。それをデータベースからあなたの応答に直接ストリームしてください。スーパーCSVはかなり速いです –