代码之家  ›  专栏  ›  技术社区  ›  rjzii

在ASP.NET中存储记录锁令牌

  •  3
  • rjzii  · 技术社区  · 15 年前

    在我目前正在开发的应用程序中,多个用户可能希望同时编辑某些内容,这意味着我们需要实现乐观锁定。但是,对于此应用程序,正在编辑的项是一个科学协议,其中包含来自数据库中多个不同表的记录。

    像这样的我们希望能够指出整个协议已被单个用户锁定以进行编辑,这导致了我的问题:这样做的首选方法是在数据库级别对编辑进行事件处理(例如,拥有一个具有唯一协议id的表,并检查它是否已被锁定),还是接受跟踪该协议web服务器本身内存中当前锁定的协议?

    目前,我们预计该应用程序只会有大约100个用户(20个左右同时使用),但这个数字在未来可能会增加,因此我们希望使用最具可扩展性的选项。

    3 回复  |  直到 15 年前
        1
  •  5
  •   Chris Marisic    15 年前

    这个问题实际上也取决于代码库的架构有多好?

        2
  •  3
  •   Achilles    15 年前

    我将在数据库中实现一个表来管理锁定。例如:

    然后,您可以简单地查询何时尝试应用程序中的编辑功能,如果给定的协议没有完整的时间范围,则您知道它仍在由给定的用户进行编辑。您可以实施一个特定的时间量来关闭编辑会话,以防止记录被永久锁定。只是一个建议

        3
  •  2
  •   Vitaliy Liptchinsky    15 年前

    因此,您似乎需要粗粒度的锁。

    如果您想拥有最具可扩展性的解决方案,则需要在数据库或分布式缓存中保持锁定信息(在这种情况下,分布式缓存将更快)。内存中的方法根本不可伸缩——若你们需要更多的服务器,它将失败。 别忘了引入锁超时以防止可能的死锁。

    推荐文章