MINIBASE源代码阅读笔记之HFPage
HFPage
heap file的page的类
成员
- slot_t:用来表示页里的slot,包括offset和length
- slot[]:倒着生长的slot array
- slotCnt:有多少已用slot,注意是倒着数的
- freePtr:data[]中第一个free的byte的offset
- freeSpace:data[]里一共有多少free bytes
- type:里面数据的类型
- prevPage,nextPage,curPage:各种page id
方法
- init:初始化,设置好一堆变量
- insertRecord:接收要写的record的指针和长度,将写进page里的record对应的rid写进参数返回
- 找一个空的slot
- 如果有已经用过但里面的东西不要的,直接用,不用登记新的slot,要用的空间是recLen
- 如果没有,就放到后面去,需要登记一个新的slot,要用的空间是recLen+sizeof(slot_t)
- 设置对应的offset和length
- 复制内存
- 将freePtr向后移
- 返回对应的rid(由page id和slot id组成)
- 找一个空的slot
- deleteRecord:顾名思义
- 如果要删的record在尾巴(slotNo == slotCnt+1),不用处理
- 如果在中间,将所有byte向开头shift过去,改掉所有slot的offset,将freePtr向前移,设置对应的slot的length为-1,offset为0即对应slot为空
- firstRecord:返回这页的第一个record的rid,如果没有record返回done
- 暴力查找。。
- nextRecord:接收curRid,将下一个record的Rid写进参数返回
- 不断向后找直到找到第一个不为空的slot
- getRecord:接收rid和长度,写好内容到给定的指针里
- 从给的rid里抓出slot id,再去slot[]里找到对应的offset和length,写内存
- returnRecord:返回对应record的实际指针(暴露?)
- 找到对应的offset和length之后把在data[]里的地址写进指针的引用返回
- returnOffset:返回rid对应record的offset
- 依然是转换slot id到offset
MINIBASE源代码阅读笔记之HFPage的更多相关文章
- MINIBASE源代码阅读笔记之heapfile
Heapfile 用来管理heap file里的dir page们 成员 _firstDirPageId:这个文件的第一个dir page _ftype:文件类型 _file_deleted:删除的时 ...
- MINIBASE源代码阅读笔记之DB
DB 管理数据库的类 file_entry:dir page的元素,保存不同文件对应的page directory_page:dir page的专用结构体,里面有个初始长度为0的variable si ...
- MINIBASE源代码阅读笔记之buffer manager
BufDesc frame 们的 descriptor(见BufHashTbl注释),包括 pageNo: 这个 frame 在文件里的id,page number prevframe: -1 表示此 ...
- Mongodb源代码阅读笔记:Journal机制
Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODAT ...
- CI框架源代码阅读笔记5 基准測试 BenchMark.php
上一篇博客(CI框架源代码阅读笔记4 引导文件CodeIgniter.php)中.我们已经看到:CI中核心流程的核心功能都是由不同的组件来完毕的.这些组件类似于一个一个单独的模块,不同的模块完毕不同的 ...
- CI框架源代码阅读笔记3 全局函数Common.php
从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...
- CI框架源代码阅读笔记2 一切的入口 index.php
上一节(CI框架源代码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程.这里再次贴出流程图.以备參考: 作为CI框架的入口文件.源代码阅读,自然由此開始. 在源代码阅读的 ...
- Spark源代码阅读笔记之DiskStore
Spark源代码阅读笔记之DiskStore BlockManager底层通过BlockStore来对数据进行实际的存储.BlockStore是一个抽象类,有三种实现:DiskStore(磁盘级别的持 ...
- Java Jdk1.8 HashMap源代码阅读笔记二
三.源代码阅读 3.元素包括containsKey(Object key) /** * Returns <tt>true</tt> if this map contains a ...
随机推荐
- oracle、mysql、db2三大数据库分页方法的整理
最近项目中经常会涉及到代码中支持三种数据库的分页的功能,自己整理了关于三种数据库的分页的写法,分享给大家,以供大家使用.希望能帮到更多的码友! 先来看一个代码片段: String page = ala ...
- 随机抽样一致性算法(RANSAC)转载
这两天看<计算机视觉中的多视图几何>人都看蒙了,转载一些干货看看 转自王先荣 http://www.cnblogs.com/xrwang/archive/2011/03/09/ransac ...
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) A B C D 暴力 水 二分 几何
A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 全能型eclipse 下载
百度网盘地址: 链接: https://pan.baidu.com/s/1RFUkdSZUfuubFATLVdVH3w 提取码:kncg 这个eclipse几乎包含了现在所有的开发语言
- gflag使用
#include <gflags/gflags.h> #include <iostream> // 声明全局flag DEFINE_bool(my_bool, false, & ...
- Digging(DP)
ZOJ Problem Set - 3689 Digging Time Limit: 2 Seconds Memory Limit: 65536 KB When it comes to th ...
- webDriver检索table数据
最近在做爬虫相关工作,用到了webdriver,记录一些遇到的问题和解决方法: 如何查找 table中的行 例如: <div id="a"> <table cla ...
- Web 开发者易犯的5大严重错误
无论你是编程高手,还是技术爱好者,在进行Web开发过程中,总避免不了犯各种各样的错误. 犯了错误,可以改正.但如果犯了某些错误,则会带来重大损失.遗憾.令人惊讶的是,这些错误往往是最普通,最容易避免. ...
- 巧用Javascript将相对路径地址转换为绝对路径
这里介绍的其实本质上是两种方法,通过创建DOM或通过JavaScript计算: 1)通过新创建的Image, 经测试会发送一个Aborted的请求,并且IE6不支持, 将new Image改成docu ...
- Stat3—因子分析(Factor Analysis)
题注:主成分分析分析与因子分析也有不同,主成分分析仅仅是变量变换,而因子分析需要构造因子模型.主成分分析:原始变量的线性组合表示新的综合变量,即主成分:因子分析:潜在的假想变量和随机影响变量的线性组合 ...