对文件一边读一边写的应该场景中,我们一般采用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即可。

本文介绍了在文件读写过程中使用DirtyList提高写操作效率的方法。DirtyList作为一种缓存机制,在数据库设计中常见,它能暂时存储用户写入的数据,并在提交时一次性写入磁盘。文章还解释了DirtyList的工作原理及其在读写操作中的应用。
2117

被折叠的 条评论
为什么被折叠?



