下半部分其实包括两个主题:recovery和分布式事务,另外还包括一部分扩展内容,点到为止的谈谈未来系统
recovery
在事务系统中的recovery基本包括两个内容:
- redo:如果系统挂了,且事务已经提交了,那么把没有刷盘的事务刷盘。
- undo:如果系统挂了,且事务没有提交或者abort了, 那么把做了事情还原,正常运行时abort的操作类似。
在recover的过程中需要考虑很多事情,比如recover的过程也挂了,比如如何减少recover的时间,如何减少io,如果把操作都变成dengmi
万变不离其宗,无论系统有多少日志,以什么形式存在,他们都是这两种日志的变体。
这个基础上要处理btree节点的分裂以及大对象问题。
有意思的是undo的处理,是把他转换成redo的方式进行的。
一个重要的点就是checkpoint,这才是redo/undo方式可以使用的基石,有了这个才能定期干掉多余的日志。怎样在不影响性能的情况下完成checkpoint是一个系统成功与否的重要量度。
分布式事务
分布式事务的核心还是2pc,即两阶段提交,各个节点都需要写日志,完成崩溃时的处理,当然不能保证一定成功或者失败,理论上是有可能即不成功也不失败。
变种主要是树形协议,可以在多个异构的数据系统中实现一致性。
浙公网安备 33010602011771号