一种面向分布式顺序表的缓存方法及系统的制作方法

文档序号:9326980阅读:407来源:国知局
一种面向分布式顺序表的缓存方法及系统的制作方法
【技术领域】
[0001]本发明涉及分布式信息处理技术领域,尤其涉及一种面向分布式顺序表的缓存方法及系统。
【背景技术】
[0002]NoSQL现有的缓存系统一般采用LRU缓存算法或者由LRU缓存算法改进而来的算法,如下所示:
[0003]LRU算法:LRU算法是根据对数据的历史访问记录来确定换入换出数据的策略,基本思想是:数据在最近被访问过,在未来会被访问的概率就更高,在具体实现中,一般使用LinkedList作为存储容器,缓存对象在被访问后将被重新放到缓存顶部,在换出对象时则从缓存底部开始,算法具体流程如下:(I)新缓存对象总是被放到缓存顶部;(2)当缓存中的缓存对象被访问后,缓存对象将被移到缓存顶部,这样缓存中的缓存对象总是按照最新的访问时间排序;(3)当缓存空间不足时,根据需要释放的空间大小,从缓存底部开始换出缓存对象。
[0004]Two Queues算法:Two Queues算法的基本思想是同时考虑时间、频率两个因素,利用分层的思想,将缓存分为LI和L2两层,两层均采用LRU缓存,算法具体流程如下:(I)当新的缓存对象换入时,首先进入LI层,如果LI层中的缓存对象再次被访问后,则将该缓存对象换入更大的L2层;(2)在需要换出数据时,首先换出LI中的数据,如果空间还是不足,再换出L2中的数据。
[0005]分布式顺序表的典型缓存算法(BucketCache):HBase是应用广泛的典型分布式顺序表,其使用的缓存算法是Two Queues的变型--BucketCache,Two Queues中,缓存被分为了 LI和L2两层,但是在HBase使用的算法中,将缓存分为了 3层,即Single、Multi和InMemory,存算法流程如下:(I)在缓存新数据时,如果数据被标记为InMemory,则直接缓存都InMemory中,否则跟Two Queues中的处理方式一样,先进入Single,被访问后再进入Multi ; (2)在换出数据时,则优先换出Single中的数据,其次是Multi,最后是InMemory。
[0006]上面提到的各种算法都是基于过去对数据的访问历史来确定换入换出策略的,但是仅仅基于数据的访问历史是很难准确预测未来的,从而造成缓存命中率较低,缓存的数据读取通量不高,因此,要进一步提高缓存的命中率需要考虑利用一些其他的信息,在分布式顺序表的具体实现中,可以利用查询操作的访问模式特征来提高缓存的命中率。

【发明内容】

[0007]针对现有技术的不足,本发明提出一种面向分布式顺序表的缓存方法及系统。
[0008]本发明提出一种面向分布式顺序表的缓存方法,包括:
[0009]步骤I,为所有数据块设置基础分值,当进行数据查询操作时,通过分布式顺序表,获取数据查询操作所涉及的数据范围,统计数据范围中各数据块将要被访问的访问次数,将访问次数累加到相应的数据块;
[0010]步骤2,当数据块被缓存命中时,被命中的数据块的分值减去固定值,当缓存空间已满时,则触发缓存的换出操作,在换出操作开始时,根据数据块的分值进行排序,从分值最小的数据块开始淘汰,直到缓存空间能够增加数据块。
[0011]所述的面向分布式顺序表的缓存方法,所述步骤I包括:根据数据查询操作的起始行键定位到所述行键所属的区域,对每个区域下的所有文件按照起始行键在数据块索引结构上定位到第一个数据块索引项,从第一个数据块索引项开始顺序读取直到终止行键所在的数据块索引项,获取数据范围的所有数据块信息。
[0012]所述的面向分布式顺序表的缓存方法,缓存未命中数据块时,则根据未命中数据块的分值决定未命中数据块是否换入缓存。
[0013]所述的面向分布式顺序表的缓存方法,若数据块的分值为0,则分值为O的数据块在已知的未来不会再被读取,则不再换入到缓存。
[0014]所述的面向分布式顺序表的缓存方法,记录各数据块的分值并保存。
[0015]本发明还提出一种面向分布式顺序表的缓存系统,包括:
[0016]获取数据范围模块,用于为所有数据块设置基础分值,当进行数据查询操作时,通过分布式顺序表,获取数据查询操作所涉及的数据范围,统计数据范围中各数据块将要被访问的访问次数,将访问次数累加到相应的数据块;
[0017]计算分值模块,用于当数据块被缓存命中时,被命中的数据块的分值减去固定值,当缓存空间已满时,则触发缓存的换出操作,在换出操作开始时,根据数据块的分值进行排序,从分值最小的数据块开始淘汰,直到缓存空间能够增加数据块。
[0018]所述的面向分布式顺序表的缓存系统,所述获取数据范围模块包括:根据数据查询操作的起始行键定位到所述行键所属的区域,对每个区域下的所有文件按照起始行键在数据块索引结构上定位到第一个数据块索引项,从第一个数据块索引项开始顺序读取直到终止行键所在的数据块索引项,获取数据范围的所有数据块信息。
[0019]所述的面向分布式顺序表的缓存系统,缓存未命中数据块时,则根据未命中数据块的分值决定未命中数据块是否换入缓存。
[0020]所述的面向分布式顺序表的缓存系统,若数据块的分值为0,则分值为O的数据块在已知的未来不会再被读取,则不再换入到缓存。
[0021]所述的面向分布式顺序表的缓存系统,记录分值模块,用于记录各数据块的分值并保存。以下为本发明的整体技术效果:
[0022]本发明通过实验数据证明本发明的技术效果,如下所示:
[0023]缓存系统的对比主要是对比缓存的命中率和数据读取通量,测试中选择了对比不同线程数量和不同缓存空间/查询结果集比例两种情况,如下所示:
[0024]不同线程数量测试,图1为命中率对比,本发明提出的方法及系统的命中率比BucketCache缓存提高了 15个百分点以上;图2为读取通量对比,本发明提出的方法计系统的读取通量比BucketCache缓存提高了 20%以上。
[0025]不同缓存空间/查询结果集比例测试,图3为命中率对比,本发明提出的方法及系统的命中率比BucketCache缓存都提高了 16个百分点以上;图4为读取通量对比,本发明的方法及系统的读取通量比BucketCache缓存提高了 24%以上。
【附图说明】
[0026]图1为不同线程数量的缓存命中率对比图;
[0027]图2为不同线程数量的缓存读取通量对比图;
[0028]图3为不同缓存空间/查询结果集比例的缓存命中率对比图;
[0029]图4为不同缓存空间/查询结果集比例的缓存读取通量对比图;
[0030]图5为缓存算法流程不意图;
[0031]图6为缓存系统架构图;
[0032]图7为ScoreManager模块的计分管理结构图;
【具体实施方式】
[0033]针对现有技术的不足,本发明提出一种面向分布式顺序表的缓存方法及系统,本发明通过分布式顺序表特有的存储结构来获取每个查询所涉及的数据范围信息,然后利用这些信息并结合数据被访问的情况来构建每个数据的实时动态得分,该得分代表了对应的数据在未来会被访问的次数,访问次数越多越应该保留在缓存中,最后利用每个数据的得分来指导数据的换入换出策略,以下为本发明方法详细步骤,如下所示:
[0034]本发明方法包括:
[0035]步骤I,为所有数据块设置基础分值(此基础分值不做限制,可以为任意整数),当进行数据查询操作时,通过分布式顺序表,获取数据查询操作所涉及的数据范围,统计数据范围中各数据块将要被访问的访问次数,将访问次数累加到相应的数据块,随着查询不断地提交和执行,不断地有DataBlock(数据块)需要访问,同时也有DataBlock已经访问过了,这是一个动态的过程,而得分代表的是某一时刻各个DataBlock在未来一段时间内被访问的情况;
[0036]步骤2,当数据块被缓存命中时,被命中的数据块的分值减去固定值(此固定值不做限制,可以为1、2、3等整数),当缓存空间已满时,则触发缓存的换出操作,在换出操作开始时,根据数据块的分值进行排序,从分值最小的数据块开始淘汰,直到缓存空间能够增加数据块,其中记录各数据块的分值并保存。
[0037]所述步骤I包括:根据数据查询操作的起始行键定位到所述行键所属的区域,对每个区域下的所有文件按照起始行键在数据块索引结构上定位到第一个数据块索引项,从第一个数据块索引项开始顺序读取直到终止行键所在的数据块索引项,获取数据范围的所有数据块信息。
[0038]缓存未命中数据块时,则根据未命中数据块的
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1