COMP9315 课堂笔记(二)

Buffer Pool(缓冲池)

Aim:保存那些需要重用的数据库文件中的page。
被用于读写想要的pages的access methods,如sequential scan,indexed retrieval 和 hashing。它使用文件管理函数去获取与table对应的data files。
在这里插入图片描述
Buffer pool的操作:
1 . request_page(pid) 2.release_page(pid)
一定程度上request_page()替代getBlock() or get_page(), release_page()替代putBlock() or put_page()。 release_page是指不再常用这个page了,如果buffer pool 满了则被换掉。Buffer pool比较稳定,一般读次数大于写。

Buffer pool的数据结构:

  1. frames… NBUFS Pages(8K) buffers的数组
  2. directory… NBUFS FrameData items的数组,给出每个frame的信息。

在这里插入图片描述
Directory里Info比较小 ,包括frame里是哪些pages,它们被修改了吗(dirty bit),哪些transactions在用它们(pin count),最近访问的时间戳等等。
Frames里包含page里的data,或者是空的。
PageID = BufferTag = (mode,forkNum,blockNum)
PS:fork是指额外的data file。

Scan without Buffer Pool(不用Buffer Pool的Scan):

Buffer buf;
//how many pages of data contained in this relation
int N = numberOfBlocks(Rel);
//Scan each of those pages of data
for (i=0; i<N; i++){
    
    //get constructed pageID
	pageID = makePageID(db,Rel,i);
	//get block of data in page and feed into buffer
	getBlock(pageID, buf);
	for (j=0; j<nTuples(buf); j++){
   
		process(buf, j)
	}
}

需要读 N pages。如果再读一次,还是需要读N pages。

Scan with Buffer pool(使用 Buffer Pool的Scan):

Buffer buf;
int N = numberOfBlocks(Rel);
for (i = 0; i<N; i++){
   
	pageID = 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值