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写进参数返回
    1. 找一个空的slot
      1. 如果有已经用过但里面的东西不要的,直接用,不用登记新的slot,要用的空间是recLen
      2. 如果没有,就放到后面去,需要登记一个新的slot,要用的空间是recLen+sizeof(slot_t)
    2. 设置对应的offset和length
    3. 复制内存
    4. 将freePtr向后移
    5. 返回对应的rid(由page id和slot id组成)
  • deleteRecord:顾名思义
    1. 如果要删的record在尾巴(slotNo == slotCnt+1),不用处理
    2. 如果在中间,将所有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的更多相关文章

  1. MINIBASE源代码阅读笔记之heapfile

    Heapfile 用来管理heap file里的dir page们 成员 _firstDirPageId:这个文件的第一个dir page _ftype:文件类型 _file_deleted:删除的时 ...

  2. MINIBASE源代码阅读笔记之DB

    DB 管理数据库的类 file_entry:dir page的元素,保存不同文件对应的page directory_page:dir page的专用结构体,里面有个初始长度为0的variable si ...

  3. MINIBASE源代码阅读笔记之buffer manager

    BufDesc frame 们的 descriptor(见BufHashTbl注释),包括 pageNo: 这个 frame 在文件里的id,page number prevframe: -1 表示此 ...

  4. Mongodb源代码阅读笔记:Journal机制

    Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODAT ...

  5. CI框架源代码阅读笔记5 基准測试 BenchMark.php

    上一篇博客(CI框架源代码阅读笔记4 引导文件CodeIgniter.php)中.我们已经看到:CI中核心流程的核心功能都是由不同的组件来完毕的.这些组件类似于一个一个单独的模块,不同的模块完毕不同的 ...

  6. CI框架源代码阅读笔记3 全局函数Common.php

    从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...

  7. CI框架源代码阅读笔记2 一切的入口 index.php

    上一节(CI框架源代码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程.这里再次贴出流程图.以备參考: 作为CI框架的入口文件.源代码阅读,自然由此開始. 在源代码阅读的 ...

  8. Spark源代码阅读笔记之DiskStore

    Spark源代码阅读笔记之DiskStore BlockManager底层通过BlockStore来对数据进行实际的存储.BlockStore是一个抽象类,有三种实现:DiskStore(磁盘级别的持 ...

  9. Java Jdk1.8 HashMap源代码阅读笔记二

    三.源代码阅读 3.元素包括containsKey(Object key) /** * Returns <tt>true</tt> if this map contains a ...

随机推荐

  1. 【agc016D】XOR Replace

    Portal --> agc016D Description ​ 一个序列,一次操作将某个位置变成整个序列的异或和,现在给定一个目标序列,问最少几步可以得到目标序列 ​ Solution ​ 翀 ...

  2. Yura

    Portal --> broken qwq Description ​  给你一个长度为\(n\)的序列\(a\)和一个正整数\(k\),求满足如下条件的区间\([l,r]\)的数量:\((\s ...

  3. 【分块】【P2801】教主的魔法

    Description 给你一个长度为 \(n\) 的序列,要求资瓷区间加,查询区间大于等于 \(k\) 的数的个数 Input 第一行是 \(n~,~Q\) 代表序列长度和操作个数 下面一行代表序列 ...

  4. Ubuntu 使用Compiz配置炫酷3D桌面

    先看一下效果 要实现这种3D 的效果其实很简单. Step 1:安装N卡驱动工具 sudo apt- 这个东西其实没有太大的作用. Step 2:安装Compiz sudo apt-get insta ...

  5. I/O多路复用和异步I/O

    一.I/O模式 对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间.所以说,当一个read操作发生时,它会经历两个阶段: ...

  6. Android图片压缩工具MCompressor

    这是一个简单的图片压缩工具(MCompressor),可自定义压缩的格式和质量,以及压缩后存储的文件路径,可决定对多大的文件进行压缩. 使用方法 build.gradle文件 Step 1. Add ...

  7. centos7下安装配置jenkins+git+maven+jdk

    环境 centos7 jdk1.8 maven3 git 在安装jenkins之前,先安装jdk1.8.maven.git 一. 安装jdk1.8 第一步:下载 jdk-8u131-linux-x64 ...

  8. JAVA类与对象---实例变量与类变量的区别,实例方法和类方法的区别

    实例变量 实例变量声明在一个类中,但在方法.构造方法和语句块之外: 当一个对象被实例化之后,每个实例变量的值就跟着确定: 实例变量在对象创建的时候创建,在对象被销毁的时候销毁: 实例变量的值应该至少被 ...

  9. 51nod 1171 大灾变

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1757 二分答案mid 避难所拆为mid个点 每个避难所的第一个点向第二个 ...

  10. 构造+分块思想 Codeforces Round #319 (Div. 1) C

    http://codeforces.com/contest/576/problem/C 题目大意: 给你一个曼哈顿距离的图,然后要求你找到一个链,链穿了所有的点 然后要求这链的长度<=25*10 ...