如何在允许其他用户编辑之前检查用户是否正在编辑表记录,而不是等待发布?

Ple*_*rds 2 php mysql delphi remote-access zeos

我正在开发一个艺术家档案和桌面软件的网站来管理其数据库内容.有许多运营商会在其收件箱中收到相同数量的待审核记录,以便进行审批和发布.问题是当两个或多个运算符尝试编辑同一记录时.数据库服务器(远程mysql)将引发锁定错误,或者只是维护最后保存它的运算符的数据.

在向另一个用户授予对此记录的访问权限之前,检查是否有人已经在编辑记录的最佳方法(更简单和更有效的方法),或者如果记录的所有者是他自己再次更新他的记录,那将是什么?网站?

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

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

wal*_*lyk 5

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

更现代的方法是允许两个编辑在没有锁定的乐观并发控制的情况下继续进行.如果存在重叠编辑,请查看是否可以自动解决 - 许多同时编辑实际上没有争议,特别是如果他们编辑记录的不相关部分.

在存在冲突的情况下,重要的是不要简单地丢失第一个编辑:第一个编辑器已经表示成功的事务.责任是向第二个编辑表明他们的编辑与之前的编辑冲突.通常最好的方法是向他展示他提议的更改以及最近的其他更改,并让他们选择要做的事情:放弃他们的更改,覆盖之前的更改(可能指示第一个编辑器),或手动合并更改.

这可能不是什么大问题.系统描述表明用户不会与编辑有关的事件紧密同步.每次编辑发生的随机时间表明编辑冲突很少.在这种情况下,您的空闲/编辑指示可能就足够了.

  • @EASI:副手,我看不出这些方法会如何影响流量.即使这是一个问题,防止数据丢失,可靠地执行和执行用户期望的事情远比繁忙的系统或网络重要.这些系统可以为人类服务 - 而不是相反. (2认同)