【问题标题】:multi-user application record locking - best method?多用户应用程序记录锁定 - 最好的方法?
【发布时间】:2009-03-20 21:25:21
【问题描述】:

我正在开发一个处理多个同时用户的 php / mysql 应用程序。我正在考虑对当前正在查看/编辑的记录进行锁定/警告时采取的最佳方法。

要避免的情况是两个用户查看记录,一个进行更改,然后另一个执行相同的操作 - 一个更改可能会覆盖以前的更改。

在最新版本的 WordPress 中,他们使用某种方法来检测这一点,但它似乎并不完全可靠 - 至少根据我的经验,经常返回误报。

我假设必须有某种形式的 ajax 来“ping”应用程序并让它知道记录仍在被查看/编辑(否则,用户可能会简单地关闭他们的浏览器窗口,然后应用程序如何知道那)。

我可以看到的另一个解决方案是检查提交记录以供更新时的最后更新时间,以查看在此期间它是否已在其他地方更新 - 然后为用户提供继续或放弃他们自己的更改的选择。

也许我在解决方案方面找错了方向 - 人们在实现这个(必须是相当普遍的)要求方面有什么经验?

【问题讨论】:

    标签: php mysql locking records multi-user


    【解决方案1】:

    我会这样做:将上次修改的时间存储在编辑表单中。将此提交时间与存储在数据库中的时间进行比较。如果它们相同,则锁定表,更新数据(连同修改时间)并解锁表。如果时间不同,请通知用户并询问下一步。

    【讨论】:

    • 这绝对是我倾向于的方法 - 比任何花哨的 ajax 解决方案实施起来都快得多,而且更可靠。
    • 您始终可以在此想法的基础上构建 AJAX 解决方案 - 在保存之前或定期 ping 或请求时间戳,然后询问用户他们想要做什么 - 或许给出一个如果他们的用户级别是允许的,则选择“覆盖”。
    【解决方案2】:
    【解决方案3】:

    时间戳比较的好主意。它的实施成本很低,而且在生产中运行也是一种成本低廉的操作。您只需要编写逻辑将状态消息发送回用户,即他们的写入/更新没有发生,因为有人打败了他们。

    也许考虑将每次更新的用户名存储在一个名为“LastUpdateBy”的字段中,然后将其返回给抢占更新的用户。对用户来说只是一点点好处。在企业意义上很好,也许不是在可能不合适的环境中。

    【讨论】:

    • 用户通知的好主意 - 我已经存储了上次更新的时间戳和用户 ID。
    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 2018-11-21
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多