MST

星途 面试题库

面试题:分布式系统中,ACID特性如何助力数据库故障恢复?

请阐述在分布式系统环境下,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)这四个ACID特性分别是怎样对数据库故障恢复起到作用的,可结合简单的实例说明。
48.6万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

原子性(Atomicity)

  1. 作用:原子性确保一个事务中的所有操作要么全部成功执行,要么全部不执行。在数据库故障恢复时,若事务在执行过程中发生故障,由于原子性,未完成的事务对数据库的部分修改会被回滚,保证数据库回到事务开始前的状态,避免出现数据不一致的中间状态。
  2. 实例:例如银行转账事务,从账户A向账户B转账100元,涉及从A账户减去100元和向B账户增加100元两个操作。如果在执行过程中系统故障,原子性保证这两个操作要么都完成,要么都不完成。若只完成了A账户减100元而B账户加100元未完成,原子性会回滚A账户的操作,使A账户金额恢复到转账前。

一致性(Consistency)

  1. 作用:一致性确保事务执行前后数据库始终处于合法状态,即满足数据的完整性约束。在故障恢复后,数据库必须恢复到满足所有一致性规则的状态。这意味着恢复机制要保证已提交事务的结果是永久性的且符合所有业务规则,不会因为故障而使数据库处于违反约束的状态。
  2. 实例:假设数据库中有一个约束,账户余额不能为负数。在一个涉及取款的事务中,如果取款后余额将为负数,一致性要求该事务不能提交。若在事务执行过程中发生故障,恢复后数据库应保证没有违反该余额非负的约束。

隔离性(Isolation)

  1. 作用:隔离性保证并发执行的事务之间相互隔离,一个事务的执行不能被其他事务干扰。在故障恢复时,这防止了并发事务之间的相互影响。即使在故障发生前有多个并发事务在执行,由于隔离性,每个事务都能独立恢复,不会因为其他事务的部分执行结果而导致数据混乱。
  2. 实例:例如有两个并发事务,事务T1读取账户A的余额并准备进行修改,事务T2也读取账户A的余额。隔离性确保T2读取到的是T1修改前的余额,不受T1未提交修改的影响。如果没有隔离性,T2可能读取到T1修改一半的结果,在故障恢复时就难以确定正确的恢复状态。

持久性(Durability)

  1. 作用:持久性保证一旦事务提交,其对数据库的修改将永久保存,即使发生系统故障。在故障恢复时,已提交事务的结果不会丢失,数据库能根据持久化存储(如日志文件)中的记录将已提交事务的修改重新应用到数据库中。
  2. 实例:当一个订单创建事务提交后,即使随后系统崩溃,持久性确保订单数据已被永久保存到数据库。在系统恢复时,通过日志记录可以重新构建订单数据,保证订单信息不会丢失。