1.怎样理解事务的一致性
一致性就是一个这样的东西,一致性对于不同的应用领域有着不同的定义,因为它就是按照业务规则来说明这个是一致的,那个是不一致的,这个角度上讲,一致性就是一个系统的状态,一个合理的状态。而合理则表现在这个状态是否符合业务规则。例如:转账业务中合理的状态就是,转出和转入帐户必须出入相等,如果不等那就意味着不合理,也就是不一致,有时候我们很容易就能把它定为“守恒一致性”,也就是说总体来说什么也不多,什么也不少就是一致性。而这个规则能够使用于其他的业务吗?我们不能说不能,但是从狭义的角度来讲是不能的,在存款业务中,帐户是多了钱,那如何去守恒呢?或许你会说,那个东西可以和客户手中的钱两来平衡阿,对,你说的对,或许我们从更为广义的角度上讲这个一致性就是“守恒一致性”(未证实)。但是我们没有必要做那么宏观的定义(毕竟对我们开发合理系统没有太大的帮助)。
于是,我们抽象的定义,一致性,就是在任何时候系统中的数据是符合业务规则的。那么从一开始,业务初始化的时候保持一致性是很容易的,在业务进行下去,一个个事务完整进行(或不进行)后,一致性发生转移,但始终符合一致性,所以保持系统一致性的关键还在于事务的一致性问题,也就是说,该事务是否会造成系统不一致性状态的出现,是事务的一个属性。
从这个角度我们发现,事务所具备的原子性与一致性是一个互补的状态,一致性保证了这个事务所包含的一系列的操作完成后系统仍然在一个一致的状态(但它不能保证事务内部不会有不一致的出现),所以原子性就需要来保证这些操作必须要全部执行或全部不执行。从这个角度上讲,一致性似乎应该放在原子性之前,当然我不是在挑战权威,这是一个小插曲。(摘自CSDN论坛)A:原子性 C:一致性 I:隔离性 D:持久性