use*_*167 6 php mysql pessimistic-locking
如何在php/mysql Web应用程序中实现悲观锁定?
在这种情况下,php/mysql中是否有标准方法?如果网络用户从未点击"保存"/"取消"但关闭了互联网开发者,会发生什么?
Mat*_*lin 10
您需要在表中实现LOCKDATE和LOCKWHO字段.我已经在PHP/Mysql之外的许多应用程序中完成了它,它总是以相同的方式.
当TTL通过时终止锁定,因此您可以使用NOW和LOCKDATE进行日期的减法,以查看对象是否已按照您的意愿锁定超过30分钟或1小时.
另一个因素是考虑当前用户是否是锁定对象的用户.那就是为什么你还需要一个LOCKWHO.这可以是来自数据库的user_id,来自PHP的session_id.但要保持标识用户的东西,ipaddress不是一个好方法.
最后,总是想到一个大规模解锁功能,只需重置所有LOCKDATE和LOCKWHO ......
干杯
我会将锁写在一个集中表中,而不是将字段添加到所有表中.
示例表结构:
使用此方法,您可以找到用户创建的所有锁,而无需扫描所有表.例如,当用户注销时,您可以终止所有锁定.
传统上,这是通过locked在数据库中记录适当标记的布尔列来完成的.
这种锁定的功能是必须释放锁定,并且环境可以自然地防止这种情况发生(系统崩溃,用户愚蠢,网络数据包丢失等等).这就是为什么你需要提供一些手动解锁方法和/或施加时间限制(可能有一个cron作业?)记录锁定的时间长度.如果浏览器仍处于打开状态,您可以实施某种AJAX轮询以保持记录锁定?无论如何,您可能最好验证记录中的数据与修改之前获取锁定时的数据相同.
这种行为的这种限制在Web应用程序中尤为普遍,但对于使用此方法的任何事情都是如此 - 对于一个,Sage Line 50是一个bug,我经常在机器/应用程序崩溃后删除锁定文件.
| 归档时间: |
|
| 查看次数: |
3223 次 |
| 最近记录: |