文件组织是指文件的构造方式。文件
用户按照自己的使用要求,把构成文件的元素组织起来,文件的这种结构叫
文件逻辑结构。
变长
记录不会有剩余空间和截掉记录,所以克服了定长的2个缺点。但尽管它也容易一个接一个
读取,但因为
记录的位置很难计算,所以直接读取很困难。连续访问的文件或者通过目录查找的文件经常使用变长
记录格式。
记录的
格式,它如何分块,和其它相关信息都被保存在
文件描述符里。
响应时间——完成操作之前
用户要等待的时间。这在交互环境中的查找和修改信息中尤其重要。
为了加速这个处理过程,一些
优化特性被加入系统。一个就是选择
记录的一个关键区域,然后再
存储记录前都是根据这个区域分类记录。然后当
用户需要一个
记录的时候,系统只是查找关键区域。当相匹配的
记录找到或者关键区域比最后一次比较的记录小时,给出信息“没找到记录”,然后完成搜索。
尽管这个技术辅助查找处理过程,但因为当有
记录添加或者删除的时候都要保存,它使得算法更复杂了。为了保存物理顺序,文件必须在更改的时候完成回写或者动态分类。
直接
记录组织使用
直接访问文件的方法,当然,只有在直接访问
存储设备上才能实现。这些文件给
用户提供了以任何顺序访问任何
记录的灵活性,而不用从头开始寻找。这也是一个随机组织方法,其文件叫做随机访问文件。
这个方法很直截了当。
用户通过
记录格式来确定一个区域(或者区域组合),并标记为键域,它唯一确定每一个记录。程序通过一系列指令来保存数据,叫做
散列算法,它将每一个键域编号,即
记录的
逻辑地址。然后把这些交给信息管理器,它可以把
逻辑地址通过几步转换成
物理地址(簇,表面和
记录号)并保持文件组织,检索记录过程也是同样的。
电话邮购公司用散列的方法来
直接访问客户信息。假设你在订货,你询问你的顾客号。(假设为152132727)。程序将从数据文件中按照
散列算法的键值来计算出你的
记录的
逻辑地址,(在348)。所以当服务员输入152132727,荧幕很快显示出同一个
逻辑地址的顾客号。如果你在
数据库中,操作员会很快知道,如果不在,你会很快知道。
散列算法的问题在于,一些有唯一主键(比如顾客号)的
记录可能会有同一个
逻辑地址——这里将产生冲突。在
文件管理存储之前,它必须找到另一个
逻辑地址。冲突的
记录将被存在一个溢出区域,它在文件的生成时就被附加上了。尽管程序做到了从溢出区域与
记录的
逻辑地址的连接,文件管理还是要处理空间的分配问题。
文件的最大尺寸在它生成的时候就确立了。最终,文件可能会完全写满或者
存储在溢出区域的
记录数已经太多了,这将导致数据检索的效率大大降低。在这两种
情况下,文件必须重新组织和重新
写入,这需要由
编程者来干预。
这种组织方法避免了冲突,因为它没有用
哈希算法来生成一个
记录的地址。代替它的是,使用了该信息生成
索引文件来实现
记录的查找。这种组织将顺序的连续的文件分成了同等大小的块。它的大小由文件管理器来决定,以充分利用物理
存储设备的优点并
优化检索策略。每一个
索引文件的项目包括最高的
记录键和这个
数据块的物理位置,即这个
记录和
记录号最小的记录的
存储位置。
因此,为访问文件中的
记录,系统先搜索
索引文件,然后进入物理位置。
索引文件就像是一个数据的指示器。一个索引
顺序文件也有溢出区域,但是它会扩展到整个文件(可能是很少的
记录),所以已有的记录也可以扩展,新的记录可以生成在物理顺序与逻辑顺序最近的地方。另一个溢出区不在主要数据区域,而是只有在其它溢出区都充满了才用。我们叫它为最后
记录的溢出区。
这个最后分配的溢出区可以在文件的有效时间内添加
记录。记录是用
软件包来实现逻辑顺序保存,而不用
程序员投入太多的努力。当然,添加太多
记录时
进程就会变慢,这是因为寻找一个记录必须从目录到主数据区最后才到溢出区。
当恢复时间变得太长,文件就需要重新组织。这个工作尽管不像组织一个
直接访问文件一样枯燥,但通常仍要系统的分析员或者
程序员来做。