1

私の ASP.NET MVC 4 プロジェクトは EF5 コード ファーストを使用しており、一部のドメイン オブジェクトには、着信要求に従って更新される永続化されていないカウンター プロパティが含まれています。これらの要求は非常に頻繁に発生し、複数の要求セッションがこれらのカウンターを変更しているシナリオは非常に可能性が高いです。

私の質問は、必ずしも ASP.NET や EF に関連するわけではありませんが、このシナリオを処理するためのベスト プラクティスはありますか? この議論のために、ドメインオブジェクトを単純なPOCO(それらはそうです)として扱うことができると思います(しかし、よくわかりません)。

編集:要求されたとおり、以下は実際のシナリオです:

このシステムは、サブスクライバーおよびコンテンツ管理システムです。ピア サーバーは、システムが承認または拒否する要求を発行しています。許可された要求により、ピア サーバーでセッションが開かれます。ピアサーバーでセッションが閉じられると、セッションが閉じられたことを通知するリクエストが発行されます。

私のシステムは、統計情報 (たとえば、各コンテンツ アイテム (ドメイン エンティティの 1 つ) の現在開いているセッションの数) を提供し、リアルタイムの数値だけでなく、分単位、時間単位、日単位、週単位などの数値も提供する必要があります。

これらの数値は、パフォーマンスの問題によりデータベースにクエリを実行しても抽出できないため、基本的なカウンターをメモリ内に実装し、データベースに毎分保持し、そこから毎時、毎日などの数値を取得することにしました。 .

上記の問題は、各ピア サーバー要求がこれらの「カウンター」を更新するという事実から生じます。

より明確になったことを願っています。

4

2 に答える 2

1

実際には、テストやプロファイラー ツールから十分な情報が得られない前に、パフォーマンスについてそれほど警戒する必要はないと思います。

しかし、EF を使用している場合は、Martin Fowler が著書で説明しているUnit Of Workパターンの実装である DataContext を扱う必要があります。このようなパターンの主なアイデアは、データベースへのリクエストの量を減らし、すべての変更をコミットしなくなるまで、メモリ内でデータを操作することです。したがって、私の短いアドバイスは、EFエンティティを標準的な方法で使用することですが、データが更新されるたびに変更をコミットするのではなく、たとえば100回の変更の後など、いくつかの間隔を置いて、セッション、アプリケーションセッション、キャッシュまたは何処か別の場所。注意すべき唯一のことは、毎回適切な DataContext オブジェクトを使用し、不要になったときに破棄することを忘れないことです。

于 2012-12-12T03:28:19.763 に答える
1

あなたのシナリオには、堅実な永続化戦略が必要なようです。

カウンター オブジェクトは、HttpRuntime.Cache. ダン・ワトソンは、ここで例外的な記事を書いています: http://www.dotnetguy.co.uk/post/2010/03/29/c-httpruntime-simple-cache/

CacheItemPriority.NotRemovableメモリ再利用中に状態を維持するために必ず使用してください。キャッシュは、アプリ ドメインのスコープ内で維持されます。キャッシュ内のカウンター (スレッドセーフ!) を取得して更新し、おそらく統計ページまたはその他のオプションからそのステータスを照会できます。ただし、ランタイムの範囲を超えてデータを永続化する必要がある場合は、既に使用している戦略で十分です。

于 2012-12-10T22:51:27.460 に答える