当前位置: 首页 > 工具软件 > InnoSQL > 使用案例 >

netease的innosql的flashcache代码解析

应子真
2023-12-01

工作准备:

分析过程:

flashcache的主要作用可以分为两个部分,第一,保存主缓存在LRU算法下移除的不常用缓存块;第二,针对主缓存已经修改的数据块进行移除。

fc_write_doublewrite_to_flash_cache:if srv_flash_cache_enable_write = true then Write doublewrite buffer data to flash cache;

fc_remove_pages_in_dwb:if srv_flash_cache_enable_write = false then  if any page in doublewrite buffer now(newer) is also in flash cache already(olded),
it must be removed  from the flash cache before doublewrite buffer write to disk;

fc_LRU_move_optimization:如果某个page要从main buffer 移除通过该函数移入second buffer;

fc_read_page:if main buffer don't exist, read from second buffer;

数据解析:

fc这个总结构就包含所有关于flashcache的数据,这个数据总体来说有如下之处值得思考,buffer page in flashcache并没有采用什么先进的存储方式,只是链条式的FIFO模式,没有考虑被采用次数和相关复杂度更加优化的算法。可能高效但是会增加删除加入的难度,总体来说flashcache可能会很大所以不存在这个问题,删除只是一小部分操作大部分还是只读操作。其次,为什么要保留flashcache的flush 写入值得商榷,虽然没有在实际的生产环境使用过flush写入,但是还是担心数据并不能有效保存在高写入能力的disk中,有点越俎代庖成为了高写入设备,程序代码所涉及的代码数据保存在disk中,这样不会影响flash不可随即写的缺点。

个人总结:

简简单单的顺序写入顺序删除覆盖并不能搞笑的利用cache的作用。

内容引用:

 类似资料: