数据库系统实现(缓存失效)

缓存失效的问题,数据直接请求到文件系统,对IO的影响巨大。

1、大量的不存在的KV进行查询,导致CACHE失效,请求直接到文件IO操作上。增加NULL的记录,需要开辟新的空间保存NULL的情况,同时又更新的策略和淘汰的策略。

2、CACHE不存在,文件中有,多个请求在IO数据没有进入到CACHE中,需要增加数据相同的判断,可以通过检查CACAE ID是否存在,PAGEID+FILEID+CACHEID+FLAG的唯一性进行判断是否需要读盘,同样有更新和淘汰的策略。对于INDEX的情况,在BUFFERLIST内存中中没有的话,需要进行索引文件读取,没有缓存的支持,只能读当前读的TREENODE点进行缓存,数据结构中增加一个节点的数据缓存,且只能支持一个TREENODE。同一TREENODE数据的重复读取可以只进行一次IO,后续都是读内存,如果设计多个TREENODE的数据,设计中多了缓存设计,本身HOTKEY就有CACHE设计,同时BUFFERLIST也是缓存设计,再增加缓存设计有多余,特别是内存容量还是有限制的。

4、HOTKEY CACHE的 更新,当新的KV对进入到HASHSERVICE TASK中,需要检查HOTKEY是否在缓存中,如果有,进行数据更新。

5、采用的缓存淘汰算法,数据量大的使用WINDOW-TINY LFU算法,数据量小的使用LRU算法,主要从更新的性能代价来进行衡量。频繁更新且数据量比较小的情况下,建议还是使用经典的LRU算法。

猜你喜欢

转载自blog.csdn.net/DQWKLC/article/details/119139859
今日推荐