我经常看到在在讲数据库的ACID特性时,会以银行转账这个例子(银行转账:一个账户减少钱,一个账户增加钱)。但是现在有一种情况:我们在银行转钱时,会第二天才会到账这是怎么实现数据库的一致性?
你需要学习一个概念:状态机. 这个是重点.你一定要百度一下.深刻理解.
就是每个业务都分为几个状态.业务的操作就是在数据实体在这些状态迁移.
比如转账记录表,用户表.
转账记录表中新增一条:已扣款未到账状态,到账时间为24小时后的数据,
金额为已扣余额. 用户表余额相应扣除.
这一个操作是一致性的.
然后24小时候后.查询状态为 已扣款未到账状态, 到账时间<现在的 转账记录
如果有.则将状态改为 已扣款已到账 同时修改目标账户余额. 这个操作是一致性的.
总结.你以为这个业务持续了1天.不是的.这是2个持续一瞬间的业务.