cmu15-445 Project #2-Hash Table

该项目涉及实现一个使用线性探测的哈希表,包括哈希表头页和块页的布局,以及哈希表的插入、获取和删除操作。哈希表需要支持持久化和表的动态调整。同时,介绍了并发控制的ReadWriteLatch,用于在多线程环境中管理哈希表的读写访问。
摘要由CSDN通过智能技术生成

TASK #1 - PAGE LAYOUTS

在lab 2中需要实现一个使用线性探测方案的hash table,这个lab中的hash table的存储空间只能使用BufferPoolManager来获取,不能另外使用new或者malloc来获取存储hash table需要的空间。要实现的hash table必须支持持久化,在内存中写入硬盘后,重启DMBS也能重建该hash table。为了实现hash table的读写,在这个lab中需要实现Hash Table Header Page和Hash Table Block Page这个两种Page。

HASH TABLE HEADER PAGE
  • 关于HASH TABLE HEADER PAGE数据结构的定义:

Variable Name Size Description
page_id_ 4 bytes Self Page Id
size_ 4 bytes Number of Key & Value pairs the hash table can hold
next_ind_ 4 bytes The next index to add a new entry to block_page_ids_
lsn_ 4 bytes Log sequence number (Used in Project 4)
block_page_ids_ 4080 bytes Array of block page_id_t

这个project所要实现的就是在多个page中构建一个linear probe hash table,hash table header page相当于这个hash table的meta data page,负责将所有的block page串联起来。一个header page对应Page中的data_,所以一个header page的大小为4096bytes。在实现时header page的成员变量声明如下:

class HashTableHeaderPage { 
 private:
  __attribute__((unused)) lsn_t lsn_;
  __attribute__((unused)) size_t size_;
  __attribute__((unused)) page_id_t page_id_;
  __attribute__((unused)) size_t next_ind_ = 0;
  __attribute__((unused)) page_id_t block_page_ids_[0];
  }

这个类的声明用到了柔性数组,block_page_ids_声明时数组的大小为0,block_page_ids_可以根据给header的空间大小自适应改变,所以在这个project中block_page_ids_的实际大小为4096-4-4-4-4=4080 bytes。
block_page_ids_中存储的是所使用的hash table block page的page_id_t,next_ind_对应下一个b

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值