事务 ACID
事务是定义一系列操作在逻辑上可以看成一个完整的操作,具有ACID特性; Atomicity (原子性) 要求事务中所有的操作要么全部完成,要么全部没有发生,如果部分操作失败,则整个事务操作都会失败。 Consistency (一致性) 要求事务中的操作,符合容器(如:数据库)的各种规则,保证数据是合法、与规定好的方式运行,一般通过原子性来保证,数据在事务中会有各种状态,但是结果必须需要语义。 与原子性强调开始/结束状态不一样,一致性强调的是在事务过程中数据状态的不稳定,其他事务是不可见的。(隔离级别会有一些妥协) Isolation (隔离性) 事务与事务间不会相互影响,就像串行执行一样,相互之间并行时是不可见的。 Durability (持久性) 事务完成后,数据状态就保持不变,永久存储。 目前大致有两种比较流行的技术来实现事务: 预写日志(WAL)和影子分页(SP) 。 预写日志(write-ahead logging) ,主要提供ACID中的 原子性和持久性 两种特性的操作: 日志分为redo和undo信息, undo用于记录修改前的信息,redo用于记录修改后的信息;undo可用于做事务失败的回滚操作,redo可用于做事务提交过程中故障恢复。log文件一般采用追加的方式,I/O效率高。