postgres的ACID和MVCC

201 阅读1分钟

ACID

ACID是以下几个词的缩写 Atomicity, Consistency, Isolation, and Durability postgres自2001年以来一直遵循ACID标准

Atomicity 原子性

即将多个操作作为一个整体进行执行,要么全部成功,要么全部失败。如果事务中的任何一个操作失败,整个事务都会回滚。

Consistency 一致性

一致性是指数据库中的数据始终符合完整性约束条件。事务在提交之前可能临时违反某些约束条件,但如果在提交时这些违规操作没有得到解决,该事务会自动回滚。

(这些是postgres支持的约束条件。www.postgresql.org/docs/curren…

Isolation 隔离性

在事务提交之前,事务的影响对并发事务不可见

Durability 持久性

事务一旦提交,即使在系统发生故障或崩溃之后,更改也将保留下来。

并发控制和数据一致性和mvcc

postgres的数据一致性是通过多版本模型(Multiversion Concurrency Control, MVCC)来维护的。每个SQL语句都会看到一个数据快照(数据库版本),无论底层数据的当前状态如何,都会看到它在某个时间点的状态。这防止了SQL语句看到,并发事务更新相同的数据行产生的不一致的数据。这样可以给每个数据库session提供事务隔离性。

mvcc的一个优势是读不会阻塞写,写不会阻塞读。

这里有篇文章解释了postgres 的mvcc devcenter.heroku.com/articles/po…

隔离级别

www.postgresql.org/docs/curren…