论文部分内容阅读
面对快速增长的海量数据,人们对数据存储和处理系统提出了更高的要求。基于分布式顺序表的NoSQL正是为了满足这样的需求而出现的,典型代表有Google BigTable、Apache HBase和Apache Cassandra等系统,这一类的系统具有高可靠性、高可扩展性和高并发性等特点。分布式顺序表采用LSM树来管理数据,此数据结构先将数据写入内存,在达到一定阈值之后再异步地刷写到磁盘文件中,由于内存的缓冲作用,这使得基于分布式顺序表的存储系统具有优秀的数据写入性能;但是相对于数据写入性能,数据的读取性能就相对逊色了,这是因为所有的查询都需要到磁盘读取数据,因此读取性能受限于磁盘的IO通量。 针对分布式顺序表存储系统在读性能上的问题,一般通过利用缓存系统来提高读取性能。缓存系统的发展历史悠久,已经涌现出了许许多多的经典缓存算法,它们各有各的优缺点和适用的场景,目前在实际应用中使用最广泛的缓存算法是LRU及其改进版本。此类算法结构简单,但是并不能很好地适应实际应用环境。 本文在仔细研究分布式顺序表的存储原理和结构的基础上,提出了一种基于查询范围信息的缓存算法——ScoreCache缓存算法。该算法利用分布式顺序表顺序存储数据的特点来获取每个查询涉及的数据范围,并结合查询的执行情况为每个查询涉及的数据构建动态的得分,最后根据得分指导缓存的换入换出策略。 ScoreCache缓存算法的设计主要关注两个方面。一个方面是设计从分布式顺序表的存储结构中获取查询涉及的数据范围的方法;另一个方面是设计能够动态实时反映数据将被访问情况的得分计算方法。 依照ScoreCache缓存算法的设计,在Apache HBase的基础上实现了ScoreCache缓存系统。通过对比实验,测试了ScoreCache缓存系统的性能,ScoreCache缓存的性能在多种情况下均比BucketCache缓存有所提高,命中率提高了15个百分点以上,数据读取通量提高了20%左右,查询延迟也有一定的降低。