No. 1 关系数据库使用入门
常用关系数据库之间的差异化:优化器评估,存储与恢复,并发控制粒度,
第二章:关系模型介绍
关系模型的产生及管理,使用
第三~五章:SQL
初级:单关系SQL操作 ->
中级:多边关系,视图,事务,授权,关系约束
高级:routine ,递归查询, 排名与分窗处理, OLAP简单介绍
第六章:在关系数据库系统内部,将SQL转换为可识别的关系代数式,并进行演算
No. 2 数据库设计原理
第九章:应用层设计
第七章:逻辑层E-R设计
第八章:逻辑与物理层设计规范化
No. 3 数据存储与查询
第十章:物理层数据的文件组织方式
第十一章:顺序索引、B+树索引、散列索引、位图索引原理
第十二章:数据库是如何评估查询提取数据的代价的
排序算法评估:归并连接,(块)嵌套循环连接,散列连接
两种计算模式:物化,流水线
优化器更偏向于降低查询中对资源的消耗,而不是缩短响应时间!
第十三章:查询优化
基于代价式优化 VS 启发式优化
几个高级话题:
1.多查询优化:a.公共子表达式消除;b.为多查询集合选择一个执行计划的集合,而不是为每个查询单独优化
2.共享式扫描:读取一个关系,然后pipeline给每个查询
3.参数化查询优化:MySQL的QC鸡肋,因为不能将相似的查询优化为参数化,存储优化计划,而不是一个完整的优化集合
No. 4 事务管理
第十四章:事务的实现
A:引擎层; C:应用层; I:并发控制系统; D:恢复系统
部分提交状态:execute sql success. 数据还保存在缓冲区
提交状态:完成redo落盘之后,commit
失败状态:execute sql failed.
中止状态:rollback
第十五章:并发控制:锁 VS 时间戳
1.细粒度锁类型:以相容性由高到低排列如下
IS:意向共享锁,子树只能加S锁
IX:意向排他锁,子树可加S锁,也可以加X锁;
S:
SIX:共享排他意向锁,其子树加S锁,叶节点加X锁;
X:
2.基于锁的协议:两阶段封锁协议(S/ X) VS 树形(图)协议(X)
3.基于时间戳的排序协议:
4.多版本机制:必须声明只读事务还是更新事务
基于时间戳排序:a.时刻更新R-timestamp; b.事务要么write,要么rollback;
基于强两阶段封锁协议:保证可串行化调度,更新操作时,新版本的时间戳置为无限大!
5.快照隔离可以有效提高读性能;对于写,有效性检查协议是为降低系统负载的一种监控机制:
预读写阶段:将数据读入事务,并以局部变量方式预读写;
有效性检查阶段:可调度的串行化检测,是否存在调度环:先提交获胜 VS 先更新获胜;
提交阶段:X lock + redo log + commit
6.快照隔离不能保证可串行化
写偏斜破坏串行化操作:一对事务中的每一个都读取对方写的数据,但是不存在两者同时写的数据
因为快照上不会执行完整性约束的检测!
强制执行一致性检测:select for update;
7.跨越用户交互的并发控制:不做读有效性检查的乐观并发机制
第十六章:恢复系统
1. redo, undo, checkpoint
2. thread buffer, buffer pool, system memory
3. 锁的提前释放:逻辑undo操作
对于频繁存取/更新的系统数据结构,例如索引、trace segment、DB system space management, etc. 需要提前释放锁!
低级别的锁(非叶子节点)和高级别锁(叶子节点),执行更新事务(叶子节点操作)后,释放低级别锁,依然保持高级别锁,直至事务结束!
=> 这种非串行化调度,未完成的事务撤销,会导致与其关联的事务数据的不一致!此时,不能使用undo的方式撤销某个操作,而是采用类似银行的事后补偿操作 => 逻辑undo
逻辑日志仅用于撤销,不用于重做!《逻辑日志撤销时,记录格式为物理undo日志》
操作中获取的低级别锁要足以支持后来对该操作的逻辑undo执行!
5.优秀的Aries恢复算法:
a. LSN日志序列号:每页都有LSN,与最新的LSN比较,以标识该页是否需要更新;
=》页独立,使得恢复也能各自独立
b. 物理逻辑日志:页级别用物理标识,页内数据项使用逻辑记录;
=》索引也能实现行级锁
c. 脏页表:buffer中未落盘的数据项,可最大限度地减少恢复时不必要的redo;
=》可以实现页的预提取,缩短恢复时间
d. 模糊检查点:记录脏页信息,异步刷新脏页,最大限度的减少检查点引起的阻塞;
=》savepoint;缩减日志开销!
No.5 系统体系结构
第十七章:数据库系统体系结构
1.度量并行系统效率的标准:加速比和扩展比
2.并行系统体系结构:
共享内存:不能超过32/64个CPU,总线成为访问瓶颈;
共享硬盘:进程交互代价高;磁盘系统扩展性差;
无共享 类似于 分布式:网络通信和非本地访问代价高
层次型 == 分布式虚拟存储器:混合式,架构信息维护成本高
3.分布式数据库:数据内部共享,局部自治,可用性更高
缺点也是明显的:偏斜,信号干扰,进程的启动代价
第十八章:并行数据库
1.查询间并行
2.查询内并行:
操作内并行:相同的计算,分散到多个节点并行执行
操作间并行:并行的执行查询中的不同计算
3.操作内并行:<无共享式为例>
a.并行排序:每个Process负责排序一段,数据来自不同的Disk,或者是各自的Disk已经处理好本地的排序 发送给不同的Process,最后归并
b.并行连接:分片(数据量大) + 复制(数据量小),每个处理器再进一步分片 + 并行,然后归并连接
使用平衡的范围划分和虚处理器划分(一致性哈希划分法),将范围划分导致的偏斜降到最小!
第十九章:分布式数据库
CAP定理
No.6 数据仓库、数据挖掘与信息检索
第二十章:数据仓库与数据挖掘
1.数据挖掘:试图从数据中发现规则和模式,类机器学习
2.分类:决策树、神经网络分类、贝叶斯分类、支持向量机分类SVM(精确度最高)
回归:值预测
3.关联:支持度与置信度的衡量
4.其他数据挖掘类型:时态序列模拟、聚类、文本挖掘、数据可视化
第二十一章:信息检索
面对海量非结构化数据,信息检索侧重于:检索与结果之间的相关性,以及对结果的排序;
1.关于term的相关性排名:
TF-IDF(术语-逆文档频率)算法
向量空间模型:余弦相似性算法
2.使用超链接的相关性:
流行度排名(点击量)、PageRank(随机游走模型,不涉及Term)、PageRank + TF-IDF
3.同义词、多义词、本体
4.检索的有效性度量:不可调和的查全率和查准率
5.信息检索:网页排名之外
No.7 特种数据库
第二十二章:基于对象的数据库
1.对象-关系数据库:对关系数据库在面向对象编程上的扩展
2.面向对象数据库,建立再持久化程序设计语言基础之上,提供了对持久数据的低开销存取、高性能,但易于引起数据损坏和缺乏强大的查询能力(与SQL相比)
3.对象-关系映射系统建立于传统的关系数据库之上,允许程序员定义数据库关系中的元组与程序设计语言中的对象之间的映射:需要承受对象模型与存取数据的关系模型之间的数据转换带来的运算开销!
第二十三章:XML (可扩展标记语言 Extensible Markup Language)
正如SQL是查询关系数据的主导语言,XML已经是数据交换的主导格式!
XML可以看作是文件与关系型数据库之间的一种状态,以文件组织存储数据,以标记格式化数据,极易用于数据交换;当前对XML数据的处理,一般是XQuery将XML与SQL之间进行关联;
但是,基于海量数据处理启发,XML都可以模拟化为树,树的叶子节点及其父节点可以模拟化为列式存储,我觉得这种数据处理格式有更高的效率!