一种Hadoop上面向范围查询的内存缓存方法

文档序号:6543475阅读:228来源:国知局
一种Hadoop上面向范围查询的内存缓存方法【专利摘要】本发明公开了一种Hadoop上面向范围查询的内存缓存方法,包括如下步骤:1)在Hadoop海量数据的查询属性上建立索引,将索引存放在HBase上;2)在HBase索引数据上建立内存分片缓存,选择频繁被访问的索引数据缓存在内存中,数据分片的划分在初始阶段采用固定长度等分方法,同时采用跳表(skiplist)组织众多的数据分片;3)根据数据查询记录命中数据,采用指数平滑方法衡量数据分片热度;4)更新内存缓存。本发明的优点是采用跳表和集合相结合的结构,在此结构上支持动态调整集合的分片边界,使数据分片自适应查询需求,提高热点数据分片的查询缓存命中率,降低查询访问磁盘的开销,从而大幅度提高范围查询的性能。【专利说明】—种Hadoop上面向范围查询的内存缓存方法【
技术领域
】[0001]本发明涉及信息技术,特别是大数据的查询技术,具体是一种Hadoop(由阿帕奇(Apache)基金会开发的开源分布式并行体系架构)上面向范围查询的内存缓存方法。【
背景技术
】[0002]海量数据存储和查询技术这几年取得了长足的发展,从Google(谷歌)提出的NoSQL(非关系数据模型)数据存储bigtable(谷歌的非关系数据存储系统)后,目前有十几种有影响的NoSQL数据库产品,例如HadoopHBase(Hadoop分布式并行体系架构中的非关系数据存储系统),YahooPNUTS(雅虎的非关系数据存储系统),HadoopCassandra(以前是脸谱(Facebook)的非关系数据存储系统,后被Hadoop收购成为开源项目),AmazonDynamo(亚马逊的非关系数据存储系统),还有Hypertable(Hypertable开发的开源分布式数据存储系统),Azure(微软的非关系数据存储系统),CouchDB(面向文档的数据库系统),Voldemort(开源的分布式数据存储系统,是亚马逊Dynamo的开源实现),MongoDB(基于分布式文件的数据存储系统)等等。[0003]NoSQL数据存储在Web2.0出现之后应运而生,面向海量Web数据的特点:数据体量大、数据不遵守关系模式、信息价值密度低,并且对数据存储的容错性和可扩展性要求高。以HBase为例,它是以列族(columnfamily)为单位实现的列存储数据库,一个列族内没有必须包含的列,每个列族中具体有哪些列不必事先知道,可以在需要的时候添加。HBase是建立在分布式文件系统HDFS(Hadoop分布式文件系统)上的,HDFS是借鉴了GoogleGFS(谷歌的分布式文系统)实现的开源分布式文件系统,它依靠文件多副本提供良好的容错性,任何数据文件损坏都会在主控节点(NameNode)的调度下迅速再建立一个完好的副本。可扩展性也是GFS和HDFS的优势,计算节点通过和主控节点的心跳通信可以随时加入和退出集群。[0004]范围查询是区别于点查询的查询需求,点查询用关系数据库中的SQUStructuredQueryLanguage数据库的结构化查询语言)语句可以表达为select…fronr..wherecond=x;而范围查询的SQL表达会有如下情况:select...from...wherecond>x;select...from...wherecond<x;select...from...wherecond>xlandcond<x2;select...from...wherecond>xlorcond<x2;当然,范围查询不局限于以上情况,可能是以上情况的组合。总之,范围查询的查询条件是满足查询属性上的一个指定范围,而不是一个指定的单值。[0005]海量数据上的范围查询是一项具有挑战性的工作,主键上的范围查询依赖于数据库的物理存储特性,HBase将数据划分成多个分区(Region)存储,每个分区维护行键(RowKey)连续的一段记录,所以HBase在支持主键上的范围查询性能是不错的。随着内存存储性能的提升和价格的不断下降,数据库领域常用的内存缓存方法在海量数据查询领域也在不断的发挥作用,HBase针对数据读写也提供了缓存方法,这种缓存方法是针对所有读写请求的热点缓存机制,是以数据块(64KB)为单位的,不能针对特定数据上的特定查询需求建立缓存,也不能调整缓存粒度。此外,HBase现有的缓存机制对热点数据的衡量采用简单的最近最少使用(LRU)算法,没有考虑数据的历史访问规律,容易出现数据频繁调入调出内存的颠簸现象。【
发明内容】[0006]本发明的目的是为克服现有技术的不足,提供一种Hadoop上面向范围查询的内存缓存方法,这种方法可以提高范围查询的内存缓存命中率,降低查询访问磁盘的开销,从而大幅度提高范围查询的性能。[0007]实现本发明目的的技术方案是:一种Hadoop上面向范围查询的内存缓存方法,包括如下步骤:1)在Hadoop海量数据的查询属性上建立索引,将索引存放在HBase上;2)在HBase索引数据上建立内存分片缓存,选择频繁被访问的索引数据缓存在内存中,数据分片的划分在初始阶段采用固定长度等分方法,同时采用跳表(skiplist)组织众多的数据分片;3)根据数据查询记录命中数据,采用指数平滑方法衡量数据分片热度;4)更新内存缓存。[0008]所述的跳表是一种随机化的数据结构,跳表的节点在逻辑上是分层的,最底层是包含所有节点的链表,自底向上跳表的“跳动步幅”越来越大,在物理存储上,跳表中的节点只存储一次,跳表的TOP节点是整个跳表的查询起始节点,出现在跳表上层的节点具有更多的指针,TOP节点保存跳表的数据起止范围和跳表访问计数戳(ViSitstamp),跳表访问计数戳在每次查询到来时加1,查询命中的分片会打上本次查询的计数戳(LastStamp,简称LstS);跳表查询的时间复杂度可以达到log(n),并且支持高并发的多线程读写。[0009]所述的跳表的节点是保存所有数据分片的元数据信息点,数据分片包含热数据分片和冷数据分片,热数据分片和冷数据分片都有对应的跳表节点记录元数据信息,热数据分片对应的数据会缓存到内存中,冷数据分片对应的数据不会缓存到内存中。[0010]所述的元数据信息包括:关键字key,即数据分片左边界、保存最近一次命中该数据分片查询的计数戳LastStamp、每次查询命中的数据分片记录TOP节点本次传递过来的VisitStamp,写入LastStamp、保存最近数据分片热度LastHotScore、访问次数VisitCount、数据分片的满空标志(F/E)。[0011]所述的数据分片热度为:HotScore=(1-a)(Visitst__LastVisitst—*LastHotScore+a*(HitltemNumber/TotalltemNumber);其中HotScore是当前的分片热度,LastHotScore是上一次命中分片时计算的热度,α是指数平滑因子,通常取值为0.01-0.10,LastHotScore以每次查询(1_α)的速率衰减,本次访问距离上次访问经过了(VisitStamp-LastVisitStamp)次查询,衰减因子为(1_α)(Visitstamp-LastVisitstamp),HitltemNumber/TotalltemNumber为查询在数据分片内的选择率。[0012]所述的更新内存缓存包括热数据分片和冷数据分片、数据分片的分裂和数据分片的合并调整。[0013]所述的热数据分片和冷数据分片是按照热度排序,并划定内存淘汰门限和分片分裂门限,热度在内存淘汰门限之下的热数据被踢出内存,热度在内存淘汰门限之上的冷数据被选入内存。[0014]所述的数据分片的分裂是数据分片热度高于内存淘汰门限但低于分片分裂门限,将分片分成相等的K份,数据分片可以被不断分裂,直到分片大小达到下限或者分片热度已经高于分片分裂门限,停止分裂,K是可配置参数,例如k=3。[0015]所述的数据分片的合并调整是基于以下条件的合并:①两个数据分片相邻、两个数据分片同为热数据分片或者同为冷数据分片、③合并后的数据分片大小没有超过数据分片大小的上限、④两个数据分片的热度受选择率HitltemNumber/TotalltemNumber均接近I。[0016]本发明针对指定数据表上的范围查询建立可以自适应分片的内存缓存,通过对数据分片的分裂合并跟踪查询请求的分布规律和变化规律,使数据分片自适应查询的需求。[0017]本发明的优点是采用跳表和集合相结合的结构,在此结构上支持动态调整集合的分片边界,使数据分片自适应查询需求,提高热点数据分片的查询缓存命中率,降低查询访问磁盘的开销,从而大幅度提高范围查询的性能。【专利附图】【附图说明】[0018]图1为实施例中内存缓存索引结构集合+跳表示意图;图2为实施例中跳表的查找过程示意图;图3为实施例中数据分片37的分裂示意图;图4为实施例中数据分片37和59的变冷过程示意图;图5为实施例中数据分片32和数据分片37的合并、数据分片59和数据分片71的合并示意图。【具体实施方式】[0019]下面结合附图和实施例对本【
发明内容】作进一步阐述,但不是对本发明的限定。[0020]实施例:一种Hadoop上面向范围查询的内存缓存方法,包括如下步骤:1)在Hadoop海量数据的查询属性上建立索引,将索引存放在HBase上。因为HBase提供良好的可扩展性和容错性,可以认为HBase有无限的磁盘空间,在HBase中的数据是安全可靠的。HBase将数据分布在集群的各节点上,每个节点管理一部分数据,称为一个Region,Region内的数据是主键连续的,HBase以此来支持有效的范围查询;2)在HBase索引数据上建立内存分片缓存,缓存的目标是选择那些更频繁被访问的索引数据缓存在内存中,以减少数据查询的磁盘IO(输入输出)开销。由于要建立支持高效范围查询的缓存,所以在内存缓存的数据结构上,本发明为连续的索引数据建立数据分片,数据分片的划分在初始阶段采用固定长度等分方法,同时采用跳表(skiplist)组织众多的数据分片;跳表是一种随机化的数据结构,跳表的节点在逻辑上是分层的,最底层是包含所有节点的链表,自底向上跳表的“跳动步幅”越来越大,这样跳表中罪后的节点在查询中也可以获得和靠前的节点相当的查询效率。在物理存储上,跳表中的节点只存储一次,那些出现在跳表上层的节点具有更多的指针。例如图1中节点7有两个指针,一个指向它的后继节点14,一个指向它的下一跳后继节点21。[0021]跳表的查询的时间复杂度可以达到log(n),并且支持高并发的多线程读写,举例来说,例如图2,查询结果集范围是41-59,首先在跳表中找到小于等于关键字41的最大关键字位置,即37,查找过程如图2,首先从TOP节点找到最上层链表,通过header节点向后查找,找到第一个大于查询关键字的节点的前驱节点,即节点21,从节点21向下到level2,在level2链表中找到第一个大于查询关键字的节点的前驱节点,即节点37,从节点37向下到level1,在levelI链表中找到包含查询关键字的集合范围,即集合分片37_70,查询结束。[0022]跳表的TOP节点是整个跳表的查询起始节点,在本发明的内存缓存方法中,TOP节点保存跳表的数据起止范围和跳表访问计数戳VisitStamp,跳表访问计数戳在每次查询到来时加1,查询命中的分片会打上本次查询的计数戳LastStamp,在后面计算数据热度的时候会用来计算衰减指数。[0023]跳表的节点(LevelI中的全部节点)保存所有数据分片的元数据信息,数据分片包含热数据分片和冷数据分片,热数据分片和冷数据分片都有对应的跳表节点记录元数据信息,而热数据分片对应的数据会缓存到内存中,比如关键字在7-13范围的数据。节点14是冷数据分片,14-20是冷数据,则关键字在14-20范围的数据没有缓存到内存中。在本发明内存缓存方法中,节点保存的元数据信息包括:a关键字key,即数据分片左边界;b最近命中计数戳LastStamp,保存最近一次命中了该数据分片查询的计数戳,每次查询命中的数据分片会记录TOP节点带来的本次VisitStamp,写入LastStamp;c最近数据分片热度LastHotScore,保存最近一次计算的当前数据分片的热度,热度计算采用指数平滑方法,会用到上次的数据分片热度;d访问次数VisitCount,保存数据分片被访问的次数,和数据热度一起来衡量数据分片是否需要做分裂;e数据分片的满空标志(F/E),如果数据分片是热数据,已经缓存到内存中,元数据信息的标志为Full,反之,冷数据的标志为Empty;3)根据数据查询记录命中数据,采用指数平滑方法衡量数据分片热度;所述的数据分片热度为:HotScore=(1-a)(Visitst__LastVisitst—*LastHotScore+α*(HitltemNumber/TotalltemNumber);其中HotScore是当前的分片热度,LastHotScore是上一次命中分片时计算的热度,α是指数平滑因子,通常α取值为0.01-0.10,LastHotScore以每次查询(1_α)的速率衰减,本次访问距离上次访问经过了(VisitStamp-LastVisitStamp)次查询,衰减因子为(l-α)(viSitstamp-LaStviSitst-p);Hi11temNumber/TotalItemNumber为查询在数据分片内的选择率。[0024]4)更新内存缓存。由TOP定期触发缓存更新,一次缓存更新事件会重新计算所有数据分片的数据热度,包括热数据分片和冷数据分片。然后按照热度排序,并划定内存淘汰门限和分片分裂门限,热度在内存淘汰门限之下的热数据被踢出内存,热度在内存淘汰门限之上的冷数据被选入内存。[0025]缓存更新事件同时会触发数据分片的分裂和合并调整,当数据分片热度高于内存淘汰门限但低于分片分裂门限,不足以淘汰出内存成为冷数据,数据分片的命中次数VisitCount高,但数据的热度受选择率HitltemNumber/TotalltemNumber的影响而偏低,可以认为分片内的数据冷热不均,触发分片的分裂。将分片分成相等的K份,K是可配置参数,本实施例K=3。数据分片可能会在下个缓存更新事件中被继续分裂,直到分片大小达到下限或者分片热度已经高于分片分裂门限,停止分裂。[0026]数据分片的合并是基于以下条件:①两个数据分片相邻;@两个数据分片同为热数据分片或者同为冷数据分片;:.1合并后的数据分片大小没有超过数据分片大小的上限;④两个数据分片的热度受选择率HitltemNumber/TotalltemNumber均接近I。同时满足这4个条件会触发两个数据分片的合并。[0027]经过不断的分裂和合并,分片会自适应查询需求的边界划分,并根据查询需求的不断变化持续的调整缓存在内存中的热点分片。[0028]图3,图4,图5给出了一个分裂合并过程。在热度计算中找到节点37满足分裂条件,分裂成3个节点:37,48,59。这3个新节点在下一轮热度计算中只有节点48的热度满足高于内存淘汰门限,节点37和59的热度均低于内存淘汰门限。这次节点分裂触发跳表的第二层节点调整,48成为第二层节点,37被从第二层节点删除。随后,数据范围37-47,数据范围59-70被淘汰出内存。同时,这一轮热度计算中,节点32和节点37同时为冷数据分片节点,满足节点合并的4个条件,所以节点32和节点37合并,节点的key仍然为32,指向的数据范围是32-47。同样,节点59和节点71合并,key为59,数据范围为59-84。调整后的跳表结构如图5所示,节点32对应的冷数据分片范围是32-47,节点48对应的热数据分片范围是48-58,节点59对应的冷数据分片范围是59-84。【权利要求】1.一种Hadoop上面向范围查询的内存缓存方法,其特征是,包括如下步骤:1)在Hadoop海量数据的查询属性上建立索引,将索引存放在HBase上;2)在HBase索引数据上建立内存分片缓存,选择频繁被访问的索引数据缓存在内存中,数据分片的划分在初始阶段采用固定长度等分方法,同时采用跳表组织众多的数据分片;3)根据数据查询记录命中数据,采用指数平滑方法衡量数据分片热度;4)更新内存缓存。2.根据权利要求1所述的Hadoop上面向范围查询的内存缓存方法,其特征是,所述的跳表是一种随机化的数据结构,跳表的节点在逻辑上是分层的,最底层是包含所有节点的链表,自底向上跳表的“跳动步幅”越来越大,在物理存储上,跳表中的节点只存储一次,跳表的TOP节点是整个跳表的查询起始节点,出现在跳表上层的节点具有更多的指针,TOP节点保存跳表的数据起止范围和跳表访问计数戳VisitStamp,跳表访问计数戳在每次查询到来时加1,查询命中的分片会打上本次查询的计数戳LastStamp;跳表查询的时间复杂度可以达到log(n),并且支持高并发的多线程读写。3.根据权利要求2所述的Hadoop上面向范围查询的内存缓存方法,其特征是,所述的跳表的节点是保存所有数据分片的元数据信息点,数据分片包含冷数据分片和热数据分片,热数据分片和冷数据分片都有对应的跳表节点记录元数据信息,热数据分片对应的数据会缓存到内存中,冷数据分片没有缓存到内存中。4.根据权利要求3所述的Hadoop上面向范围查询的内存缓存方法,其特征是,所述的元数据信息包括:关键字key,即数据分片左边界、保存最近一次命中该数据分片查询的计数戳LastStamp、每次查询命中的数据分片记录TOP节点本次传递过来的VisitStamp,写入LastStamp、保存最近数据分片热度LastHotScore、访问次数VisitCount、数据分片的满空标志F/E。5.根据权利要求1所述的Hadoop上面向范围查询的内存缓存方法,其特征是,所述的数据分片热度为=HotScore=(1-a)(Visitstamp-LastVisitstamp)^LastHotScore+α*(HitltemNumber/TotalltemNumber)其中HotScore是当前的分片热度,LastHotScore是上一次命中分片时计算的热度,α是指数平滑因子,通常α取值为0.01-0.10,LastHotScore以每次查询1-ct的速率衰减,本次访问距离上次访问经过了VisitStamp-LastVisitStamp次查询,衰减因子为(l-α)(Visitst?p-LastVisitst-p),HitltemNumber/TotalltemNumber为查询在数据分片内的选择率。6.根据权利要求1所述的Hadoop上面向范围查询的内存缓存方法,其特征是,所述的更新内存缓存包括热数据分片和冷数据分片、数据分片的分裂和数据分片的合并调整。7.根据权利要求6所述的Hadoop上面向范围查询的内存缓存方法,其特征是,所述的热数据分片和冷数据分片是按照热度排序,并划定内存淘汰门限和分片分裂门限,热度在内存淘汰门限之下的热数据被踢出内存,热度在内存淘汰门限之上的冷数据被选入内存。8.根据权利要求6所述的Hadoop上面向范围查询的内存缓存方法,其特征是,所述的数据分片的分裂是数据分片热度高于内存淘汰门限但低于分片分裂门限,将分片分成相等的K份,数据分片被继续分裂,直到分片大小达到下限或者分片热度已经高于分片分裂门限,停止分裂,K是可配置参数。9.根据权利要求6所述的Hadoop上面向范围查询的内存缓存方法,其特征是,所述的数据分片的合并调整是基于以下条件的合并=X两个数据分片相邻、?两个数据分片同为热数据分片或者同为冷数据分片、S合并后的数据分片大小没有超过数据分片大小的上限、④两个数据分片的热度受选择率HitltemNumber/TotalItemNumber均接近I。【文档编号】G06F17/30GK103942289SQ201410144808【公开日】2014年7月23日申请日期:2014年4月12日优先权日:2014年4月12日【发明者】李先贤,葛微申请人:广西师范大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1