【问题标题】:PHP/MySQL/jQuery Pessimistic Locking of RecordPHP/MySQL/jQuery 悲观锁定记录
【发布时间】:2013-02-07 08:53:29
【问题描述】:

我一直在考虑为我参与的应用程序开发一些简单的记录锁定。有一些用户需要花费数小时才能完成对记录的编辑。当其他人想要更改记录时,这会导致问题。目前不涉及锁定。

我不确定乐观锁定在我的情况下是否可靠,因为记录是通过 AJAX 请求保存的。我正在考虑应用某种悲观锁定;使用两个字段,例如 locking_user_idlocking_timestamp,我可以跟踪谁打开了记录以及上次打开记录的时间。

但是,由于用户可能一次打开它几个小时,我怎么知道用户是放弃它还是只是在努力工作?我不想强迫他们每 5 分钟更新一次 ~ 但这可能是可能的(AJAX 每 5 分钟保存一次)。

也许 jQuery 进程在用户工作时正在计数,并会每 5 分钟触发一次 AJAX 请求 (getJSON) 以更新locking_timestamp。这样我就可以维护谁在记录中工作。时间戳变“旧”后,我可以假设用户不再使用记录。有没有人有过这种锁定的经验?

【问题讨论】:

    标签: php jquery ajax optimistic-locking pessimistic-locking


    【解决方案1】:

    使用 AJAX 请求更新locking_timestamp 是一个很好的策略,并且效果很好。

    但是,通话之间的 5 分钟间隔对我来说似乎有点长。除非您的流量非常高,否则从用户的角度来看,30 秒之类的时间会更好。想象一下,有人不得不等待 5 分钟,因为另一个用户打开了记录,然后又关闭了他的浏览器......

    【讨论】:

    • 您对基于计数器创建 AJAX(更新锁定时间戳)的 jQuery 代码有什么建议吗?我敢肯定这已经做过了。
    • @jjwdesign,只需使用javascript的setInterval函数定期执行您的AJAX调用。
    【解决方案2】:

    如果您说用户可能需要几个小时才能提交记录,那么简单的 5 分钟锁定或其他任何方式都不够。

    相反,您为什么不实现一种签入/签出功能,该功能将在编辑记录时激活(签出)并定期“保持活动”,并在以下情况下停用(签入)记录已保存/会话过期/浏览器关闭/等。

    【讨论】:

      【解决方案3】:

      也许我很傻,但是让 jQuery 监视页面上的鼠标和键盘事件怎么样。

      PHP 在文件系统中的某处放置锁定或在数据库条目上放置一些标志,因此下一个用户将无法编辑而只能查看信息。该文件将在条目中包含用户信息,因此在发送更改时仅接受他的更改

      当第一个用户在页面上有活动时,没有任何反应。用户在 3 分钟内没有做任何事情,系统将提示他确认他仍在处理它,或者他将在 3 分钟内放弃他当前的更改。如果他确认没有任何事情发生,但如果他不确认,Ajax 将解除锁定。

      【讨论】:

      • 我不确定我能不能实现它,因为很多这个系统的用户在页面上处理很多东西的速度很慢。其中大部分与研究有关。但是,感谢您的概念创意。
      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多