CMU15445 Lab 2 B+TREE
2020fall lab2
时间
2022.02.026 - 2022.03.01
实验说明
-
B+ Tree内部节点指引搜索,叶子节点能够指向实际的数据entry
-
B+ Tree的正确性依赖与Buffer Pool的实现
-
CHECKPOINT #1
- TASK #1 - B+TREE PAGES:需要实现三个B+ Tree的Page class:
- B+ Tree Parent Page:不论是internal page 还是 leaf page,它们都继承于parent class,也就是它是个大父类,它只保留子类们所共有的信息:
- B+Tree Internal Page:,internal page不存真实数据,(对于m-way迭的B+ Tree)但是它会存储m个key与m + 1个孩子指针(在这里是page_id), 对于这句话的解释是?,假设一个internal node中有三个child pointer,那么这时需要三个key,但是会有一个key是无效的,比如这里(猜测child pointer 与 key应该是存成了一个pair)
- B+Tree Leaf Page:一个Leaf Page有m个key与m个value entries,使用RID class来存储value entry,(这里存的是rid,那么lab2中的B+Tree是非聚簇索引),每个leaf/internal page对应与Buffer Pool中的Page(也就是Frane)对象中的data_成员变量不过Sibling Pointers存在哪里?
- TASK #2.A - B+TREE DATA STRUCTURE (INSERTION & POINT SEARCH):lab2中的B+ Tree并不存在重复的key,如果要插入重复的key,不执行并且返回false这句话啥意思?,每次插入,如果导致了root_node分裂,那么需要用一个新的page去存储新的root_node,那么root_page_id也就会改变
- TASK #1 - B+TREE PAGES:需要实现三个B+ Tree的Page class:
-
CHECKPOINT #2
- TASK #2.B - B+TREE DATA STRUCTURE (DELETION)
- TASK #3 - INDEX ITERATOR
- 把leaf pages组织成linked list,并从单一方向遍历它们
- iterator需要实现
- TASK #4 - CONCURRENT INDEX
- 将使用latch crabbing实现并发
- 需要实现的是未优化的latch crabbing,也就是不需要使用到悲观锁与乐观锁
实验要求与提示
- 不能够像之前lab一样只是简单的,在每个操作的开始加锁,每个操作结束解锁,需要正确的实现latch crabbing
- 释放read-write latch的函数已经实现
- 对于trasaction的处理?FindLeafPage函数原来没有返回值,所以需要添加?
- latch是加在Page上的
陷阱(!!!)
- 这个lab不需要实现leaf node scan,对于一个leaf page不能够从sibling获取一个latch时,需要抛出std::exception
- 必须的先释放latch,在unpin一个页
- 必须要实现top to down地获取锁
- 这个root_page_id到底是啥?