问题标签 [pessimistic-locking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
design-patterns - 对不断/同时更新的对象进行悲观锁定的替代方案
目前我们正在 Grails 2.4.4 上开发信用交易系统。
我们有一个 Credit 模型来保存用户的信用额度。
问题是随着用户交易,金额不断被借记/贷记。
我们试图对其进行悲观锁定以保持其完整性。但我们意识到它会限制交易,因为该用户一次只能交易一项。
有什么替代方法吗?我们可以使用任何设计模式吗?我们对改变模型或采取其他方法持开放态度。
c# - 确保释放悲观锁
我正在考虑在使用 SQL Server 的 WinForms 保险报价应用程序中实现悲观锁定模式。在用户开始处理报价之前,将在锁定表中添加一条记录;完成后,记录将从表中删除。
我的问题是,如果发生超出我的应用程序控制的故障,我如何确保释放锁?我主要考虑客户端网络连接错误或电源故障,但有无限可能。
ruby-on-rails - 悲观锁定失败
我的控制器中有以下代码:
但是当我运行代码时出现错误:
尝试更新过时的对象:项目
我不明白为什么,我遵循了 Rails 文档。
optimistic-locking - 乐观锁乐观并发控制
当我了解到有时称为“乐观并发控制”的“乐观锁定”时,实际上并没有锁。一个典型的实现是 CAS(比较和交换)。所以我想知道没有锁定,为什么这仍然被称为“乐观锁定”?是否有任何历史原因,因为这个术语起源于数据库世界?
java - 当带有@Version 注释字段或属性的实体,乐观锁如何自动启用?
最近我一直在研究数据库事务和一篇文章引用如下
JPA 通过@Version 注释提供对行版本控制的自动支持。当您拥有带有@Version 注释字段或属性的实体时,将自动启用乐观锁定。
我的理解是使用不同的锁来维护数据库隔离级别策略,例如
- 未提交读:使用独占写锁实现
- 已提交读:使用共享读锁和排他写锁实现。
很快。因此,事务隔离是通过不同的锁定实现的,我猜是使用悲观锁定。
我的问题是,当一个字段被声明为 @Version 注释时,它是否会覆盖底层默认隔离级别并发生乐观锁定?
php - Laravel lockforupdate (Pessimistic Locking)
i'm trying to figure out how to use/test the lockforupdate correctly, but i found is not function like what i expected
this is just testing
i try to test in 2 browser, browser 1 user logged in and browser 2 not logged in, browser 1 hit refresh, then there will lockforupdate and sleep 60 seconds before update
in the 60 seconds, i go browser 2 and hit refresh, however the record is not locked, i check phpmyadmin and the record is updated(within the 60 seconds lock trigger by browser 1)
but after 60 seconds, the record has been modified again by browser 1(Point 100000)
so am i misunderstanding the lockforupdate is use for?or i test it incorrectly?
what i expected is the row shouldn't be modified by browser 2 in the first 60 seconds(blank page with loading favicon or error throw?)
https://laravel.com/docs/5.2/queries#pessimistic-locking
and i did some research but still cannot understand what different between sharedLock(LOCK IN SHARE MODE) and lockForUpdate(FOR UPDATE)
btw i confirmed the database is innodb
mysql - 从 JPA PESSIMISTIC 锁获得的 DB 行上的物理锁
根据 JPA 2.1 规范...
锁定模式
PESSIMISTIC_READ
、PESSIMISTIC_WRITE
和PESSIMISTIC_FORCE_INCREMENT
用于立即获得长期数据库锁定。
我假设一个悲观锁总是会触发SELECT ... FOR UPDATE
数据库上的 SQL,无论使用什么锁模式。现在有三个问题:
- 如果正确,假设是正确的还是这条规则有例外?
- 给定一个
SELECT ... FOR UPDATE
锁定的行。锁定的行不能被任何其他事务更新,除了锁定它的事务? - 可以通过对事务执行提交或回滚来释放锁。如果应用程序(以及锁定行的事务)突然终止而没有对事务执行提交或回滚,锁会发生什么情况?
java - 休眠锁定模式一次锁定多行
如何在休眠锁定中一次锁定多行。目前,我正在触发一个选择查询以使用 OR 子句获取多行,并使用设置锁定模式锁定查询以实现悲观锁定模式。但是,在休眠日志中,我看到休眠使用 select for update 单独锁定行。
sql - 在不同的事务中执行相同的 select for update 而没有 order by 导致死锁的多个结果
交易A:
交易乙:
如果这些事务几乎同时运行,会导致死锁吗?
查询预计会返回多个结果。
我在想,可能在下面,它正在一个一个锁定结果,并且由于没有指定顺序,因此锁定可能以不同的顺序发生,这将导致死锁。
这可能吗?
hibernate - 带有 DB2 的 JPA - 带有超时的悲观锁定
我使用 JPA 对实体进行悲观锁定。数据库是 DB2 v10.x,JPA 2.0 over Hibernate 4.x。
我不想等到锁可用(它被一个长时间运行的进程锁定,保持实体上的锁几分钟)。我希望它早点失败(说“有人在这里工作”),然后让用户决定他是否想重试。我在用着:
但是超时提示不被尊重(注意:无论我如何配置它,在 Spring 配置级别,在 JDBC 连接级别或其他)。将其设置为您喜欢的任何内容都不会改变任何内容。
我怀疑这是因为它被翻译成 SQL :
..而且任何地方都没有“NOWAIT”条款。
是否有可能使超时按预期工作,也许让 JPA 做一个SELECT ... FOR UPDATE NOWAIT
?此外,如果有人知道为什么 JPA 将其翻译为该语句而不是更常见的语句?