【问题标题】:ASP.NET MVC 3 in-memory data storeASP.NET MVC 3 内存数据存储
【发布时间】:2011-09-30 08:31:45
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    也许是 MemCache 系统?如果它没有按照上面的方式散掉东西,但是……

    我建议在中间,IO 文件向数据库请求数据的速度很快,特别是如果它不在同一台机器上(出于安全原因,它不应该在同一台机器上),所以......为什么不呢,并且只是为了保存您的列表,您不使用当前著名的 NoSQL 数据库之一?

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

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

    【讨论】:

      【解决方案2】:

      您考虑过有状态过滤器吗?

      查看此链接了解更多信息:

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 顺便说一句:3 到 4 分钟之间有 300 个查询,不能是单个查询,它们必须更多,GET_USERGET_TASK_DETAILS 等...: ) 但如果设置正确,我认为没有问题,除了需要改进已经很好的工作;)
        • 不,我意识到这本身并不是一个非常重要的数量,但是所有这些额外的调用都是应用程序已经在做的事情之上的额外负载。如果我真的不需要的话,我不想给数据库增加额外的负担
        • 我同意@MystereMan。你是不是优化得太早了?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多