首页 > 解决方案 > 在数据库中,行级锁定是 ACID、乐观并发还是两者兼有的例子?

问题描述

同时写入
在 nosql 数据库中还会发生什么?

标签: postgresqlconcurrencynosqlamazon-dynamodbacid

解决方案


我将忽略 NoSQL 部分,否则我将不得不关闭这个问题,因为它太没有重点了。

行级锁定是关系数据库用来提供隔离的一种技术,也就是 ACID 的 I。隔离意味着并发数据库会话彼此隔离——数据库试图使它们不受彼此活动的影响。

具体来说,如果两个并发会话试图修改同一个数据行,它们必须“轮流”:第二个会话必须等到第一个会话的事务完成。这种等待通常很短并且不会造成伤害,但它可以防止不一致(一致性是 ACID 的 C)。

行级锁定和一般锁定是悲观锁定的一部分:您锁定一行以防止其他会话在您处理该行时弄乱该行。它是用SELECT ... FOR UPDATE. 它被称为“悲观”,因为它反映了一种心态,例如“我希望有人会在我处理行时尝试修改它,所以让我们锁定它以确保”。

乐观锁的名字不好,因为实际上没有锁。您不会阻止并发事务修改您感兴趣的行。相反,您事后检查该行是否已被并发事务修改,如果有,则再次尝试该操作。


推荐阅读