一种基于降序存储的数据分页查询方法

文档序号:9327018阅读:653来源:国知局
一种基于降序存储的数据分页查询方法【
技术领域
】[0001]本发明涉及一种基于降序存储的数据分页查询方法,属于数据查询
技术领域
。【
背景技术
】[0002]随着移动通信网、互联网、物联网等信息技术的飞速发展,信息技术已经融入到人们的生活,遍布世界各地的各种通信终端、传感设备等产生了超过以往任何时代的巨量数据。与此同时,电子商务、社交网络的兴起每时每刻都在生成各种各样的数据。大数据的时代已经来临,因为我们生活在一个有更多信息的社会中,人们与数据或者网络信息的交互比以前任何时候都要密切。[0003]海量的数据中蕴含着大量信息,从信息中可以提取大量有用价值。在大型的企业级Web信息系统中,存储着大量的数据甚至是海量的数据,分页查询技术是大型Web信息系统开发中不可或缺的一项技术。关系数据库提供了功能丰富的SQL语言,具有一套完整成熟的分页查询方法。[0004]HBase是一个具有高可靠性、高性能读写能力、面向列、可伸缩的分布式存储系统。HBase采用KeyValue键值对进行存储,但不同于一些典型的NoSQL数据库,HBase的Key是由多个部分机成,包括四个维度分别是RowKey(行键)、ColumnFamily(列族)、ColumnQualifier(列名)和Timestamp(时间戮),因此HBase的KeyValue可以表不为{rowkey,columnfamily,columnqualifier,timestamp}->value形式,这样做的目的是为了让用户更方便的存取指定的数据。HBase的KeyValue格式如下表所示。[0006]不同于传统的关系数据库,HBase表中数据量大,提供的功能函数有限,无法提供类似于关系数据的存储过程分页。因此,HBase分页查询是一项十分具有实用意义的研究,一些学者也给出了自己的解决方案。[0007](I)HBase数据表分页查询方法,首先对HBase表每行数据进行顺序编号,从而使得每行数据具有序号,然后将数据序号与对应的行主键存储到索引表中。进行分页查询时,由页码和每页数据的行数计算序号范围,再根据序号范围查询索引表,得到对应的键值集合,最后由键值集合查询原数据表,获得分页显示数据。这种方法解决了页面跳转效率低下的问题,但是获得HBase的记录总数是很困难的。虽然浏览所有数据时,可以在数据库中存下当前记录总数,但如果查询请求满足条件的数据有很多条,将数据遍历一遍计算总数需要花费较长的时间。[0008](2)HBase分页浏览方法,实现时前端不需要记录数据的总页数,在分页查询处理时,首先调用scan方法进行处理,然后调用setFilter方法进行查询过滤,最后采用pageFilter来限制返回的数据数;并设计了一种缓存机制,通过绑定每个登陆用户,在用户浏览数据时,记录下这条数据的rowKey,从而避免了扫描所有的数据,然后逐条遍历所带来的资源开销问题。此方案的缺点是实现较为复杂。而本发明能够很好地解决上面的问题。【
发明内容】[0009]本发明目的在于针对HBase表的分页查询算法的问题,提出了一种基于降序存储的数据分页查询方法,该方法解决了HBase表的分页查询算法资源消耗大、查询效率低的问题,提高了HBase表数据分页查询的查询效率,降低数据查询响应延迟。[0010]本发明解决其技术问题所采取的技术方案是:本发明通过指定所查询数据的大小和起始时间,由PageFilter函数来支持每页返回的行数,实现了将数据以时间降序排列,并分页展现给用户的功能,达到降低数据网络传输代价的目的。[0011]方法流程:[0012]步骤1:数据库中检索页面块区大小的数据,存储在HDFS上;[0013]步骤2:系统生成时间戳Tm、当前时间Tc、Tm-Tc和设备ID组成Rowkey;[0014]步骤3:数据按照Rowkey进行降序处理后,存储在HBase表中;[0015]步骤4:输入起始时间Tn和每页显示数据条数N,设置Tn=startRow,设置StopRowkey为默认不变;[0016]步骤5:调用pageFilter(tableName,startRowkey,N+1)函数,返回M条数据。[0017]进一步的,本发明的步骤1包括:[0018]1)分页处理在数据库端进行;[0019]2)每次进行翻页操作时,从数据库中检索页面块区大小的数据。[0020]进一步的,本发明步骤2的Rowkey包括:HBase表中数据根据Rowkey的字典顺序存储,其时间戳是递增的,设置新的Rowkey,为Tm-Tc和设备ID的组合,其中,Tm-Tc表示为时间戳Tm和当前时间Tc相减。[0021]进一步的,本发明步骤3的存储包括:在分页浏览时,数据按时间升序排序由前到后展示,最先得到的是历史数据,然而用户大都对最新的数据比较关注,因此对采集来的数据进行处理,使得最新数据存储在HBase表顶端,符合用户对信息的需求。[0022]进一步的,本发明的步骤4包括:[0023]1)分页方式不需要记录总数,类似于社交网站和一些论坛,客户端不需要获取总记录数,只需要判断每页之后是否还有数据,向用户提供"下一页"和"上一页"的翻页功能;[0024]2)只提供上下页翻页功能,不对整个数据表的数据进行一次性分页,每次取出用户指定数据大小的数据,提高查询效率。[0025]进一步的,本发明的步骤5包括:[0026]1)由PageFilter(tableName,startRowkey,stopRowkey,N+1)函数来支持每页返回的行数,不需要记录数据库中数据总数和标记每一行数据,实现将数据以时间降序排列,并分页展现给用户的功能;[0027]2)在查询完一页后,请求下一页,更新page=page+Ι,调用page函数;请求上一页,更新page=page-Ι,判断page是否为0,若为0则操作结束,否则调用page函数,得到上页数据。[0028]本发明应用于数据分页查询。[0029]有益效果:[0030]1、本发明针对HBase实现的大型Web信息系统应用场景不支持关系数据库原有的分页,该方法提高了HBase表数据分页查询的查询效率,降低数据查询响应延迟。[0031]2、本发明实现了将数据以时间降序排列,并分页展现给用户的功能,降低了数据网络传输代价。【附图说明】[0032]图1为本发明实施例中的方法流程图。[0033]图2为本发明用户发出请求到返回数据的过程示意图。[0034]图3为本发明的数据存储流程图。[0035]图4为本发明的数据查询流程图。[0036]图5为经过降序存储后数据进行降序处理前后在HBase表中的存储顺序图。【具体实施方式】[0037]下面结合说明书附图对本发明创造作进一步的详细说明。[0038]如图1所示,本发明是针对HBase数据表的分页查询方法,通过生成新的时间戳,组成新的Rowkey,实现采集数据按时间降序存储在HBase表中的功能;该方法不再使用传统的标记每行数据和统计数据总数的方式,而是采用记录每页的起始Rowkey,调用HBase中的PageFilter方法,提供上下页翻页功能,实现了分页查询的要求。[0039]本发明具体实现的过程,包括:[0040]1、分页查询方案[0041]2、数据降序存储方法[0042]3、分页查询算法[0043]4、数据查询流程[0044]1.分页查询方案:[0045]以图2的典型三层架构为例,用户发出数据查询请求返回数据时,在数据库端、Web服务器端和客户浏览器端(即:Browser)均可以进行分页处理。选择在那一层进行分页的判断标准是:数据处理的速度和网络传输资源的开销。综合考虑,选择在数据库端进行分页处理。[0046]比较合理的分页查询方案:每次进行翻页操作时,从数据库中检索页面块区大小的数据。此方案虽然每次翻页都需要查询数据库,但所查询出的数据记录数很少,极大地降低了网络之间传输的数据量。另外,对于耗时比较长的数据库连接建立过程,可以使用数据库连接池进行解决。[0047]2.数据降序存储方法:[0048]从图3当前第1页1 2 
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1