标签: pessimistic-locking

如何从java代码中编写乐观和悲观锁定代码

我知道乐观和悲观锁定是什么,但是当你编写java代码时,你是如何做到的?假设我使用Oracle和Java,我在JDBC中有任何方法可以帮助我做到这一点吗?我该如何配置这个东西?任何指针将不胜感激.

java database jdbc optimistic-locking pessimistic-locking

7
推荐指数
2
解决办法
1万
查看次数

如何在php/mysql Web应用程序中实现悲观锁定?

如何在php/mysql Web应用程序中实现悲观锁定?

  1. Web用户打开一个页面来编辑一个数据集(行)
  2. 网络用户点击"锁定"按钮,以便其他用户能够阅读但不能写入此数据集
  3. 网络用户进行一些修改(可能需要1至30分钟)
  4. 网络用户点击"保存"或"取消",删除"锁定"

在这种情况下,php/mysql中是否有标准方法?如果网络用户从未点击"保存"/"取消"但关闭了互联网开发者,会发生什么?

php mysql pessimistic-locking

6
推荐指数
3
解决办法
3223
查看次数

JPA Pessimistic Lock尝试永远不会超时

我试图在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)

postgresql hibernate jpa pessimistic-locking

6
推荐指数
1
解决办法
8033
查看次数

悲观锁在数据库中如何工作,隔离级别与它有什么关系吗?

我正在阅读有关数据库锁定(悲观,乐观)机制的内容,

会话 1:
t1:打开事务:
t2:睡眠(3 秒)
t5:updte 用户集 name='x' 其中 id =1

会话 2:t2:更新用户集 name='y' 其中 id=1

我的疑问是: 1. t5 时会发生什么 2. 它是否与隔离级别有任何关系?如果是,不同隔离级别下的行为是什么。3.数据库(mysql,oracle)只做悲观锁吗?

mysql database locking isolation-level pessimistic-locking

6
推荐指数
1
解决办法
3796
查看次数

select语句中的sql rowlock

我有一个ASP.Net网页,用户选择一行进行编辑.我想在该行上使用行锁,一旦用户完成编辑和更新,另一个用户就可以编辑该行,即如何使用rowlock以便只有一个用户可以编辑一行?

谢谢

t-sql sql-server locking pessimistic-locking

5
推荐指数
2
解决办法
8558
查看次数

JPA merge()最佳实践

我为实现了一项服务entity object,它使用了pure jpa,我使用了spring,因此在spring xml config配置hibernatejpaimpl。我正在使用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)

concurrency hibernate jpa locking pessimistic-locking

5
推荐指数
1
解决办法
1877
查看次数

Node/Postgres中的乐观和悲观锁定?

我打算将Node用于我的下一个项目,因为它似乎非常适合我正在解决的问题.

我需要弄清楚的一件事是乐观和悲观的锁定.http://guides.rubyonrails.org/active_record_querying.html#locking-records-for-update

比如说,用户有一个余额1.两个节点实例同时提出请求撤销1.这两个请求可以同时通过足够余额的检查,从而使两次成功提款导致余额为-1.

Rails提供了Postgres事务和锁定功能的包装器.Node是否存在某种类似的包装器?

你如何在Node/Postgresql中解决这个问题?

我知道这是一个数据库功能,但我想知道Node或某些库是否提供了远离编写原始SQL查询的抽象概念?

postgresql optimistic-locking node.js pessimistic-locking

5
推荐指数
0
解决办法
1141
查看次数

使用乐观锁会不会出现死锁?

众所周知,有两种锁定策略:乐观锁定与悲观锁定

悲观锁定是当您锁定记录以供您独占使用,直到您完成它为止。它比乐观锁具有更好的完整性,但要求您在应用程序设计时要小心以避免死锁

还知道,乐观并发控制多版本并发控制(Oracle 或 MSSQL-Snapshot/MVCC-RC)不同:乐观与多版本并发控制 - 差异?

但是如果在两个事务中都使用 OCC(乐观并发控制),是否会在两个事务之间发生死锁?

我们能说乐观锁通过降低一致性来降低死锁的可能性吗?并且只有当每个更新都在一个单独的事务中时,死锁的可能性才为 0%,但这样的一致性最小。

sql-server oracle locking optimistic-locking pessimistic-locking

5
推荐指数
2
解决办法
3135
查看次数

如何使用Django在MySQL上使用跳过锁定执行SELECT FOR UPDATE

我有一个Django项目,该项目使用带有InnoDB存储的MySQL v5.5后端。 为了避免DB中的竞争条件更新,我使用select_for_update锁定行。现在,如果此锁定保持很长一段时间,则锁定行上的所有查询都将超时。 我想通过以下选项之一避免这种情况:

  1. 跳过被锁定的行,类似于SKIP LOCKED选项。
  2. 如果您要查询的某些行被锁定,则立即返回,类似于NOWAIToption。
  3. 减少特定查询的锁定等待超时时间。

如何使用Django ORM执行上述任何操作?

mysql django pessimistic-locking

5
推荐指数
1
解决办法
452
查看次数

with_lock 是否锁定块内的所有内容?

锁定块中的所有模型还是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

5
推荐指数
1
解决办法
4287
查看次数