实验内容
实验工具
实验步骤
文件管理模块
缓冲区管理模块
文件读取模块
设计思想
原理
实现
分析
原理
实现
分析
!实验设计实现
!基于双链表的 的实现
!基于双链表"#$%& 的 的实现
!基于 '#&#$%& 的 的实现
实验结果与分析 !
总结与致谢
附录
实验目的
通过简单模拟数据库底层的存储模块和缓冲区模块的操作流程 ,
进一步掌握数据库相关模块的实现原理。
实验内容
编程实现磁盘控制器和缓冲区控制器,利用自己实现的程序读
入 文件,统计 执行完之后的统计量
( 次数
执行时间
缓冲区命中率
实验工具
操作系统:)*+$
编程工具:,-.*&$
编程语言:/0
实验步骤
文件管理模块
这个模块对应于数据库的底层存储模块, 在数据库中的 存取粒
度是页面, 文件中涉及到 ) 个页面,所以首先要在磁盘中生
成有 ) 个页面的文件1页面大小一般设为 或者 ,文件命名
为 23
该模块需要实现的主要函数(不表示只需要这些函数)
4&5*.6$*7.89 打开文件,文件不存在需要新建
:.$5*.69 关闭文件
;根据 ;<-=(> 来读取页面到某个指定的缓冲区
)*;根据 ;<-=(> 将缓冲区内的某页面写回到磁盘
缓冲区管理模块
实现完文件的管理模块之后,重点是实现缓冲区管理模块,
就是用来管理缓冲区的算法之一
定义缓冲区
public class BFrame {
public static final int FRAMESIZE =4096;//页
面大小
char[] field=new char[FRAMESIZE];
public BFrame(byte[] buffer) {//buffer 缓冲区
数组,页面读入内存后放在该数组里
super();
// TODO Auto-generated constructor stub
this.field=buffer.toString().toCharArray();
}
}
public static final int DEFAULTSIZE = 1024;//缓
冲区数组,页面读入内存后放在该数组里
BFrame[] buf = new BFrame[DEFAULTSIZE];
文件读取模块
?使用 8$$5*.,此类的实例支持对随机访问文件的
读取和写入。随机访问文件的行为类似存储在文件系统中的一个大
型 2,数组。存在指向该隐含数组的光标或索引,称为文件指针;
输入操作从文件指针开始读取字节,并随着对字节的读取而前移此
文件指针。如果随机访问文件以读取@写入模式创建,则输出操作也
可用;输出操作从文件指针开始写入字节,并随着对字节的写入而
前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该
数组扩展。该文件指针可以通过 5*.;*方法读取,并通过
$A方法设置。
&5*.6*7.89:
5*.B+8$$5*.6+5*.67.891C+C9D
.$5*.69E5*..$69D
;6*&=*9E
currentFile.seek(page_id *
BFrame.FRAMESIZE);//设置到此文件开头测量到的文件指针
偏移量,在该位置发生下一个读取或写入操作
byte[] buffer = new byte[BFrame.FRAMESIZE];
count = currentFile.read(buffer, 0, 4096);//
将最多 len 个数据字节从此文件读入 byte 数组,返回读入缓冲区