2

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

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

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

4

3 回答 3

2

我会完全避免使用内存,因为 IIS 不是那么好,如果您发现自己在 IIS 中出于某种原因需要刷新应用程序池,那么您的列表就消失了!

也许是MemCache 系统?如果它没有以上述方式丢失东西,但是......

我建议在中间,IO文件很快就可以向数据库请求数据,特别是如果它不在同一台机器上(出于安全原因,它永远不应该),所以......为什么不呢,只是为了拿着你的清单,你不使用目前著名的NoSQL 数据库之一吗?

MongoDB是一个具有.NET 库的文档数据库,它易于使用,它不如内存快,但比物理数据库快得多。

通常 NoSQL 数据库将托管在该App_Data文件夹中,因此访问速度非常快,您只需将所有锁定的任务task_id保存在那里即可。user_id

于 2011-09-30T08:44:02.297 回答
2

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

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

于 2011-09-30T10:15:53.910 回答
0

很抱歉,但如果您的应用程序不能每 3-4 分钟 x 300 个用户处理一次查询,那么您做错了什么。仅仅浏览一个站点通常会产生比这多几个数量级的查询。

于 2011-09-30T08:44:16.143 回答