0

私は、WCF WebサービスがNHibernateをデータベースORMとして使用するWebサイトを開発しています。各ユーザーセッションには、セッションレベルで開いたままにしてセッションDBキャッシュを提供する独自のNHibernateセッションがあります。

各ユーザーには、新しいメッセージ、新しいいいねなど、他のユーザーからの通知のリストを含む概要オブジェクトがあります。これは、Facebook の通知が上部にあり、他のユーザーからの新しいいいね、コメントなどを表示するために定期的に更新されるのと同様です。小さな赤い旗のアイコン。

サマリー オブジェクトは、ロードされると明らかに NHibernate キャッシュ レベルで保持されます。オブジェクトが変更されたかどうかを確認し、新しい通知が受信された場合はビジュアル フラグを更新するための AJAX 呼び出しを行うのは簡単なことです。

問題は、ユーザーに新しいメッセージを送信するなど、これに対する変更が別の NHibernate セッションで行われることです (各ユーザーには独自のセッションがあり、自分自身にメッセージを送信しないためです!) では、ユーザー Y 、セッション Y で、ユーザー X にメッセージを送信し、ユーザー X の概要を更新して 1 つの新しいメッセージを表示しますか?

要約の詳細のために毎回コードを強制的に DB に移動させ、要約オブジェクトにキャッシュをまったく使用しないようにする唯一の方法はありますか? 別のセッションを更新する方法があったとしても、適切なセッションを見つける方法がわからないので、唯一の方法はDBサマリーテーブルを更新し、更新をチェックするポーリングスレッドを使用することだと思います毎回DBにアクセスしてキャッシュを無視するアクティビティへ。

何かご意見は?

4

1 に答える 1

2

NHibernate のガイダンスでは、ISession オブジェクトはできるだけ短く存続する必要があります...アプリケーションが多数のユーザーによって使用されている場合、現在のソリューションは拡張できません。

于 2012-11-29T18:11:27.137 に答える