顺序文件的插入、删除和更新操作在多数情况下都采用批处理方式。此时,为处理方便,通常将顺序文件做成有序文件,称作“主文件”,同时将所有的操作做成一个“事务文件”(进过排序也成为有序文件),所谓“批处理”,就是将这两个文件“合”为一个新的主文件。具体操作相当于“归并两个有序表”。
但有两点不同:
(1) 对于事务文件中的每个操作首先要判别其“合法性”;
(2) 事务文件中可能存在多个操作是对主文件中同一个记录进行的。
批处理的时间分析:
假设主文件中含有h个记录,事物文件中含有m个记录,则对事务文件中含有m个记录,则对事务文件记性排序的时间复杂度为O(mlogm);内部归并的时间复杂度为O(m+n),则总的内部处理时间为O(mlogm+n);
假设对外存进行依次读、取为s个记录,则整个批处理过程中读、写外存的次数为
(其中s为对外存进行一次读、取的记录数)
12.3索引文件
一、结构特点:
1.索引文件由“主文件”和多级“索引”组成
2.索引中每个记录由“关键字”和“指针”组成。
3.通常,索引文件中的主文件是无序文件,索引是(按关键字有序)的有序文件。
4.“索引”是在输入数据建立文件时自动生成。初建时的“静态索引”为无序文件,经过排序后称为有序文件。
二、操作特点:
1.检索方式:直接存取和按关键字存取,“按关键字检索”将两步进行:先查找索引,然后根据索引中指针所指索取记录。
2.插入记录时,“记录”插入在主文件的末尾,而相应的“索引项”必须插入在索引的合适位置上。因此,最后在建索引表时留有一定“空位”。
3.删除记录时,仅需删除索引表中相应的索引项即可。
4.更新记录时,应将更新后的记录插入在主文件的末尾,同时修改相应的索引项。
1. 多级静态索引
此时的索引文件结构
对主文件中每个记录建立一个索引项:
从索引表建立索引查找表,其中每个索引项为:
按关键字进行件检索时,从第三查找表点开始,至多访问外存5次。
2. 动态索引
索引表采用查找树或哈希表
优点:
1) 不需要建立多级索引
2) 初建索引不需要进行排序;
3) 插入或删除时,修改索引方便
用查找树表做索引时,查找索引所需访问外存次数的最大值恰为查找树的深度。
可以做索引的树表有:二叉排序树、B-树和键树
稠密索引优点是,可以实现“预叉找”缺点是,索引表占用的存储空间大。
12.4 索引顺序文件
结构特点:
主文件按主关键字有序,对一组记录建立一个索引项(建立非稠密索引)。
有两种典型的索引顺序文件:
一、ISAM文件
ISAM(IndexSequentialAccessMethod)(索引顺序存取方法)是一种专为磁盘存取设计的文件组织方法。
1. 文件的组织方式
主文件按柱面集中存放,同时建立三级索引:磁道索引、柱面索引和主索引。
磁道索引结构
2. 操作的特点
检索:可有两种方式:
顺序存取-依关键字最小至最大顺序存取。
按关键字存取-从主索引开始,到柱面索引,到磁道索引,最后得到记录,先后访问四次外存。
插入:将记录插入在某个磁道的合适位置上;将该磁道上关键字最大的记录移出到本柱面的溢出区中;
修改本磁道的索引项(包括基本索引项和溢出索引项)。
删除:
在被删记录当前存储位置上作“删除标记”。
3. 文件重组
在经过多次的插入和删除操作之后,大量的记录进入文件的“溢出区”,而“基本存储区”中出现了很多已被删去的记录空间,此时的文件结构很不合理。因此,对ISAM文件,需要周期地进行重组。
4.柱面索引的位置
ISAM文件占有多个柱面,其柱面索引本身占有一个柱面,为使“磁头”的平均移动距离最小,柱面索引应该在数据文件所占全部柱面的中间位置。