一种数据分页查询的方法及装置的制造方法

文档序号:9597894阅读:313来源:国知局
一种数据分页查询的方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别涉及一种数据分页查询的方法及装置。
【背景技术】
[0002]MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的数据库,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。但是,MongoDB的分页性能是较差。
[0003]现有技术中,当需要查询MongoDB中某一页的数据时,需要从第一页开始一条一条跳过数据,直到查询到需要查询的数据。举例来说,MongoDB中,共有10000页的数据,用户需要查询第9990页的数据。在现有的查询方法中,通过skip、limit操作,从第一页开始一条一条的跳过数据,直到到达第9990页,查询过程结束,返回查询结果,skip的偏移量越大时间性能越差。在大数据量环境下,如果一次跳转的页数过多,可能用户要等上十几秒,甚至几十秒,对于前端请求来说可能未接收到数据就已经超时结束。
[0004]通过上述描述可见,现有的数据分页查询的方法的查询效率较低。

【发明内容】

[0005]有鉴于此,本发明提供了一种数据分页查询的方法及装置,能够提高分页查询的效率。
[0006]—方面,本发明提供了一种数据分页查询的方法,包括:
[0007]S1:确定每个数据页所显示的数据项的标准数量;
[0008]S2:接收外部输入的目标数据页的请求信息;
[0009]S3:确定基准数据项;
[0010]S4:根据所述标准数量和所述请求信息,从所述基准数据项开始查询目标数据项;
[0011]S5:将所述目标数据项显示在所述目标数据页中。
[0012]进一步地,所述S3,包括:
[0013]将当前显示的数据页的最后一条数据项作为所述基准数据项。
[0014]进一步地,所述S3,包括:
[0015]将用户指定的数据页的最后一条数据项作为所述基准数据项。
[0016]进一步地,所述S4,包括:
[0017]判断所述目标数据页是否是所述基准数据项所在的数据页的下一页,如果是,则获取所述基准数据项之后的标准数量的目标数据项。
[0018]进一步地,所述S4,包括:
[0019]判断所述目标数据页是否是所述基准数据项所在的数据页的上一页,如果是,则将游标指针指向所述基准数据项,将游标指针指向跳过所述基准数据项之前的标准数量的数据项后的数据项,获取所述游标指针指向的数据项之前的标准数量的目标数据项。
[0020]另一方面,本发明提供了一种数据分页查询的装置,包括:
[0021]第一确定单元,用于确定每个数据页所显示的数据项的标准数量;
[0022]接收单元,接收外部输入的目标数据页的请求信息;
[0023]第二确定单元,用于确定基准数据项;
[0024]查询单元,用于根据所述标准数量和所述请求信息,从所述基准数据项开始查询目标数据项;
[0025]显示单元,用于将所述目标数据项显示在所述目标数据页中。
[0026]进一步地,所述第二确定单元,用于将当前显示的数据页的最后一条数据项作为所述基准数据项。
[0027]进一步地,所述第二确定单元,用于将用户指定的数据页的最后一条数据项作为所述基准数据项。
[0028]进一步地,所述查询单元,用于判断所述目标数据页是否是所述基准数据项所在的数据页的下一页,如果是,则获取所述基准数据项之后的标准数量的目标数据项。
[0029]进一步地,所述查询单元,用于判断所述目标数据页是否是所述基准数据项所在的数据页的上一页,如果是,则将游标指针指向所述基准数据项,将游标指针指向跳过所述基准数据项之前的标准数量的数据项后的数据项,获取所述游标指针指向的数据项之前的标准数量的目标数据项。
[0030]通过本发明提供的一种数据分页查询的方法及装置,确定基准数据项,从基准数据项开始,根据请求信息查询目标数据项,将目标数据项显示在目标数据页中,在查询的过程中,无需从第一条数据项开始查询,查询过程中跳过的数据项是条数减少,提高了分页查询的效率。
【附图说明】
[0031]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0032]图1是本发明一实施例提供的一种数据分页查询的方法的流程图;
[0033]图2是本发明一实施例提供的另一种数据分页查询的方法的流程图;
[0034]图3是本发明一实施例提供的一种数据分页查询的装置的示意图;
[0035]图4是本发明一实施例提供的另一种数据分页查询的装置的示意图。
【具体实施方式】
[0036]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0037]如图1所示,本发明实施例提供了一种数据分页查询的方法,该方法可以包括以下步骤:
[0038]S1:确定每个数据页所显示的数据项的标准数量;
[0039]S2:接收外部输入的目标数据页的请求信息;
[0040]S3:确定基准数据项;
[0041]S4:根据所述标准数量和所述请求信息,从所述基准数据项开始查询目标数据项;
[0042]S5:将所述目标数据项显示在所述目标数据页中。
[0043]通过本发明实施例提供的一种数据分页查询的方法,确定基准数据项,从基准数据项开始,根据请求信息查询目标数据项,将目标数据项显示在目标数据页中,在查询的过程中,无需从第一条数据项开始查询,查询过程中跳过的数据项是条数减少,提高了分页查询的效率。
[0044]在一种可能的实现方式中,所述S3,包括:将当前显示的数据页的最后一条数据项作为所述基准数据项。
[0045]在一种可能的实现方式中,所述S3,包括:将用户指定的数据页的最后一条数据项作为所述基准数据项。
[0046]在一种可能的实现方式中,所述S4,包括:
[0047]判断所述目标数据页是否是所述基准数据项所在的数据页的下一页,如果是,则获取所述基准数据项之后的标准数量的目标数据项。
[0048]在该实现方式中,游标指针直接定位到基准数据项,可以直接从基准数据项开始查询即可,无需从第一条数据项进行查询,提高了查询效率。
[0049]如果基准数据项的标识为A,标准数量为B,则该实现方式可以通过以下代码实现:db.test, find ({id: {$gt:A}}).limit (B)。
[0050]在一种可能的实现方式中,所述S4,包括:
[0051]判断所述目标数据页是否是所述基准数据项所在的数据页的上一页,如果是,则将游标指针指向所述基准数据项,将游标指针指向跳过所述基准数据项之前的标准数量的数据项后的数据项,获取所述游标指针指向的数据项之前的标准数量的目标数据项。
[0052]在该实现方式中,可以直接从基准数据项开始查询即可,无需从第一条数据项进行查询,提高了查询效率。
[0053]如果基准数据项的标识为A,标准数量为B,则该实现方式可以通过以下代码实现:db.test.find({id: {$lt:A}}).sort ({id:-1}).skip (B).limit (B)。以标识为 A 的数据为基准数据项,将标识反向排序,并且跳过基准数据项所在的数据页,获取上一页数据即可。
[0054]本发明实施例提供的一种数据分页查询的方法,避免用skip操作做大数据量的偏移,采用基于索引的条件限定与排序查询。这里的条件限定指的是主键约束、唯一性约束条件。这里根据某个指定字段的值为条件。
[0055]步骤S2,可以通过该封装好的程序的持久层接口来实现。
[0056]另外,当请求信息一次请求中会有很多数据页需要显示时,可以不必提供全部数据,只需要提供满足请求的指定数量的数据项即可,而不必返回全部数据,这样查询的性能是非常高效的。
[0057]为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
[0058]在该实施例中,test集合中有20万条数据,每个数据页显示10条数据,即标准数量为10,共2万页。假设数据的id为该条记录的位置并唯一(第一条数据项的id为1,第二条数据项的id为2,以此类推)。目标数据页为第I万页。当前显示页为第9999页。
[0059]如图2所示,本发明实施例提供了一种数据分页查询的方法,该方法可以包括以下步骤:
[0060]步骤201:确定
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1