读书笔记:事务信息系统(上)

花好了很多时间读了事务信息系统:并发控制与恢复的理论、算法与实践

英文名叫 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也有多种不同的网络协议和多种不同的实现方法。

时间: 2024-10-22 05:05:57

读书笔记:事务信息系统(上)的相关文章

读书笔记-你不知道的JS上-闭包与模块

闭包定义 当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行. 看一段最简单的闭包代码: function foo() { var a = 2; //闭包 function bar() { console.log(a); } return bar; } //理论上 foo执行完内部数据会被销毁 //由于闭包的作用 作用域一直保持 var baz = foo(); baz(); //2 bar()函数可以访问foo()的作用域,通过foo()执行后,返回bar

读书笔记-你不知道的JS上-对象

好想要对象··· 函数的调用位置不同会造成this绑定对象不同.但是对象到底是什么,为什么要绑定他们呢?(可以可以,我也不太懂) 语法 对象声明有两个形式: 1.字面量 => var obj = { ... }; 2.构造形式 => var obj = new Object(); 两种形式生成的对象是一样的,唯一的区别是,在文字声明中可以添加多个键值对,构造形式只能逐个添加. 类型 JS中有六种主要类型:string.number.booleam.null.undefined.object.

Spring in action读书笔记-事务管理

在软件开发领域,全有全无的操作被称为事务 事务的四个特性(ACID): 原子性(Atomtic):事务是由一个或多个活动所组成的一个工作单元,要么全部发生,要么全部不发生. 一致性(Consistent):一旦事务完成,系统应确保它所建的业务处于一致的状态. 隔离性(Isolated):事务允许多个用户操作同样的数据,但不能相互影响. 持久性(Durable):事务的结果应该存到数据库或者其他形式的持久化存储中. spring对事务管理的支持: 编码式:允许用户在代码中精确定义事务的边界 声明式

how tomcat works 读书笔记 十一 StandWrapper 上

方法调用序列 下图展示了方法调用的协作图: 这个是前面第五章里,我画的图: 我们再回顾一下自从连接器里 connector.getContainer().invoke(request, response); 这句代码运行之后发生的事情; 这是第五章的时序图,放在这一章同样适用... 我们仔细分析一下: 1首先连接器创建请求与响应对象; 2调用这行代码 connector.getContainer().invoke(request, response) (我们一StandContext为顶层容器)

《CLR via C#》读书笔记 之 泛型

第十二章 泛型 2014-06-15 初始泛型12.3 泛型基础结构  12.3.1 开放类型与封闭类型  12.3.2 泛型类型和继承  12.3.3 泛型类型同一性  12.3.4 代码爆炸参考 初始泛型[1][2] 返回 泛型(generic)是CLR和编程语言提供一种特殊机制,它支持另一种形式的代码重用,即"算法重用". 简单地说,开发人员先定义好一个算法,比如排序.搜索.交换等.但是定义算法的开发人员并不设定该算法要操作什么数据类型:该算法可广泛地应用于不同类型的对象.然后,

Struts2技术内幕 读书笔记三 表示层的困惑

表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form1" method="post" action="loginServlet"> <table width="357" border="0" align="center"> <t

《高性能MySQL》读书笔记--锁、事务、隔离级别 转

1.锁 为什么需要锁?因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对表中同一行记录进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进行控制,因此就有了锁的概念. 1.1锁的分类 从对数据操作的类型(读\写)分 读锁(共享锁):针对同一块数据,多个读操作可以同时进行而不会互相影响. 写锁(排他锁):当前写操作没有完成前,它会阻断其他写锁和读锁. 大多数时候,MySQL锁的内部管理都是透明的. 1.2锁粒度(Lock granula

3D数学读书笔记——向量运算及在c++上的实现

本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661 开始之前:接上上篇说的,张宇老师说过线性代数研究的就是向量.其实严谨的说,数学中专门研究向量的分之称作线性代数,线性代数是一个非常有趣并且应用广泛的研究 领域,但它与3D数学关注的领域并不相同.3D数学主要关心向量和向量运算的几何意义. 零向量:任何集合,都存在 the additive identity el

这些基础知识你都了解吗?——《松本行弘的程序世界》读书笔记(上)

1. 前言 半个月之前买了这本书,还是经园子里的一位网友推荐的.到现在看了一半多,基础的都看完了,剩下的几章可做高级部分来看.这本书看到现在,可以说感触很深,必须做一次读书笔记! 关于这本书,不了解的可以去网上查查.作者是Ruby语言的创始人,可谓是程序世界中的高手,开卷有益,不管你是哪个层次的编程人员,相信都能或多或少的汲取到你想要的营养. 下面将总结一下看完本书我记录下的一些知识点.有的是书中的原话,有的是我个人的理解,供参考. 2. 面向对象 2.1 多态性 面向对象三大原则:继承.封装和