数据库系统实现习题 全文档格式.docx
《数据库系统实现习题 全文档格式.docx》由会员分享,可在线阅读,更多相关《数据库系统实现习题 全文档格式.docx(47页珍藏版)》请在冰豆网上搜索。
即1/(10000/60)=6ms
e)该块占用64个扇区,为此,磁头必须越过64个扇区和扇区之间的63个间隙。
由于间隙合在一起占72度圆弧,而扇区覆盖剩余288度圆弧,则被它们覆盖的圆弧的总度数为:
72*(63/1000)+288*(64/1000)=22.968则传输时间是(22.968/360)*0.6ms=0.03828ms
2)磁道平均有1000个扇区。
d)中最大旋转等待时间为6ms。
f)磁头行进的平均距离是跨越柱面的1/3,则平均寻道时间是:
1+0.001*(100000/3)=34.33ms
g)平均旋转等待时间为磁盘旋转半周所需时间:
(1/2)*6ms=3ms
(潘达)习题2.3.1
假设我们正在为Megatron747磁盘调度I/O请求,磁头的初始位置在磁道32000,图2-9的请求已经产生。
在下列两种情况下,每一种请求在何时可以完全得到服务?
a)我们采用电梯调度算法(起初朝任何一个方向开始移动都是允许的)。
b)我们采用先到达先服务调度。
请求的柱面
到达时间
8000
48000
1
4000
10
40000
20
图2-94个块访问请求的到达时间
Megatron747磁盘的平均寻道时间、旋转等待时间和传输时间分别为6.46、4.17和0.13(所有时间均以ms计算)。
因为每个块访问导致0.13ms传输时间和4.17ms平均旋转等待时间,即无论寻道时间是多少,都需为每一次块访问加上4.3ms。
寻道时间可通过Megatron747的规则计算:
1+磁道数/4000(1+磁道数/500)。
对于电梯调度算法,计算方式及结果如下。
对柱面8000的第一个请求需要进行寻道,因为磁头初始位置不是8000。
这样访问8000完成的寻道时间为1+(32000-8000)/4000ms,即在时间1+(32000-8000)/4000+4.3=11.3ms处第一次访问将完成。
在此之前,对柱面48000和4000访问的请求分别于第1和第10时间到达,由于沿着柱面从高到低(32000->
8000)方向还有请求4000,则先处理4000的请求。
即在第11.3ms后,磁头由柱面8000向柱面4000移动,此段寻道时间为1+(8000-4000)/4000=2ms,则4000访问完成时间为11.3+2+4.3=16.8ms。
当访问4000柱面完成时,仅有访问48000柱面的请求未完成,因此磁头将沿着从低到高移动,移动到48000需要1+(48000-4000)/4000=12ms,即在12+16.8=28.8ms才可到达48000柱面。
在向48000移动过程中,移动到40000柱面的寻道时间为1+(40000-4000)/4000=10ms,即在16.8+10=26.8ms访问到40000,在此之前访问40000的请求已经到达(在第20ms到达的),故而,在访问48000之前,先处理访问40000的请求,即对40000柱面的请求在16.8+10+4.3=31.3ms处理完成。
从柱面40000到48000的寻道时间为1+(48000-40000)/4000=3ms,则48000的请求处理完成时间为31.1+3+4.3=38.4ms。
综上所述,对于电梯调度算法而言每个请求的完成时间如下表:
完全得到服务时间
11.3
38.4
16.8
31.1
对于FCFS算法而言每个请求的完成时间如下表:
0+7+4.3=11.3
11.3+11+4.3=26.6
26.6+12+4.3=42.9
42.9+10+4.3=57.2
(周红磊2141284)习题2.3.2
假设我们使用两台Megatron747磁盘互相作为镜像。
然而,我们使第一个磁盘的磁头保持在柱面的靠内一半,第二个磁盘的磁头保持在柱面靠外的一半,而不是允许从两个磁盘都能读任何的块。
假设读请求是对随机的磁道,我们始终不必去写:
a)系统的能够读块的平均速率是多少?
读块的平均速率为之前单个磁头的两倍。
b)这个速率与无任何约束的镜像Megatron747磁盘的平均速率相比如何?
平均速率一样。
c)你预计该系统的缺点是什么?
1.缺点是以空间为代价换取时间。
2.如果其中的一个磁头坏了,则读取操作就出问题了,每次只能读取一半的数据。
2.4.1计算下列位序列的奇偶校验位:
a)00111011。
b)00000000。
c)10101101。
解:
定义:
如果有奇数个数据盘的第j位为1,在冗余盘中,我们选取位j为1,;
如果在数据盘中的第j位有偶数个1,我们选取冗余盘的位j为0。
即:
有奇数个1,为1;
有偶数个1,为0。
00111011
00000000
10101101
-------------------------
10010110
(薛鑫)2.4.2
如果我们在一个串末附加一个位作为该串奇数位置的奇偶校验位,另一个位作为该串各偶数位置的奇偶位,我们就有了与一个串关联的两个奇偶位。
对于习题2.4.1的每一个串,找出按这种方法计算的两个位。
RAID5级,不必将一个盘作为冗余盘,而把其他盘作为数据盘;
相反我们可以把每个磁盘作为某些块的冗余盘来处理。
12345678
---------------------------------------
0011101110
0000000000
1010110110
(韩月2141276)2.4.7
采用如习题2.4.5一样的RAID4级方案,假设数据盘1有故障。
在下列情况下恢复该磁盘的块:
a)盘2至盘4的内容为01110110、11000000和00101011,同时冗余盘保存着11110011。
b)盘2至盘4的内容为11110000、11111000、00110011,同时冗余盘保存着10000001。
解:
a.1->
01101110
2->
01110110
3->
11000000
4->
00101011
冗->
11110011
b.1->
10111010
11110000
11111000
00110011
10000001
2.4.8
假设习题2.4.5第1个盘得块被改变为01010101。
其他盘上相应的块必须做什么样的改变?
a)由数据盘各位的模2和可求得冗余盘的各位,即00000110。
当盘1由01010110改为01010101时,求盘1旧值与新值的模2和,得到00000011。
将冗余块自身和00000011求模2和,得到新的冗余块,即00000101。
所以盘1变为01010101,冗余盘变为00000101,盘2、3、4没变化。
b)由数据盘各位的模2和可求得冗余盘的各位,即01110101。
当盘1由11110000改为01010101时,求盘1旧值与新值的模2和,得到10100101。
将冗余块自身和10100101求模2和,得到新的冗余块,即11010000。
所以盘1变为01010101,冗余盘变为11010000,盘2、3、4没变化。
(张柳影2141286)习题2.4.9
如果我们有例2.13的RAID6级方案,4个数据盘的块分别为00110100、11100111、01010101和10000100。
a)冗余盘的相应块是什么?
b)如果第3个盘的块被重写成01111111,必须采取哪些步骤以改变其他盘?
[注]例2.13内容:
假设块只有8位长,并且关注在我们的RAID6级示例中用到的7个磁盘的第一块。
首先,假设数据盘和冗余盘的第一块的内容如图2-11所示。
请注意,盘5的块是前3个盘的块模2和,第6行是行1、2、4的模2和,而最后一行是行1、3、4的模2和。
磁盘
内容
数据块1)
11110000
2)
10101010
3)
01010101
4)
10000100
冗余块5)
01100010
6)
00011011
7)
10001001
图2-11所有磁盘的第一块
a)前4个盘是数据盘,盘5~7是冗余盘.
盘5的块是前3个盘的块的模2和,盘5块是10000110;
盘6是盘1,2和4的模2和,盘6块是01010111;
盘7是盘1,3,4的模2和,盘7块是11100101。
00110100
11100111
10000110
01010111
11100101
b)如果第3个盘的块被重写成01111111,求这个序列和序列01010101(该块的旧值)的模2和,则得到00101010;
其中为1的位为3、5、7,所以只要对冗余块5和7的3、5、7位取反,故盘5和盘7的重写值分别为10101100、11001111。
01111111
10101100
11001111
(樊星宇2141312)2.4.10
RAID6方案从磁盘崩溃中恢复
使用足够多的冗余盘处理多个磁盘的崩溃,例如,基于海明码的纠错技术
7个盘,其中1~4为数据盘,5~7为冗余盘。
数据盘与冗余盘之间的关系由一个37矩阵描述如下:
1.盘5的位是盘1,2,3相应位的模2和。
2.盘6的位是盘1,2,4相应位的模2和。
3.盘7的位是盘1,3,4相应位的模2和。
习题2.4.10假设块只有8位长,采用带有7个磁盘的RAID6级方案,描述从下列故障中恢复所要采取的步骤:
a)盘1和盘4;
b)盘1和盘7;
c)盘2和盘5。
(蒋娜2141288)习题3.1.1
假定一个存储块可存放5个记录,或20个键-指针对。
已知有n个记录,如果表示成n的函数,创建以下两种数据文件各需要多少个数据块:
a)稠密索引;
b)稀疏索引
a.稠密索引
因为一个存储块存储5个记录,n个存储记录需要n/5个数据块,稠密索引需要为每个记录建立键-指针对,所以键-指针需要n/20个数据库,所以表示成n的函数是n/5+n/20=n/4
b.稀疏索引
因为一个存储块存储5个记录,n个存储记录需要n/5个数据块,但是稀疏索引需要为每个数据块建立键-指针对,所以键-指针对需要(n/5)/20个数据块,所以表示成n的函数是n/5+(n/5)/20=21n/100
习题3.1.2
如果数据块中可以存放50个记录,或500个键-指针对,但是存放数据和索引的数据块都要求最多只能填满80%,重做习题3.1.1.
答案:
答:
我们知道一个记录在存放时有数据文件和索引文件,它们分别占用存储块,由题中所述可知在索引块中我们采用了稠密索引和稀疏索引,这样两种形式。
只要分别计算出这两个部分的存储块的大小,再求和就能求出需要的存储块。
下面分别来求:
a)一个数据文件和一个稠密索引
数据文件的大小容易知道,由已知给定的记录数为n,且每个存储块可存放50个记录,数据块充满度不许超过80%。
我们得到数据文件所占用的存储块大小为:
n/(50*0.8);
稠密索引是指块中只存放记录的键以及指向记录本身的指针,数据文件中每个键在索引中都被表示出来,且稠密索引文件中的索引块保持键的顺序和文件中的排序顺序一致,又由已知每个存储块可存放500个键-指针对,索引块充满度不许超过80%。
这样我们就能得到索引文件所占用的存储块大小为:
n/(500*0.8)。
所以总的结果=数据文件所占用的存储块+索引文件所占用的存储块
=n/(50*0.8)+n/(500*0.8)
=(11/400)*n
b)一个数据文件和一个稀疏索引
同上,数据文件的大小容易知道,由已知给定的记录数为n,且每个存储块可存放50个记录,数据块充满度不许超过80%。
稀疏索引与稠密索引不同点在于,稀疏索引在索引中只为每个数据块存放一个键。
但要注意如果本题按照书中所给出的稀疏索引的比例存放记录的话,参见P92.则又由已知每个存储块可存放500个键-指针对,索引块充满度不许超过80%。
n/(50*500*0.8)。
这样才能保证结果的正确性。
=n/(50*0.8)+(n/50*0.8)/500*0.8
=401n/16000
(万康2141289)习题3.1.5
假定一个存储块可以存放5个记录,或20个键-指针对,或100个指针。
如果我们使用图3-7的间接桶模式:
a)如果平均每个查找键值出现在10个记录中,存放在5000个记录和它的辅助索引共需要多少块?
如果不使用桶又需要多少块?
b)如果给定键值的记录数没有限制,所需的最大和最小存储块数各为多少?
图3-7通过在辅助索引中使用间接层以节省空间
a)
①使用桶时
每个数据存储块可以存储5个记录,所以5000个记录需要的数据存储块个数为
5000/5=1000
每个桶存储块可以存放100个指针,所以存放这5000个记录辅助索引需要的桶存储块个数为
5000/100=50
每个索引块设有20个键-指针对,平均每个键值出现在10个记录中,所以存放这5000个记录的辅助索引需要的索引块数为
5000/(20*10)=25
总块数=5000/5+5000/100+5000/(20*10)
=1000+50+25=1075
②不使用桶时
索引指针直接对应到相应的数据存储块的记录上块总数为
5000/5+5000/20=1250
图3-5辅助索引
b)给定键值的记录数没有限制
假设给定键值的记录数为1,就可以得到最多的存储块数为
5000/5+5000/100+5000/(20*1)
=1000+50+250
=1300
假设给定键值的记录数为5000,就可以得到最少的存储块数为
5000/5+5000/100+1=1051
(张恩斌2141287)习题3.2.1
假定存储块能放10个记录或者99个键和100个指针,再假定B树结点的平均充满程度为70%;
即有69个键和70个指针。
我们可以用B树作为几种不同结构的一部分。
对下面描述的每种结构,确定:
(1)1000000个记录的文件所需的总块数;
(2)检索一个给定键值的记录所需的平均磁盘I/O数。
可以假定最初在主存中不存在任何东西,并且查找键是记录的主键。
a)数据文件是按查找键排序的顺序文件,每块存放20个记录。
B-树为稠密索引
[a]
(1)1000000/10=100000块。
B树为稠密索引,叶结点中为数据文件的每一个记录设有一个键指针对。
首先有100000数据块,如果在B树底层结点平均每块有70个指针,然后有1000000/70=14286个B树块在最底层,下一层的B树需要14286/70=205个B树块,第三层需要205/70=3块,第四层需要1个根块,所以需要100000+14286+205+3+1=114495块。
(2)匹配记录有1000个,首先1000/10=100数据块,1000/70=15块,15/70=1块,第三层需要1块,第四层需要1块。
所以需要100+15+1+1+1=118块。
b)同a)一样,但组成数据文件的记录没有特定顺序;
每块存放20个记录。
[b]
(1)1000000/10=100000块。
(2)匹配记录有1000个,首先1000/10=100数据块,1000/70=15块,15/70=1块,第三层需要1块,第四层需要1块。
1000个记录可能分布在1000个块中,所以需要1000+15+1+1+1=1018块。
c)同a)一样,但B树为稀疏索引。
[c]
(1)1000000/10=100000块。
若B树为稀疏索引,在叶结点中为数据文件的每个块设有一个键指针对。
首先有100000数据块,如果在B树底层结点平均每块有70个指针,然后有100000/70=1429个B树块在最底层,下一层的B树需要1429/70=21个B树块,第三层需要21/70=1块,第四层需要1个根块。
所以需要100000+1429+21+1+1=101452
(2)匹配记录有1000个,1000/10=100,首先100/70=2块,2/70=1块,第三层需要1块,第四层需要1块。
所以需要100+2+1+1+1=105块。
d)数据文件是顺序文件,且B-树是稀疏索引,但数据文件的每个基本块有一个溢出块。
平均来讲,基本块是满的,而溢出块只半满。
不过,记录在基本块和溢出块中没有特定的顺序。
[d]
(1)但数据文件的每个基本块有一个溢出块。
平均来讲基本块是满的,而溢出块只是半满。
所以基本快的记录为10个,溢出块记录为5个。
所以有1000000/15=66667个数据块。
然后有66667/70=953个B树块在最低层,下一层的B树需要953/70=14个B树块,第三层需要14/70=1。
因此有66667的数据块和953+14+1=968块个索引块。
一共67635块。
(2)1000/15=67块,67/70=1块,第二层需要1块,第三层需要1块。
因此有67个数据块和3个索引块。
总共70块磁盘I/O。
e)B树的叶结点中不放指向数据记录的指针,而是保存记录本身。
每块可存放10个记录,但平均每个叶结点的充满度为70%,即每个叶结点存放7个记录。
[e]
(1)1000000/7=142858块
如果在B树底层结点平均每块有70个指针,然后有142858/70=2041个B树块在最底层,下一层的B树需要2041/70=30个B树块,第三层需要30/70=1块,所以需要142858+2041+30+1=144930块。
(2)查询匹配的记录有1000个,就需要1000/7=143块,143/70=3块,3/70=1块,第三层需要1块。
所以总共需要143+3+1+1=148块。
(谢胜男2141283)习题3.2.2
假设查询是范围查询且匹配的记录有200个,在这种情况下,重做习题3.2.1。
(2)假设查询是范围查询且匹配的记录有200个,检索一个给定键值的记录所需的平均磁盘I/O数。
B-树为稠密索引。
!
a)
(1)1000000/20=50000块
首先有50000数据块,如果在B树底层结点平均每块有70个指针,然后有1000000/70=14286个B树块在最底层,下一层的B树需要14286/70=205个B树块,第三层需要205/70=3块,第四层需要1个根块,所以需要50000+14286+205+3+1=64495块。
(2)匹配记录有200个,首先200/20=10数据块,200/70=3块,3/70=1块,第三层需要1块,第四层需要1块。
所以需要10+3+1+1+1=16块。
b)
(1)1000000/20=50000块
首先有50000数据块,如果在B树底层结点平均每块有70个指针,然后有1000000/70=14286个B树块在最底层,下一层的B树需要14286/70=205个B树块,第三层需要205/70=3块,第