数据库必知词汇:ACID

对于关系型数据库的事务而言,具有四个强一致性(Strong Consistency)要求,也称为ACID:
(1) 原子性(Atomicity):
事务里的所有操作要么全都执行完成,要么全都不执行。只要有一个操作失败,整个事务就失败,事务会回滚至它们最初的状态。
(2) 一致性(Consistency):
数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
(3) 隔离性(Isolation):
事务的执行不被其他事务干扰。如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
(4) 持久性(Durable):
一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现系统故障也不会丢失。

在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新以及修改的资料一次操作完毕,但实际上并不可行。

目前,数据库管理员通常使用以下几种策略来执行ACID。一种增强原子性和持久性的方法是使用Write-ahead logging策略,在这种策略下任何事务细节都首先写入日志,其中包括重做和撤消信息。这种方法可以确保在任何类型的数据库故障情况下,数据库都可以检查日志并将其内容与数据库的状态进行比较。

另一种增强原子性和持久性的方法是影子分页(Shadow-paging).在这种方法中,当需要修改数据时则创建一个影子页面。对于数据的更新请求会被写入影子分页中,而不是写入数据库中的实际数据,而只有在编辑完成时才会修改数据库本身。

还有一种策略称为两阶段提交协议,该策略在分布式数据库系统中非常有效。该协议将修改数据的请求分为两个阶段,即请求阶段和提交阶段。在请求阶段,受到事务影响的所有DBMS必须确认它们已经收到了事务并具有执行事务的能力。而所有相关的DBMS接收到确认之后,提交阶段就完成了,此时数据才会被真正地修改。

资料来源:
Wikipedia: ACID http://taggedwiki.zubiaga.org/new_content/95063fc8cca3e3b4a3238ead2d9aa83a
What does ACID mean in Database Systems? | Database.Guide https://database.guide/what-is-acid-in-databases/
The ACID Model for Database Management Systems https://www.lifewire.com/the-acid-model-1019731
What is ACID in Databases? - Definition from Techopedia https://www.techopedia.com/definition/23949/atomicity-consistency-isolation-durability-acid

上一篇:数据库必知词汇:结构化查询语言SQL


下一篇:数据库必知词汇:TCP/IP协议