我知道悲观锁定与锁定数据库记录,并在获得锁的“交易”结束时释放它。但这是否意味着悲观锁定是在物理交易中,例如
开始交易
//pessimistic locking
提交事务?
对于一个网页,当用户选择要编辑的记录时,当他按下编辑按钮时,我想悲观地锁定此记录,以便其他人无法更改它,然后在编辑按钮onpress()事件中,我开始物理事务?
似乎是不可能的,因为编辑过程可能很长......它在整个编辑过程中保持数据库事务(按编辑按钮,在网页中编辑,按保存按钮)悲观锁定?
实际上,对于这种情况,应该使用乐观锁定。它可以按以下方式使用:
在上述场景中,在用户的整个会话期间,没有数据库资源被保留。一般来说,在这种情况下,乐观锁定是好的。
但是如果在事务提交之前用写锁持有资源非常重要,那么应该使用Pessimitic
例如,假设一个简单的电影票预订系统,它不为尚未付款的用户保留种子。意味着付款后他们可能会或可能不会拿到票。付款后,他们需要预订引擎来预订机票。
在这种情况下,保持悲观锁直到预订事务完成是有意义的。即使在这种情况下,在用户完全同意的情况下,也没有锁和事务被持有。
悲观读锁或悲观写锁被保留,直到事务被提交或回滚。只有悲观读锁可以共享所有其他组合相互阻止,直到释放。
构建这样的锁定系统不是很实用。即使您能够以某种方式执行此操作,也会严重限制允许访问服务器的用户数量。
如果允许许多用户编辑一个用户提交的帖子,则应使用某种版本控制系统。或者,如果您更喜欢锁定系统,那么创建一个系统来保留帐户谁在编辑以及编辑什么,并定期从客户端更新此信息。就像每分钟一次,如果服务器在两分钟内没有听到来自客户端的任何声音,则释放锁。
我正在编写一个Web应用程序,其中两个不同的用户可以更新一个事物列表,例如待办事项列表。我开始意识到,乐观锁定机制效果最好,因为我不期望高争用。 我正在查看事务隔离级别,现在我有点困惑。看起来不同的事务隔离级别也解决了类似的问题。 这两个不同的概念是如何相互关联的?如果可能,举一个简单的例子。
我遵循grails文档,它说要做悲观锁定,我可以这样做: 所以这会锁定计划实例,直到保存完成。现在在我的例子中,我想一次锁定多个计划,如下所示: 我在默认情况下是事务性的 grails 服务中执行此操作,但上述行没有按预期工作。它不会锁定所有行,并在执行并发事务时引发。 如何在阅读时锁定多行? 有关更多信息,请参见相关问题:grails中的并发事务导致数据库陈旧状态异常
我在一个游戏服务器上使用Hibernate for ORM,刚刚从每个工作单元的会话/事务切换到每个请求的会话/事务。 由于多个事务可能相互冲突,因此我使用悲观锁定。问题是我经常遇到僵局。现在我的问题是,是否可以在锁定特定实体实例的事务中显式定义范围,或者在指定锁定模式后是否锁定实例直到我提交事务? 如果后者成立,如果我不能任意调度锁定数据库中资源的方法的方法调用,我如何避免每个请求环境中的会话事
问题内容: 我在java下有spring项目,使用hibernate查询,我喜欢使用悲观锁定。 在Spring + Hibernate中如何进行悲观锁定? 编辑: 问题: 我想在一个方法中使用悲观锁定,并且我将此方法称为从不同的方法。当我从第一个方法调用它时,悲观的工作效果很好,但是当我从第二个方法调用它时,它给出了(无法提交事务) 例外: 问题答案: http://www.amicabile.c
本文向大家介绍请你介绍一下,数据库乐观锁和悲观锁相关面试题,主要包含被问及请你介绍一下,数据库乐观锁和悲观锁时的应答技巧和注意事项,需要的朋友参考一下 考察点:数据库 悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。悲观锁:假定会发生并发冲突,屏蔽一切可
我上面代码的日志是: 数据库也会更新。为什么lock()不工作?不是在lock()之后其他实例无法更新吗?还是别的什么?还是我错过了什么?