什么是一致性问题
在软件开发中存在两种一致性问题:一是单数据副本时的一致性问题(如数据库),二是因为在分布式系统下数据的复制导致的一致性问题(如缓存与数据库数据的不一致,严格来说cpu缓存导致的数据一致性问题也在此列)。
这篇文章主要讨论第一种一致性问题,即数据库事务中的一致性问题。
一致性问题是如何产生的,以及事务概念的产生
一个软件系统不可避免会使用数据,一旦有了数据,就会有脏数据问题,是为一致性问题。就像房间没有良好的清洁行为,自然会变得脏乱差。
这个比喻可能还是不好理解。还是以转账为例。假设A向B转账。(我tm非常讨厌别人一聊到一致性问题就拿转账举例,真他妈的枯燥,但是一时也想不到更加生动的例子。只要能说明问题,绝对不举例,不管例子是否合适,都加重了阅读者的负担。这是我的一个原则吧)
事务概念的雏形----一次数据操作的整体性
什么是软件?软件 = 程序 + 数据。有了数据,然后程序用来处理数据。一个数据系统肯定是一直在做 数据操作 的过程。在转账系统中就是,一直在做转账操作。
一次转账的过程,并不是 一蹴而就 的。如果A账户扣减了余额,然后数据库宕机,此时
数据库就处于不一致状态之中。这是由 非原子性 造成的。一次转账不是一个 整体 。记住整体这个词,它是事务概念的雏形。