网站大量收购闲置独家精品文档,联系QQ:2885784924

B+树索引实验报告.pdf

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一 B+树索引 一、 实验内容: 1. B+树索引的初使建立; 2. B+树索引的维护(插入删除) ; 3. B+树索引的查找; 二、 实验要求: 1. 外存索引; 2. 数据地址可以用逻辑地址模拟; 3. 能以图形化方式展示索引结构; 三、 实验步骤: 本实验代码实现使用的的是 C 语言。 1. 索引文件结构的表示: 由于直接读写管理磁盘块涉及很多底层的操作,所以我们是用一个文件来表示一个硬 盘,然后模拟这些操作。 我们的思路是在这个硬盘的第 1 块里存放这个文件的头部信息 (比如现在哪个块是可以 用的,哪个块已经被用了,等等) ,剩下的其它块用来存放记录索引等等。 具体的定义在 ”disk.h 里面,我们首先定义了一个块的大小” BLOCK_SIZE ,在本实验 里面我们定义为 4K ,然后我们实现了一些具体的操作:得到下一个空块,设置一个块的状 态(可用,不可用) ,读写一个索引块,读写索引文件头信息。 具体实现: next_empty_block ( …):得到下一个可用的空块。我们是用位图来管理空块,在索引 文件头里面定义了一个 bitmap[] ;然后用某一位是 0 (表示该块为空块) 还是 1 来表示所对 应的块是不是空的。所以该函数就是从头扫描一个为 0 的位,然后把块号返回以提供下一 个索引块存放的位置。 set_status_block( …) :设置某块的状态。将该所代表的位置为 0 或 1。 read_btidx_block( …) :读某索引块。先把文件指针定位到要读的块的位置(块从 0 开 始编号,块 i 在文件中的偏移就是 BLOCK_SIZE * i ),然后读出该索引块的内容。 write_btidx_block( …) :写某索引块。以下同上。 read_bthdr_block( …) :读索引文件头。 write_bthdr_block ( …):写回索引文件头。 2. B+树节点结构及相关操作定义: 1) 首先定义 B+树每个节点所能存的最大 KEY 值数 KEY_NUM ,我们定义为 256 。 2) 然后定义 B+树的节点结构 btree_node : /* b+ tree node struct */ struct btree_node { int d; /* key num of a node */ key_t key[KEY_NUM]; /* n search keys */ int ptr[KEY_NUM + 1]; /* n+1 pointes */ }; d 表示该节点当前所存放的 KEY 的数目, key[KEY_NUM] 是存放 KEY 值的数组, ptr[KEY_NUM + 1] 是存放指针 (数据地址) 的数组, 这个数据地址通过逻辑地址模拟: 当结点为内部结点时, 记录的是指向该键值的下一个子块号; 当结点为叶子结点时, 记 录的是数据 (元组 )在数据文件中的偏移量。 。 3) B+树的头信息结构

文档评论(0)

niujiaoba + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档