06.12.19
数据库于今天下午考完了,感觉自己做的还可以,总觉得这是一门我喜欢的课程,所以在复习的时候特别用心,喜欢它里面许多的思想,象喜欢编译原理课程一样,虽然具体的实现细节不知道,没有考虑过怎么用计算机来实现,但至少它的许多解决问题的方法是值得学习和借鉴的,而这不正是来科大想学的吗?
聊以数笔,写一下主要的复习提纲,也就是我学习到的精华吧,方便以后复习和对相关知识的查阅:
第一章 DBMS实现概述
1、DBMS系统结构
本章主要是理解下面一个图:
第二章 数据存储
1、磁盘块存取时间
了解以下几个概念:
磁盘:磁盘组合由一个或多个圆形的盘片组成,他们围绕一个中心主轴旋转。
磁道:单个圆片的同心圆。
扇区:磁道被组织成扇区,扇区是被间隙分割的圆的片段。扇区是不可分割的单位,若一部分磁化层损坏,整个扇区均不能在使用。间隙一般占磁道的10%,帮助标志扇区的起点。
块: 磁盘和主存间传递的逻辑单元,由一个或者多哥扇区组成。
柱面:在同一时刻,位于磁头下的各个磁道被认为构成一个柱面。
磁盘的存取时间:
即等待时间,从发出读块命令的时刻起,到块的内容出现在主存中发费的时间,包括4部分:
1)处理器和磁盘控制器处理请求的时间,这一部分一般不考虑。
2)寻道时间:磁头到数据在的那个磁道的时间。
3)旋转等待时间:移到扇区开始处发费的时间。它是磁盘旋转一周的1/N,N的计算,首先找到要经过多少扇区和多少间隙,分别求咱整个圆弧度的多少,然后和360想比。
4)传输时间:数据从磁头在扇区开始处读开始到数据传输到主存所需要的时间。一般不须太多的考虑。
第三章 数据元素的表示
本章的主线是:字段à记录à块à文件。
一般将定长记录放在前面,变长记录放在后面。
记录的修改:
插入时,找到记录应放置的块,可以在块的首部创建一个“偏移量表”,其中指针指向块中每一个记录的位置。如果当前块能容纳下要插入的记录,放置即可,否则,可以在“邻近块”中找空间或者构建一个溢出块。
删除时,被删除的那段空间如果能合并就和其他空间合并成一个新的可以用的更大空间,否则用一个删除指针指象它,但这个指针由于有删除标记而不能访问,在申请内存时,可以用。
更新时,定长无影响;变长时,如果比以前的长,可以创建一个溢出块。如果记录的变长记录已经记录在另外一个块中,则可能在那个块中移动元素,或创建一个新块用于存储变长字段。反过来,如果记录由于更新变短,我们可以象删除记录时那样恢复、合并空间或者去除溢出块。
第四章 索引结构
密集索引:索引指针指向每个记录。
稀疏索引:索引指针指向每个块。
散列:
静态散列:桶不变的散列
动态散列:桶在记录的插入过程中发生改变的散列。动态散列分为可扩展散列表和线性散列。
可扩展散列:
1) 用i记录桶数2i个
2) 位序列取左边,i表示要搜索的位序列位数。
3) 只要一个桶的容量不够,i++,每个桶都将分裂成2个,总的桶数将变成2(i+1)个。
特点:会造成许多桶指向同一个块,桶资源极大浪费。
线性散列:
1)明确3个概念:
i:搜索使用的位数。n:当前的桶数。r:当前总共的记录数。
2)查找:给定一个记录,和当前散列表以及i,r,n,查找该记录值的后i位,如果后i位在当前的桶中,则直接到桶中寻找;如果不在,则找该记录的后i-1位,前以为补0,同样去找对应的散列表中的桶,如果仍然找不到对应的桶,则停止寻找,记录不在散列表中。
例如:如果i=3,当前记录101101,首先找桶101,如果找不到,则找桶001。
3)插入记录到桶:用算法2)查找应该插入的桶,如果桶满了就创建溢出块。
检查r/n,如果r/n>1.7,则提高桶的数量n,提高桶的算法见4),在检查n和2i,如果n>2i,说明i已经无法满足n增加的需要,这时增加i++;
4) 提高桶的数量n++;一般从桶的开头起,根据桶的二进制转为十进制的值,依次增加相应的新桶,例如:假如现在已经有3个桶:00 01 10 那么对应的十进制是:0 1 2 下一个增加的桶是:3 即:11 。增加桶a 1a 2…an后,将 0a 2…an的记录重新调整,属于新桶的记录分配到新桶来,如果不需要溢出块了,就释放掉溢出块。
第五章 查询优化
1、语法分析树的构造
2、中间结果大小估计
3、关系代数
第六章 查询执行
1、嵌套循环连接
2、归并连接
3、索引连接
4、散列连接
5、连接算法的I/O代价估计与内存开销
第七章 数据库故障与恢复
1、Undo日志、Redo日志、Undo/Redo日志的恢复过程
2、Checkpoint
第八章 并发控制
1、冲突可串性判定
2、锁:S、X、IS、IX、2PL、MGL
3、锁管理器与锁表
第九章 事务管理
1、视图可串性判定
2、死锁检测与预防