索引文件构成
链接地址:http://student.zjzk.cn/course_ware/data_structure/web/wenjian/wenjian10.3.1.htm
1.索引文件
索引文件由主文件和索引表构成。
①主文件:文件本身。
②索引表:在文件本身外建立的一张表,它指明逻辑记录和物理记录之间的一一对应关系。
2.索引表组成
索引表由若干索引项组成。一般索引项由主关键字和该关键字所在记录的物理地址组成。
注意:
索引表必须按主关键字有序,而主文件本身则可以按主关键字有序或无序。
3.索引顺序文件和索引非顺序文件
(1)索引顺序文件(Indexed Sequential File)
主文件按主关键字有序的文件称索引顺序文件。
在索引顺序文件中,可对一组记录建立一个索引项。这种索引表称为稀疏索引。
(2)索引非顺序文件(Indexed NonSequentail File)
主文件按主关键字无序得文件称索引非顺序文件。
在索引非顺序文件中,必须为每个记录建立一个索引项,这样建立的索引表称为稠密索引。
注意:
① 通常将索引非顺序文件简称为索引文件。
② 索引非顺序文件主文件无序,顺序存取将会频繁地引起磁头移动,适合于随机存取,不适合于顺序存取。
③ 索引顺序文件的主文件是有序的,适合于随机存取、顺序存取。
④ 索引顺序文件的索引是稀疏索引。索引占用空间较少,是最常用的一种文件组织。
⑤ 最常用的索引顺序文件:ISAM文件和VSAM文件。
索引文件的存储
1.索引文件的存储
索引文件在存储器上分为两个区:索引区和数据区。索引区存放索引表,数据区存放主文件。
2. 索引文件的建立
建立索引文件的过程:
(1) 按输入记录的先后次序建立数据区和索引表。其中索引表中关键字是无序的
(2) 待全部记录输入完毕后对索引表进行排序,排序后的索引表和主文件一起就形成了索引文件。
【例】对于表10.2的数据文件,主关键字是职工号,排序前的索引表如表10.3所示,排序后的索引表见表10.4,表10.2和表10.4一起形成了一个索引文件。
ISAM文件和VSAM文件是常用的索引顺序文件。
ISAM文件
ISAM为Indexed Sequential Access Methed(索引顺序存取方法)的缩写,它是一种专为磁盘存取文件设计的文件组织方式,采用静态索引结构。由于磁盘是以盘组、柱面和磁道三级地址存取的设备,则可对磁盘上的数据文件建立盘组、柱面和磁道多级索引,下面只讨论在同一个盘组上建立的ISAM文件。
1、ISAM文件的组成
ISAM文件由多级主索引、柱面索引、磁道索引和主文件组成。
文件的记录在同一盘组上存放时,应先集中放在一个柱面上,然后再顺序存放在相邻的柱面上。对同一柱面,则应按盘面的次序顺序存放。
【例】图10.4所示的文件是存放在同一个磁盘组上的ISAM文件。
其中:
① C表示柱面;
② T表示磁道;
③ C
i
T
i
表示i号柱面,j号磁道;
④ R
i
表示主关键字为i的记录。
分析:
从图中可看出,主索引是柱面索引的索引,这里只有一级主索引。若文件占用的柱面索引很大,使得一级主索引也很大时,可采用多级主索引。当然,若柱面索引较小时,则主索引可省略。
通常主索引和柱面索引放在同一个柱面上(如图10.4是放在0号柱面上),主索引放在该柱面最前的-个磁道上,其后的磁道中存放柱面索引。每个存放主文件的柱面都建立有一个磁道索引,放在该柱面的最前面的磁道To上,其后的若干个磁道是存放主文件记录的基本区,该柱面最后的若干个磁道是溢出区。基本区中的记录是按主关键字大小顺序存储的,溢出区被整个柱面上的基本区中各磁道共享,当基本区中某磁道溢出时,就将该磁道的溢出记录,按主关键字大小链成一个链表(以下简称溢出链表)放人溢出区。
2、各级索引中的索引项结构
注意:
磁道索引中的每一个索引项,都由两个子索引项组成:基本索引和溢出索引项。
3、ISAM文件的检索
在ISAM文件上检索记录时,从主索引出发,找到相应的柱面索引;从柱面索引找到记录所在柱面的磁道索引;从磁道索引找到记录所在磁道的起始地址,由此出发在该磁道上进行顺序查找,直到找到为止。若找遍该磁道均不存在此记录,则表明该文件中无此记录;若被查找的记录在溢出区,则可从磁道索引项的溢出索引项中得到溢出链表的头指针,然后对该表进行顺序查找。
【例】要在下图中查找记录R78,先查主索引,即读入CoTo;因为78<300,则查找柱面索引的C0Tl(不妨设每个磁道可存放5个索引项),即读人C0Tl;因为70<78<150,所以进一步把C2T0入内存;查磁道索引,因为78<81,所以C2T1即为R78所存放的磁道,读人C2T1,后即可查得R78
为了提高检索效率,通常可让主索引常驻内存,并将柱面索引放在数据文件所占空间居中位置的柱面上,这样,从柱面索引查找到磁道索引时,磁头移动距离的平均值最小。
4、ISAM文件的插入操作
当插人新记录时,首先找到它应插入的磁道。若该磁道不满,则将新记录插入该磁道的适当位置上即可;若该磁道已满,则新记录或者插在该磁道上,或者直接插入到该磁道的溢出链表上。插入后,可能要修改磁道索引中的基本索引项和溢出索引项。
【例】依次将记录R
72,R
87,R
91插入到上图所示的文件后,第二个柱面的磁道索引及该柱面中主文件W的变化状况如下图所示。
当插入R
72时,应将它插在C
2T
l,因为72<75,所以R
72应插在该磁道的第一个记录的位置上,而该磁道上原记录依次后移一个位置,于是最后一个记录R
81被移人溢出区。由于该磁道上最大关键字由81变成79,故它的溢出链表也由空变为含有一个记录R
81的非空表。因此,将C2T1对应的磁道索引项中基本索引项的最大关键字,由81改为79;将溢出索引项的最大关键字置为81,且令溢出链表的头指针指向R
81,的位置;类似地,R87和B91被先后插入到第2号柱面的第2号磁道C
2T
2上。插入R
87时,R
100被移到溢出区;插入R
91时,R
95被移到溢出区,即该磁道溢出链表上有两个记录。虽然物理位置上R
100在R
95,之前,但作为按关键字有序的链表,B
95是链表上的第一个记录,R
100是第二个记录。因此,C
2T
2对应的溢出索引项中,最大关键字为100,而溢出链表头指针指向R95的位置;C
2T
2移出R
95和移出R
100后,92变为该磁道上最大关键字,所以C
2T
2对应的基本索引项中最大关键字由100变为92。
5、ISAM文件中删除记录的操作
ISAM文件中删除记录的操作,比插入简单得多,只要找到待删除的记录,在其存储位置上作删除标记即可,而不需要移动记录或改变指针。在经过多次的增删后,文件的结构可能变得很不合理。此时,大量的记录进入溢出区,而基本区中又浪费很多的空间。因此,通常需要周期性地整理ISAM文件,把记录读入内存重新排列,复制成一个新的ISAM文件,填满基本区而空出溢出区。
VSAM文件
VSAM是Virtual Storage Access Method(虚拟存储存取方法)的缩写,它也是一种索引顺序文件的组织方式,采用B+树作为动态索引结构。
1、B+树
B+树是一种常用于文件组织的B-树的变型树。一棵m阶的B+树和m阶的B-树的差异是:
①有k个孩子的结点必有k个关键字;
②所有的叶结点,包含了全部关键字的信息及指向相应的记录的指针,且叶子结点本 身依照关键字的大小,自小到大顺序链接;
③上面各层结点中的关键字,均是下一层相应结点中最大关键字的复写(当然也可采用"最小关键字复写"的原则),因此,所有非叶结点可看作是索引部分。
【例】下图是一棵3阶的B+树。
注意:
①通常在B+树上有两个头指针root和sqt,前者指向根结点,后者指向关键字最小的叶子结点。
②对B+树可进行两种查找运算:一种是从最小关键字起进行顺序查找;另一种是从根结点开始进行随机查找。
2、B+树的运算
在B+树上进行随机查找、插入和删除的过程,基本上与B-树类似。
(1)B+树的查找运算
在查找时,若非叶结点上的关键字等于给定值,并不终止,而是继续向下直到叶子结点。因此,在B+树中,不管查找成功与否,每次查找都是走了一条从根到叶子结点的路径。
B+树查找的分析类似于B-树。B+树的插入也仅在叶子结点上进行,当结点中的关键字个数大于m时要分裂成两个结点,它们所含关键字的个数分别为:
并且它们的双亲结点中应同时包含这两个结点的最大关键字。
(2)B+树的删除
B+树的删除仅在叶子结点进行,当叶子结点中的最大关键字被删除时,其在非终端结点中的值可以作为一个"分界关键字"存在。若因删除而使结点中关键字的个数少于
时,则可能要和该结点的兄弟结点合并,合并过程和B-树类似。
3、VSAM文件
B+树的每个叶结点中的关键字均对应一个记录,适宜于作为稠密索引。但若让叶结点中的关键字对应一个页块,则B+树可用来作为稀疏索引。IBM公司VSAM文件是用B+树作为文件的稀疏索引的一个典型例子。
这种文件组织的实现,使用了IBM370系列的操作系统的分页功能,这种存取方法与存储设备无关,与柱面、磁道等物理存储单位没有必然的联系。例如,可以在一个磁道中放n个控制区间,也可以一个控制区间跨n个磁道。
(1)VSAM文件的结构
VSAM文件的结构由三部分组成:索引集,顺序集和数据集(如下图所示)。
①数据集
文件的记录均存放在数据集中。数据集中的一个结点称为控制区间(Control Interval),它是一个I/0操作的基本单位,每个控制区间含有一个或多个数据记录。
②顺序集和索引集
顺序集和索引集一起构成一棵B+树,作为文件的索引部分。
顺序集中存放的每个控制区间的索引项由两部分信息组成:该控制区间中的最大关键字和指向控制区间的指针。若干相邻的控制区间的索引项,形成顺序集中的一个结点。结点之间用指针相链接,而每个结点又在其上一层的结点中建有索引,且逐层向上建立索引,所有的索引项都由最大关键字和指针两部分信息组成。这些高层的索引项形成B+树的非终端结点。
VSAM文件既可在顺序集中进行顺序存取,又可从最高层的索引(B+树的根结点)出发,进行按关键字的随机存取。顺序集中一个结点连同其对应的所有控制区间形成一个整体,称做控制区域(Control Range),它相当于ISAM文件中的一个柱面,而控制区间相当于一个磁道。
(2)VSAM文件中控制区间的结构
在VSAM文件中,记录可以是不定长的。因而在控制区间中,除了存放记录本身之外,还有每个记录的控制信息(如记录的长度等)和整个区间的控制信息(如区间中存放的记录数等),控制区间的结构如下表所示。
(3)VSAM文件的插入方法
VSAM文件中没有溢出区,解决插入的方法是在初建文件时留出空间:一是每个控制区间内并未填满记录,而是在最末一个记录和控制信息之间留有空隙;二是在每个控制区域中有一些完全空的控制区间,并在顺序集的索引中指明这些空区间。
当插入新记录时,大多数的新记录能插入到相应的控制区间内,但要注意:为了保持区间内记录的关键字从小至大有序,则需将区间内关键字大于插入记录关键字的记录,向控制信息的方向移动。若在若干记录插入之后控制区间已满,则在下一个记录插入时,要进行控制区间的分裂,即把近乎一半的记录移到同一控制区域内全空的控制区间中,并修改顺序集中相应索引。倘若控制区域中已经没有全空的控制区间,则要进行控制区域的分裂,此时顺序集中的结点亦要分裂,由此需要修改索引集中的结点信息。但由于控制区域较大,通常很少发生分裂的情况。
(4)VSAM文件的删除
在VSAM文件中删除记录时,需将同一控制区间中,比删除记录关键字大的记录向前移动,把空间留给以后插人的新记录。若整个控制区间变空,则回收作空闲区间用,且需删除顺序集中相应的索引项。
(5)VSAM文件的优点
和ISAM文件相比,基于B+树的VSAM文件有如下优点:能保持较高的查找效率,查找一个后插入记录和查找一个原有记录具有相同的速度;动态地分配和释放存储空间,可以保持平均75%的存储利用率;而且永远不必对文件进行再组织。因而基于B+树的VSAM文件,通常被作为大型索引顺序文件的标准组织。