关于数据库:用java实现bustub-一关系型数据库的实现

除了上一篇提到的根本要求之外,进一步地,为了保障有客户pin住的页面不被evict,还必须给每一个缓存池的slot保护一个atomic reference count。
为了让客户写入每一个Page的内容,我还额定提供

fun writePage(
    source: ByteArray, 
    destinationOffset: Int, 
    startIndex: Int, 
    endIndex: Int
)

此签名跟kotlin规范库的copyInto是一样的。

接下来,我编写了初步的单元测试来查看缓存池管理器的实现,简略的说次要有:

  • newPage调用:

    • 应该查看缓存池的容量限度
    • 应尝试evict unpinned页面来为新页面腾出空间
  • unpinPage调用:

    • 应该及时将脏页面写回磁盘
    • 返回值要正确反映是否pin操作和unpin操作数量上是否雷同
  • fetchPage办法:

    • 把读取磁盘的操作分派给diskManager

留神到本缓存池管理器并不显式提供pinPage的操作,而是隐含在每一次fetchPage调用中。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理