小型数据库设计-minisql -buffer manager模块文说明

小型数据库设计-minisql -buffer manager模块文说明

ID:13282962

大小:105.50 KB

页数:19页

时间:2018-07-21

小型数据库设计-minisql -buffer manager模块文说明_第1页
小型数据库设计-minisql -buffer manager模块文说明_第2页
小型数据库设计-minisql -buffer manager模块文说明_第3页
小型数据库设计-minisql -buffer manager模块文说明_第4页
小型数据库设计-minisql -buffer manager模块文说明_第5页
资源描述:

《小型数据库设计-minisql -buffer manager模块文说明》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MINISQL:BufferManager模块文说明一.设计思想:由于数据库对磁盘文件的读写非常频繁,且每次所读的数据内容较小,若每次数据库的读文件都访问磁盘将导致I/O效率的低下。此BUFFER即为提高磁盘I/O操作的效率,实现缓冲区与文件系统交互的单位是块,块的大小应为文件系统与磁盘交互单位的整数倍,此次实验中设定为4096byte,即4K,并且整个Buffer占100个BLOCK块。每个磁盘文件都被分割成4k大小的块。二.Buffer的具体数据结构设计与实现:1.Block的具体数据结构:classblockMini{charBlock[BLOCKSIZE];

2、stringFileName;intNum;//blocknuminthefileboolDirty;boolWriten;CTimeTime;public://构造函数blockMini();//blocknuminthefile~blockMini();//外部接口booladdRecord(char*,intsize);booldeleteRecord(intindex);char*getRecord(intindex);…..};内部接口在此省略,详细可参看代码区如上所示,每个block的数据结构包含了数据块charBlock[BLOCKSIZE],所存文件

3、名:stringFileName,在此文件上block数:intNum;,以及标志位boolDirty;boolWriten;CTimeTime为记录最后访问时间,用于实现LRU的替换准则。数据区的具体结构如下示意图:总共record个数指向空余空间结束的下标空余空间记录大小在数据区Block数组的前端是储存记录信息的地方,每个int型数据在此block中占八个单位的byte。整个block有两个int型的信息数据,即第一:总共record个数。第二:指向空余空间结束的下标。每条record在Block头部也占有两个数据头信息,一个为此记录的大小,一个为此记录的起始

4、下标。所有记录都以char*格式传给buffermanager。Buffermanager以char*格式写到内存或文件。2.Buffer数据结构:包含了100个block和对外一些接口。三.外部接口buffermanager提供给recordmanager的接口:blockMini::deleteRecord(intindex)//recordmanager用此函数执行delete语句blockMini*bmMini::getBlock(stringtable,intnum);//为recordmanager提供一个表的第num个block,从而让其可对该bloc

5、k上的record操作char*blockMini::getRecord(intindex);//在对某一个块,可使用该函数得到这个块中的每个block。Recordmanager可以通过这个包装好的接口直接得到各个record数据,不用熟悉buffer的具体结构voidbmMini::drop(stringtable);//recordmanager调用此函数执行drop语句boolbmMini::addRecord(stringtable,char*record,intsize);//recordmanager调用此函数向“table”表中插入大小为size的r

6、ecord,内容在char*record;四.内部接口实现1.操作硬盘的函数:boolblockMini::readBlockFromDisk(stringtable,intnum);//从硬盘读取指定的文件的某个BLOCKboolblockMini::writeBlockToDisk(stringtable,intnum);//向硬盘写...这两个函数负责所有的对硬盘的读写操作,以block为单位。在操作数据时,若对应的操作对象在buffer中存有拷贝,则只对buffer的数据进行操作,不会直接操作硬盘,因此,buffer中的内容有可能比硬盘文件更新的早,因而在某

7、个block被替换以及程序推出时整个buffer的析构时,对每个block都会调用writeBlockToDisk(stringtable,intnum)函数进行文件的写操作,以将所有的block更新到磁盘文件。2.boolbmMini::addRecord(stringtable,char*record,intsize)的实现:{for(inti=0;igetFileName()==table){if(BufBlock[i]->addRecord(record,size))returntrue;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。