ちょっとした裏話: 私は、編集/操作のためにユーザーにデータを渡す前に、データを準備/クランチするのにかなりの時間を必要とする Web アプリケーションに取り組んでいます。データ要求タスクは、完了に 15/20 秒、処理に数秒かかります。そこに到達すると、ユーザーはその場で値を操作できます。値を操作するには、データを完全に再処理する必要があります。
更新: 混乱を避けるために、データ呼び出しを 1 回だけ行い (15 秒のヒット)、結果をメモリに保持して、ユーザーが 100% 作業を完了するまで再度呼び出す必要がないようにしたいと考えています。 . そのため、最初のプルには時間がかかりますが、Ajax を使用して、メモリ内のデータをヒットして常に更新し、応答時間を約 2 秒程度に保ちます (希望)。
これを効率的にするために、初期データをメモリに移動し、サーバーへの Ajax コールバックを使用して、このユーザーの更新で発生する再計算を処理するための処理時間を短縮できるようにしています。
これが私の質問です。パフォーマンスを念頭に置いて、このデータを保存する最良の方法は何ですか。特定の瞬間にこのデータを使用して作業するユーザーは 1 人だけであると仮定します。
また、ユーザーはこのプロセスで数時間作業している可能性があります。ユーザーがデータを操作しているときに、セッションが何らかの方法で中断された場合に、ユーザーの現在のデータを (データベースまたはシリアル化されたバイナリ ファイルに) 保存するために、何らかのフェイルセーフが必要になります。言い換えれば、ユーザーが長時間接続を切断したり気が散ったりした場合に備えて、メモリ オブジェクトのデータをダンプできる適切なフックを備えたソリューションが必要になります。
これまでのところ、ここに私の考えがあります:
セッション状態 - 長所: 1 人のユーザーにロックされます。私のフェイルセーフ要件を満たすセッション終了イベントがあります。短所:現在のオプションの中で最も遅いパフォーマンス。セッション終了イベントは、適切に発生することを確認するのが難しい場合があります。
キャッシュ - 長所: 優れたパフォーマンス。後でボーナスになる可能性がある依存関係にアクセスできますが、現在の範囲ではあまり役に立ちません。短所: 時間間隔に基づく書き込み以外に、簡単なフェールセーフ手順はありません。グローバルな範囲 - ユーザーがお互いの作業と衝突しないようにする必要があります。
静的 - 長所: 最高のパフォーマンス。現在のクラス構造を直接活用できるため、保守が容易です。短所: 時間間隔に基づく書き込み以外に、簡単なフェールセーフ手順はありません。グローバルな範囲 - ユーザーがお互いの作業と衝突しないようにする必要があります。
私が選択すべきオプションについて、誰か提案/コメントはありますか?
ありがとう!
更新: 言い忘れましたが、私はこのタスクを実行するために VB.Net、Asp.Net、および Sql Server 2005 を使用しています。