用java实现bustub(关系型数据库的实现)
缓存池(Buffer Pool)
缓存池是对磁盘的一层包装,主要目的是缓和存储器速度的差异对性能的冲击。缓存池管理器在内存中维护一个缓存池,其拦截的对磁盘的API有:
fetchPage(pageId:Int):Page
取出被pageId
指定的页面,从内存或磁盘中读取。newPage():Page
新建一个页面,供客户写入新的数据,注意要在磁盘上划分出空闲空间。deletePage(pageId):Boolean
删除一个页面,注意要在磁盘上清理出空闲空间。
flushPage(pageId:Int):Boolean
显式要求把内存中的页面写回磁盘unpinPage(pageId:Int, isDirty:Boolean):Boolean
表示调用者不再需要这个页面了,方便缓存池管理器调度内存空;传入isDirty
旗标指示调用是否修改了页面的数据。
Page
的列表。Page
记录有元数据并保有对实际数据的引用。这个散列表主要负责将pageId
映射到Page
列表的索引。Page
列表的大小是有限的,所以还必须要维护一个free list
对其中的空闲空间进行管理。推荐阅读
- 用Markdown写邮件,用Python发邮件
- JavaScript的继承
- 使用Go语言ORM库worm的SQL预处理功能
- 按钮组件
- Golang|GoLang并发编程之Future模式的实现
- 办公软件|我在 B 站挖到了 9 款深藏不露的工具,每个都好用到爆!
- 面试官(来说一说Go语言的函数调用惯例)
- Java版赫夫曼编码
- VUE移动端树形组件的封装实现
- ES6中数组新增的方法-超级好用