bdb log为什么 有 region buffer 和 log cursor buf

对bdb log来说, 在共享内存中 有一块 buffer, 同时每一个 log cursor 都自带一个 malloc的buf. why?

我认为:
region buffer存的是log最末尾, 主要用来写. 毕竟 log 是 顺序写的, 最末尾的 log rec当然最热. 同时 多个 log rec缓存起来 一次写入对io 有极大好处.

log cursor的buf是用来读的. 可以是log 中每一部分. 这里 类似 read ahread(read behind), 每次从disk读, 都是读一整块 log buf size.

好处不言而喻, 但同时 逻辑 就复杂了,

在logc_get() 中, 需要考虑: 
1. 要取的 log rec是否在 cursor buf中? (必须 整个 log rec都在 cursor buf)
2. 要取的 log rec是否在 region buf中? (整个 log rec都在 region buf; 部分在region buf, 部分需要从disk 读的情况)
3. 从disk log file 读log rec

posted @ 2016-08-19 15:51  brayden  阅读(234)  评论(0编辑  收藏  举报