2018.5.28
今天查看了关于flashdb中关于缓存算法的数据结构,发现了3dsim的数据结构是不一样的,然后又去看了一遍3Dsim的数据结构,发现flashdb的数据结构实际是可以优化的。下面对这个点简单的分析下。
首先来看下flashdb的数据结构
ftop是模拟内存的顺序存储
ptop是哈希表
LRU链表是缓存替换算法
其中引入的frame_id可以看做是数据在内存中的地址。
首先数据通过pageid,通过哈希索引判断是否在内存中存在,然后通过哈希索引找到内存的地址,然后内存的地址通过LRU链表维护替换算法。这样做是没问题的,问题在于LRU维护的时候没有必要用内存地址去在维护,因为如果通过额外的内存地址去维护,那么实际在LRU链表中还得再遍历一遍,这样开销很大,哈希索引的目的也没有实现。
3Dsim则只用两个数据结构,内存中数据的存放除了数据之外,还有LRU链表维护的指针,然后通过一个平衡树索引数据的地址,通过这个平衡树则找到了数据节点所在的地址,通过这个地址则可以找到LRU链表的位置。不需要再次遍历LRU链表的过程。
那么flashdb这种数据结构可以修改吗,应该如何修改?
答案是肯定的,修改也比较简单,在数组中存放的除了pageid,还可以存放LRU的前后指针即可。
那么当哈希索引到数据的地址时,就可以访问数据的LRU的前后指针。
ok,
1、明天在看完整个flashdb的代码之后,对这个数据结构进行修改。