20. 数据结构进阶二十文件相关概念
“生活是欺骗不了的,一个人要生活得光明磊落。 -- 冯雪峰”
最后在数据结构进阶这块,我们来看些文件相关的概念。
1. 文件
文件是性质相同的记录的集合。文件的数据量通常很大,它被放置在外存上。
1.1 顺序文件
顺序文件是指按记录进入文件的先后顺序存放、其逻辑顺序跟物理顺序一致的文件。若顺序文件中的记录按其主关键字有序,则称此顺序文件为顺序有序文件;否则称为顺序无序文件。为了提高检索效率,常常将顺序文件组织成有序文件。
顺序文件的结构特点:
记录在文件中的排列顺序是由记录进入存储介质的次序决定的, 即文件物理结构中记录的排列顺序和文件的逻辑结构中记录的排列顺序一致。
1.2 索引文件
用索引的方法组织文件时,通常是在文件本身(称为主文件)之外,另外建立一张表,它指明逻辑记录和物理记录之间的一一对应关系,这张表就叫做索引表,它和主文件一起构成的文件称作索引文件。
索引表中的每一项称作索引项,一般索引项都是由主关键字和该关键字所在记录的物理地址组成的。显然,索引表必须按主关键字有序,而主文件本身则可以按主关键字有序或无序,前者称为索引顺序文件,后者称为索引非顺序文件。
对于索引非顺序文件,由于主文件中记录是无序的,则必须为每个记录建立一个索引项,这样建立的索引表称为稠密索引。对于索引顺序文件,由于主文件中记录按关键字有序,则可对一组记录建立一个索引项,例如,让文件中每个页块对应一个索引项,这种索引表称之为稀疏索引。
索引文件在存储器上分为两个区:索引区和数据区,前者存放索引表,后者存放主文件。在建立文件过程中,按输入记录的先后次序建立数据区和索引表,这样的索引表其关键字是无字的,待全部记录输入完毕后再对索引表进行排序,排序后的索引表和主文件一起就形成了索引文件。
1.3 ISAM文件
ISAM(Index Sequential Access Method)(索引顺序存取方法)是一种专为磁盘存取设计的文件组织方法。
1.4 VSAM文件
VSAM是虚拟存储存取方法(Virtual Storage Access Method)的英文缩写。VSAM文件是一种采用虚拟存储存取方法的文件。VSAM文件的存储单位是控制区间和控制区域,这是一些逻辑存储单位,与柱面、磁道等实际存储单位并没有必然的联系。用户在存取VSAM文件的记录时,不需要考虑该记录的当前位置是在内存还是在外存,也不需要考虎何时执行对外存进行读/写的命令。可见,这种文件较ISAM文件更方便用户使用。
1.5 哈希文件
哈希文件也称为散列文件,是利用哈希存储方式组织的文件,亦称为直接存取文件。它类似于哈希表,即根据文件中关键字的特点,设计一个哈希函数和处理冲突的方法,将记录哈希到存储设备上。
与哈希表不同的是,对于文件来说,磁盘上的文件记录通常是成组存放的,若干个记录组成一个存储单位,在哈希文件中,这个存储单位叫做桶。假如一个桶能存放m个记录,则当桶中已有m个同义词的记录时,存放第m+1个同义词会发生“溢出”。处理溢出虽可采用哈希表中处理冲突的各种方法,但对哈希文件而言,主要采用链地址法。
1.6 多关键字文件
前面介绍的文件都是只含一个主关键字的文件。为了提高查找效率,还需要对被查询的次关键字建立相应的索引,这种包含有多个次关键字索引的文件称为多关键字文件。次关键字索引本身可以是顺序表,也可以是树表。
1.6.1 多重表文件
多重表文件是将索引方法和链接方法相结合的一种组织方式,它对每个需要查询的次关键字建立一个索引,同时将具有相同次关键字的记录链接成一个链表,并将此链表的头指针、链表长度及次关键字,作为索引表的一个索引项。通常多重表文件的主文件是一个顺序文件。
1.6.2 倒排文件
倒排文件和多重表文件的区别在于具有相同次关键字的记录不进行链接,而是在相应的次关键字索引表的该索引项中直接列出这些记录的物理地址或记录号。这样的索引表称为倒排表。由主文件和倒排表共同组成倒排文件。