论文部分内容阅读
随着数据量的增长及应用的扩大,基于内存的数据库在数据访问过程中扮演越来越重要的角色。内存数据库相对于普通持久型数据库有着访问速度快、轻量、易管理等特点,被广泛应用于各种大型数据中心。Memcached作为一种常见的内存数据库在Facebook、Twitter、Sina等中得到应用,然而Memcached在内存替换算法上仍存在无法有效地处理数据大小变化较大的不足,当发生“钙化”现象时,Memcached会出现命中率降低、访问延迟增大等结果,严重制约了各种依靠Memcahced作为数据缓存的系统的性能。本文对Memcached所处理数据的特点进行了研究与分析,发现不同大小的Item的访问对一个Slab是否成为一个热的Slab影响程度不同,而不是以前研究中所提到的固定关系,同时研究了Slab与Item的关系,提出了基于影响因子与淘汰代价的Memcached内存替换算法。影响因子是根据不同大小的Item对这个Item所在的Slab是否成为热的Slab影响程度不同而设计的,大的Item比小的Item更能使Slab成为一个热的Slab,进而免于淘汰。同时重新定义了Item平均访问频度这一概念:单个item所承受的访问请求而不是整个Slab;发现了不同顺序的访问对Slab是否成为热的Slab影响程度不同这一现象并采用“半衰期”方法量化这种影响,最后利用这两个因素动态地更新影响因子的大小。淘汰代价指的是淘汰一个Slab和Item的代价,在Memcached内存不足时,通过最近访问次数、访问时间、大小等计算淘汰一个Slab及Item的代价大小来确定是淘汰一个Slab还是Item,而不同于以前研究中提到简单的主动与被动Slab淘汰策略。改进的方法提高了Memcached在内存不足时处理数据访问的能力。测试结果表明,改进的方法在命中率上有5%左右的提升并将读写延迟降低了2%到4.5%。同时改进方案优化了Slab和Item淘汰数量,最后将改进的方法在pNFS中进行了应用,测试表明改进的方法降低了pNFS系统的读写延迟,最高可达5%。