Entity Framework(すべてAzure上)を使用してデータベースからデータを読み取るASPMVC3.0アプリケーションがあります。実行時間の長いクエリがいくつかあり(最適化が行われています)、ソリューションがスケーラブルであることを確認し、スレッドの枯渇を防ぎたいと考えています。
非同期コントローラーを調べ、I / O完了ポートを使用してクエリを実行しました(通常のEFの代わりにBeginExecuteを使用)。ただし、非同期はデバッグが難しく、コードが複雑になります。
提案された解決策は次のとおりです。
Webサーバー(Webロール)は、長時間実行されるクエリを含む要求を受け取ります(顧客セグメンテーションの例)
リクエスト情報を関連するパラメータとともにテーブルに入力して戻り、スレッドが他のリクエストを処理できるようにします。
ページの更新が行われるたびにUIがクエリが進行中であることを示すことができるように、データベースにフラグを設定します。
ワーカーロールは常にこのテーブルをクエリし、このエントリが見つかるとすぐに、長時間実行されるクエリ(顧客セグメンテーション)を処理し、元の顧客テーブルを結果で更新します。
この場合、ユーザーにステータスをすぐに戻す必要はありません。ユーザーは数分以内にもう一度チェックして、リクエストが処理されたかどうかを確認できます。テーブルの代わりにAzureキューを使用することを計画していました(ただし、Azureキューはワーカーの役割に通知できないため、dbテーブルで問題なく動作します)。これは実行可能なソリューションですか。このようにすることの落とし穴はありますか?