2013-02-21 118 views
4

我一直在考虑为涉及的应用程序开发一些简单的记录锁定。有几个用户会花费几个小时来完成记录的编辑。这在其他人想要对记录进行更改时会导致问题。目前没有涉及锁定。PHP/MySQL/jQuery记录的悲观锁定

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

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

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

+1

有趣!... – dynamic 2013-02-21 21:39:14

回答

3

使用AJAX请求更新locking_timestamp是一个很好的策略,并且可以很好地工作。

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

+0

你有任何建议在jQuery代码创建基于计数器的AJAX(更新locking_timestamp)?我确信这是以前完成的。 – jjwdesign 2013-02-22 18:36:26

+0

@jjwdesign,只需使用javascript的'setInterval'函数定期执行您的AJAX调用。 – linepogl 2013-02-22 20:15:21

1

也许我很愚蠢,但如何让页面上的jQuery监控鼠标和键盘事件。

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

虽然第一个用户在页面上有活动,但没有任何反应。 3分钟的用户没有做任何事情,他会被提示要么确认他仍在工作,要么他会在3分钟内放松他目前的变化。如果他证实什么都没有发生,但是如果他没有Ajax将会取消锁定。

+0

我不确定我能否实现它,因为很多此系统用户在页面上处理的速度很慢。其中大部分是研究相关的。但是,感谢这个概念的想法。 – jjwdesign 2013-02-22 02:05:21

1

如果你说用户在提交记录前可能需要几个小时,那么一个简单的5分钟锁或其他任何东西都不足以满足要求。

相反,您为什么不实现一种检入/检出功能,该功能在编辑记录时被激活(检出),并定期保持“活着”状态,并被停用(签入)当记录保存/会话过期/浏览器关闭/等。