我有一个项目,为用户提供需要完成的当前任务列表。任何用户都可以完成任何任务,因此为了确保每次只有一个用户正在处理任务,我需要能够“锁定”它。我正在使用SignalR,因此用户请求锁定任务,如果它们成功(即,如果没有其他人锁定它),那么他们将能够访问他们需要的更多信息。
我的问题是如何存储锁定任务列表。最初的计划只是向Task表添加一个额外的位字段'IsLocked',并在用户请求锁定和任务解锁时更新。但是,我们有大约300个并发用户,一个任务只需要大约3-4分钟,这意味着数据库上有大量额外的和微小的查询。因此,我们想知道内存存储,只需在'lockedTasks'列表中存储任务ID列表。
我曾考虑使用缓存,但我不确定最佳方法,或者即使存在更好的替代方案。如果有人有任何经验,那么一些建议将非常好,谢谢
答案 0 :(得分:2)
我会完全避免使用内存因为IIS并不是那么好用,如果你发现自己需要在IIS中刷新应用程序池,那么你的列表就不见了!
也许 MemCache系统?如果它没有以上述方式松动,但......
我建议处于中间位置,IO File快速向数据库请求数据,特别是如果它不在同一台机器上(出于安全原因,它应该永远不会),所以...为什么不呢,只是为了保存你的清单,你不使用当前着名的 NoSQL数据库之一?
MongoDB是一个文档数据库,其.NET Library并且易于使用,它不如Memmory快,但比物理数据库快得多。
通常,NoSQL数据库将托管在App_Data
文件夹中,因此访问速度非常快,您只需按住所有锁定任务的task_id
和user_id
即可。< / p>
答案 1 :(得分:2)
您是否考虑过有状态过滤器?
查看此链接以获取更多信息:
答案 2 :(得分:0)
对不起,如果你的应用每3-4分钟x 300个用户无法处理一次查询,那么你做错了。只是浏览一个网站通常会产生比这更多的查询。