環境:
- Windows Server 2003-IIS 6.x
- ASP.NET 3.5(C#)
- IE 7,8,9
- FF(最新の10バージョンが何であれ)
ユーザーシナリオ:
ユーザーは、大規模なデータセットに対して検索条件を入力します。リクエストを開始すると、結果ページに移動し、データが読み込まれるまで待機してから、データを絞り込むことができます。
技術シナリオ:
ユーザーが(ajax呼び出しを介して)検索条件を送信した後、UIはバックエンドサービスを呼び出します。バックエンドサービスはトランザクションシステムにクエリを実行し、結果のデータをデータベースの「キャッシュ」に配置します。これは非正規化されたテーブルであり、データをさらに絞り込むために設定されます(つまり、並べ替え、フィルタリング)。UIは、データがキャッシュされるまで待機し、プロセスが完了したことを通知されると、結果のページに移動します。次に、結果のページは、非正規化されたテーブルからデータを取得するための呼び出しを行います。
問題:
入力された基準に基づいて多くのシステムにクエリを実行する必要がある大規模なクエリの検索は、比較的低速(15〜25秒)です。他のクエリでは比較的高速です(<4秒)。
技術的な制約:
この検索/結果システムを完全に再構築することはできません。ここでは、UIとバックエンドを結び付ける方法の間に多くの複雑さへの道があります。検索条件を実行した後、ページをめくる必要があります(StackOverflowでは解決できない制約のため)。
また、データはリアルタイムである必要があるため、検索前にデータを非正規化するように組織に依頼することはできません。つまり、ユーザーが他のシステムに変更を加えた場合、後で検索を行うとデータが正しく表示される必要があります。
私が従いたいプロセス:
少しごまかしたいです。fire-forgetモデルの非同期HttpHandlerを介して「Cache」リクエストを発行したいと思います。
クエリを発行した後、ページを結果のページに移行したいと思います。
遷移ページで、「キャッシュ」テーブルをポーリングして、データがまだ挿入されているかどうかを確認したいと思います。
この移行をすぐに実行したい理由は、結果のページ自体が(データを取得しなくても)コストがかかるためです。キャッシュからデータを取得するサービスを呼び出す前に、ロード時間は2秒です。
質問:
javascriptリダイレクトを使用してページから移動した場合でも、非同期ハンドラーを介して呼び出されたASP.NETスレッドは確実に処理を続行しますか?
技術的境界2:
はい、わかっています...この検索プロセスは効率的ではありません。今はそれについて私にできることは何もありません。私は、それをどのように再構築するかを研究し続けている間、それを少し良くするためにできることは何でもしようとしています。
あなたの答えが「それを捨てて最初からやり直す」であるならば、答えないでください。それは受け入れられません。