数据库事务--事务的简单概念
ACID
事务主要的数据保障机制被描述为ACID,分别是Atomic(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性)。这是一个简单的描述,不代表具体数据库的实现,比如事务的隔离机制就有不同的强度。同样是一致性也分为强弱一致性。(与ACID相应的弱约束叫做BASE(分别代表基本可用,软状态和最终一致))。
原子性
原子性意味着不可分割的最小的单元。在多线程系统中,原子性操作意味着对于其他线程而言,只能看到这个操作之前或者之后的状态,而不能看到执行一半的中间状态。
而在数据系统中,原子性意味着当客户端提交多个写操作时的情况。在写操作进行了一部分之后,可能会发生系统故障,导致接下来的写操作无法正式进行。原子性保证了这一系列的写操作要么全部执行(系统正常状态下),要么全部不执行(在执行过程中发生了故障,已经执行过的写操作将会被回滚)。这为事故过后的补偿提供了方便,可以放心的重试事务内的所有操作。
一致性
一致性提供了对于数据逻辑的一致性保证。比如账户系统中的支出平衡。它更多是由应用逻辑代码提供实现,在数据库层面有时会借助外键约束和唯一键索引来提供帮助。
隔离性
在多个事务并行执行时,可能会出现操作数据出现交集的情况。数据库不同级别的隔离性保证了不同级别的数据安全。保证多大程度上,并行执行的事务能否读取其他事务执行了一般的数据。在有些情况下,隔离性也被叫做串行化(serializability)。意思是并发执行的事务对外展示的最终结果和并行执行是一致的。然而,由于性能的原因,很少有将事务严格串行执行的数据系统。
持久化
事务的持久化保证提交过的数据不丢失。这常常和WAL(write-ahead log)和redo log(或undo log)相关联。在分布式系统中,这个保证可能会意味着数据已经复制到了多个数据片中。