【问题标题】:How to check if a user is edting a table record before allowing another user to edit, not wait for post?如何在允许其他用户编辑之前检查用户是否正在编辑表记录,而不是等待发布?
【发布时间】:2012-07-15 20:58:27
【问题描述】:

我正在开发一个艺术家个人资料网站和一个桌面软件来管理其数据库内容。 许多运营商将在其收件箱中收到相同数量的待修改记录以供批准和发布。 问题是当两个或多个操作员尝试编辑同一记录时。如果数据库服务器(远程 mysql)会引发锁定错误,或者只是只维护最后保存它的操作员的数据。

在向其他用户授予对该记录的访问权限之前检查是否有人已经在编辑记录,或者记录的所有者是否是本人,再次在网站上更新他的记录?

该软件仍在实验室中。但是当我将它交付给客户时,我知道这将是一个问题。

我可以创建一个表来将每条记录标记为“正在编辑”或“空闲”,因此我不需要更改表的结构(因为人们已经在网站上使用它们)。但我需要确保有一种更优雅/更快的方法来做到这一点。

【问题讨论】:

    标签: php mysql delphi remote-access zeos


    【解决方案1】:

    您可以使用许多系统级方法来处理该问题。锁定记录以进行独占编辑只是旧系统传统上选择的一种方式。

    一种更现代的方法是允许两个编辑在不锁定的情况下继续进行 - 称为optimistic concurrency control。如果存在重叠编辑,请查看是否可以自动解决 - 事实上,许多同时进行的编辑没有争议,尤其是当它们编辑记录的不相关部分时。

    在发生冲突的情况下,重要的是不要简单地丢失第一个编辑:第一个编辑已经收到成功交易的信号。有责任向第二位编辑表明他们的编辑与之前的编辑冲突。通常最好的做法是向他展示他提议的更改以及其他最近的更改,并让他们选择要做什么:放弃他们的更改,覆盖先前的更改(可能会向第一个编辑器指示),或手动合并更改.

    这可能没什么大不了的。您的系统描述表明用户不会密切同步到值得编辑的事件。每次编辑发生的随机时间表明编辑冲突很少见。在这种情况下,您的空闲/编辑指示可能绰绰有余。

    【讨论】:

    • 你不觉得这个新表至少会增加50%的信息流量吗?这就是我害怕的......
    • @EASI:顺便说一句,我看不出这些方法中的任何一种会如何影响流量。即使这是一个问题,防止数据丢失、可靠地执行以及执行用户期望的操作也远比系统或网络繁忙更重要。这些系统是为人类服务的——而不是相反。
    猜你喜欢
    • 2016-01-04
    • 2011-09-09
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多