1

私たちの Web アプリケーションには、次の機能があります。

  1. 製品のリストを取得します
  2. それらをExcelファイルに書き込みます
  3. ダウンロード用の Excel ファイルをユーザーに返します

このプロセスは、製品の数に応じてより頻繁にかかり、> 2 分かかります。一部のリクエストには 5 分以上かかります。平均して、ユーザーは 100 ~ 500 個の製品をダウンロードし、リクエストには約 1 ~ 5 分かかります。

単一のリクエストで Web サーバースレッドをアクティブにするには、1 分では長すぎると思います。非常に時間がかかるという事実は別として、プロセス自体がサーバーでメモリ不足エラーを引き起こし、サーバーをクラッシュさせます。

これは悪い習慣であり、ソフトウェア アーキテクトが書いた記事や本、研究を引用して、この状況で何をすべきかについての推奨事項とともに、設計を変更する必要があることを彼らに納得させたいと思います。

そのような本/記事/研究を知っている人はいますか?

1 つのリクエストで Web サーバー スレッドをアクティブにするには 1 分間は長すぎるという私の考えに同意できない場合は、その理由を教えてください。

4

2 に答える 2

2

xls を生成するロジックを再考してみましたか? それがビジネス要件である場合、彼らはそれを変更することに本当に消極的である可能性があるためです(そこにあり、それを行いました)。

私は apache-poi を使用して xls を生成し、レポートを作成し、満足のいくパフォーマンスを実現しました (レポートを作成するのに最大数秒)。サーバー側のキャッシュを使用してデータをキャッシュしました。そして、xls を取り出します。

于 2011-01-06T19:42:34.417 に答える
1

ダウンロードされる Excel のリストが固定されている場合は、それらをバックグラウンド スレッドで生成し、ダウンロード用の直接リンクを返すことを検討できます。1 時間または 2 時間に 1 回変更されたとしても、オンデマンドで生成するのではなく、それを行う価値があります。

もう 1 つの方法は、ユーザーが製品リストを選択し、ダウンロード リンクが記載された電子メールを受信したい場合、または電子メールの添付ファイルとしてファイルを受信したい場合に、オプションを提供するよう Excel に要求する場合です。承認された場合は、各要求をキューに送信し、Excel シートを生成してメールの添付ファイルとして送信するバッチ ジョブを実行します。この方法では、Web サーバーを抑制しません。

さらに、私の主な質問は、プロセスのどの部分に時間がかかっているのか、なぜ 1 分以上かかるのかということです。その領域 (DB 接続 {プーリング、サーバーのコロケーション}、巨大なテーブル {パーティション}、Excel 生成) を調査する価値はありますか?

各 Excel に固定グラフィックスを追加していますか? その場合は、ヘッダー/フッターなどを既に持っているテンプレートを使用してください。

設計やアプローチが悪いとやみくもに言うのではなく、ボトルネックを生み出している部分を再検討する価値があります。

調査により、おそらく現在の問題が修正されるか、少なくとも将来の設計で同じ過ちを持ち越すことはないでしょう。

于 2011-03-09T19:55:21.553 に答える