我知道乐观和悲观锁定是什么,但是当你编写java代码时,你是如何做到的?假设我使用Oracle和Java,我在JDBC中有任何方法可以帮助我做到这一点吗?我该如何配置这个东西?任何指针将不胜感激.
如何在php/mysql Web应用程序中实现悲观锁定?
在这种情况下,php/mysql中是否有标准方法?如果网络用户从未点击"保存"/"取消"但关闭了互联网开发者,会发生什么?
我试图在JPA中使用Pessimistic锁定,而在Postgres数据库中使用Hibernate 3.我无法锁定超时 - 它似乎永远挂起.
这是一个例子:
EntityManagerFactory factory;
// (initialise the factory )
EntityManager em1 = factory.createEntityManager();
EntityManager em2 = factory.createEntityManager();
// em1 gets a lock
EntityTransaction transaction1 = em1.getTransaction();
transaction1.begin();
MyObject object1 = em1.find( MyObject.class, 1, LockModeType.PESSIMISTIC_READ );
// em2 tries for a lock
Map<String,Object> timeoutProperties = new HashMap<String,Object>();
timeoutProperties.put("javax.persistence.lock.timeout", 5000);
EntityTransaction transaction2 = em2.getTransaction();
transaction2.begin();
MyObject object2 = em2.find( MyObject.class, 1, LockModeType.PESSIMISTIC_READ, timeoutProperties );
// After five seconds I expect em2 to bail out, but it never does.
transaction1.rollback(); …Run Code Online (Sandbox Code Playgroud) 我正在阅读有关数据库锁定(悲观,乐观)机制的内容,
会话 1:
t1:打开事务:
t2:睡眠(3 秒)
t5:updte 用户集 name='x' 其中 id =1
会话 2:t2:更新用户集 name='y' 其中 id=1
我的疑问是: 1. t5 时会发生什么 2. 它是否与隔离级别有任何关系?如果是,不同隔离级别下的行为是什么。3.数据库(mysql,oracle)只做悲观锁吗?
我有一个ASP.Net网页,用户选择一行进行编辑.我想在该行上使用行锁,一旦用户完成编辑和更新,另一个用户就可以编辑该行,即如何使用rowlock以便只有一个用户可以编辑一行?
谢谢
我为实现了一项服务entity object,它使用了pure jpa,我使用了spring,因此在spring xml config配置hibernate为jpaimpl。我正在使用spring数据进行crud操作。但是在我们的系统中,我们的entity对象被多次拉/更新,并且concurrency对数据的争用程度很高。从我们很多地方的代码中,classes只有inject服务bean和调用getEntity方法来获得实体,它们改变了实体(按照我的理解是分离的,但是在同一线程中,所以em对象应该与我所知相同)因此实体需要一段时间才能恢复服务,因此他们调用save()服务的方法来保存实体。Save()方法只不过是调用merge()杂物操作。它具有@Transactional注释性。出现一个问题,当某人拉一个实体对象,而在更改它时,别人可能拉回并更改它,然后将其保存回去,所以我的实体读取是脏的,如果保存,我将覆盖已经更新的实体。问题在于,我们正在更改服务之外的实体,然后调用保存。在这里,Spring数据存储库类是DAO层。
Optimistic lock是一种解决方案,但由于某些原因我们不喜欢它,因此它对我们不起作用。我在想pessimistic lock。例如,当我通过锁定获取要更新的实体时,然后在其他位置的其他位置将其更改并回叫(entity已被锁定以防止更新!),它是否有效?我不确定它是否仍然EntityManager反对我用来拉实体的对象。如果存在,那么在更新和解锁之前,要花费相当长的时间传递那些“智能”逻辑。
这是该方案的简单示例代码:
class SomeEntity {
Long id;
String field1;
String field2;
String field3;
String field4;
String field5;
String field6;
String field7;
//getters and setters, column annotations
}
class SomeEntityServiceImple implemenet SomeEntityService{ …Run Code Online (Sandbox Code Playgroud) 我打算将Node用于我的下一个项目,因为它似乎非常适合我正在解决的问题.
我需要弄清楚的一件事是乐观和悲观的锁定.http://guides.rubyonrails.org/active_record_querying.html#locking-records-for-update
比如说,用户有一个余额1.两个节点实例同时提出请求撤销1.这两个请求可以同时通过足够余额的检查,从而使两次成功提款导致余额为-1.
Rails提供了Postgres事务和锁定功能的包装器.Node是否存在某种类似的包装器?
你如何在Node/Postgresql中解决这个问题?
我知道这是一个数据库功能,但我想知道Node或某些库是否提供了远离编写原始SQL查询的抽象概念?
众所周知,有两种锁定策略:乐观锁定与悲观锁定
悲观锁定是当您锁定记录以供您独占使用,直到您完成它为止。它比乐观锁具有更好的完整性,但要求您在应用程序设计时要小心以避免死锁。
还知道,乐观并发控制与多版本并发控制(Oracle 或 MSSQL-Snapshot/MVCC-RC)不同:乐观与多版本并发控制 - 差异?
但是如果在两个事务中都使用 OCC(乐观并发控制),是否会在两个事务之间发生死锁?
我们能说乐观锁通过降低一致性来降低死锁的可能性吗?并且只有当每个更新都在一个单独的事务中时,死锁的可能性才为 0%,但这样的一致性最小。
sql-server oracle locking optimistic-locking pessimistic-locking
我有一个Django项目,该项目使用带有InnoDB存储的MySQL v5.5后端。
为了避免DB中的竞争条件更新,我使用select_for_update锁定行。现在,如果此锁定保持很长一段时间,则锁定行上的所有查询都将超时。
我想通过以下选项之一避免这种情况:
SKIP LOCKED选项。NOWAIToption。如何使用Django ORM执行上述任何操作?
锁定块中的所有模型还是with_lock仅锁定模型本身?例如下面是item里面的所有模型都with_lock被锁定还是只是entry模型被锁定?
class Entry < ApplicationRecord
enum state: [:pending, :posted]
has_many :items, dependent: :destroy
def post!
with_lock do
return unless pending?
items.each { |i| i.post! }
self.posted!
end
end
end
Run Code Online (Sandbox Code Playgroud) postgresql activerecord locking ruby-on-rails pessimistic-locking
locking ×5
mysql ×3
postgresql ×3
database ×2
hibernate ×2
jpa ×2
sql-server ×2
activerecord ×1
concurrency ×1
django ×1
java ×1
jdbc ×1
node.js ×1
oracle ×1
php ×1
t-sql ×1