dirty list机制分析

    对文件一边读一边写的应该场景中,我们一般采用dirty list来提高写的速度,dirty list在一些数据库的设计实现里(oracle),是作为Least Recently Used Write(LRUW)来使用的,即将用户新写入的值临时保存在内存中,提交时将dirty list中的数据一次性写入文件或db中。内存中的dirty list在未写入文件或db时,对于用户的读取操作也是可见的。

    保存在dirty list中的数据单元一般为块数据,固定字节大小。有dirty list的读取流程图如下,其中free list是干净的数据列表,可以采用各种讨论算法保证列表数量的稳定,如FIFO,LRU等等。inuse list是目前正在使用的对象列表,起一个过渡的作用,读操作的示意图如下:


 
    读或者写操作结束后,均需要释放块数据,根据块数据是否被写脏,需要执行不同的操作,如果写脏了(包括之前就是脏数据),需要放到dirty list里,没有写脏,放到free list里。


 

写操作基于上面的两个操作:

 


 
最终commit的时候,将dirty list里的数据一次性写入文件或db即可。


 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭