2011-09-30 48 views
2

我有一个为用户提供需要完成的当前任务列表的项目。任何用户都可以完成任何任务,以确保只有一个用户正在处理某项任务,而我需要能够“锁定”它。我为此使用了SignalR,因此用户请求锁定任务,并且如果它们成功(即,如果没有其他人锁定它),则他们将能够访问他们需要的更多信息。ASP.NET MVC 3内存数据存储

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

我曾考虑过使用缓存,但我不确定最佳的方法来做到这一点,或者即使存在更好的替代方法。如果有人在这则任何经验的一些建议将是巨大的感谢

回答

2

我会避免内存完全因为IIS是不与它是伟大的,如果你发现在IIS需要你的自我刷新的应用程序池的一些有点理由,你的名单已经不复存在了!

也许是MemCache系统?如果它不以上述方式松动的东西,但...

我会建议在中间,IO文件是快速的请求数据到数据库,特别是如果它不在同一台机器(女巫for安全的原因,它永远不应该),所以......为什么不呢,只是为了保留你的列表,你不使用目前着名的NoSQL数据库

MongoDB是一个文档数据库,它有一个.NET Library,它很容易使用,它不像Memmory那么快,但是比物理数据库要快得多。

通常情况下,NoSQL数据库将在App_Data文件夹托管,因此这将是非常快的访问,你可以牵住存在的所有锁定任务task_iduser_id

0

很抱歉,如果您的应用无法每隔3-4分钟处理一次单个查询x 300个用户,那么您的做法非常错误。只是浏览一个网站通常会产生比此更多数量级的查询。

+0

BTW:计数为3到4分钟之间的300个查询,而不能一个单一的查询,他们必须更多,'GET_USER','GET_TASK_DETAILS'等...... :)但如果它**正确**设置,除了需要改进已经很好的工作,我没有看到任何问题;) – balexandre

+0

不,我意识到单独并不是一个巨大的数额,但所有这些额外的电话是额外的负载,应用程序已经在做的顶部。我不想给数据库增加额外的负担,如果我不需要 –

+0

我同意@MystereMan。你不是过早优化吗? – JefClaes