セッションごとの要求パターンを使用して、ASP Web アプリケーションで nHibernate を使用しています。ユーザーが実行できるアクションの中には、数百の INSERT ステートメントと UPDATE ステートメントが発生し、完了までに数秒かかるものがあります。これにより、トランザクション全体がデータベースにコミットされるまでユーザーは自分のアクションの結果を確認できないため、パフォーマンスが低下します。
ところで、以前は結果をセッションに保存しましたが、これも良い解決策ではありません。セッションに何かを書き込むと、読み取り/書き込みロックが発生し、同時要求が順番に処理されます。したがって、長いリクエストは、完了するまで他のリクエストをブロックします。そのため、結果をデータベースに書き込むことに切り替えましたが、説明したように、これには独自の問題があります。
この問題にどのようにアプローチできますか?結果がバックグラウンドでコミットされている間に、何らかの方法で結果 bakc をブラウザーに送信することしか考えられません。それが可能であれば、セッションがブラウザからのリクエストに結合されているため、どうすればよいかわかりません。しかし、多分それは可能ですか?または、うまくいく解決策はありますか?
編集
- Guid.Comb 識別子戦略を使用しています
- コミットのサイズを把握するには、1 つのコミットに 2000 を超える INSERT および UPDATE ステートメントが含まれ、操作の実行中に同様の量の SELECT ステートメントが発行されます。コミットが完了するまでに 2 ~ 4 分かかります (そんなに長いですか?)。
十分な情報を提供していない場合はお尋ねください。解決策を探すべき方向がわからないので、現時点でここに何を書くのが面白いのかよくわかりません。