2.5.1
假设一条记录有如下所示顺序的字段:
一个长度为15的字符串,一个2字节整数,
一个SQL2日期,一个SQL2寸间(无小数点)。
如果
a)字段可在任何字节处开始;
b)字段必须在4的倍数的字节处开始;
c)字段必须在8的倍数的字节处开始;这条记录占用多少个字节?
First,notethatSQL2datesrequire10bytes,andSQL2timesrequire8bytesifthereisnodecimal
point;thismaterialisinSection3.1.3.
a)Thebytesrequirsedbyeachofthefieldsis15+2+10+8=35.
b)Roundeachofthefourfieldlengthsuptoamultipleof4,toget16+4+12+8=40.
c)Roundupagain,toamultipleof8,toget16+8+16+8=48.
首先,请注意SQL2日期需要10个字节,SQL2次需要8个字节(没有小数点),点,这种材料是在3.1.3节。
A)由每个字段需要的字节是15+2+10+8=35。
B)每此循环的四个字段长度为4的倍数,即所有字段长度为4的倍数,得到16+4+12+8=40。
C)再次循环,到8的倍数,即所有字段长度为8的倍数,得到16+8+16+8=48。
2・6・5
采用如习题2.6.4一样的RAID4级方案,假设数据盘1有故障。
在下列情况下恢复该磁盘的
块:
a)盘2〜盘4的内容为01010110、11000000和00111011,同时冗余盘保存着11111011。
b)盘2〜盘4的内容为11110000、11111000和00111111,同时冗余盘保存着00000001。
答案:
a、磁盘1的内容:
01010110
b、磁盘1的内容:
00110110
2.6.7
如果我们有例2.22的RAID6级方案,4个数据盘的块分别为
00111100、11000111、01010101和10000100。
a)冗余盘的相应块是什么?
b)如果第三个盘的块被重写成10000000,必须采取哪些步骤以改变其他盘?
答案:
RAID6级方案,4个数据块,3个冗余块(第1对应数据块123的模2和,第2对应124的模2和,第3对应134的模2和)
a
数据块
1
00111100
2
11000111
3
01010101
4
10000100
冗余块
1
10101110
2
01111111
3
11101101
b原第三块01010101与重写块10000000模2和为11010101,其中为1的位为1、2、4、6、8所以只要对冗余块1、2块的1、2、4、6、8位求反得01111011,10101010
习题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%
我们得到数据文件所占用的存储块大小为:
n/(50*0.8);
稀疏索引与稠密索引不同点在于,稀疏索引在索引中只为每个数据块存放一个键。
但要注意
如果本题按照书中所给出的稀疏索引的比例存放记录的话,参见P92.则又由已知每个存储
块可存放500个键-指针对,索引块充满度不许超过80%
这样我们就能得到索引文件所占用的存储块大小为:
n/(50*500*0.8)。
这样才能保证结果的正确性。
所以总的结果=数据文件所占用的存储块+索引文件所占用的存储块
=n/(50*0.8)+(n/50*0.8)/500*0.8
=401n/16000
3・2・1假定存储块能放10个记录或者99个键和100个指针,再假定BM结点的平均充满程度为70%;即有69个键和70个指针。
我们可以用B树作为几种不同结构的一部分。
对下面描述
的每种结构,确定:
(1)1000000个记录的文件所需的总块数;
(2)检索一个给定键值的记
录所需的平均磁盘I/O数。
可以假定最初在主存中不存在任何东西,并且查找键是记录的主键。
*a)数据文件是按查找键排序的顺序文件,每块存放10个记录。
B树为稠密索引。
b)同a)—样,但组成数据文件的记录没有特定顺序;每块存放10个记录。
c)同a)—样,但B树为稀疏索引。
!
d)B树的叶结点中不放指向数据记录的指针,而是保存记录本身。
每块可存放10个记录,
但平均每个叶结点的充满度为70%,即每个叶结点存入7个记录。
*e)数据文件是顺序文件,且B树是稀疏索引,但数据文件的每个基本块有一个溢出块。
平均来讲,基本块是满的,而溢出块只半满。
不过,记录在基本块和溢出块中没有特定的顺序。
(张恩斌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+仁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块。
首先有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块。
1000个记录可能分布在1000个块中,所以需要1000+15+1+1+1=1018块。
c)同a)—样,但B树为稀疏索引。
[c]
(1)1000000/10=100000块。
若B树为稀疏索引,在叶结点中为数据文件的每个块设有一个键指针对。
首先有100000数据块,如果在B树底层结点平均每块有70个指针,然后有
四层需要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块,6770=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块。
⑵查询匹配的记录有1000个,就需要1000/7=143块,14370=3块,370=1块,第三层需要1块。
所以总共需要143+3+1+1=148块。
3・2・5
假设字段如3.2.1,记录有个首部,它由两个四字节的指针和一个字符组成,且我们希望在一
个4096个字节的块中装入尽可能多的记录,使用的块首部由10个4字节的整数组成,对习题
3.2.1中的三个情况,我们各能将多少记录装入块中
参考321题答案
a)(4096-40)/35
b)(4096-40)/40
c)(4096-80)/48
3・3・3假若在图散列表中发生下列插入和删除,请说明将产生什么情况:
1)记录g至U记录j分别插入桶0到桶3。
2)记录a和b记录被删除。
3)记录k到n分别插入桶0到桶3。
4)记录c和d被删除。
答案:
(题目没给出是否顺序产生这4种情况还是各自独立发生?
)设4种情况独立发生
1、g直接插入到桶0中的第二个存储块;
增加一个新存储块在该存储块的第一块上存储h,并链接到桶1的第一块上;
i直接插入到桶2中的第二个存储块;
增加一个新存储块在该存储块的第一块上存储j,并链接到桶1的第一块上;
2、在桶3上删除该a记录并将剩下的记录移动到块前部以使其紧凑;
在桶2上直接删除该b记录
d
ec
b
——
a
f
习题3.7.4
利用3.7.2节的方法,编码下列位图
a)01100000010000000100
b)100000001000001001010001
c)0001000000000001000010000
答案:
a)位向量有4个段(1,0,6,7),1的编码是01;0的编码是00;6的编码110110;7的编码110111。
它的编码是010*********
b)位向量有6个段(0,7,5,2,1,3),0的编码是00;7的编码110111;5的编码110101;2
的编码是1010;的编码是01;3的编码是1011。
它的编码是0011011111010