花好了很多时间读了事务信息系统:并发控制与恢复的理论、算法与实践
英文名叫 Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control
这本书在国内的翻译版已经绝版了,似乎没出过影印版。为了尝试看完,用pdf打印了出来,足有880页,装订了两册~~~好沉的
之所以读这本书的原因在于读着读着Jim Gray那本经典事务书,发现有这本,由于Jim Gray那本太沉,不好拿(原版感觉放书包里会碎);而且这本书比较新一点,最重要的是作序的人只有一个:Jim Gray本人。
所谓事务确实是数据库领域提出来的,理论很多,也很nb,不知道为什么工程界很少有人研究,一般大家都直接去看代码了,比如MySQL比如postgres。但是,很多注释里都表示这段代码我们参考了Jim Gray那本,如何如何改进了。理论是实践的基础嘛,我读过一些号称 XXX 源码分析之类的,不能说作者不懂或者写的不好,而是没把事情说清楚,有种知其然不知其所以然的感觉。
实际上事务是并不是一个仅仅局限在数据库上,ACID也不应该仅仅是一个数据的概念,从理论上说所有的web系统都应该支持事务,受限于性能问题,时间问题和水平问题,想起在猿题库的时候的一个问题:数据在memoryCache,mysql,redis之间不同步,就是缺乏事务支持的原因。
从文笔上看,这本书比较平实,我这个基本把英语都还给老师的主,看起来也问题不大,除了推理那部分真心看不懂或者看不下去外,其他都能看懂。
总的来说,这本书关于事务系统提供的两个重要主题:CONCURRENCY CONTROL 和 recovery,我目前只看了第一部分 CONCURRENCY CONTROL。由于语文和数学都还给老师了,so我只能按章节来说说感想:
Chapter 1 What Is It All About? 总纲,介绍一下整体,这本书是啥,啥事事务,啥事数据库等等
Chapter 2 Computational Models 计算模型,提出了两个重要概念 Page Model和Object Model,按我自己的不确切理解,Page Model主要是read/write操作;Object Model主要是描述稍微复杂点的东东:search,insert,search_range
Chapter 3 Concurrency Control: Notions of Correctness for the Page Model 纯理论,描述了这样一件事儿:n个事务都包含着一系列的读写操作,这么调整读写操作,才能使结果看起来好像不变一样。
Chapter 4 Concurrency Control Algorithms 具体的算法,主要是锁,核心的算法是2PL,二阶段锁协议。
Chapter 5 Multiversion Concurrency Control 多版本控制的理论基础,核心在于5.5章,提出了几种不同的多版本协议。
Chapter 6 Concurrency Control on Objects: Notions of Correctness :Object Model的理论基础,这么折腾基础操作,保证事务
Chapter 7 Concurrency Control Algorithms on Objects: 具体的算法,核心在于怎么像折腾object操作的顺序
Chapter 8 Concurrency Control on Relational Databases :具体到关系数据库上,怎么折腾上述理论。
Chapter 9 Concurrency Control on Search Structures:怎么在B+上折腾,非常nb的使用锁
Chapter 10 Implementation and Pragmatic Issues: 具体的优化方法
总体上说,concurrency control主要通过两种方式实现MVCC和锁
锁:锁的idea其实是大家都可以干活,遇到冲突的时候,就只有一个人可以干活,等他干完别人才能干。DB2就是纯的锁实现,据说SQL server历史上也是
MVCC:MVCC相对复杂点,同样的数据有多个版本,这样的话可以大大提高读写的并行度,但是这不是说MVCC下就不需要锁了,还是需要的,写还是不能并行的,MVCC也有多种不同的网络协议和多种不同的实现方法。