ZhangJiaQiao / 2019-DBMS-Project

This is the programmin project of DBMS course in 2019
19 stars 26 forks source link

主要数据文件样例 #3

Closed disschen closed 5 years ago

disschen commented 5 years ago

TA你好,有关主要数据文件

  1. LeafGroup结构:| usedNum(8 bytes) | bitmap(n bytes) | Leaf1 | ... | leafN |
  2. catelog:| maxFileId(8 bytes) | freeNum(8 bytes) | treeStartLeaf(PPointer) |
  3. freeList:| (fId, offset)1, ..., (fId)N | 可不可以每种给出一个样例文件,不然不知道该如何读取以及写入数据

另外,关于一个叶子,怎么判断是free还是used,是不是只有遍历freeList才可以

ZhangJiaQiao commented 5 years ago

对于叶子是否没有被使用,这是依靠leafgroup头的bitmap确定,1表示用了,0表示没用,freelist记录的是所有没有使用的,方便直接获取。详情看下PAllocator。 对于文件格式,每个文件都由定长的变量组成,对应的取多少字节,在哪个位置取都是可以知道的,文件操作就是移动至想要获取变量的开头,然后获取固定长度的变量即可。

ZhangJiaQiao commented 5 years ago

比如catalog的freeNum,打开catalog后,跳过前8字节,然后取8字节,这个就是获取到freeNum

disschen commented 5 years ago

那freeList文件就是(fid,offset),(fid,offset)...(fid,offset)吗,是不是我要逐个字符getchar进来读到左括号了表示读到了一个空的叶子。这些文件测试的时候要自己生成吗?希望您能上传一些数据文件让我们参考一下。

ZhangJiaQiao commented 5 years ago

freelist里面没有括号和逗号,我在说明里补充说明里,就是为了方便你们理解。fid和offset都是8字节,所以一个持久化指针就是固定16字节,假设你想取第3个,那就跳过前两个,就是32字节,然后取16字节即可。假设存新的持久化指针,freelist已经存了2个指针,那就跳过32字节,追加写在文件尾就行。数据都是二进制的,给你们文件也看不了

disschen commented 5 years ago

OK,谢谢TA