数据库一致性问题总结
单机和分布式都存在
1. 一份数据,多种表示——redolog和binlog
- 两阶段提交(XA事务)
- https://zhuanlan.zhihu.com/p/372300181(无处不在的 MySQL XA 事务)
2. 一份数据,多次访问——事务一致性(幻读)
- 提升到rr隔离级别
3. 一份数据,多行组合——跨行/跨表逻辑一致性
4. 一份数据,多人访问——锁
分布式场景一致性
5. 一份数据,多份拷贝——读写分离场景
- 主从架构下
- 半同步,fullsync,apply完成
- 另一种思路:计算节点查询备库时带上需要的最小事务编号(比如gtid)
6. 一份数据,多个分片——分库分表场景
- 问题:总体和部份数据不一致问题
- 解法:全局一致性视图+业务进行对账 分库分表在不同机器上进行并行查询,与同一机器上不同线程进行并行查询面临的解法类似。可以通过在计算节点建立全局的一致性视图来解决。