代码之家  ›  专栏  ›  技术社区  ›  Peet Brits

编辑时防止重复编辑/锁定DB记录-单个后端服务器

  •  6
  • Peet Brits  · 技术社区  · 15 年前

    我正在寻找一个标准,以防止多人编辑同一个表格。我知道这不是一个容易的话题,但需求就是需求。

    以前,我对提交的数据使用DB last modified date,如果数据在加载后被修改,则会给出警告或错误。初始系统只是在没有任何警告的情况下重写数据。问题是,我有一个新的要求,以防止这两种情况。将会有许多ui,因此锁定系统可能是一个挑战,而且显然不能保证客户端不会在编辑过程中关闭窗口/浏览器。

    如果有任何帮助,我将不胜感激。

    1 回复  |  直到 15 年前
        1
  •  9
  •   Philip Rieck    14 年前

    如果我是对的,你所说的似乎是一种签出/编辑/签入样式的工作流。当一个用户正在编辑一条记录时,其他用户甚至不能开始编辑同一条记录。

    乐观的 并发性—也就是说,当您尝试保存时,它们会告诉您其他人已经更改了记录。乐观没有锁定的概念,真的-它确保在您获取和保存时间之间没有其他用户保存。

    您想要的并不是一个简单的web需求,因为当用户中止编辑(比如关闭浏览器)时,服务器实际上没有办法强制执行签入。我不知道有什么框架可以处理这个问题。

    但是,如果是通过关闭浏览器、关闭机器电源等方式,那么就有一个孤立的锁。大多数人用两种方法解决这个问题: 2心跳。用户定期ping回服务器说“是的,仍在编辑”。这基本上是#1中的超时选项,但是超时非常短,可以根据需要刷新。好处是你可以任意缩短它。缺点是复杂性和网络使用率增加。

    如果您已经有了一个事务持久存储(比如DB),那么签入/签出令牌其实并不难实现:难的部分是将它集成到您的用户体验中。

    推荐文章