文件的结构

文件是逻辑上相关的记录的集合。通常一个文件的各个记录是按照某种次序排列起来的。可以按记录中关键字值的大小,也可以按各个记录存入文件的时间先后排列。这样各记录间自然形成一种线性关系,所以一般情况下,文件被看成是一种线性结构。 

  计算机上的文件一般分为操作系统文件和数据库文件。操作系统文件仅仅是一组连续的字符序列,无结构无解释。数据库文件是带有结构的记录文件的集合,每个记录都是一个或多个数据结构,也称为逻辑记录。

  文件是存在外存储器上的。为了有效分配外存空间,多个扇区通常形成簇或块。簇(块)是文件的最小分配单位,它们的大小由操作系统决定。文件存储器上的文件称为物理文件,一簇或块(物理块)中的信息称为物理记录。用户读/写的记录是指逻辑记录,查找该逻辑记录所在的物理块是操作系统文件管理器的职责,文件管理是操作系统的主要功能模块。

文件的结构就是磁盘上数据的组织方式,我们知道磁盘上的数据读写时间10ms~100ms,相当的满!所以文件结构的设计目的就是尽量减少数据读写次数。下面介绍几种主要的文件结构:顺序文件、散列文件、索引文件、倒排文件。

  顺序文件:顾名思义,数据是按顺序存放的,那就是线性表咯!顺序文件又分为串行处理文件和顺序处理文件。

串行处理文件的记录未按关键字值排序,它的排序是按照每条记录的访问频率组织的。串行处理文件的顺序搜索:  从文件的第一个记录开始,依次将待查关键字值与文件中的记录的关键字值进行比较,直到成功找到该记录,或直到文件搜索完毕,搜索失败终止。

顺序文件已按关键字排序。有序表上的各种搜索方法原则上都可以用于顺序处理文件的搜索,如顺序搜索和二分搜索等。但由于文件是外存上的数据结构,在考虑算法时,必须立足于尽量减少访外次数,因此顺序处理文件的搜索算法有自己的特点。下面介绍顺序处理文件上的分块插值搜索。因为磁盘的读写单位是块(Block),所以在搜索的时候可以根据关键字值的范围确定在哪个设备的哪个块上,从而达到缩小搜索范围的效果。

散列文件:从名字上大家也能猜出来肯定跟散列表有关联,不错,它从形式上跟散列表是类似的。不过,那个存放数据的线性单元改名字了叫”基桶“,分开链接法的单链表改叫”溢出桶“。当需要插入记录时,可将其插在最后一个桶(基桶或溢出桶)中,若该桶已装满,则在该桶后新增加一个溢出桶,将新记录插入该新桶中。先从基桶开始查找可用空间,包括被打上删除标记的空间。如有,则将新记录存于该处,否则再新增溢出桶。当需要删除记录时,仅需对被删除的记录作删除标记即可。当被删除的记录不在最后一个桶中时,将最后一个桶中的记录移到存放被删除记录的位置。

  索引文件 索引表是关键字值key和指针ptr的集合。关键字值和指针的偶对称为索引项(key,void*ptr)。 稀疏(非稠密)索引 :如果数据文件是 顺序处理文件 ,则可对 一组记录 建立一个索引项,组成索引表。这时,每个索引项的关键字值是该组记录中的最大关键字值,而指针指向存放该组记录的块的起始地址。这种索引称为稀疏(非稠密)索引。

有稀疏索引就有稠密索引,当文件是串行处理文件时,就得对每个记录建立一个索引项,组成索引表,这种索引就称为稠密索引。

倒排文件是对次关键字建立索引。在一个次关键字的索引表中,对该次关键字的每个值,直接列出具有该值的所有记录的存放地址。倒排文件的次索引表称为倒排表。  由于倒排索引表的第一栏是某个次关键字的所有的值,第二栏才能查到相应的记录,而通常的表格第一栏总是主关键字,也许正因为这种主次颠倒,才得名倒排文件。  倒排文件的好处在于对次关键字值的搜索快。 缺点是维护困难。

 
静态索引结构   前面介绍的索引文件结构是一种静态索引结构。但 当数据文件很大时,索引表本身也很大,可以建立多级索引: 2 级索引, 3 级索引, 。这种多级索引形成一种静态的 m 叉搜索树结构。 显然静态的多叉树索引结构不利于记录的频繁插入和删除。
动态索引结构:B+树。B+树与B-树的最显著的区别是B+树只在叶结点中存储记录,非叶结点存储索引项。再来回忆下B-树。

B-树: m叉搜索树或者是一棵空树,或者是一棵满足下列特性的树:

(1)根结点最多有m棵子树,并具有如下结构: n,P0,(K1,P1),(K2,P2),…,(Kn,Pn)其中,Pi是指向子树的指针,0<i<n<m,Ki是元素的关键字值,1<i <n<m;

(2)   Ki<Ki+1 , 1<i<n;

(3) 子树Pi上所有关键字值都大于Ki,小于Ki+1,0<i<n;

(4) 子树P0上所有关键字值都小于K1,子树Pn上的所有关键字值都大于Kn;

(5)  子树Pi,0<i<n也是m叉搜索树。
就可以大概得到B+树的概念及一些性质:

一棵m阶B+树或者是空树,或者是满足下列特性的树:

每个非叶子结点最多有m个孩子;
除根结点以外的非叶子结点至少有 m/2 个孩子;
k 个孩子的非叶结点必须有 k 个关键字值
根结点至少有两个孩子;
所有叶子结点均在同一层上。

每个B+树结点的结构如下:N,(P0,K0),(P1,K1),…,(Pn-1,Kn-1)其中,Pi是指向子树的指针,Ki是子树Pi上的最大关键字值,Ki<Ki+1 0<i<n<m。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值