标签: optimistic

MySQL中的乐观锁定

我在MySQL中找不到乐观锁定的任何细节.我读到,启动事务会保持同步的两个实体的更新,但是它不会阻止两个用户同时更新数据而导致冲突.

显然乐观锁定会解决这个问题吗?这是如何在MySQL中应用的.这有SQL语法/关键字吗?或者MySQL有默认行为吗?

多谢你们.

mysql sql database locking optimistic

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

为什么activerecord乐观锁定每行只能工作一次?

不知何故,我总是在星期五得到这些.

我之前的问题是关于同样的问题,但我现在可以稍微缩小一点:

我整天都在玩这个,试图理解它.我有一个带有lock_version列的表,由此指定:

add_column :jobs, :lock_version, :integer, :default=>0
Run Code Online (Sandbox Code Playgroud)

我做这样的事情:

foo = job.create!
first = Job.find(foo.id)
second = Job.find(foo.id)
Run Code Online (Sandbox Code Playgroud)

然后我验证第一个和第二个引用相同的对象 - 它们的ID是相同的,我使用mysql命令行工具在数据库中看到该行.

first.some_attribute_field = 'first'
second.some_attribute_field = 'second'
first.save
second.save
Run Code Online (Sandbox Code Playgroud)

到目前为止没问题.我正确得到一个ActiveRecord :: StaleObjectError异常. 但是:

first = Job.find(foo.id)
second = Job.find(foo.id)
first.some_attribute_field = 'first'
second.some_attribute_field = 'second'
first.save
second.save
Run Code Online (Sandbox Code Playgroud)

......没有任何反应.事实证明,我唯一一次得到正确(抛出异常)行为是第一次和第二次的lock_version为0.然而,在第一次保存之后,它再次为0.究竟是什么呢?

我正在使用ruby 1.8.6和活动记录2.2.2

谢谢...

activerecord locking optimistic optimistic-locking

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

ZooKeeper可以在一次操作中获取znode数据和znode数据版本(stat)吗?

我正在开发一个使用ZooKeeper作为数据存储区的应用程序.对于应用程序中的一个方法,我需要使用乐观并发控件.例如,我需要实现一个获取znode数据的get方法,并使用znode数据版本进行乐观并发控制检查.据我所知,无法在一次操作中获取znode数据和znode数据版本.如果存在更高争用更新znode数据,则get方法将无法工作,因为获取znode数据后znode数据可能会更改.所以我问 - 有没有一种方法可以在一次操作中获得znode数据和znode数据版本(或znode stat)而不会在其间进行任何锁定尝试?

optimistic optimistic-locking optimistic-concurrency apache-zookeeper

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