我有一个项目,为用户提供了当前需要完成的任务列表。任何用户都可以完成任何任务,因此为了确保一次只有一个用户在处理一个任务,我需要能够“锁定”它。我使用SignalR来做这件事,所以一个用户请求一个任务的锁,如果他们成功了(即.如果没有其他人锁定它),那么他们将能够访问他们需要的进一步信息。
我的问题是如何存储锁定任务的列表。最初的计划只是在任务表中添加一个额外的位字段'IsLocked‘,并在用户请求锁和任务解锁时进行更新。然而,我们有大约300个并发用户,一个任务只需要3-4分钟,这意味着在数据库上有大量额外的-和很小的-查询。因此,我们想知道内存中的存储,简单地将任务ids列表存储在“lockedTasks”列表中。
我曾考虑过使用缓存,但不确定最好的方法是什么,也不确定是否有更好的替代方案。如果任何人在这方面有任何经验,那么将非常感谢您的一些建议
发布于 2011-09-30 16:44:02
我会完全避免内存,因为IIS并不是很好用,如果你发现你自己因为某种原因需要刷新应用程序池,你的列表就会消失!
也许是MemCache system?如果它不是以上述方式松动的话,但是...
我建议在中间,IO文件是请求数据到数据库的快速,特别是如果它不在同一台机器上(出于安全原因,它永远不应该在同一台机器上),所以...为什么不使用当前著名的NoSQL数据库呢?
是一个文档数据库,它有一个.NET Library,它很容易使用,它没有内存快,但比物理数据库快得多。
通常,NoSQL数据库将托管在App_Data文件夹中,因此访问它将非常快,您可以在那里保存所有锁定任务的task_id和user_id。
发布于 2011-09-30 18:15:54
您是否考虑过状态筛选器?
有关更多信息,请查看此链接:
发布于 2011-09-30 16:44:16
很抱歉,如果您的应用程序不能处理每3-4分钟x300个用户的单个查询,那么您正在做一些非常错误的事情。仅仅浏览一个网站通常就会产生比这多几个数量级的查询。
https://stackoverflow.com/questions/7607841
复制相似问题