CN112182040A - 数据查询方法、装置、设备和存储介质 - Google Patents
数据查询方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN112182040A CN112182040A CN202011063233.8A CN202011063233A CN112182040A CN 112182040 A CN112182040 A CN 112182040A CN 202011063233 A CN202011063233 A CN 202011063233A CN 112182040 A CN112182040 A CN 112182040A
- Authority
- CN
- China
- Prior art keywords
- query
- page
- data
- identifier
- row
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000004590 computer program Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 abstract description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000004806 packaging method and process Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种数据查询方法、装置、设备和存储介质。该方法包括:获取目标查询指令;根据所述目标查询指令、预设行数N和查询参数,获取M行数据,所述M小于或等于N+1,所述M和所述N分别为大于或等于零的整数;查询参数包括:上一页中首行数据的第一标识、下一页中首行数据的第二标识,以及至少一个查询页分别与各自的下一页的对应关系;根据所述目标查询指令和所述M行数据,更新所述查询参数。本申请实施例分页查询效率较高,支持上一页,下一页和跳页的翻页查询,提高查询响应速度。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据查询方法、装置、设备和存储介质。
背景技术
Hbase是一个分布式的、面向列的非关系型开源数据库,HBase以表的形式存储数据,表由行和列组成,列划分为若干个列族(Column family)。Hbase 存储ROWKEY-value键值对。ROWKEY是用来检索Hbase的主键,ROWKEY 可以是任意字符串。存储时,数据按照ROWKEY的字典序(byte order)排序存储。
相关技术中,查询Hbase的数据,可以通过单个ROWKEY或设置 ROWKEY的范围进行查询,对于查询到的海量数据来说,将海量数据返回给用户展示的耗时较长,导致查询响应速度较慢。
发明内容
本申请提供一种数据查询方法、装置、设备和存储介质,以实现分页查询,提高查询响应速度。
第一方面,本申请提供一种数据查询方法,包括:
获取目标查询指令;
根据所述目标查询指令、预设行数N和查询参数,获取M行数据,其中,所述M小于或等于N+1,所述M和所述N分别为大于或等于零的整数;所述查询参数包括:上一页中首行数据的第一标识、下一页中首行数据的第二标识,以及至少一个查询页分别与各自的下一页的对应关系;
根据所述目标查询指令和所述M行数据,更新所述查询参数。
第二方面,本申请提供一种数据查询装置,包括:
获取模块,用于获取目标查询指令;
所述获取模块,还用于根据所述目标查询指令、预设行数N和查询参数,获取M行数据,其中,所述M小于或等于N+1,所述M和所述N分别为大于或等于零的整数;所述查询参数包括:上一页中首行数据的第一标识、下一页中首行数据的第二标识,以及至少一个查询页分别与各自的下一页的对应关系;
处理模块,用于根据所述目标查询指令和所述M行数据,更新所述查询参数。
第三方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面中任一项所述的方法。
第四方面,本申请实施例提供一种电子设备,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行第一方面中任一项所述的方法。
本申请实施例提供的数据查询方法、装置、设备和存储介质,根据目标查询指令、预设行数N和查询参数,获取M行数据,M小于或等于N+1,N 即每一次查询页的行数,每一次查询指令返回M行数据,查询参数包括:上一页中首行数据的第一标识、下一页中首行数据的第二标识,以及至少一个查询页分别与各自的下一页的对应关系,分页查询效率较高,对于海量数据来说,可以提高查询响应速度,根据目标查询指令和M行数据,更新查询参数,以支持翻页查询功能。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本申请实施例提供的***架构示意图;
图2为本申请实施例提供的Hbase查询示意图;
图3是本申请提供的数据查询方法一实施例的流程示意图;
图4是本申请提供的数据查询方法另一实施例的流程示意图;
图5是本申请提供的数据查询装置一实施例的结构示意图;
图6是本申请提供的电子设备实施例的结构示意图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本申请的说明书和权利要求书及所述附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,对本申请实施例涉及的部分词汇和应用场景进行介绍。
分页查询:是一种将查询的所有数据分段展示给用户的技术。用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自己想要的内容,用户可以通过指定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止。
ROWKEY:与传统关系型数据库中的主键类似,在HBase数据库中作为行的唯一索引。
图1为本申请实施例提供的***架构示意图。如图1所示,本申请实施例的***架构中可以包括但不限于:电子设备11和服务器12。电子设备例如为Hbase客户端设备。
其中,电子设备11和服务器12之间可以通过网络连接。
其中,服务器可以是一个或多个,也可以多个服务器组成的分布式集群***。
Hbase依赖分布式***架构hadoop。Hbase集群***一般包含了hadoop,ZooKeeper和Hbase等相关进程。Hadoop负责底层存储,而zookeeper作为服务协调者,负责管理hbase中相应的元数据信息,而Hbase是作为服务的读写媒介和数据解析。如图2所示为典型的Hbase数据库查询流程图,新读写一般包含3次远程过程调用协议(RemoteProcedure Call Protocol,RPC) 请求,先根据table,get、scan请求ZooKeeper查找meta表所在的HRegion服务器地址信息,并将相应的地址信息缓存起来,再次根据上一步查找的meta 表所在的Region服务器地址信息到相应的服务器上读取相应的meta表信息,并缓存在本地,最后通过meta表信息、请求参数ROWKEY定位到所要查询数据的Region服务器地址,并发送RPC请求在Region服务器进行数据读取,并返回结果。至此完成一次读写操作。
Hbase数据库一般是通过ROWKEY或者startrow和endrow,再结合一定的过滤器进行大量的读操作。对于startrow和endrow跨度比较大,查询的数据非常大的情况下(比如金融行业的交易明细),则存在性能瓶颈,严重情况下会引起宕机等风险。
发明人在研究过程中发现:若通过将查询到的数据一次性全部读出后,在内存中进行分页返回,可以实现分页展示,但一方面影响设备的性能,且效率低下,而且如果查询的数据量较大时,也无法实现。
本申请实施例的方法,在Hbase数据库中引入分页查询,通过根据查询参数一次查询获取M行数据,分页查询效率较高,可以提高查询响应速度,可以通过每一页中首行数据的标识,区分出不同的查询页,查询完需要更新查询参数,以支持上下翻页、跳页等查询功能,实现了针对HBase 数据库的海量数据分页查询的方案。
需要说明的是,本申请实施例的查询方法不限于HBase数据库,针对其他数据库同样适用。
下面以具体的实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图3是本申请提供的数据查询方法一实施例的流程示意图。如图3所示,本实施例提供的方法,包括:
步骤101、获取目标查询指令。
具体的,在对Hbase数据库进行分页查询时,Hbase客户端设备向服务器发送目标查询指令,服务器获取到目标查询指令,根据该目标查询指令,查询数据。
其中,目标查询指令为如下任意一种:首次查询指令、上一页查询指令、下一页查询指令、跳页查询。
其中,若为首次查询指令,则目标查询指令还可以指示查询数据的范围、每一页的预设行数N,如STARTROW和ENDROW。
若为上一页查询指令、下一页查询指令或跳页查询,则目标查询指令还可以指示查询页的标识。
步骤102、根据目标查询指令、预设行数N和查询参数,获取M行数据, M小于或等于N+1,M和N分别为大于或等于零的整数;查询参数包括:上一页中首行数据的第一标识、下一页中首行数据的第二标识,以及至少一个查询页分别与各自的下一页的对应关系。
具体的,根据目标查询指令、预设行数N和查询参数,确定待查询的查询页,例如确定出待查询的当前查询页的标识,例如包括以下至少一项:查询页的页码、该查询页的起始行的标识(如起始行号、起始行的主键ROWKEY 等)。
从该查询页的起始行开始获取M行数据,M的范围为0-N+1。
预设行数N可以是预先设置的每一页的行数,预设行数也可以是目标查询指令中指示的。
其中,查询参数是为了分页查询时查找当前查询页的起始行的标识,特别是翻页设置的,例如上一页、下一页、跳页查询。
在一实施例中,查询参数包括如下参数中的至少一种:
上一页的标识,如上一页中首行数据的第一标识;
下一页的标识,如下一页中首行数据的第二标识;
至少一个查询页分别与各自的下一页的对应关系。
其中,查询参数中可以设置当前查询页与下一页之间的关联关系,即相邻两页的首行数据之间的对应关系。在一实施例中,对于任意查询页,对应关系包括:查询页的标识,以及所述查询页的下一页的标识的对应关系,例如通过该当前查询页的下一页中首行数据的第二标识,与当前查询页中首行数据的标识的对应关系体现。
在一实施例中,多个查询页的对应关系可以形成对应关系集合,还可以以表格的形式存储。
通过该查询参数中的对应关系可以确定出相邻两页中上一页和下一页的首行数据在哪,例如表1所示。
表1
表1中,例如查询页的预设行数为20。
在其他实施例中,上一页的标识、下一页的标识,也可以采用其他标识,本申请实施例对此并不限定。
在其他实施例中,对应关系例如还可以通过查询页中末行数据的标识,以及所述查询页的下一页中末行数据的标识的对应关系体现,本申请实施例对此并不限定。
例如,目标查询指令为首次查询,查询参数的值为空,从该查询页的起始行(即设置的STARTROW)开始获取M行数据,M的范围为0-N+1。
目标查询指令为下一页查询,查询参数的值不为空,根据该查询参数可以确定该查询页的起始行例如为21行,从21行开始获取M行数据。
目标查询指令为上一页查询,查询参数的值不为空,根据该查询参数可以确定该查询页的起始行例如为1行,从1行开始获取M行数据。
目标查询指令为跳页查询,查询参数的值不为空,例如查询页为第3页,根据该查询参数可以确定该查询页的起始行例如为61行,从61行开始获取 M行数据。
可选的,还可以对获取到的数据进行显示,若M为N+1,则显示M行数据中的前N行数据,若M小于N+1,则显示M行数据。
步骤103、根据目标查询指令和M行数据,更新查询参数。
具体的,假设M行数据为N+1行数据,则多出来的最后一行即为下一页的首行数据,更新下一页中首行数据的第二标识,即第二标识为M行数据中的最后一行数据的标识,否则若M小于N+1则说明没有下一页数据了,则下一页中首行数据的标识为空。
将该查询页的下一页,与,该查询页建立对应关系,例如将该查询页的下一页中首行数据的第二标识,与,该查询页中首行数据的标识(即M行中第一行数据的标识)建立对应关系,更新该查询页的对应关系。
根据该查询页中首行数据的标识,在对应关系中查找对应的上一页中首行数据的第一标识。
示例性的,若目标查询指令为首次查询指令,首次查询指令还指示了 STARTROW和ENDROW,其中,STARTROW和ENDROW表示ROWKEY 字典序的范围,从STARTROW开始获取M行数据,M的范围为0-N+1,N 例如为20。
若M小于N+1,则说明没有下一页数据;
若M等于N+1,则将M行数据中最后一行的标识(如主键ROWKEY) 作为下一页中首行数据的第二标识NEXT_PAGE_START_ROWKEY。
首次查询没有上一页,则上一页中首行数据的第一标识 PRE_PAGE_START_ROWKEY为空,即第一标识为空。
设置对应关系:当前查询页中下一页中首行数据的第二标识,与当前查询页中首行数据的标识,即M行数据中第一行的标识的对应关系。
表2
若目标查询指令为下一页查询指令,前一次的返回结果包含了 PRE_PAGE_START_ROWKEY、NEXT_PAGE_START_ROWKEY和 CURSOR_ROWKEY(第1行数据的标识),假设 PRE_PAGE_START_ROWKEY为空,NEXT_PAGE_START_ROWKEY为M 行数据中最后一行数据的标识,例如第21行数据的ROWKEY,将当前查询页的起始行的标识CURSOR_ROWKEY设置为 NEXT_PAGE_START_ROWKEY。
此次查询页的起始行号为CURSOR_ROWKEY对应的行号,即 NEXT_PAGE_START_ROWKEY对应的行号。
从起始行号21行开始获取M行数据,例如获取第21-41行数据。
若M小于N+1,则说明没有下一页数据;
若M等于N+1,则将M行数据中最后一行的标识(ROWKEY)作为下一页中首行数据的第二标识。
根据当前查询页中首行数据的标识,查询存储的对应关系,获取该查询页的上一页中首行数据的第一标识;
例如,当前查询页中首行数据的标识为第21行数据的标识,查询表2,得到上一页中首行数据的标识为第1行数据的标识。
生成新的对应关系,该查询页中下一页中首行数据的标识(即第41行数据的标识),与该查询页中首行数据的标识(即第21行数据的标识)的对应关系,保存到表格中,得到如下表3:
表3
若目标查询指令为上一页查询指令,前一次的返回结果包含了 PRE_PAGE_START_ROWKEY、NEXT_PAGE_START_ROWKEY和 CURSOR_ROWKEY(第21行数据的标识),假设 PRE_PAGE_START_ROWKEY为第1行数据的标识, NEXT_PAGE_START_ROWKEY为M行数据中最后一行数据的标识,例如第41行数据的ROWKEY,将CURSOR_ROWKEY设置为 PRE_PAGE_START_ROWKEY。
此次查询页的起始行号为PRE_PAGE_START_ROWKEY对应的行号,第1行。
从起始行号开始获取M行数据,例如获取第1-21行数据。
若M小于N+1,则说明没有下一页数据;
若M等于N+1,则将M行数据中最后一行的标识(ROWKEY)作为下一页中首行数据的第二标识。如将第21行的标识作为下一页中首行数据的第二标识。
根据当前查询页中首行数据的标识,查询存储的对应关系集合,即将当前查询页作为下一页,查找该下一页的上一页的标识,获取该查询页的上一页中首行数据的第一标识;
例如,当前查询页中首行数据的标识为第1行数据的标识,查询对应关系,得到上一页中首行数据的第一标识为空。
生成新的对应关系,该查询页中下一页中首行数据的第二标识(即第21 行数据的标识),与该查询页中首行数据的标识(即第1行数据的标识),更新表3,此时表3中数据不变。
其中,根据上述表2-表3可以查询到:查询页与当前查询页的首行数据的标识的对应关系,例如第2页的首行数据的标识为第21行数据的标识。
本实施例的方法,根据目标查询指令、预设行数N和查询参数,获取M 行数据,M小于或等于N+1,N即每一次查询页的行数,每一次查询指令返回M行数据,查询参数包括:上一页中首行数据的第一标识、下一页中首行数据的第二标识,以及至少一个查询页分别与各自的下一页的对应关系,分页查询效率较高,对于海量数据来说,可以提高查询响应速度,根据目标查询指令和M行数据,更新查询参数,以支持翻页查询功能。
在一实施例中,对应关系通过键值对表示,所述键值对的键为:所述查询页中下一页中首行数据的第二标识,所述键值对的值为:所述查询页中首行数据的标识。
其中,键值对可以以表格的形式存储,例如存储在查询表格中。
表4
若M为N+1,对查询参数的键值对更新时,将该查询页中下一页中首行数据的第二标识(即M行中最后一行数据的标识),与,该查询页中首行数据的标识(即M行中第一行数据的标识)建立对应关系,即作为一个键值对,对查询表格中该查询页对应的键值对进行更新。
根据该查询页中首行数据的标识,在查询表格中查找对应的上一页中首行数据的标识;即将该查询页中首行数据的标识作为键值对的键,去查询键值对的值,作为上一页中首行数据的第一标识。
示例性的,若目标查询指令为首次查询指令,首次查询指令还指示了 STARTROW和ENDROW,其中,STARTROW和ENDROW表示ROWKEY 字典序的范围,从STARTROW开始获取M行数据,M的范围为0-N+1,N 例如为20。
若M小于N+1,则说明没有下一页数据;
若M等于N+1,则将M行数据中最后一行的标识(如主键ROWKEY) 作为下一页中首行数据的第二标识NEXT_PAGE_START_ROWKEY。
首次查询没有上一页,则上一页中首行数据的第一标识 PRE_PAGE_START_ROWKEY为空。
设置键值对:该键值对的键为:当前查询页中下一页中首行数据的第二标识,该键值对的值为:当前查询页中首行数据的标识,即M行数据中第一行的标识。
表5
若目标查询指令为下一页查询指令,前一次的返回结果包含了 PRE_PAGE_START_ROWKEY、NEXT_PAGE_START_ROWKEY和 CURSOR_ROWKEY(第1行数据的标识),假设 PRE_PAGE_START_ROWKEY为空,NEXT_PAGE_START_ROWKEY为M 行数据中最后一行数据的标识,例如第21行数据的ROWKEY,将当前查询页的起始行的标识CURSOR_ROWKEY设置为 NEXT_PAGE_START_ROWKEY。
此次查询页的起始行号为CURSOR_ROWKEY对应的行号,即 NEXT_PAGE_START_ROWKEY对应的行号。
从起始行号21行开始获取M行数据,例如获取第21-41行数据。
若M小于N+1,则说明没有下一页数据;
若M等于N+1,则将M行数据中最后一行的标识(ROWKEY)作为下一页中首行数据的第二标识。
根据当前查询页中首行数据的标识,查询存储的键值对,获取该查询页的上一页中首行数据的第一标识;
例如,当前查询页中首行数据的标识为第21行数据的标识,查询表5,得到上一页中首行数据的第一标识为第1行数据的标识。
生成新的键值对,该键值对的键为:该查询页中下一页中首行数据的第二标识(即第41行数据的标识),该键值对的值为:该查询页中首行数据的标识(即第21行数据的标识),保存到表格中,得到如下表6:
表6
若目标查询指令为上一页查询指令,前一次的返回结果包含了 PRE_PAGE_START_ROWKEY、NEXT_PAGE_START_ROWKEY和 CURSOR_ROWKEY(第21行数据的标识),假设 PRE_PAGE_START_ROWKEY为第1行数据的标识,NEXT_PAGE_START_ROWKEY为M行数据中最后一行数据的标识,例如第41行数据的ROWKEY,将CURSOR_ROWKEY设置为 PRE_PAGE_START_ROWKEY。
此次查询页的起始行号为PRE_PAGE_START_ROWKEY对应的行号,第1行。
从起始行号开始获取M行数据,例如获取第1-21行数据。
若M小于N+1,则说明没有下一页数据;
若M等于N+1,则将M行数据中最后一行的标识(ROWKEY)作为下一页中首行数据的第二标识。如将第21行的标识作为下一页中首行数据的第二标识。
根据当前查询页中首行数据的标识,即以当前查询页中首行数据的标识作为键,查询存储的键值对,获取该查询页的上一页中首行数据的第一标识;
例如,当前查询页中首行数据的标识为第1行数据的标识,查询键值对表格,得到上一页中首行数据的第一标识为空。
生成新的键值对,该键值对的键为:该查询页中下一页中首行数据的标识(即第21行数据的标识),该键值对的值为:该查询页中首行数据的标识(即第1行数据的标识),更新表6,此时表6中数据不变。
在一实施例中,步骤102可以通过如下方式实现:
根据所述目标查询指令和所述查询参数,确定起始行的标识;
根据所述起始行的标识和所述预设行数N,获取所述M行数据。
具体的,获取M行数据时,首先需确定该当前查询页的起始行的位置,即确定起始行的标识,如起始行号或起始行的主键ROWKEY。
例如,目标查询指令为首次查询指令,则根据该目标查询指令指示的 STARTROW,确定起始行。
在一实施例中,若目标查询指令为上一页查询指令、下一页查询指令或跳页查询指令,则可以通过以下方式确定起始行的标识:
根据目标查询指令,在查询参数中确定目标参数;
将目标参数确定为起始行的标识。
具体的,根据目标查询指令,在查询参数包括的至少一种参数中确定目标参数:
上一页中首行数据的第一标识;
下一页中首行数据的第二标识;
至少一个查询页对应的键值对,一个键值对对应一个查询页,一个键值对的键为:该键值对对应的查询页中下一页中首行数据的第二标识,一个键值对的值为:该键值对对应的查询页中首行数据的标识。
若目标查询指令为上一页查询指令,则当前查询页的起始行是上一页中的首行数据,即确定目标参数为第一标识,将第一标识作为起始行的标识,找到起始行;
若目标查询指令为下一页查询指令,则当前查询页的起始行是下一页中的首行数据,即确定目标参数为第二标识,将第二标识作为起始行的标识,找到起始行;
若目标查询指令为跳页查询指令,则根据跳页查询指令确定当前查询页的标识,例如当前查询页的页码,根据该当前查询页的页码在查询表格中查找当前查询页中首行数据的标识,即目标参数为当前查询页中首行数据的标识,根据该首行数据的标识找到起始行。
例如,若目标查询指令为上一页查询指令,前一次查询的是第2页,则上一页为第1页,当前查询页1的起始行是上一次查询返回的上一页中的首行数据,即第1行,目标参数为第1行的标识,当前查询页的起始行是第1 行。
若目标查询指令为下一页查询指令,前一次查询的是第2页,则下一页为第3页,当前查询页3的起始行是上一次查询返回的下一页中的首行数据,即第61行,目标参数为第61行的标识,当前查询页的起始行是第61行;
若目标查询指令为跳页查询指令,则根据跳页查询指令确定当前查询页的标识,例如当前查询页的页码为2,根据该当前查询页的页码在查询表格 (表7)中查找当前查询页中首行数据的标识为第21行数据的标识,即目标参数为第21行数据的标识,当前查询页的起始行是第21行。
表7
进一步,从起始行开始,查询预设行数N+1行数据。
上述实施方式中,根据目标查询指令和查询参数,确定起始行的标识,获取M行数据,M小于或等于N+1,N为预设行数,即每一次查询页的行数,每一次查询指令返回M行数据,通过每一页中首行数据的标识,区分出不同的查询页,分页查询效率较高,对于海量数据来说,可以提高查询响应速度,根据目标查询指令和M行数据,更新查询参数,以支持上下翻页、跳页查询功能。
在一实施例中,更新查询参数,具体可以通过如下方式实现:
根据M行数据,更新对应关系;
根据M的大小和M行数据中最后一行数据的标识,更新第二标识;
以M行数据中第一行数据的标识为键,在对应关系中查询目标值,将第一标识更新为目标值。
其中,若M等于N+1,则将第二标识更新为M行数据中最后一行数据的标识;或者,
若M小于N+1,则将第二标识更新为空。
在一实施例中,更新对应关系集合,即更新查询表格中查询页对应的键值对。
具体的,假设M行数据为N+1行数据,则多出来的最后一行即为下一页的首行数据,更新下一页中首行数据的标识,即第二标识为M行数据中的最后一行数据的标识,否则若M小于N+1则说明没有下一页数据了,则下一页中首行数据的标识为空。例如,表7所示,假设当前查询页为第2页,则获取到第21行-41行数据,更新下一页中首行数据的标识为第41行数据的标识。
将该查询页中下一页中首行数据的第二标识,与,该查询页中首行数据的标识(即M行中第一行数据的标识)建立对应关系,即作为一个键值对,对查询表格中该查询页对应的键值对进行更新。例如,假设当前查询页为第 2页,将下一页中首行数据的第二标识为第41行数据的标识作为键值对的键,将当前查询页中首行数据的标识,第21行数据的标识作为该键值对的值,更新查询表格。
根据该查询页中首行数据的标识,在查询表格中查找对应的上一页中首行数据的标识;即将该查询页中首行数据的标识作为键值对的键,去查询键值对的值,作为上一页中首行数据的第一标识,假设当前查询页为第2页,则获取到第21行-41行数据,以当前查询页中首行数据的标识,第21行数据的标识为键,在查询表格中查找对应的目标值,例如为第1行数据的标识,作为第一标识。
上述实施方式中,根据目标查询指令和M行数据,更新查询参数,通过每一页中首行数据的标识,区分出不同的查询页,分页查询效率较高,而且根据查询参数包括的相邻页的首行数据的标识之间的对应关系,上一页中首行数据的第一标识以及下一页中首行数据的第二标识,能够支持上下翻页、跳页查询功能,对于海量数据来说,可以提高查询响应速度。
在一实施例中,如下表8所示,目标查询指令还可以包括查询会话的标识SERACH_ID,例如,本次查询会话要查询startrow-endrow(如1-4000) 行数据,进行分页查询,设置pagesize,即N为20,进行分页查询时,每一页查询指令的查询会话的标识SERACH_ID都相同。
其中,查询表格中,键值对的键可以根据该查询会话的标识和当前查询页中下一页中首行数据的第二标识得到。
通过该查询会话的标识可以实现查询会话保持功能。
目标查询指令还可以包括:分页游标CURSOR_ROWKEY,即每一个查询页的起始行的标识。
表8
如下表9所示,每一次查询返回的输出参数包括:上一页中首行数据的第一标识PRE_PAGE_START_ROWKEY、下一页中首行数据的第二标识 NEXT_PAGE_START_ROWKEY和分页游标CURSOR_ROWKEY。
对于如果要翻上一页查询:设置CURSOR_ROWKEY=上一次返回的 PRE_PAGE_START_ROWKEY;
下一页查询:设置CURSOR_ROWKEY=上一次返回的 NEXT_PAGE_START_ROWKEY。
表9输出参数
在一实施例中,如图4所示,对于首次查询来说:
入参数:由于为首次查询,输入参数SERACH_ID可以为空, CURSOR_ROWKEY也为空,但是查询范围的STARTROW和ENDROW 保持正常设置即可。
1.首先判断当前的CURSOR_ROWKEY是否为空,为空则继续,否则将CURSOR_ROWKEY设置为STARTROW。
2.根据设置的pagesize(即预设行数N)将查询的返回行数设置为 pagesize+1,是为了取得下一页的ROWKEY(即 NEXT_PAGE_START_ROWKEY)。
3.根据步骤2,查询该页的数据,并统计返回的总行数M。
4.判断当次步骤3请求返回的总行数M是否大于请求参数的pagesize,如果大于,则意味着后续还有数据,否则当次请求查询后,没有后续数据,可直接封装结果返回。
5.若步骤4判断当次请求有后续步骤,则设置当次请求返回参数 NEXT_PAGE_START_ROWKEY为步骤3查询数据的最后一行数据的标识,在返回结果中移除该最后一行数据。该最后一行数据仅仅是为了方便统计是否有后续数据。
6.再次判断输入参数中的CURSOR_ROWKEY是否为空,由于是首次查询,所以进入首次查询的分支。
7.再次判断NEXT_PAGE_START_ROWKEY是否为空,由于第5步骤如果有后续数据,则设置了NEXT_PAGE_START_ROWKEY为最后一行数据的标识,所以NEXT_PAGE_START_ROWKEY不为空,直接进入步骤8。
8.因为是首次查询,故要生成相应的第一次的SEARCH_ID,并将此次请求返回的PRE_PAGE_START_ROWKEY设置空(因为是首次,所以没有上一页),将SEARCH_ID|NEXT_PAGE_START_ROWKEY作为 ROWKEY,列PRE_PAGE_START_ROWKEY值为:当前页的首行数据的标识,写入到查询表格search_page_info表中,search_page_info表是为了下一次进行查询时,可以查询上一页的首行数据的ROWKEY做准备。
9.结合第5步骤和第8步骤,返回相应的参数 PRE_PAGE_START_ROWKEY为空、NEXT_PAGE_START_ROWKEY和 CURSOR_ROWKEY,此次请求返回的CURSOR_ROWKEY可以是当前查询页的首行数据的标识,第1页中第1行数据的标识。
对于上一页查询来说:
入参数:由于是非首次查询,所以上一次的返回结果包含了 PRE_PAGE_START_ROWKEY、NEXT_PAGE_START_ROWKEY和 CURSOR_ROWKEY,由于本次是上一页查询所以将此次请求的 CURSOR_ROWKEY设置为PRE_PAGE_START_ROWKEY,但是查询范围的 STARTROW和ENDROW保持正常设置即可。
1.判断CURSOR_ROWKEY是否为空,由于此次查询 CURSOR_ROWKEY非空,所以设置该查询页的起始行 STARTROW=CURSOR_ROWKEY。
2.根据设置的pagesize将查询的返回行数设置为pagesize+1,是为了取得下一页的ROWKEY(NEXT_PAGE_START_ROWKEY)。
3.根据步骤2,查询该上一页的数据,并统计返回的总行数M。
4.判断步骤3请求返回的总行数M是否大于请求参数的pagesize,如果大于,则意味着后续还有数据,否则当次请求查询后,没有后续数据,可直接封装结果返回。
5.若步骤4判断当次请求有后续步骤,则设置当次请求返回参数 NEXT_PAGE_START_ROWKEY为步骤3查询数据的最后一行数据的标识,并在返回结果中移除该最后一行数据。
6.再次判断输入参数中的CURSOR_ROWKEY是否为空,进入非首次查询分支。
7.再次判断NEXT_PAGE_START_ROWKEY是否为空,由于第5步骤如果有后续数据,则设置了NEXT_PAGE_START_ROWKEY,所以 NEXT_PAGE_START_ROWKEY不为空,直接进入步骤8。
8.因为是非首次查询,故根据SEARCH_ID|CURSOR_ROWKEY(即当前页的首行数据的标识)作为ROWKEY,查询search_page_info表得到目标值。
9.根据第8步骤判断目标值是否为空,如果非空,则到第10步骤;否则到第11步骤,此时返回PRE_PAGE_START_ROWKEY值为空。
10.将目标值赋值给当前请求返回的PRE_PAGE_START_ROWKEY值。
11.判断NEXT_PAGE_START_ROWKEY是否为空,为空,则直接返回。否则继续下一步骤12。
12.设置ROWKEY:SEARCH_ID|NEXT_PAGE_START_ROWKEY,;列列PRE_PAGE_START_ROWKEY值为:CURSOR_ROWKEY(即当前页的首行数据的标识),即将当前查询页中下一页中首行数据的标识,该当前查询页中首行数据的标识作为一个键值对写入search_page_info表,供下一次查询使用。
13.结合第5步骤和第10步骤,返回相应的参数 PRE_PAGE_START_ROWKEY、NEXT_PAGE_START_ROWKEY和游标 CURSOR_ROWKEY,此次请求返回的CURSOR_ROWKEY为当前查询页的第一行数据的标识。
对于下一页查询来说:
入参数:由于是非首次查询,所以上一次的返回结果包含了 PRE_PAGE_START_ROWKEY、NEXT_PAGE_START_ROWKEY和CURSOR_ROWKEY,所以将此次请求的CURSOR_ROWKEY设置为 NEXT_PAGE_START_ROWKEY,但是查询范围STARTROW和ENDROW 保持正常设置即可。由于上一页查询和下一页查询的逻辑一致,所以只需要在请求参数时,注意CURSOR_ROWKEY的赋值即可,其具体的流程步骤如下(同上一页查询):
1.判断CURSOR_ROWKEY是否为空,由于此次查询 CURSOR_ROWKEY非空,所以设置起始行 STARTROW=CURSOR_ROWKEY。
2.根据设置的pagesize将查询的返回行数设置为pagesize+1,是为了取得下一页的ROWKEY(NEXT_PAGE_START_ROWKEY)。
3.根据步骤2,查询当前页的数据,并统计返回的总行数M。
4.判断当次步骤3请求返回的总行数M是否大于请求参数的pagesize,如果大于,则意味着后续还有数据,否则当次请求查询后,没有后续数据,可直接封装结果返回。
5.若步骤4判断当次请求有后续步骤,则设置当次请求返回参数 NEXT_PAGE_START_ROWKEY为步骤3查询数据的最后一行数据的标识,并在返回结果中移除该最后一行数据。
6.再次判断输入参数中的CURSOR_ROWKEY是否为空,非空进入非首次查询分支。
7.再次判断NEXT_PAGE_START_ROWKEY是否为空,由于第5步骤如果有后续数据,则设置了NEXT_PAGE_START_ROWKEY,所以 NEXT_PAGE_START_ROWKEY不为空,直接进入步骤8.
8.因为是非首次查询,故根据SEARCH_ID|CURSOR_ROWKEY作为 ROWKEY,查询search_page_info得到目标值。
9.根据第8步骤判断目标值是否为空,如果非空,则到第10步骤,否则到第11步骤。
10.将目标值赋值给当前请求返回的 PRE_PAGE_START_ROWKEY值,即将目标值作为上一页中首行数据的标识。
11.判断NEXT_PAGE_START_ROWKEY是否为空,为空,则直接返回。否则继续下一步骤12。
12.设置ROWKEY:SEARCH_ID|NEXT_PAGE_START_ROWKEY,列PRE_PAGE_START_ROWKEY值为:CURSOR_ROWKEY,写入 search_page_info表,即将当前查询页中下一页中首行数据的标识,该当前查询页中首行数据的标识作为一个键值对写入search_page_info表,供下一次查询使用。
13.结合第5步骤和第10步骤,返回相应的参数 PRE_PAGE_START_ROWKEY、NEXT_PAGE_START_ROWKEY和 CURSOR_ROWKEY,此次请求返回的CURSOR_ROWKEY为当前查询页的第一行数据的标识。
对于跳页查询来说:可以从search_page_info表中查到该查询页对应的首行数据的ROWKEY(即CURSOR_ROWKEY)。如果需要跳页查询,则可直接将页码对应的首行数据的ROWKEY赋值给CURSOR_ROWKEY,进行查询即可。
本实施例中,在Hbase数据库中引入分页查询,通过一次查询获取M行数据,根据目标查询指令和M行数据,更新查询参数,通过每一页中首行数据的标识,区分出不同的查询页,分页查询效率较高,而且根据查询参数包括的相邻页的首行数据的标识之间的对应关系,上一页中首行数据的第一标识以及下一页中首行数据的第二标识,能够支持上下翻页、跳页查询功能,对于海量数据来说,可以提高查询响应速度。
图5为本申请提供的数据查询装置一实施例的结构图,如图5所示,本实施例的数据查询装置,包括:
获取模块110,用于获取目标查询指令;
所述获取模块110,还用于根据所述目标查询指令、预设行数N其中,和查询参数,获取M行数据,所述M小于或等于N+1,所述M和所述N分别为大于或等于零的整数;所述查询参数包括:上一页中首行数据的第一标识、下一页中首行数据的第二标识,以及至少一个查询页分别与各自的下一页的对应关系;
处理模块111,用于根据所述目标查询指令和所述M行数据,更新所述查询参数。
在一种可能的实现方式中,对于任一所述查询页,所述对应关系包括:所述查询页中首行数据的标识,以及所述查询页的下一页中首行数据的第二标识的对应关系。
在一种可能的实现方式中,所述对应关系通过键值对表示,所述键值对的键为:所述查询页中下一页中首行数据的第二标识,所述键值对的值为:所述查询页中首行数据的标识。
在一种可能的实现方式中,获取模块110具体用于:
根据所述目标查询指令和所述查询参数,确定起始行的标识;
根据所述起始行的标识和所述预设行数N,获取所述M行数据。
在一种可能的实现方式中,所述目标查询指令为上一页查询指令、下一页查询指令或跳页查询指令;获取模块110具体用于:
根据所述目标查询指令,在所述查询参数中确定目标参数;
将所述目标参数确定为起始行的标识。
在一种可能的实现方式中,获取模块110具体用于:
若所述目标查询指令的类型为上一页查询指令,所述目标参数为所述第一标识;或者,
若所述目标查询指令的类型为下一页查询指令,所述目标参数为所述第二标识;
若所述目标查询指令的类型为跳页查询指令,所述目标参数为所述查询页中首行数据的标识。
在一种可能的实现方式中,处理模块111,具体用于:
根据所述M行数据,更新所述对应关系;
根据所述M的大小和所述M行数据中最后一行数据的标识,更新所述第二标识;
以所述M行数据中第一行数据的标识为键,在所述对应关系中查询目标值,将所述第一标识更新为所述目标值。
在一种可能的实现方式中,处理模块111,具体用于:
若所述M等于所述N+1,则将所述第二标识更新为所述M行数据中最后一行数据的标识;或者,
若所述M小于所述N+1,则将所述第二标识更新为空。
本实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图6为本申请提供的电子设备实施例的结构图,如图6所示,该电子设备包括:
处理器210,以及,用于存储处理器210的可执行指令的存储器211。
可选的,还可以包括:通信接口212,用于实现与其他设备的通信。
上述部件可以通过一条或多条总线进行通信。
其中,处理器210配置为经由执行所述可执行指令来执行前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,此处不再赘述。
本申请实施例中还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,其实现原理和技术效果类似,此处不再赘述。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。
Claims (11)
1.一种数据查询方法,其特征在于,包括:
获取目标查询指令;
根据所述目标查询指令、预设行数N和查询参数,获取M行数据,其中,所述M小于或等于N+1,所述M和所述N分别为大于或等于零的整数;所述查询参数包括:上一页中首行数据的第一标识、下一页中首行数据的第二标识,以及至少一个查询页分别与各自的下一页的对应关系;
根据所述目标查询指令和所述M行数据,更新所述查询参数。
2.根据权利要求1所述的方法,其特征在于,
对于任一所述查询页,所述对应关系包括:所述查询页中首行数据的标识,以及所述查询页的下一页中首行数据的第二标识的对应关系。
3.根据权利要求2所述的方法,其特征在于,
所述对应关系通过键值对表示,所述键值对的键为:所述查询页中下一页中首行数据的第二标识,所述键值对的值为:所述查询页中首行数据的标识。
4.根据权利要求1-3任一项所述的方法,其特征在于,根据所述目标查询指令和查询参数,获取M行数据,包括:
根据所述目标查询指令和所述查询参数,确定起始行的标识;
根据所述起始行的标识和所述预设行数N,获取所述M行数据。
5.根据权利要求4所述的方法,其特征在于,所述目标查询指令为上一页查询指令、下一页查询指令或跳页查询指令;根据所述目标查询指令,确定起始行的标识,包括:
根据所述目标查询指令,在所述查询参数中确定目标参数;
将所述目标参数确定为起始行的标识。
6.根据权利要求5所述的方法,其特征在于,根据所述目标查询指令,在所述查询参数中确定目标参数,包括:
若所述目标查询指令的类型为上一页查询指令,所述目标参数为所述第一标识;或者,
若所述目标查询指令的类型为下一页查询指令,所述目标参数为所述第二标识;
若所述目标查询指令的类型为跳页查询指令,所述目标参数为所述查询页中首行数据的标识。
7.根据权利要求3所述的方法,其特征在于,根据所述目标查询指令和所述M行数据,更新所述查询参数,包括:
根据所述M行数据,更新所述对应关系;
根据所述M的大小和所述M行数据中最后一行数据的标识,更新所述第二标识;
以所述M行数据中第一行数据的标识为键,在所述对应关系中查询目标值,将所述第一标识更新为所述目标值。
8.根据权利要求7所述的方法,其特征在于,根据所述M的大小和所述M行数据中的后一行数据的标识,更新所述第二标识,包括:
若所述M等于所述N+1,则将所述第二标识更新为所述M行数据中最后一行数据的标识;或者,
若所述M小于所述N+1,则将所述第二标识更新为空。
9.一种数据查询装置,其特征在于,包括:
获取模块,用于获取目标查询指令;
所述获取模块,还用于根据所述目标查询指令、预设行数N和查询参数,获取M行数据,其中,所述M小于或等于N+1,所述M和所述N分别为大于或等于零的整数;所述查询参数包括:上一页中首行数据的第一标识、下一页中首行数据的第二标识,以及至少一个查询页分别与各自的下一页的对应关系;
处理模块,用于根据所述目标查询指令和所述M行数据,更新所述查询参数。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-8任一项所述的方法。
11.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011063233.8A CN112182040A (zh) | 2020-09-30 | 2020-09-30 | 数据查询方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011063233.8A CN112182040A (zh) | 2020-09-30 | 2020-09-30 | 数据查询方法、装置、设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112182040A true CN112182040A (zh) | 2021-01-05 |
Family
ID=73949286
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011063233.8A Pending CN112182040A (zh) | 2020-09-30 | 2020-09-30 | 数据查询方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112182040A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045932A (zh) * | 2015-09-02 | 2015-11-11 | 南京邮电大学 | 一种基于降序存储的数据分页查询方法 |
WO2017005094A1 (zh) * | 2015-07-03 | 2017-01-12 | 阿里巴巴集团控股有限公司 | 一种数据查询方法和装置 |
CN107943981A (zh) * | 2017-11-30 | 2018-04-20 | 努比亚技术有限公司 | HBase行分页方法、服务器及计算机可读存储介质 |
CN109299099A (zh) * | 2018-10-11 | 2019-02-01 | 瀚高基础软件股份有限公司 | 一种PostgreSQL数据库的数据闪回查询及恢复方法、装置 |
-
2020
- 2020-09-30 CN CN202011063233.8A patent/CN112182040A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017005094A1 (zh) * | 2015-07-03 | 2017-01-12 | 阿里巴巴集团控股有限公司 | 一种数据查询方法和装置 |
CN105045932A (zh) * | 2015-09-02 | 2015-11-11 | 南京邮电大学 | 一种基于降序存储的数据分页查询方法 |
CN107943981A (zh) * | 2017-11-30 | 2018-04-20 | 努比亚技术有限公司 | HBase行分页方法、服务器及计算机可读存储介质 |
CN109299099A (zh) * | 2018-10-11 | 2019-02-01 | 瀚高基础软件股份有限公司 | 一种PostgreSQL数据库的数据闪回查询及恢复方法、装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8185546B2 (en) | Enhanced control to users to populate a cache in a database system | |
KR101137147B1 (ko) | 질의 강제 인덱싱 | |
US20180239800A1 (en) | Data query method and apparatus | |
EP3767483A1 (en) | Method, device, system, and server for image retrieval, and storage medium | |
US8239337B2 (en) | Network device proximity data import based on weighting factor | |
CN110427386B (zh) | 数据处理方法、装置及计算机存储介质 | |
CN113568924B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN109815240B (zh) | 用于管理索引的方法、装置、设备和存储介质 | |
CN110597852A (zh) | 数据处理方法、装置、终端及存储介质 | |
CN105005567B (zh) | 兴趣点查询方法和*** | |
JP2002511169A (ja) | データベース照会システムおよび方法 | |
CN111723161A (zh) | 一种数据处理方法、装置及设备 | |
CN110737747A (zh) | 一种数据操作方法、装置及*** | |
CN111737564A (zh) | 一种信息查询方法、装置、设备及介质 | |
US7925617B2 (en) | Efficiency in processing queries directed to static data sets | |
CN111522850A (zh) | 一种数据对象的存储和查询方法、装置、设备和存储介质 | |
CN112182040A (zh) | 数据查询方法、装置、设备和存储介质 | |
CN111221742A (zh) | 一种测试案例的更新方法、装置、存储介质和服务器 | |
US10185742B2 (en) | Flexible text searching for data objects of object notation | |
US9020995B2 (en) | Hybrid relational, directory, and content query facility | |
CN112527900A (zh) | 一种数据库读多副本一致性的方法、装置、设备及介质 | |
CN110737662A (zh) | 一种数据分析方法、装置、服务器及计算机存储介质 | |
CN116226222B (zh) | 基于时序数据库的数据段标记处理方法及装置 | |
CN112988391B (zh) | 数据处理方法、装置、设备和存储介质 | |
CN111090804B (zh) | 数据过滤方法、装置及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |