何时使用悲观并发?

时间:2009-09-11 07:51:16

标签: database concurrency locking

使用悲观并发的具体场景是什么?

3 个答案:

答案 0 :(得分:1)

悲观并发应该用于并发编辑尝试频繁发生的情况,而不是特殊情况。当用户被告知他们的编辑不会被保存时,乐观并发会给用户带来刺耳的结果,因此在正常情况下应该避免使用。

答案 1 :(得分:0)

是的,当你绝对不能让两个人同时改变同一条记录时。银行最多这样做。

答案 2 :(得分:0)

“何时使用pess.locking”究竟是什么意思?

如果您正在处理DBMS管理的数据,则无法选择。 DBMS在每次更新,完全停止时使用它,因为如果DBMS本身也想要确保数据完整性,它也没有选项。

即使是基于MVCC的系统(例如Oracle?)别无选择,只能使用两阶段锁定来序列化活动,以正确处理以下情况:

TX A启动,TX B启动; TX A插入ID 1; TX B插入ID 1; TX A检查约束; TX B检查约束; TX A承诺; TX B提交。

如果允许A / B的约束检查忽略B / A完成的相同ID的插入,则数据库最终会违反该密钥。

应用程序控制的锁最好只是悲观,如果你可以确定它们不会被挂起,而用户需要输入一些输入左右(或者正在执行任何可能导致长时间延迟的活动) )。但这是对相反问题的回答,“何时不使用它”。

修改

“何时使用它”的指示可能是在高争用情况下,您希望“无故障”,无论哪个交易“次于”。这可以确保您无法完成的事务不会占用太多资源,并且这些资源可以更快地完成(因此也可以更快地锁定释放)任何事务“先到先得”并获得锁定。但是,请注意,您增加了遇到死锁的可能性,并且由于锁是应用程序控制的,因此您可以解决任何死锁问题。