到Project2, 我们依然在处理数据库存储相关的部分, 从 Project1 中我们应该Get到两个概念:
- 数据库底层数据操作的基本单元是
Page
. buffer_pool_manager
是管理以及组织数据单元Page
的工具, 在Project2的第一部分, 我们还新增了页面守护(PageGuard
)的机制更加优雅的获取以及释放页, 还新增了对页面的读写锁的处理.
可扩展Hash表(Extendible Hash Table)
Project1 与 PageGuard讲述的是页面的存储的步骤与方式, 而这一节我们要讲的是数据库中数据的存储形式, 按照关系型数据库中的键值对的形式, 我们选取了可扩展Hash作为数据的存储形式. 可扩展Hash数据结构的存储方式可以参考之前的博客 传送门.
在Project2中实际上使用的是可扩展Hash的一个变体, 新增了一个Hash表头, 也就是Header的部分, 这里的可扩展Hash的结构如下: