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

文档序号:9326980阅读:来源:国知局
分值决定未命中数据块是否换入缓存。
[0039]换入策略,若数据块的分值为0,则分值为O的数据块在已知的未来不会再被读取,则不再换入到缓存,这样可以避免不必要的缓存空间占用。
[0040]本发明还包括一种面向分布式顺序表的缓存系统,包括:
[0041]获取数据范围模块,用于为所有数据块设置基础分值,当进行数据查询操作时,通过分布式顺序表,获取数据查询操作所涉及的数据范围,统计数据范围中各数据块将要被访问的访问次数,将访问次数累加到相应的数据块;
[0042]计算分值模块,用于当数据块被缓存命中时,被命中的数据块的分值减去固定值,当缓存空间已满时,则触发缓存的换出操作,在换出操作开始时,根据数据块的分值进行排序,从分值最小的数据块开始淘汰,直到缓存空间能够增加数据块。
[0043]所述获取数据范围模块包括:根据数据查询操作的起始行键定位到所述行键所属的区域,对每个区域下的所有文件按照起始行键在数据块索引结构上定位到第一个数据块索引项,从第一个数据块索引项开始顺序读取直到终止行键所在的数据块索引项,获取数据范围的所有数据块信息。
[0044]缓存未命中数据块时,则根据未命中数据块的分值决定未命中数据块是否换入缓存。
[0045]若数据块的分值为0,则分值为O的数据块在已知的未来不会再被读取,则不再换入到缓存。
[0046]记录分值模块,用于记录各数据块的分值并保存。
[0047]以下为本发明一实施例,如图5所示:
[0048]情况1:查询提交时
[0049]在新的查询提交后,通过前面提到的方法可以获取查询所涉及的DataBlock(数据块),这些DataBlock就是该查询在接下来一段时间内会访问到的数据,因此需要将这些DataBlock的得分加一,减小它们被淘汰的几率。
[0050]情况2:缓存命中时
[0051]当一个已经被缓存的DataBlock被命中一次后,其得分应该减一,这是因为得分代表的是未来会被访问的情况,随着DataBlock被访问后,其未来会被访问的情况也就变化了,所以得分也应该随之变化。
[0052]情况3:淘汰 DataBlock 时
[0053]当缓存空间不足时,则会触发缓存的换出操作。在换出操作开始时,则会根据DataBlock的得分来排序,从最小得分的DataBlock开始淘汰。
[0054]情况4:缓存未命中时
[0055]当缓存未命中时,则需要根据DataBlock的得分来决定该DataBlock是否应该换入缓存,因为如果一个DataBlock的得分已经为0,则说明该DataBlock在已知的未来不会再被读取,则不应该再换入到缓存,这样可以避免不必要的缓存空间占用。
[0056]本发明的缓存系统设计如图6所示,整个系统主要分为以下3个模块:
[0057]DataBlock记分模块:此模块用于对DataBlock进行计分操作,为换入换出数据提供依据。该模块中的计分过程通过采用线程池技术进行并行执行;该模块使用ConcurrentSkipListMap作为容器,同时计分由AtomicLong完成,这样能保证每次操作的原子性,最终保证记分的正确性;该模块中的计分粒度以Trunk为最小单位,默认Itrunk =16DataBlocks ;该模块中使用HFile->Trunk_>Score的两层map进行维护,如图7所示。
[0058]BlockIndexLoader模块:此模块用于根据每个查询的开始行键和结束行键来读取加载查询范围内的DataBlock信息,以便DataBlock记分模块进行得分更新操作。该模块中设计为两层结构,分为IndexLoader和IndexScanner。每一个IndexLoader对应一个HFile,它负责读取HFile上的索引信息;一个IndexLoader可以有多个IndexScanner,每个IndexScanner对应一个查询请求,保存每个查询请求的执行信息。
[0059]StoreManager模块:此模块用于实际存储加载到缓存中的DataBlock。该模块主要考虑3个操作,cacheBlock:此操作是当缓存命中失效时,在换入缓存的时候就可以采取措施将得分已经为O的DataBlock拦截下来,不再换入缓存;getBl0Ck:此操作是从缓存中读取需要的DataBlock,每一次getBlock的操作都就标志着对DataBlock的一次访问,DataBlock的每一次访问后都需要将它的得分减一,以实时反映DataBlock在未来会被访问的情况WVictBlock:此操作是在缓存空间不足时或者已经使用的空间超过阈值时触发的,当新的DataBlock在换入缓存时发现缓存空间已经不足,则会触发缓存的换出操作,在系统实现中,当需要换出DataBlock时,我们会先遍历缓存中所有的DataBlock,然后使用一个大顶堆来选出得分最小的N个DataBlock进行换出操作。
【主权项】
1.一种面向分布式顺序表的缓存方法,其特征在于,包括: 步骤I,为所有数据块设置基础分值,当进行数据查询操作时,通过分布式顺序表,获取数据查询操作所涉及的数据范围,统计数据范围中各数据块将要被访问的访问次数,将访问次数累加到相应的数据块; 步骤2,当数据块被缓存命中时,被命中的数据块的分值减去固定值,当缓存空间已满时,则触发缓存的换出操作,在换出操作开始时,根据数据块的分值进行排序,从分值最小的数据块开始淘汰,直到缓存空间能够增加数据块。2.如权利要求1所述的面向分布式顺序表的缓存方法,其特征在于,所述步骤I包括:根据数据查询操作的起始行键定位到所述行键所属的区域,对每个区域下的所有文件按照起始行键在数据块索引结构上定位到第一个数据块索引项,从第一个数据块索引项开始顺序读取直到终止行键所在的数据块索引项,获取数据范围的所有数据块信息。3.如权利要求1所述的面向分布式顺序表的缓存方法,其特征在于,缓存未命中数据块时,则根据未命中数据块的分值决定未命中数据块是否换入缓存。4.如权利要求1所述的面向分布式顺序表的缓存方法,其特征在于,若数据块的分值为O,则分值为O的数据块在已知的未来不会再被读取,则不再换入到缓存。5.如权利要求1所述的面向分布式顺序表的缓存方法,其特征在于,记录各数据块的分值并保存。6.—种面向分布式顺序表的缓存系统,其特征在于,包括: 获取数据范围模块,用于为所有数据块设置基础分值,当进行数据查询操作时,通过分布式顺序表,获取数据查询操作所涉及的数据范围,统计数据范围中各数据块将要被访问的访问次数,将访问次数累加到相应的数据块; 计算分值模块,用于当数据块被缓存命中时,被命中的数据块的分值减去固定值,当缓存空间已满时,则触发缓存的换出操作,在换出操作开始时,根据数据块的分值进行排序,从分值最小的数据块开始淘汰,直到缓存空间能够增加数据块。7.如权利要求6所述的面向分布式顺序表的缓存系统,其特征在于,所述获取数据范围模块包括:根据数据查询操作的起始行键定位到所述行键所属的区域,对每个区域下的所有文件按照起始行键在数据块索引结构上定位到第一个数据块索引项,从第一个数据块索引项开始顺序读取直到终止行键所在的数据块索引项,获取数据范围的所有数据块信息。8.如权利要求6所述的面向分布式顺序表的缓存系统,其特征在于,缓存未命中数据块时,则根据未命中数据块的分值决定未命中数据块是否换入缓存。9.如权利要求6所述的面向分布式顺序表的缓存系统,其特征在于,若数据块的分值为O,则分值为O的数据块在已知的未来不会再被读取,则不再换入到缓存。10.如权利要求6所述的面向分布式顺序表的缓存系统,其特征在于,记录分值模块,用于记录各数据块的分值并保存。
【专利摘要】本发明涉及分布式信息处理技术领域,特别涉及一种面向分布式顺序表的缓存方法及系统,该方法包括为所有数据块设置基础分值,当进行数据查询操作时,通过分布式顺序表,获取数据查询操作所涉及的数据范围,统计数据范围中各数据块将要被访问的访问次数,将访问次数累加到相应的数据块;当数据块被缓存命中时,被命中的数据块的分值减去固定值,当缓存空间已满时,则触发缓存的换出操作,在换出操作开始时,根据数据块的分值进行排序,从分值最小的数据块开始淘汰,直到缓存空间能够增加数据块。
【IPC分类】G06F17/30
【公开号】CN105045894
【申请号】CN201510463230
【发明人】查礼, 郑忠诚, 程学旗
【申请人】中国科学院计算技术研究所
【公开日】2015年11月11日
【申请日】2015年7月31日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1