-
虚拟存储存取文件 / VSAM 文件
文件只有控制区间
和控制区域
等逻辑存储单位;
与外存储器中柱面、磁道等具体存储单位没有必然的联系,用户在存取文件中的记录时,不需要考虑这个记录的当前位置是否在内存,也不需要考虑何时执行对外存进行读写命令。 -
VSAM文件结构
由3部分组成:索引集
、顺序集
和数据集
文件的记录均放在数据集
中,数据集中的一个结点称为控制区间
。控制区间是一个 IO 操作的基本单位,由一组连续的存储单元组成。
控制区间的大小可随文件不同而不同,但同一文件上控制区间的大小相同。
每个控制区间含有一个或多个按关键字递增有序排列的记录。
顺序集和索引集一起构成一棵 B+ 树,为文件的索引部分。
顺序集中存放每个控制区间的索引项。每个控制区间的索引项由两部分信息组成,即该控制区间中的最大关键字
和指向控制区间的指针
。
若干相邻控制区间的索引项
形成顺序集
中的一个结点,结点之间用指针
相链接,而每个结点又在其上一层的结点中建有索引,且逐层向上建立索引。
上图中所有的索引项都由最大关键字
和指针
两部分信息组成,这些高层的索引项形成 B+树的非终端结点。
因此,VSAM文件既可以在顺序集中进行顺序存取,又可以从最高层的索引(B+树的根结点)出发进行按关键字存取。
控制区域
:顺序集中一个结点连同其对应的所有控制区间形成一个整体,叫作控制区域 -
每个控制区间可视为一个逻辑磁道,每个控制区域可视为一个逻辑柱面
-
VSAM文件的记录可以是不定长的,控制区间中除了存放记录本身以外,还有每个记录的控制信息(如记录的长度)和整个区间的控制信息(如区间中存有的记录数)。
可以是像下图这样的:
-
VSAM文件解决插入的办法:在初建文件时留有空间,当控制区间和控制区域已满不能再进行插入记录时,可以进行控制区间或控制区域的分裂(插入后也要保证关键字自小至大有序)
1、每个控制区间内不填满记录,在最末一个记录和控制信息之间留有空隙
2、在每个控制区域中设置一些完全空的控制区间,并在顺序集的索引中指明这些空区间 -
VSAM文件的删除
将同一控制区间中较删除记录关键字大的记录向前移动,把空间留给以后插入的新记录。
若整个控制区间变空,则需修改顺序集中相应的索引项。 -
VSAM文件所占存储空间较大,一般只能保持约 75% 的存储空间利用率。
优点:可以动态分配和释放存储空间,不需要对文件进行重组,并能较快地对插入的记录进行查找,查找性能稳定