2011-06-16

太困了。随便写点然后就睡。

今天在看FreeBSD的db 1.8x的代码。所有的文件读写都由mpool完成。每个database(也就是mysql中的table)对应一个mpool。这个mpool的容量上限是在opendb的时候指定的,根据字节数换算成pages。只有两种情况会引发写文件操作:

  1. 关闭database的时候,需要把所有脏页刷到硬盘上。
  2. get a page from the cache的时候,发现cache满了,于是就需要遍历lru列表,找出可被丢弃的页丢掉一个。这个页面可以是脏的,那么此时就需要写回硬盘。

我在想怎么把日志系统加进去。

我计划的更改:

  1. 加入一个定期刷脏页的功能。
  2. cache满了之后,应优先丢干净的页面。或者做成只丢干净的页面。或者做成此时不丢页面,只在flush完毕后丢。有必要对内存的使用量控制那么精确吗?(walk?)
  3. write ahead, redo log。

先做成单线程的吧。

Question: 一个进程打开多个database是否可以?也就是说,dbopen打开一个database之后,不关。再打开另外一个,可以吗?目前我看起来貌似没有什么问题。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥