我知道使用数据库记录锁定的悲观锁定,并在获得锁定的“交易” 结束时释放它。但这是否意味着悲观锁定在
之类的物理事务中开始交易
//pessimistic locking
提交交易 ?
对于网页,当用户选择要编辑的记录时,当他按下编辑按钮时,我希望悲观地锁定此记录,以便其他人无法更改它,然后在编辑按钮onpress()事件中,我开始实物交易?
似乎不可能,因为编辑过程可能很长...它在悲观锁中保持整个编辑过程(按编辑按钮,在网页中编辑,按保存按钮)的数据库事务?
答案 0 :(得分:1)
构建这样的锁定系统不是很实际。即使您能够以某种方式执行此操作,也会严重限制允许访问服务器的用户数量。
如果允许许多用户编辑一个用户提交的帖子,则应使用某种版本控制系统。或者,如果您希望使用锁定系统,则可以创建一个系统,该系统保留正在编辑的帐户以及正在编辑的内容,并定期从客户端更新此信息。就像每隔一分钟一次,如果服务器在两分钟内没有收到客户端的任何消息,则释放锁。
答案 1 :(得分:1)
实际上,对于这种情况,应使用乐观锁定。可以按以下方式使用:
在上述情况下,直到用户整个对话期间都不会保留任何数据库资源。 一般来说,在这种情况下乐观锁定是好的。
但是,如果在事务提交之前用写锁来保存资源非常关键,则应使用伪类
例如,假设有一个简单的电影票预订系统,该系统不为尚未付款的用户保留小票。意味着付款后他们可能会也可能不会获得门票。付款后,他们会要求预订引擎预订机票。
在这种情况下,直到预定交易完成之前,保持假锁是有意义的。即使在这种情况下,用户的账户中也不会保留任何锁和交易。 完全妥协。
将保留悲观读取或伪写入锁,直到事务提交或回滚为止。只能共享伪读锁,所有其他组合将互相阻塞,直到释放为止。