ASP.NET MVC 3内存数据存储

时间:2011-09-30 08:31:45

标签: asp.net-mvc caching in-memory

我有一个项目,为用户提供需要完成的当前任务列表。任何用户都可以完成任何任务,因此为了确保每次只有一个用户正在处理任务,我需要能够“锁定”它。我正在使用SignalR,因此用户请求锁定任务,如果它们成功(即,如果没有其他人锁定它),那么他们将能够访问他们需要的更多信息。

我的问题是如何存储锁定任务列表。最初的计划只是向Task表添加一个额外的位字段'IsLocked',并在用户请求锁定和任务解锁时更新。但是,我们有大约300个并发用户,一个任务只需要大约3-4分钟,这意味着数据库上有大量额外的和微小的查询。因此,我们想知道内存存储,只需在'lockedTasks'列表中存储任务ID列表。

我曾考虑使用缓存,但我不确定最佳方法,或者即使存在更好的替代方案。如果有人有任何经验,那么一些建议将非常好,谢谢

3 个答案:

答案 0 :(得分:2)

我会完全避免使用内存因为IIS并不是那么好用,如果你发现自己需要在IIS中刷新应用程序池,那么你的列表就不见了!

也许 MemCache系统?如果它没有以上述方式松动,但......

我建议处于中间位置,IO File快速向数据库请求数据,特别是如果它不在同一台机器上(出于安全原因,它应该永远不会),所以...为什么不呢,只是为了保存你的清单,你不使用当前着名的 NoSQL数据库之一?

MongoDB是一个文档数据库,其.NET Library并且易于使用,它不如Memmory快,但比物理数据库快得多。

通常,NoSQL数据库将托管在App_Data文件夹中,因此访问速度非常快,您只需按住所有锁定任务的task_iduser_id即可。< / p>

答案 1 :(得分:2)

您是否考虑过有状态过滤器?

查看此链接以获取更多信息:

答案 2 :(得分:0)

对不起,如果你的应用每3-4分钟x 300个用户无法处理一次查询,那么你做错了。只是浏览一个网站通常会产生比这更多的查询。