- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中科大高级数据库实验二—buffer的存储与管理
高级数据库第二次试验姓名:张先荣 学号:S班级:软件系统设计6班一.实验目的 为了了解数据库Buffer的工作原理,对数据库底层有个更加深入的了解,实现一个简单的模拟的缓冲管理器,本次试验涉及到缓冲管理器,缓冲技术,散列技术,文件存储结构,磁盘空间等。详细步骤如下: (1)模拟实现一个块在磁盘和缓冲区之间的交互。 (2)要求创建一个data.dbf,然后创建存储管理器对文件的读写进行操作。(3)建立一个缓冲区管理器与存储管理器交互、(4)测试500000条数据库请求的txt文件,读取指定的页号到页面缓冲区,计算磁盘IO次数与命中率。二.实验环境硬件环境:联想G470笔记本 内存:8G 软件环境:开发系统:Windows7 开发工具:Visual Studio 2013 开发语言:C++ 版本:.NET4.5三.实验思路由题目描述我们可以设计出以下几个主要类:?File_Create类:用来创建指定的data.dbf文件;DSMgr类:用来读写data.dbf文件,实现指定page_id的page的读写;BMgr类:用来管理Buffer中bframe,维护数组ptof[]、ftop[],还有对buffer空间不够用时挑选置换bframe的LRU算法;BCB类:用来维护与缓冲区Buffer关联的page信息bFrame类:定义Buffer中的bFrame,即page在缓冲区中的存在形式;LRU类:最近最少使用算法,当Buffer空间已满时用来挑选置换的bFrame,里面维护一个frameid; 这里我们先假设页面的大小为4096,缓冲区一共有1024个页面,开始在磁盘上存储了50000个页,按照目录进行存储。然后用哈希表映射页框号到页号,页号到页框号。如图表1所示:图表 1 磁盘与内存 其中,BCB类和bFrame类按照buffer2.txt文件定义,LRU类是包含了一个LRUNode类,定义了LRU节点信息,用于维护被关联的frameID。我们在LRU定义双向链表,因此,在置换的时候直接从尾节点找到并删除即可。 因为我们page一共定义了50000个(pageid范围0-49999),而缓冲区大小只有1024个(frameid范围0-1023),所以pageid不能和frameid等值对应,因此需要一个哈希函数将pageid映射到一个对应的frameid,这里采取最简单的做法frameid=pageid%1024,那么在查找的时候,ptof[pageid%1024]表示已经存在的page应该存放的位置,直接去里面找;如果是新读进来的块,则更新BCB块信息,再将BCB块挂到这个位置的链表上去。这个数组主要还是用于查找已存在的page所属的BCB块。 为实际Buffer中维护的只有1024个page,每次需要将空闲的一个bFrame找一个出来并且读page到这个frameid的bFrame中,令ftop[frameid]=pageid,表示当前页框号为frameid的bFrame中关联着页号为pageid的page。同时创建一个BCB块包含pageid和这个找到的空闲的frameid等信息,并挂到ptof[pageid%1024]的位置上去。这种情况只适用于Buffer中的1024个bFrame还有空闲的情况。四.实验流程 流程图如图2所示。图表 2 流程图五.实验类图实验类如图3所示:图表 3 类图六.概要设计。1.BufferManager, 用来管理Buffer中bframe,维护数组ptof[]、ftop[],还有对buffer空间不够用时挑选置换bframe的LRU算法.2.DSManager, 用来读写data.dbf文件,实现指定page_id的page的读写;3. 其他一些类:4. 将对应page_id的page读入到buffer中。如果buffer已满,则需要选择换出的frame5. 设置特定bcb中的dirty值为1七.实验结果1.如图所示,当buffersize=1024,操作总页数是500000,此时的IO总次数是362321,命中率是27.5%,程序运行总时间是29.3s图表 4 buffersize=10242.如图所示,当buffersize=2048,操作总页数是500000,此时的IO总次数是325001,命中率是34.9%,程序运行总时间是29.8s图表 5 buffersize=20483.如图所示,当buffersize=5049,操作总页数是500000,此时的IO总次数是271259,命中率是45.7%,程序运行总时间是42.79s图表 6 buffersize=50494.如图所示,当buffersize=10000,操作总页数是500000,此时的IO总次数是2
原创力文档


文档评论(0)