CMU15-445 Project.1总结

在线测试
在这里插入图片描述
本地测试
在这里插入图片描述

Project #1 - Buffer Pool

以下是Project #1的网址,2022FALL的Project #1是实现一个缓冲池。其中,为了实现缓冲池的管理,我们实现了缓冲池中的两个组件:可扩展哈希表和LRU-K 更换策略。最终利用可扩展哈希表来存储page与frame的对应关系,利用LRU-K 更换策略来实现frame的更新替换。而Buffer Pool Manager向系统提供了获得page的接口,只需要系统提供page_id就能够获得对应的page,而不需要关心如何获得。

1、可扩展哈希表

考虑到题目要求不能使用 built-in 的哈希表,我们需要自己实现可扩展哈希表用于维护Buffer Pool Manager中page与frame的对应关系。其中,Extendible Hash Table 由一个 directory 数组和多个 bucket 组成,其中 directory 数组的每一项都指向一个bucket :
directory:存放指向 bucket 的指针,是一个数组。用于寻找 key 对应 value 所在的 bucket。
bucket:存放 key 和 value,是一个链表。一个 bucket 可以至多存放指定数量的 key / value 对。

值得注意的是,在可扩展哈希表中,directory 数组的每一项都指向一个bucket,但一个bucket可以被多个directory 数组的项所指。 这主要与可扩展哈希表的插入机制有关:

  1. 当我们向哈希表中插入键值对 (K,V) 时,我们首先利用哈希函数计算出键值的哈希值std::hash<K>()(key)。而后我们利用哈希值计算出当前键值对应当储存的对应bucket,并将其放入相应位置。
  2. 在计
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值