
对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