具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明一实施例提供了一种数据查询方法,该方法应用于多表存储数据的分页查询,如图1所示,该方法包括:
101、单表查询管理器根据用户输入的查询请求,从单表缓存器存储的数据中获取第一类数据。
其中,第一类数据包含的数据个数与存储表的个数相同,且第一类数据中的每一条数据对应一个存储表,每个存储表对应一个单表查询管理器和一个单表缓存器。
值得说明的是,该查询请求中包括查询数据的关键字,以及查询的数据量,在本实施例中,用户一次请求查询的数据量为一页的数据量。
102、多表查询管理器按照预设排序规则从第一类数据中获取第一数据。
其中,多表查询管理器用于组织和调度多个单表查询管理器。预设排序规则用于对第一类数据进行排序,该第一数据为满足查询请求和预设排序规则的最优数据。
结合上述描述,该预设排序规则可以由用户确定,预设排序规则用于对该第一类数据进行排序,进而选取该排序后的指定位序的数据作为该第一数据,比如,在对第一类数据都包含年龄属性,通过该预设排序规则按照年龄属性对该第一类数据进行升序排列,则排在首位的是年龄最小所对应的数据,则该数据为第一数据。本发明实施例对该第一数据的选取规则不做限定。
结合上述步骤101中的描述,根据对查询请求的描述,请求查询的数据量为一页的数据量,而该第一数据为构成该页数据的第一个数据。
此外值得说明的是,在本实施例中,单表查询管理器、单表缓存器、多表查询管理器为逻辑器件,本发明实施例提供的数据查询方法应用于至少集成上述三种逻辑器件的终端或服务器。
本发明实施例提供了一种数据查询方法,该方法应用于多表存储数据的分页查询,首先根据用户输入的查询请求,从单表缓存器存储的数据中获取第一类数据,进而按照预设排序规则从第一类数据中获取第一数据,其中,第一类数据包括的数据个数与存储表的个数相同,且第一类数据中的每一条数据与一个存储表对应。通过每一个存储表中获取一个数据,这些数据组成第一类数据,进而从该第一类数据中获取一个第一数据,与现有技术中,只能按照时间分区来查询数据相比,本发明实施例不仅扩大了数据查询的适用范围,在对通过多表存储的数据进行查询时,提高了数据查询效率。
在本发明实施例的一种实现方式中,就如何根据用户输入的查询请求,从单表缓存器存储的数据中获取第一类数据,进行了详细描述,即对上述步骤101中描述的流程作了具体说明,如图2所示,这一详细流程包括:
201、单表数据库查询器根据查询请求,按照预设排序规则从每个存储表中获取预设数量数据。
本步骤中涉及的查询请求与上述步骤101对查询请求的描述相同,至此不在重复说明。
其中,预设数量数据通过单表缓存器存储,预设排序规则用于对存储表中的数据进行排序,从而在排序后的数据中获取与预设数据量相同个数的数据,排序规则可以是参照数据的某一属性,进而按照该属性的升序或者降序对存储表中的数据进行排序,本实施例中,对预设排序规则的具体表现形式不做限定。
值得说明的是,本步骤中获取的预设数量的数据与上述查询请求中请求获取的数据量是相对应的,在本实施例中,该预设数据量大于请求查询的数据量,此外,为了能够再读取下一页数据时,能够直接从已缓存的数据中读取,该预设数据量为请求查询数据量的两倍。
202、单表数据库查询器按照预设排序规则从每个单表缓存器存储的数据中获取一个第一类子数据。
其中,所有第一类子数据组成第一类数据,预设排序规则用于对存储表和单表缓存器存储中的数据进行排序。
在本发明实施例的另一种实现方式中,提供了一种存储表的创建流程,由于本发明是在多表存储数据的基础上,对多表数据进行分页查询的方案,则在执行上述步骤101之前,还需要创建多个存储表来存储数据,该流程具体包括如下两个步骤:
第一步:通过数据库定义器创建存储表。
在本步骤中,创建的存储表的个数至少为2个。
第二步:将数据库中待缓存数据存储到存储表中,每个存储表中存储的数据量大于查询请求中请求查询的数据量。
结合上述步骤描述,每个存储表对应一个单表缓存器,该单表缓存器用于存储该存储表中的部分或全部数据,则该存储表中的数据的数据量至少大于请求查询的数据量,或者大于请求查询数据量的两倍。
进一步的在存储表中根据查询请求查询数据时,采用多任务、异步的方式对多表查询,这样比只采用一个任务进行查询速度将有明显的提升,这里两种查询方式的数据总量是一样的。
在本发明实施例的另一种实现方式中,描述了获取到第一数据之后的执行流程,即在执行完上述步骤102之后,该方法还包括获取第一页数据中其余数据的流程,如图2-1所示,该流程包括:
2011、在第一数据对应的单表缓存器中将第一数据删除。
2012、单表查询管理器从第一数据对应的单表缓存器中获取一个第二类子数据。
其中,第二类子数据与第一数据之外的第一类数据中其余第一类子数据组成第二类数据。比如,第一类子数据包括m、n、k…等十条数据,根据预设排序规则得到的第一数据为m,且该数据m所属单表缓存器为M,则在该M中将m删除,并从M中获取数据m1,该数据m1即为第二类子数据,该m1与上述第一类数据中除m之外的其它9个数据组成新的第二类数据。
值得说明的是,该获取第二类子数据的方法与上述步骤2012中描述的获取第一类子数据的方法相同,在此不再重复说明。
2013、多表查询管理器按照预设排序规则,从第二类数据中获取第二数据。
其中,第二数据为在第二类数据中满足查询请求和预设排序规则的最优数据,该第二数据的获取方式与获取第一数据的方式相同,在此不再重复说明。
在获取到该第二数据后,重复执行上述如图2-1所示的流程,直到获取到该查询请求中所要查询到的数据量为止,即完成第一页数据查询。比如,第一页数据的数据量为10个,则需要重复执行上述获取第二数据的流程,直到获取到第十个数据。
值得说明的是,在从单表缓存器中查询并获取数据过程中,检测该单表缓存器存储数据的数据量,当单表缓存器存储的数据的数据量,小于查询请求中请求查询的数据量时,从数据库中获取新的待缓存数据,以使得单表缓存器存储的数据的数据量,大于查询请求中请求查询的数据量。
此外值得说明的是,上述如图1、2、2-1所示的方法流程,实现的是第一次或者是第一页数据的查询,当用户进行第二页数据查询时,其具体的查询流程与上述第一页数据查询流程相似,本发明实施例对此不再重复说明。
本发明另一实施例提供了一种数据查询的方法,这一方法可以应用于具体的数据查询流程中,且可以通过下述六种职能模块来实现,包括:数据库定义模块01、单表数据查询模块02、单表任务缓存模块03、单表查询管理模块04、多表查询管理模块05、分页查询管理模块06。
其中,数据库定义模块01,用于定义存储数据的多张表,该数据库定义模块可以集成数据库存储功能,这些数据库可以是ORACLE、MYSQL或者其它的数据库。
在本实施例中,以该数据库定义模块定义n张表进行存储数据为例进行说明。
单表数据查询模块02,用于对多表进行分页查询,该模块还用于针对每一张表构建单表数据查询任务。在具体的实现过程中,数据查询是需要到数据库中去查询,进而通过该模块的查询,能够从数据库中查找指定条数的数据。
在本实施例中,以查找到的数据量为分页条数或者分页条数的两倍为例进行说明,比如,每个分页的条数为10,则通过该模块查找到的数据量可以为10或者20条数据,本实施例对查找数据的具体数目不做限定。
单表数据缓存模块03,用于缓存通过上述单表数据查询模块02查找到的数据。
结合上述对查找数据量的描述,在本发明的一种可选实现方式中,在用户进行翻页时,为了能够更快地向用户返回数据,在用户进行翻页查找时,不再从数据库中查询数据,而是从缓存中直接读取数据,所以这里缓存的数据为每页条数到每页条数的两倍的数据量。
通过对上述模块02、模块03的描述,定义了如何查询数据库、如何为了提高效率而建立缓存,而如何对这些模块进行管理和调度将通过下述的单表查询管理模块04来实现。
单表查询管理模块04,用于在单表数据查询过程中,对上述的模块02和模块03进行管理和调度。
多表查询管理模块05,用于对管理单表查询管理模块,以完成多表数据的整合。
分页查询管理模块06,用于提供查询访问接口,接收使用方输入的查询请求。
结合上述对各职能模块所能实现的功能的描述,进而通过这些职能模块完成多表的海量数据分页查询数据访问。在本实施例中,描述的数据查询流程包括两个方面:
一方面是第一次查询,也就是查询第一页数据;另一方面是非第一数据的翻页查询过程。值得说明的是,对于跳页翻页查询流程在本实例中不做说明。
首先,结合上述职能模块的描述,在本实施例中将详细描述如何实现第一页数据查询,且在本实施例中,为了便于描述,以数据库定义模块定义了n张表存储数据,且要查询的每页数据大小为20条记录为例进行说明。如图3-1所示,这一查询流程包括:
301、通过分页查询管理模块接收用户输入的查询条件,并根据该查询条件构建多表数据查询对象,并发起对第一页数据的查询。
302、多表查询管理模块分别初始化单表查询对象。
值得说明的是,单表查询对象与存储表一一对应,则在本实施例中包含n个单表查询对象,且在单表查询对象创建后,异步调用单表查询对象进行第一次数据查询,查询数据量为每页记录数的两倍即40条。
303、多表查询管理模块将初始化的单表查询对象告知单表查询管理模块,并通过单表查询管理模块启动第一页数据的查询。
304、单表查询管理模块向数据库定义模块提交查询请求。
其中,该查询请求中包括通过步骤201得到的查询条件、以及本次查询数据的数量,结合上述描述,本实施例以查询第一页数据为例描述,则在本实施例中首次查询只包含数据库中的前40条数据,进一步的数据库返回查询结果后执行下述步骤305。
305、单表数据缓存模块缓存查询得到的数据。
值得说明的是,重复执行上述步骤304、305,直到所有的单表查询任务结束后,此时获取所有缓存的数据,结合上述描述,获取到的缓存数据量为40*n条记录,进而执行下述步骤306。
306、多表查询管理模块从缓存数据中获取预设数据量的数据。
结合本实施例的前述描述,本实施例执行第一页数据的查询,则其中预设数据量的数据指第一页数据的数据量,且结合上述的实例描述,指从这40*n条数据中查询到合乎规则的20条数据。
值得说明的是,在该缓存数据中查询获取预设数量的数据过程中,其查询方式是根据排序的数据,通过比较大小的方式得出,比如可以按数据的某一属性的升序或者降序排列,则此时通过比较这一属性所对应的参数的大小得出最终的排序数据。进一步的在获取到满足条件的数据之后,并从缓存中删除这20条数据。并返回20条数据作为第一页的数据,当前查询第一页的数据将在后面做详细的描述。
在多表数据查询管理模块从缓存数据中查找获取满足条件的数据时,如图3-2所示,具体包括如下执行步骤:
a、从每一个单表的缓存中获取第一类数据。
其中,第一类数据为从每个单表缓存的40个数据中获取一条数据记录,而对于该条数据记录在该存储表中的位置,本实施例不做限定。比如,该第一类数据为按照用户的查询请求,对数据进行排列后排在首位的数据,再从每个表中获取到与该表对应的第一类数据后,在本实施例中,最终会获取到n条数据组成该第一类数据。
b、将a中获取到的n条数据按预设排序规则进行排序,获取到第一数据。
结合对步骤a的描述,在该步骤b的执行过程中,即对n条数据按照一定规则进行排序,进而从这n条数据中获取一个数据,即为第一数据。
值得说明的是,本实施例中对该n条数据的排序规则不做限定,比如,可以是按照该n条数据的某一属性的升序或者降序排列等。
c、在第一数据的存储表中将该第一数据删除。
d、在第一数据所在存储表中再次读取下一条数据。
值得说明的书,该获取下一条数据的获取规则与上述步骤a中获取第一类数据的获取规则相同,即在该表中再次获取出属于第一类条数据之外的其余数据中的一条。
e、按照上述b的获取第一数据方式获取第二数据。
在该步骤c的具体实现过程中,即将通过步骤d获取的下一条数据,以及通过步骤a获取到的除第一数据之外的其余(n-1)条数据,共同组成新的n条数据,可看作为第二类数据,进而从该新的n条数据中按照上述获取第一数据的方式,再获取第二数据。
f、按照步骤c的执行方式,在第二数据删除对应的单表缓存中的这一条数据。
值得结合上述通过步骤b-f所得到的数据,已记录得到2条数据,在请求查询第一页数据时,该两条数据用于组成该第一页数据。
g、按照上述步骤d的执行方式,再从第二数据所在表中再次读取下一条数据。
结合上述步骤的描述,在后续执行过程中重复上述步骤b-g,直到最后获取到请求第一页数据请求获取的数据量,比如记录满20条数据后返回该第一页数据。
值得说明的是,在执行上述步骤306的过程中,在从单表缓存数据中获取数据时,会存在检测到的单表缓存数据不足第一页数据量的情况,比如当第一页数据量为20条数据时,即20条是每页的显示数据,为了保证每次读取下一页的数据都可以从缓存中读取,则单表缓存数据不能少于20条,而当少于20条数据时,就需要重新启动查询任务,从数据库查询并缓存后面的20条数据,使得单表数据缓存能够达到40条。但是,如果数据库已经查询完成所有数据,将不在启动当前单表的查询任务。
在本发明实施例的一种实现方式中还提供了查询下一页数据的执行流程,器具体查询流程与查询第一页数据类似,但是在查询除第一页数据之外的下一页数据时,可以直接从缓存中读取数据,从而能够加快数据的读取速度,提高用户体验。在本实现方式中,仍然以每页数据包含20条记录为例进行说明。
如图4所示,该下一页数据的查询流程包括:
401、通过分页查询管理器向多表查询管理器中查询下一页的数据。
在查询下一页数据时,通过执行上述401,得出20条数据,组织成数据列表返回,同时启动单表缓存检测,即执行下述402。
402、循环检测每个单表的缓存数据。
值得说明的是,如果缓存数据不足20条时重新从数据库中获取数据,即执行下述步骤403。
403、从数据库查询并缓存已获取数据后面的20条数据。
在执行上述403过程中,当数据库已经查询完成所有数据,将不在启动当前单表的查询任务。
本发明另一实施例提供了一种数据查询装置,该装置用于实现多表存储数据的分页查询,如图5所示,该装置包括:获取单元51、单表缓存单元52。
获取单元51,用于根据用户输入的查询请求,从单表缓存单元52存储的数据中获取第一类数据。
单表缓存单元52,用于保存存储表中的数据。
其中,第一类数据包含的数据个数与存储表的个数相同,且第一类数据中的每一条数据对应一个存储表。
获取单元51,还用于按照预设排序规则从第一类数据中获取第一数据。
其中,预设排序规则用于对第一类数据进行排序,第一数据为满足查询请求和预设排序规则的最优数据。
在该查询装置的一种可选构成方式中,如图6所示,获取单元51包括:第一获取子单元511、第二获取子单元512;该装置还包括:存储表创建单元53、数据存储单元54、删除单元55。
第一获取子单元511,用于根据查询请求,按照预设排序规则从每个存储表中获取预设数量数据。
其中预设数量数据通过单表缓存单元52存储。
第二获取子单元512,用于按照预设排序规则从第一获取子单元511获取的数据中获取一个第一类子数据。
其中,预设排序规则用于对存储表和单表缓存单元52存储中的数据进行排序。
值得说明的是,所有第一类子数据组成第一类数据。
存储表创建单元53,用于在获取单元51获取第一类数据之前,创建存储表。
其中,创建的存储表的个数至少为2个。
数据存储单元54,用于将数据库中待缓存数据存储到存储表创建单元53创建的存储表中。
在本实施例中,每个存储表中存储的数据量大于查询请求中请求查询的数据量。
删除单元55,用于在获取单元52获取到第一类数据之后,在第一数据对应的单表缓存单元52中将第一数据删除。
获取单元51,还用于从第一数据对应的单表缓存单元52中获取一个第二类子数据,还用于按照预设排序规则,从第二类数据中获取第二数据。
其中,第二类子数据,与除第一数据之外的第一类数据中其余第一类子数据组成第二类数据,第二数据为在第二类数据中满足查询请求和预设排序规则的最优数据。
获取单元51,还用于当单表缓存单元52存储的数据的数据量,小于查询请求中请求查询的数据量时,从数据库中获取新的待缓存数据,以使得单表缓存单元52存储的数据的数据量,大于查询请求中请求查询的数据量。
本实施例中的如图5、6所示的装置,用于实现上述如图1至图4所示的方法流程。
本发明实施例提供了一种数据查询装置,该装置用于实现多表存储数据的分页查询,首先获取单元根据用户输入的查询请求,从单表缓存单元存储的数据中获取第一类数据,进而按照预设排序规则从第一类数据中获取第一数据,其中,第一类数据包括的数据个数与存储表的个数相同,且第一类数据中的每一条数据与一个存储表对应。通过每一个存储表中获取一个数据,这些数据组成第一类数据,进而从该第一类数据中获取一个第一数据,与现有技术中,只能按照时间分区来查询数据相比,本发明实施例不仅扩大了数据查询的适用范围,在对通过多表存储的数据进行查询时,提高了数据查询效率。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。