私はJava/J2EEでWebアプリケーションを開発しています。その中にエクスポート機能があります。私は同じためにジャスパーを使用しました。問題は、大量のデータをエクスポートしようとすると、多くの時間を消費することです。
パフォーマンスを向上させるために、エクスポート機能の設計アプローチはありますか?
以前にJExcel APIを試してから、DynamicJasper APIに移行しました。
私が同様の問題に取り組んだ方法は、別のサービスを作成することでした。
Excelデータのリクエストはキューに入れられます。
次にサービスはリクエストを処理し、Excelをメールの添付ファイルとして返します。返信メールは最初のリクエストの一部として指定されます。
これは問題なく機能し、物事がクラッシュした場合(私はすべて2つのインスタンスしか持っていませんでした)、リクエストは失われず、単にキューに入れられます。
Excelが喜んで読み込む.csvにエクスポートしてみてください。これが、すべての「Excel」エクスポートをWebアプリで行う方法です。その出力は非常に簡単であり、そのためのライブラリは必要ありません(おそらくJava用のライブラリはあります)。さらに、人間が読める形式。
25,000行の7分が聞こえます異常に遅い。私は話しているそれを遅くするためにあなたの方法から出なければならないでしょう遅い。いくつかのメトリックを実行して、異なるサイズのデータセット間で時間がどのように異なるかを確認できます。徐々に遅くなる場合は、エクスポーターがExcelデータのロード、行の追加、ファイルへの保存... Excelファイルのロード、別の行の追加、ファイルへの保存などを行っていることを示している可能性があります。
Apache POI を使用してこれを行いますが、Jasperもおそらくそれを使用するため、POIを直接使用することではるかに高速な結果が得られるとは思いません。
大規模なエクスポート(50000行x 15列など)は大量のメモリを必要とするため、ヒープ領域を増やすことは必須ですが、おそらくすでにそれを理解しています。
JExcelAPI を試してみてください。しかし、私はそれについての経験はありません。