用java实现bustub(关系型数据库的实现)

缓存池(Buffer Pool) 缓存池是对磁盘的一层包装,主要目的是缓和存储器速度的差异对性能的冲击。缓存池管理器在内存中维护一个缓存池,其拦截的对磁盘的API有:

  • fetchPage(pageId:Int):Page
    取出被pageId指定的页面,从内存或磁盘中读取。
  • newPage():Page
    新建一个页面,供客户写入新的数据,注意要在磁盘上划分出空闲空间。
  • deletePage(pageId):Boolean
    删除一个页面,注意要在磁盘上清理出空闲空间。
为了给客户更多的控制,额外提供这两个API:
  • flushPage(pageId:Int):Boolean
    显式要求把内存中的页面写回磁盘
  • unpinPage(pageId:Int, isDirty:Boolean):Boolean
    表示调用者不再需要这个页面了,方便缓存池管理器调度内存空;传入isDirty旗标指示调用是否修改了页面的数据。
【用java实现bustub(关系型数据库的实现)】在具体实现上,缓存池管理器维护一个散列表和一个装有Page的列表。Page记录有元数据并保有对实际数据的引用。这个散列表主要负责将pageId映射到Page列表的索引。Page列表的大小是有限的,所以还必须要维护一个free list对其中的空闲空间进行管理。

    推荐阅读