【发布时间】:2012-12-10 21:39:18
【问题描述】:
我的 ASP.NET MVC 4 项目使用 EF5 代码优先,并且一些域对象包含根据传入请求更新的非持久化计数器属性。这些请求非常频繁,并且很可能出现多个请求会话正在修改这些计数器的情况。
我的问题是,是否有最佳实践(不一定与 ASP.NET 或 EF 相关)来处理这种情况?我认为(但我不确定)为了讨论,我们可以将域对象视为简单的 POCO(它们就是)。
编辑:根据要求,以下是实际情况:
该系统是一个订阅者和内容管理系统。对等服务器正在发出我的系统授权或拒绝的请求。授权请求会导致在对等服务器中打开会话。当对等服务器中的会话关闭时,它会发出一个请求,通知会话已关闭。
我的系统需要提供统计信息 - 例如,每个内容项(域实体之一)当前打开的会话数 - 并提供实时数据以及每分钟、每小时、每天、每周等. 数字。
由于性能问题,无法通过查询数据库来提取这些数字,所以我决定在内存中实现基本的计数器,每分钟将它们持久化到数据库中,并以每小时、每天等方式获取。那里的数字。
上述问题是因为每个对等服务器请求都会更新这些“计数器”。
我希望现在更清楚了。
【问题讨论】:
-
如果您询问您想要实现的目标,人们将能够更好地帮助您。 EF 实体中的共享计数器可能不是最好的方法。如果您需要它来扩展,您可能无论如何都必须对计数器进行分片。
-
您说计数器没有持久化,但您暗示它们在多个传入请求中得到维护。您能定义传入请求的含义吗?持久性有多种形式,要回答你的问题需要更多关于问题的细节。
-
可能值得调查
ConcurrentDictionary
标签: c# .net asp.net-mvc concurrency