CN115905310A - 数据查询方法、数据存储方法及相应的设备、系统、介质 - Google Patents
数据查询方法、数据存储方法及相应的设备、系统、介质 Download PDFInfo
- Publication number
- CN115905310A CN115905310A CN202310009999.5A CN202310009999A CN115905310A CN 115905310 A CN115905310 A CN 115905310A CN 202310009999 A CN202310009999 A CN 202310009999A CN 115905310 A CN115905310 A CN 115905310A
- Authority
- CN
- China
- Prior art keywords
- query
- data
- plan
- storage
- sub
- 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
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种数据查询方法、数据存储方法及相应的设备、系统、介质。数据查询方法包括:将接收到的查询语句转化为查询语法树,查询语句为用于查询存储资源中存储的目标数据的结构化查询语言SQL语句,目标数据包括位置信息;基于查询语法树生成查询计划;基于查询计划对存储资源中存储的目标数据进行扫描查询。依据本申请实施例,可以支持标准SQL查询,并实现高效的地理围栏查询。
Description
技术领域
本申请涉及云计算技术领域,尤其涉及一种数据查询方法、数据存储方法及相应的设备、系统、介质。
背景技术
地理围栏技术是LBS(Location-Based Service,基于位置的服务)技术中的一种应用,其原理主要是用一个虚拟的栅栏围出一个虚拟地理边界,当移动终端在该虚拟地理边界的范围内或者该虚拟地理边界的附近活动时,可以接收自动的通知和提醒。地理围栏查询是基于地理围栏技术的一种查询方式,对于存储地理数据例如经纬度点坐标的数据表,给定面(多边形或圆形)的经纬度范围,地理围栏查询可以查询坐标在范围内的点。相关技术中,存在一些数据存储架构可以支持对海量地理数据的地理围栏查询,但不支持地理围栏的标准SQL((Structured Query Language,结构化查询语言)查询,缺乏易用性。
发明内容
本申请实施例提供一种数据查询方法、数据存储方法及相应的设备、系统、介质,以解决现有技术存在的问题。
第一方面,本申请实施例提供了一种数据查询方法,包括:
将接收到的查询语句转化为查询语法树;查询语句为用于查询存储资源中存储的目标数据的结构化查询语言SQL语句,目标数据包括位置信息;
基于查询语法树生成查询计划;
基于查询计划对存储资源中存储的目标数据进行扫描查询。
第二方面,本申请实施例提供了一种数据存储方法,包括:
基于接收到的建表语句和数据插入语句分别转化为建表语法树和数据插入语法树;建表语句和数据插入语句均为结构化查询语言SQL语句;
基于建表语法树和数据插入语法树分别生成建表执行计划和数据插入执行计划;
基于建表执行计划在存储资源中的起始区域构建用于存储目标数据的数据表;
基于数据插入执行计划在构建好的数据表中插入目标数据。
第三方面,本申请实施例提供了一种数据查询系统,可用于执行本申请实施例提供的任意一种方法,该系统包括:计算资源和存储资源;
计算资源和存储资源之间通信连接;
计算资源用于将接收到的SQL语句转化为对应的语法树,基于语法树生成对应的执行计划;
存储资源用于执行该执行计划。
第四方面,本申请实施例提供了一种电子设备,包括:存储器、处理器及存储在存储器上的计算机程序,处理器在执行计算机程序时可以实现本申请实施例第三方面提供的数据查询系统中计算资源和/或存储资源的功能。
第五方面,本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,该计算机程序被处理器执行时实现本申请实施例提供的任意一种方法。
与现有技术相比,本申请具有如下优点:
依据本申请实施例的技术方案,通过在数据查询系统中设置SQL层,从而可使数据查询系统及相应的数据存储、数据查询等支持标准SQL查询,有效提高查询系统的易用性;存储和查询的对象为包含位置信息的数据,可支持该类数据的处理功能;可应用于云原生多模数据库(一种可适用于任何规模、多种模型的云原生数据库)以提高云原生多模数据库的数据处理能力,实现高效的地理围栏查询。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,可依照说明书的内容予以实施,并且为了让本申请的上述和其他目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本申请的一些实施方式,而不应将其视为是对本申请范围的限制。
图1为本申请实施例提供的一种数据查询系统的结构框架示意图;
图2为本申请实施例提供的一种数据存储方法的流程示意图;
图3为本申请实施例中的建表语句和数据表的示意图;
图4为本申请实施例中的一种建表方法的流程示意图;
图5为本申请实施例中的一种数据插入方法的流程示意图;
图6为本申请实施例提供的一种数据查询方法的流程示意图;
图7为本申请实施例中确定编码区间的原理示意图;
图8为本申请实施例中查询编译器和查询优化器对查询语法树进行编译和优化处理的一种原理示意图;
图9为本申请实施例中两个域服务器并行执行各子查询计划的原理示意图;
图10为本申请实施例中一个区域查询计划的扫描子进程的执行过程示意图;
图11为本申请实施例中的一种查询方法示例的流程示意图;以及
图12为本申请实施例提供的一种电子设备的结构框架示意图。
具体实施方式
在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本申请的构思或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的,而非限制性的。
首先对本申请实施例涉及的部分技术术语进行如下介绍:
S2地理围栏索引:利用S2算法(一种开源编码算法),存储查询对象(点)的编码值,计算查询条件(面)的编码值范围,通过前缀匹配加速查询的索引技术。
时空数据:同时具有时间维度(即时间信息)和空间维度(即空间信息或称位置信息)的数据,地理数据是具有空间维度的数据。
在相关技术中,存在一种非结构化的数据存储方案,可支持对海量目标数据的地理围栏查询,具体原理为:在对存储的点坐标数据进行查询前,对点坐标字段创建2dsphere(一种用来支持球体几何计算查询的索引)或2d(一种用来对以二维平面上点的方式存储的数据进进行查询的索引,可以使用2d索引)填充曲线编码索引,查询时首先生成多边形或圆形范围的最小外接矩形,再生成该矩形对应的编码范围,利用索引过滤出属于编码范围的记录,再进行多边形范围精判断。但由于该方案的数据库是一种非结构化的数据库,对SQL不兼容,因此不支持地理围栏的标准SQL查询,且无法实现并行查询,查询效率较低。
在相关技术中,还存在一种数据存储方案,其可使用SimpleFeature(带属性的地理几何对象)作为存储结构来存储地理空间点,支持对海量目标数据的地理围栏查询,具体原理为:默认对点坐标创建z2(一种使用二维Z阶曲线来索引点数据的纬度和经度的索引方式)填充曲线编码索引,查询时首先生成多边形或圆形范围的最小外接矩形,再生成该矩形对应的编码范围,利用索引过滤出属于编码范围的记录,再进行多边形范围精判断。但该方案因使用SimpleFeature作为存储结构,导致对SQL不兼容,因此不支持地理围栏的标准SQL查询,且并行查询需要手动设置,无法自适应地进行并行查询,查询效率较低。
为便于理解本申请实施例的技术方案,以下对本申请实施例的相关技术进行说明。以下相关技术作为可选方案与本申请实施例的技术方案可以进行任意结合,其均属于本申请实施例的保护范围。
本申请实施例提供了一种数据查询系统,该数据查询系统可以包括计算资源和存储资源,计算资源和存储资源之间可以通信连接,计算资源可用于将接收到的SQL语句转化为对应的语法树,并基于语法树生成对应的执行计划,存储资源可用于执行上述执行计划。
基于计算资源可以形成如图1所示的SQL层和查询处理层,基于存储资源可以形成如图1所示的存储层,计算资源可以实现SQL层和查询处理层的处理,存储资源可以实现如图2所示的存储层的处理,计算资源和存储资源可共同实现SQL层、查询处理层和存储层之间的数据交互和数据处理,以实现数据的存储和查询。
计算资源还可与客户端通信连接,客户端可接收用户输入的SQL语句(即SQL字符串),并将该SQL语句转发至SQL层,SQL层可将接收到的SQL语句转化为对应的语法树,查询处理层可以基于语法树生成对应的执行计划并执行该执行计划,或将执行计划发送至存储层,由存储层执行接收到的执行计划。
计算资源可以包括至少一个计算设备,例如可以包括一个计算设备,可基于该计算设备提供的资源形成SQL层和查询处理层,又如可以包括两个计算设备,可基于一个计算设备提供的资源上形成SQL层,基于另一个计算设备提供的资源形成查询处理层,计算设备可以是服务器,也可以其它具有计算功能的设备。存储资源可以包括至少一个存储设备,在存储资源包括多个存储设备,多个存储设备可形成分布式的数据库集群作为存储层,例如可以是KV(Key-Value,键值对)存储层,以实现分布式的数据存储,也可实现数据存储、数据查询等操作的并行处理,存储设备可以是服务器,也可以是其它具有存储功能的设备。
参照图1的示例,SQL层可以包括语法解析器和语法编译器,可应用于数据存储和数据查询的场景,例如语法解析器可对用户输入的SQL语句进行标识符解析识别,语法编译器可将识别出的标识符编译为语法树,其中,标识符可以是SQL语句select、where等关键字信息;查询处理器可以包括编译器、查询优化器和执行器,编译器和执行器可应用于数据存储和数据查询的场景,查询优化器可应用于数据查询的场景,例如编译器可将语法编译器编译出的语法树编译为相应的执行计划,例如建表执行计划、数据插入执行计划、查询计划等,执行器可将编译器编译出的执行计划发送至存储层,查询优化器可对编译器编译出的查询计划进行优化处理,得到优化后的查询计划。
参照图1的示例,存储设备可以是域服务器(Region Server),每个域服务器中可以包括多个用于存储数据的区域(Region),每个区域中可以存储某个数据表中按主键(primary key)排序的连续记录,主键在存储层中由行键(rowkey)来实现,在存储层中,可认为行键即为主键,可称为行主键。在一个示例中,一个数据表的数据可以跨越多个域服务器,即同时存储于多个域服务器中,每个域服务器存储该数据表的一部分数据;在另一个示例中,一个数据表的数据可以存储于一个域服务器中,一个域服务器中可以同时存储有多个数据表的数据,一个区域内存储的数据通常属于一个数据表。
参照图1的示例,每个区块中可以具有多个LDFile(文件),每个LDFile中可以存储所属区域内所记录的数据中的一个列簇,每个列簇中可以包括多个键值对,键值对即最小存储单元,表示数据表中指定行、列和时间戳的数据,例如时空数据或地理数据,所存储的数据可以是点坐标的形式,键可以由主键、列标识和时间戳组成,值可以是数据表中的行和列交叉形成的单元格的点坐标。LDFile的大小通常有一定限制,一个列簇可以跨越多个LDFile,即同时存储于多个LDFile,一个LDFile内的数据可以属于某个数据表的一个列簇。
本申请实施例提供的数据查询系统,基于SQL层的设置可使数据查询系统支持标准SQL查询,有效提高数据查询系统的易用性;上述数据查询系统可进行时空数据或地理数据的存储和查询,数据查询系统可应用于云原生多模数据库,以增加云原生多模数据库的时空数据和地理数据的处理能力,以弥补云原生多模数据库在时空数据和地理数据处理上的缺失,使云原生多模数据库能高效地支持多种时空模型的查询和处理;上述数据查询系统集成有分布式KV存储结构、宽表引擎和SQL引擎,在此基础上,可构建地理围栏查询引擎,以实现高效的地理围栏查询功能,在应用于云原生多模数据库时,在云原生多模数据库的宽表引擎和SQL引擎的基础上,可直接扩展SQL语义支持OpenGIS(Open GeodataInteroperation Specification,开放的地理数据互操作规范)标准的空间算子,地理围栏支持标准SQL查询,更方便数据库用户理解和使用。在同等的分布式数据库集群的配置下,使用本申请实施例提供的数据查询系统进行地理围栏查询,平均查询时间优于前面所述的相关技术中的查询方案的时间。
本申请实施例提供的数据查询系统可用于执行本申请实施例提供的任意一种方法,本申请实施例提供的各方法将在后续实施例中介绍。
基于同一技术构思,如图2所示,本申请实施例提供了一种数据存储方法200,该数据存储方法200可以包括如下步骤S201-S203:S201,将接收到的建表语句和数据插入语句分别转化为建表语法树和数据插入语法树;S202,基于建表语法树和数据插入语法树分别生成建表执行计划和数据插入执行计划;S203,基于建表执行计划在存储资源中的起始区域构建用于存储目标数据的数据表;S204,基于数据插入执行计划在构建好的数据表中插入目标数据。其中,目标数据可以包括位置信息,在一些示例中,也可以包括其它信息,例如时间信息。
上述数据存储方法200可以应用于上述数据查询系统,在一个示例中,步骤S201和S202可以应用于计算资源,步骤S203和S204可以应用于存储资源。
在上述步骤S201中,建表语句可以是用于创建数据表的SQL语句,数据插入语句可以是用于在数据表中插入目标数据的SQL语句,建表语句和数据插入语句可由用户输入客户端并由客户端传输至计算资源,建表语句和数据插入语句可同时由客户端传输至计算资源,也可先后由客户端传输至计算资源。
上述步骤S201可由SQL层来实现,例如可通过SQL层中的语法解析器对建表语句和数据插入语句进行标识符的解析和识别,进而通过SQL层中的语法编译器将建表语句的标识符编译为建表语法树,将数据插入语句的标识符编译为数据插入语法树,SQL层对建表语句的处理和对数据插入语句的处理可以同时执行,也可以先后执行。
上述步骤S202可由查询处理层来实现,例如可通过查询处理层中的编译器将建表语法树编译为以指定编码算法和行唯一的id字段为行主键的建表执行计划,将数据插入语法树编译为数据插入执行计划。查询处理层对建表语法树的处理和数据插入执行计划的处理可以同时执行,也可以先后执行。
上述步骤S303和S304可由存储层来处理,通过查询处理层中的执行器可以向存储层发送建表执行计划以及第一rpc(Remote Procedure Call,远程过程调用)指令,存储层可响应于第一rpc指令执行建表执行计划,以在存储层中的起始区域中构建用于存储目标数据的数据表,通过查询处理层中的执行器还可向存储层发送数据插入执行计划以及第二rpc指令,存储层可响应于第二rpc指令执行数据插入执行计划,以实现数据插入。
本申请实施例提供的上述数据存储方法200可接收SQL语句并对SQL语句进行处理以生成建表执行计划和数据插入执行计划,基于建表执行计划可在存储资源中构建数据表,进而可基于数据插入执行计划在构建好的数据表中插入数据的方式以实现数据存储,这种存储方式可以支持后续的标准SQL查询;插入的数据可以是目标数据,可支持海量目标数据的低成本处理,可更好的满足车联网、物联网等场景的存储需求。
在一种实施方式中,建表语句中可以包括主键信息,主键信息可以包括行唯一的id(identifier,标识号,行唯一的id指行标识号)字段和指定的主键编码类型,主键编码类型可以是可将二维坐标映射到一维同时保持空间邻近性的编码算法对应的主键,例如基于S2算法的主键、基于z-order(莫顿编码)算法的主键等,不同的主键编码类型会导致不同的存储效率以及查询效率,可根据所需要的查询效率指定对应的编码算法。基于建表语句生成的建表执行计划可以是包含指定的主键编码类型和上述id字段的计划,指定的主键编码类型和上述id字段会随建表信息一起写入建表的元数据。数据插入语句中可以包括待插入的唯一的id值和待插入的目标数据,目标数据可以是点坐标的形式,在一些示例中,数据插入语句还可以包括其它属性信息(例如时间戳)。基于该实施方式建表语句和数据插入语句所包含的信息,可构建用于存储键值对的数据表,以实现分布式且高可行性的存储。
图3示例性地示出了一种数据表,用于构建如图3所示的数据表的建表语句可以提供行唯一的id字段和行主键的编码算法,例如S2算法。建表语句经SQL层、查询处理层以及KV存储层的处理后,可构建出图3所示的数据表,该数据表对应的存储层是以键值对为最小单元的分布式存储结构。
如图3所示的数据表中,行主键值表示为“S2(x,y),record_id”,其中,S2(x,y)表示行主键中的编码算法部分,record_id表示行唯一的id字段,column 1至column 4为默认的一个列簇内4个列的列名,该列名可以统一表示为cq,列簇名可用cf表示,列簇中和列簇内的列名可共同形成列标识,该列标识可以表示为cf:cq。数据表中的一个行主键所在的行和一个列标识cf:cq所在的列可形成一个用于存储数据或数据相关信息的单元格,例如,图3中行主键值和第一列(即column 1)的列名(即x)可形成一个用于存储第一列列值的单元格,图3中行主键值和第二列(即column2)的列名(即y)可形成一个用于存储第二列列值的单元格,图3中行主键值和第三列(即column 3)的列名(即collect_time)可形成一个用于存储第三列列值的单元格,图3中行主键值和第四列(即column4)的列名(即car_id)可形成一个用于存储第四列列值的单元格,car_id是一个属性字段,可以存储数据的具体属性,每个单元格中存储的键值对的完整信息包括行主键值、列名、时间戳和列值。如图3所示的数据表中,VARBINARY(可变长度二进制数据)为S2(x,y)的数据类型,VARCHAR(可变长度字符串)为record_id的数据类型”,x和y为过滤条件的两个参数,DOUBLE(双精度浮点型)为x列列值和y列列值的数据类型。
在一种实施方式中,数据插入执行计划可以包括待插入的id值和待插入的目标数据。对应的,在上述步骤S204中,基于数据插入执行计划在构建好的数据表中插入目标数据,可以包括:基于数据表的主键编码类型对目标数据进行编码,将编码结果和id值拼接为主键并插入数据表。例如,若建表的元数据显示所构建的数据表使用的主键为S2主键(即基于S2算法形成的主键),则可基于S2算法对目标数据进行编码,将S2编码结果和待插入的id值拼接为主键并插入数据表。
在一种实施方式中,上述数据存储方法200还可以包括:在插入目标数据的过程中,确定已插入起始区域内的数据量是否达到预设的数据量上限;在已插入起始区域内的数据量达到预设的数据量上限的情况下,增加当前服务器中的区域数量,在所增加的区域中继续插入目标数据;在已插入起始区域内的数据量未达到预设的数据量上限的情况下,继续在起始区域中插入目标数据。
基于预设的数据量上限,本申请实施例提供的数据存储方法200可对起始区域中的数据量饱和情况进行识别,在识别出起始数据量已经饱和的情况下,可自适应地增加当前服务器的区域数量,起始区域的数据表也随着区域数量的增加扩展到新的区域中,在新的区域中的数据表继续插入目标数据,可使目标数据均匀地分布在不同的区域中,避免一个区域中数据量过多、功耗过高。
对已插入起始区域内的数据量是否达到预设的数据量上限的判断,可在向起始区域插入数据的过程中实时执行,也可以在向起始区域插入数据的过程中定时执行。
增加的区域数量可以是一个或多个,在增加多个区域时,可逐个区域依次进行增加,每增加一个区域,即可在向该区域插入目标数据的过程中确定已插入该区域内的数据量是否达到预设的数据量上限,在已插入该区域内的数据量已达到预设的数据量上限的情况下,在当前服务器中增加下一个区域,在下一个区域中继续插入目标数据,在已插入该区域内的数据量未达到预设的数据量上限的情况下,可继续在当前增加的区域中继续插入目标数据。
图4示例性地示出了一种建表方法,图5示例性地示出了一种数据插入方法。参照图4,建表方法可以包括:SQL层接收建表语句;SQL层对建表语句进行语法解析及编译,得到建表语法树;查询处理层对建表语法树进行编译,并确定数据表使用的主键是否为S2主键,若是则增加S2主键,进而生成建表执行计划,若否则直接生成建表执行计划,KV存储层基于建表执行计划写入数据表的元数据。参照图5,数据插入语句可以包括:SQL层接收数据插入语句;SQL层对数据插入语句进行语法解析及编译,得到数据插入语法树;查询处理层对数据插入语法树进行编译,并确定数据表使用的主键是否是S2主键,若是,则基于S2算法生成S2编码值,进而形成数据插入执行计划,若否,则直接生成数据插入计划;KV存储层基于数据插入计划在数据表中插入数据并自动分裂出热点区域。
基于同一技术构思,如图6所示,本申请实施例还提供了一种数据查询方法600,可以包括:S601,将接收到的查询语句转化为查询语法树;S602,基于查询语法树生成查询计划;S603,基于查询计划对存储资源中存储的目标数据进行扫描查询。
在上述步骤S601中,查询语句可以是用于查询存储资源中存储的目标数据的SQL语句,该语句可由用户输入客户端并由客户端传输至计算资源。查询语句中可以包括所需要的列信息和过滤条件。
上述步骤S601可由SQL层来实现,例如可通过SQL层中的语法解析器对查询语句进行标识符的解析和识别,进而通过SQL层中的语法编译器将查询语句的标识符编译为查询语法树。
上述步骤S602和S603可由查询处理层和存储层来实现,例如可通过查询处理层中的编译器将查询语法树编译为查询计划,可通过查询处理层中的执行器向存储资源发送查询计划和第三rpc指令,响应于第三rpc指令,存储资源可执行查询计划,以对该存储资源中存储的目标数据进行扫描查询。在一个示例中,查询处理层的执行器可基于查询计划创建扫描主进程,存储层执行扫描主进程以对数据表中存储的目标数据进行扫描查询。
本申请实施例提供的上述数据查询方法600可接收SQL语句并对SQL语句进行处理以生成查询执行计划,进而可基于查询执行计划的执行实现标准SQL查询;所查询的数据可以是目标数据,从而可以高效地支持目标数据的查询和处理,实现高效的地理围栏查询的功能。
在一种实施方式中,在上述步骤S602中,基于查询语法树生成查询计划,可以包括:基于查询语法树生成初始查询计划,对初始查询计划进行并行优化处理,得到包括多个子查询计划的并行查询计划,作为查询计划。其中,初始查询计划的查询范围可以是存储资源中的数据表的全部范围,每个子查询计划的查询范围可以是该数据表的部分范围,不同的子查询计划的查询范围可以互不重叠。
对初始查询计划的并行优化处理可通过查询处理层的查询优化器来实现,查询优化器通过并行优化处理,可将一个具有较大查询范围的初始查询计划拆分为多个具有较小查询范围的子查询计划,形成包括多个子查询计划的并行查询计划,该并行查询计划中的各子查询计划可被并行执行,相比串行执行可有效缩短查询时间,提高整体查询效率。
在一种实施方式中,对初始查询计划进行并行优化处理,可以包括:确定存储资源中用于表征地理围栏范围的多个编码区间,基于多个编码区间将初始查询计划拆分为多个区间查询计划,每个区间查询计划的查询范围为一个编码区间的范围,每个区间查询计划均可用于对一个编码区间中存储的目标数据进行扫描查询,区间查询计划的个数可与编码区间的个数相等。上述子查询计划可以区间查询计划,多个子查询计划即为多个区间查询计划,多个区间查询计划可以被并行执行,从而可并行对各个区间中存储的目标数据进行扫描查询,编码区间的范围较小,即编码区间对应的区间查询计划所需要查询的范围较小,多个区间查询计划被并行执行时,可大大缩短查询的时间,提高查询的效率。
在另一种实施方式中,对初始查询计划进行并行优化处理,可以包括:确定存储资源中用于表征地理围栏范围的多个编码区间;将多个编码区间按区域进行合并,得到合并后的与多个区域分别对应的多个查询区间,每个查询区域的查询范围可以是对应一个区域的空间范围;基于多个查询区间将初始查询计划拆分为多个区域查询计划,每个区域查询计划的查询范围为一个查询区间的范围,每个区域查询计划均可用于对一个查询区间中存储的目标数据进行扫描查询,区域查询计划的个数可与全并出的查询区间的个数相等,进而也与存储层中区域的个数相等。上述子查询计划可以是区域查询计划,多个子查询计划即为多个区域查询计划,多个区域查询计划可以被并行执行,从而可并行对各个区域中存储的目标数据进行扫描查询,缩短查询的时间,提高查询的效率。
将多个编码区间按区域进行合并时,可首先确定每个区编码区间所属的区域,将属于同一区域的编码区间合并为一个查询区间。由于每个区间查询计划在执行时都需要占用执行器的一个进程资源,在确定出的编码区间的数量较多时,并行执行各编码区间对应的区间查询计划会同时消耗过多的进程资源,通过合并编码区间基于合并结果拆分出子查询计划,可降低需要并行的子查询计划的数量,避免消耗过多的进程资源。
对于跨区域的编码区间,可将该编码区间的位于不同区域的子区间分别并入所跨的各个区域对应的查询区间,例如编码区间A的一部分子区间A1属于区域B1,另一部分区间A2属于区域B2,则编码区间A是跨区域B1和B2的编码区间,可将子区间A1并入区域B1对应的查询区间中,将子区间A2并入区域B2对应的查询区间中,也即,将编码区域A拆分成两部分后分别并入两个查询区间,如此可避免因过多查询范围较小的查询计划并行争抢资源而影响查询范围较大的查询计划的运行,可进一步提高查询效率,也可更好的适应数据的规模。
某个编码区间是否为跨区域的编码区间,跨了哪些区域,可基于编码区间的区间值(即用于匹配行主键进行查询的编码值范围)和各区域中数据表的主键范围确定,查询优化器可通过Zookeeper(分布式应用程序协调服务软件)找到数据库集群的所有域服务器,从各域服务器处获取每个区域内数据表的主键范围,确定编码区间的区间起始值和区间终止值在哪些区域的主键范围内,即可确定编码区间跨了哪些区域,同一区域的编码区间和/或编码区间的子区域可以合并为一个更大的查询区间,该查询区间的区间起始值(即区间的起始编码值)可以是属于该区域的各编码区间的区间起始值的最小值,该查询区间的区间终止值(即区间的终止编码值)可以是属于该区域的各编码区间的区间终止值的最大值,从而可在区间查询计划的基础上,均衡分配单次扫描查询的空间范围。
在又一种实施方式中,对初始查询计划进行并行优化处理,可以包括:确定存储资源中用于表征地理围栏范围的多个编码区间;基于多个编码区间将初始查询计划拆分为多个区间查询计划,每个区间查询计划的查询范围为一个编码区间的范围,每个区间查询计划可用于对一个编码区间的数据进行扫描查询;将多个区间查询计划按区域进行合并,得到合并后的多个区域查询计划,每个区域查询计划的查询范围为一个区域的空间范围,每个区域查询计划可用于对一个区域中存储的目标数据进行扫描查询。上述子查询计划可以是区域查询计划,多个子查询计划即为多个区域查询计划,多个区域查询计划可以被并行执行,从而可并行对各个区域中存储的目标数据进行扫描查询,缩短查询的时间,提高查询的效率。
将多个区间查询计划按区域进行合并时,可首先确定每个区间查询计划对应的编码区间所属的区域,将属于同一区域的编码区间对应的区间查询计划合并为一个区域查询计划。
上述初始查询计划中可以包括查询范围和过滤条件的信息,在初始查询计划中,查询范围可以是数据表的全部范围,基于初始查询计划可以进行全表扫描,在将初始查询计划拆分为多个区间查询计划或多个区域查询计划时,可将初始查询计划中查询范围分别由数据表的全部范围修改为数据表的多个不同的局部范围,从而形成多个新的查询范围的查询计划,即为区间查询计划或区域查询计划,基于区间查询计划可进行针对编码区域的区间扫描,基于区域查询计划可进行针对区域的区域扫描。
在一种实施方式中,存储资源可以包括多个存储模块,目标数据可以是地理数据。对应的,在上述步骤S603中,基于查询计划对存储资源中存储的目标数据进行扫描查询,可以包括:在每个存储模模块中并行执行与该存储模块对应的各子查询计划,基于各子查询计划的执行,对各存储模块中的各查询范围中存储的地理数据进行并行扫描查询。在存储资源包括具有多个存储空间的一个存储设备时,该存储设备中的每个存储空间可以作为一个存储模块,在存储资源包括多个存储设备时,每个存储设备可以作为一个存储模块。
并行执行各子查询计划的操作可由查询处理层和存储层共同实现,例如,查询处理层中的执行器可向存储资源中的各个存储模块分别发送对应的子查询计划,使每个存储模块可以并行执行接收到的各子查询计划,以提高查询效率。
在一种实施方式中,子查询计划可以包括:查询范围、扫描列名列表和第一过滤条件。其中,一个查询范围可以是上述一个编码区间或一个区域的范围,扫描列名列表可以提供所需要的列的列名,第一过滤条件可以用于筛选所需要的行。对应的,基于各子查询计划的执行,对各存储模块中的各查询范围中存储的地理数据进行并行扫描查询,可以包括:在执行每个子查询计划时,基于子查询计划中的扫描列名列表和第一过滤条件对一个查询范围中存储的目标数据进行扫描查询。
第一过滤条件可以是ST_Contains函数,ST_Contains函数的第一个参数为多边形(Polygon)或圆形(Circle)类型的常量参数,第二个参数和第三个参数分别为点的经度和纬度坐标,都是数据表中数值类型的列,扫描列名列表中的所需要的列可以是投影列、ST_Contains函数过滤所需要的列等至少一种列。
编码区间可基于ST_Contains函数来确定,在一个示例中,可提取ST_Contains函数的第一个参数,即面(多边形/圆形)类型的常量范围,利用S2算法得到如图7所示的多个逼近面覆盖范围的网格,每个网格为一个编码区间,对所有的编码区间按区间起始值进行排序,可得到近似表达地理围栏面范围的多个起始值递增的不重叠编码区间。
在子查询计划为区间查询计划时,可以并行执行各区间查询计划,在子查询计划为区域查询计划时,可以并行执行各区域查询计划。
在进行查询时,查询处理层中的执行器可将包括查询范围、扫描列名列表和第一过滤条件的子查询计划发送到存储层,扫描列名列表中包括投影列,相当于将基于投影列的投影操作以及基于第一过滤条件的过滤操作均由查询处理层下推到存储层,存储层在对目标数据进行扫描时,可基于投影列执行投影操作并基于过滤条件执行过滤操作,只向查询处理层返回符合投影列和可以通过第一过滤条件的字段,可减少查询处理层和存储层之间的不必要的数据传输。
在一种实施方式中,在查询范围、扫描列名列表和第一过滤条件的基础上,子查询计划还可以包括第二过滤条件,第二过滤条件可以是空隙过滤条件(Interval Skip),具体可以包括存储资源中的多个编码区间的区间范围,第二过滤条件可以用于跳过存储资源的同一查询范围内任意两个编码区间之间的空隙。对应的,基于各子查询计划的执行,对各存储模块中的各查询范围中存储的地理数据进行并行扫描查询,可以包括:基于第二过滤条件过滤掉同一个查询范围中任意两个编码区间之间的空隙。即只对编码区间范围内的目标数据进行扫描查询,不对两个编码区间之间的空隙进行扫描查询,可避免不必要的精判断计算,可进一步提高查询效率。
第二过滤条件可以设置于第一过滤条件之前,在基于第一过滤条件进行过滤操作之前,首先基于第二过滤条件过滤掉同一区域内任意两个编码区间之间的空隙,不对该空隙进行扫描查询。对于合并编码区间前一个区域内只有一个编码区间的情况,可默认为通过第二过滤条件,不基于第二过滤条件进行过滤。
图8出了查询编译器和查询优化器对查询语法树进行编译和优化处理的一种原理,图8左侧示出了一种查询语法树,该查询语法树提供以下信息:地理围栏查询的对象为数据表table,需要通过select语句返回的字段为car_id,所需要的数据,过滤条件为ST_Contains函数,ST_Contains函数的第一种参数为面类型(Literal)的常量参数,面类型可以是多边形(Polygon)或圆形(Circle)类型,第二个参数和第三个参数分别为点的经度坐标x和纬度坐标y,Identifier表示标识号,x和y均为列标识号即列名。图9所示的上述查询语法经查询编译器处理后,可生成初始查询计划,初始查询计划中查询范围为全表(Tablefull scan),过滤条件(filter)为ST_Contains函数,初始查询计划中还可以包括投影条件(Project)。
参照图8,查询优化器可对初始查询计划进行以下优化处理:将投影条件和过滤条件函数下推到存储层,即下推到离数据源更近的位置;进行S2地理围栏索引优化,该索引优化包括提取ST_Contains函数的面参数、生成S2编码区间和改写初始查询计划中的查询范围,索引优化后可得到多个区间查询计划,图8仅示出两个区间查询计划作为示例,两个区间查询计划具有不同的查询范围,分别为对应的S2编码区间的范围,图8中分别表示为S2Range Scan1和S2 Range Scan2;对索引优化出的子查询计划按区域分组合并,得到合并后的多个区域查询计划,图8仅示出两个区域查询计划作为示例,两个区域查询计划具有不同的查询范围,分别为对应的区域的范围,图8中分别表示为region-combined S2 RangeScan1和region-combined S2 Range Scan2;此外,在区域查询计划中加入了另一个过滤条件,即空隙过滤条件(Interval Skip Filter),用于过滤掉同一个区域中任意两个编码区间之间的空隙。
图9示出了两个域服务器(即两个存储模块)并行执行各子查询计划的原理示意图,参照图9,查询优化器优化处理得到的各子查询计划输入到执行器时,执行器的查询主进程可为每个子查询计划开启一个扫描子进程,图9仅示出子进程1至子进程4四个扫描子进程作为示例,四个扫描子进程可以并行执行以分别对四个区域进行并行查询,子进程1用于对第一个域服务器(Region Server 1)中的Region 1区域进行扫描,子进程2用于对第一个域服务器(Region Server 1)中的Region 2区域进行扫描,子进程3用于对第二个域服务器(Region Server 2)中的Region 1区域进行扫描,子进程4用于对第二个域服务器(Region Server 2)中的Region 2区域进行扫描。在各区域中,子进程可用于对LDFile中的各键值对进行扫描,键值对的信息包括行主键值(如图9中所示的S2 rowkey)、列标识(如图9中所示的cf:cq)、时间戳(如图9中所示的ts)和列值(如图9中所示的value)。
参照图9,在每个区域内,为保证扫描效率,扫描指针可以从起始行(即起始rowkey)开始顺序向前移动直至终止行(即终止rowkey),每当扫描指针移动到数据表的一行时,可判断该行的各列的列名是否在扫描列名列表中以及该行的数据是否能通过第一过滤条件和第二过滤条件,将该行中列名属于扫描列名列表且能通过第一过滤条件和第二过滤条件的数据返回至查询处理层。
图10示例性地示出了一个区域查询计划的扫描子进程的执行过程,参照图10,一个扫描进程的执行过程包括如下步骤S1001-S1015:
S1001,将扫描指针移至第一个行主键值不小当前区域的起始编码值的KV(键值对)处,并初始化当前的行标识符passFlag为UNDECIDED,初始化结果暂存集合和返回结果集合为空集合。
UNDECIDED表示不确定当前行的数据是否需要返回查询处理层,为待定状态。结果暂存集合用于暂存可能需要返回(即未最终确定是否要返回)查询处理层的数据。返回结果集合用于存储对最终确定需要返回查询处理层的数据。暂存于结果暂存集合中的数据在最终确定需要返回查询处理层时可被移入返回结果集合中。
S1002,将扫描指针移至下一个KV处,作为当前KV,判断当前KV是否为第一个KV,若当前KV不是第一个KV,则执行步骤S1003;若当前KV是第一个KV,则执行步骤S1009。
根据实际需求,当前KV是否为第一个KV的判断也可以省略,直接进入步骤S1203。
S1003,判断当前是否扫描到新行,若是,则执行步骤S1004,若否,则执行步骤S1009。
判断当前是否扫描到新行的一个具体方式可以是:判断当前KV的行主键是否与上一个KV的行主键相同,如果相同,则表示未扫描到新行,如果不相同,则表示扫描到新行。
S1004,查看行标识符passFlag是否为INCLUDE,若是,则执行步骤S1005,若否,则执行步骤S1006。
INCLUDE表示确定当前行的数据需要返回查询处理层。
S1005,将结果暂存集合中的值全部存入返回结果集合;
S1006,清空结果暂存集合;
S1007,重设passFlag为UNDECIDED。
S1008,判断当前是否已经到达当前区域的终止行,若是,则终止扫描,若否,则执行S1009。
判断当前是否已经到达当前区域的终止行的具体方式可以是:判断当前是否已经到达当前区域的结尾标识,或,当前KV的行主键值是否大于扫描范围的最大值;若任一判断为是,则表示已经到达当前区域的终止行,否则未到达当前区域的终止行。
S1009,判断当前KV对应的列是否是投影列,若是,则执行S1010,若否,则执行S1011。
判断当前KV对应的列是否是投影列的一个具体方式可以是,判断当前KV的列标识cf:cq是扫描列名列表中的投影列的列标识。
S1010,将当前KV存入结果暂存集合中,然后执行步骤S1012。
S1011,判断当前KV对应的列是否为ST_Contains函数过滤所需要的列,若是,则执行步骤S1012,若否,则表示不需要当前KV,执行步骤S1002。
判断当前KV对应的列是否是ST_Contains函数过滤所需要的列的一个具体方式可以是,判断当前KV的列标识cf:cq是否是扫描列名列表中是ST_Contains函数过滤所需要的列的列列标识。
在图3所示的数据表中,x和y所在的列即为ST_Contains函数过滤所需要的列。
S1012,查看passFlag是否为INCLUDE或EXCLUDE,若是,则执行步骤S1002,若否,则执行步骤S1013。
EXCLUDE表示确定当前行的数据不需要返回查询处理层。
S1013,判断当前KV的行主键(S2 rowkey)是否能够通过空隙过滤条件,若是,则执行S1016,若否,则执行S1014。
例如,可首先判断当前KV的行主键是否大于或等于第二过滤条件中的最小主键值(minRowkey),若否,则认为当前KV无法通过第二过滤条件,进而执行步骤S1014,若是,则利用二分法判断当前KV的行主键的前缀是否位于第二过滤条件中的编码区间的边界或内部,若当前KV的行主键的前缀位于第二过滤条件中的编码区间的边界或内部,则可认为当前KV能够通过第二过滤条件,进而可执行步骤S1016,若当前KV的行主键的前缀没有位于第二过滤条件中的编码区间的边界或内部,则可认为当前KV无法通过第二过滤条件,进而可更新上述最小主键值为当前行主键之后最近的编码区间的起始编码值,然后执行S1014。
最小主键值的初始值可以设置为0。
S1014,设置passFlag为EXCLUDE,然后执行步骤S1002。
S1015,判断当前KV对应的列是否为ST_Contains函数过滤所需要的列,若是,则执行步骤S1016,若否,则当前KV只是投影列,执行步骤S1002。
S1016,将当前KV加入到ST_Contains函数的变量参数集合。
S1017,判断ST_Contains函数的变量参数集合中是否已经集齐所有的变量参数,若是,则执行步骤S1018,若否,则执行步骤S1002。
在如图3所示的数据表中,x和y即为ST_Contains函数的变量参数。
S1018,进行地理围栏精判断计算,判断当前坐标是否在地理围栏范围内;若是,则当前行的数据记录已通过了所有过滤条件,执行S1019;若否,则当前行的数据记录没有通过所有的过滤条件,执行步骤S1020。
S1019,设置passFlag为INCLUDE,并清空ST_Contains函数的变量参数集合,然后执行步骤S1202。
S1020,设置passFlag为EXCLUDE,并清空ST_Contains函数的变量参数集合,然后执行步骤S1002。
图10为简洁表示,未示出上述各步骤的全部内容。在图10所示的上述扫描过程中,每当某个区域内的扫描进程的返回结果集合中的数据量达到了该区域的预设的数据量上限,存储层会将返回结果集合中的数据返回给查询处理层,查询处理层可将返回的数据追加到由查询主进程维护的共享结果集队列中,该共享结果集队列可保证进程安全,追加完成后,存储层可清空返回结果集合。查询处理层可从共享结果集子队列中获取最新的数据,返回给客户端。
图11示例性地示出了上述数据查询方法的一个示例,参照图11,数据查询方法可以包括:SQL层接收查询语句;SQL层对查询语句进行语法解析及编译,得到查询语法树;查询处理层对查询语法树进行编译,得到初始查询计划;查询处理层对初始查询计划进行投影条件、过滤条件下推等查询优化处理,并确定数据表使用的主键是否是S2主键,若是则在查询优化处理中使用S2索引,得到S2编码区间,并进一步对S2编码区间进行扫描合并,进而生成优化后的并行查询计划,若否,则直接生成优化后的并行查询计划;KV存储层执行并行查询计划进行并行扫描。
基于同一技术构思,本申请实施例还提供了一种电子设备,如图12所示,该电子设备包括:存储器1201和处理器1202,存储器1201内存储有可在处理器1202上运行的计算机程序。处理器1202执行该计算机程序时实现本申请实施例提供的数据查询系统中的计算资源和/或存储资源的功能。存储器1201和处理器1202的数量可以为一个或多个。
在一个示例中,电子设备可以执行计算资源对应的方法步骤或存储资源对应的方法步骤,从而通过一台电子设备可以实现计算资源和存储资源中任意一种单一类型资源的功能,即可实现某一单一类型的资源的功能。在另一个示例中,电子设备可以执行计算资源对应的方法步骤和存储资源对应的方法步骤,从而通过一台电子设备可以实现计算资源和存储资源中两种资源的功能,即可实现两个类型的资源的功能。
上述数据查询系统可以包括至少一台电子设备。在数据查询系统包括一台电子设备时,该电子设备可以实现两种资源的功能;在数据查询系统包括多台电子设备时,每台电子设备可以实现一种资源的功能,多台电子设备共同实现两种资源的功能,或者,每台电子设备均可以实现两种资源的功能,例如每台电子设备实现两种资源的部分功能,多台电子设备共同实现两种资源的完整功能,又如每台电子设备均可以实现两种资源的完整功能,在某台电子设备实现相应的功能,其它设备可以作为备用设备。在数据查询系统包括多台电子设备时,各电子设备可实现的功能可根据设备的属性以及实际需求进行配置,本申请实施例对此不作限定,也不局限于本申请示例性地列举的几种情况。
该电子设备还包括:
通信接口1203,用于与外界设备进行通信,进行数据交互传输。
如果存储器1201、处理器1202和通信接口1203独立实现,则存储器1201、处理器1202和通信接口1203可以通过总线相互连接并完成相互间的通信。该总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(PeripheralComponent Interconnect,PCI)总线或扩展工业标准体系结构(Extended IndustryStandard Architecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图12中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果存储器1201、处理器1202及通信接口1203集成在一块芯片上,则存储器1201、处理器1202及通信接口1202可以通过内部接口完成相互间的通信。
本申请实施例提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现本申请实施例中提供的任意一种方法。
本申请实施例还提供了一种芯片,该芯片包括处理器,用于从存储器中调用并运行存储器中存储的指令,使得安装有芯片的通信设备执行本申请实施例提供的任意一种方法。
本申请实施例还提供了一种芯片,包括:输入接口、输出接口、处理器和存储器,输入接口、输出接口、处理器以及存储器之间通过内部连接通路相连,处理器用于执行存储器中的代码,当代码被执行时,处理器用于执行申请实施例提供的方法。
应理解的是,本申请中的处理器可以是中央处理器(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。值得说明的是,处理器可以是支持进阶精简指令集机器(Advanced RISC Machines,ARM)架构的处理器。
进一步地,可选的,本申请中的存储器可以包括只读存储器和随机访问存储器。该存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以包括只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以包括随机访问存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM均可用。例如,静态随机访问存储器(Static RAM,SRAM)、动态随机访问存储器(Dynamic Random Access Memory,DRAM)、同步动态随机访问存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机访问存储器(Double Data RateSDRAM,DDR SDRAM)、增强型同步动态随机访问存储器(Enhanced SDRAM,ESDRAM)、同步链接动态随机访问存储器(Sync link DRAM,SLDRAM)和直接内存总线随机访问存储器(DirectRambus RAM,DR RAM)。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生依照本申请的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包括于本申请的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中描述的或在此以其他方式描述的任何过程或方法可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分。并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能。
在流程图中描述的或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。
应理解的是,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。上述实施例方法的全部或部分步骤是可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。上述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。该存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅为本申请的示例性实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请记载的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (14)
1.一种数据查询方法,其特征在于,包括:
将接收到的查询语句转化为查询语法树;所述查询语句为用于查询存储资源中存储的目标数据的结构化查询语言SQL语句,所述目标数据包括位置信息;
基于所述查询语法树生成查询计划;
基于所述查询计划对所述存储资源中存储的目标数据进行扫描查询。
2.根据权利要求1所述的数据查询方法,其特征在于,所述基于所述查询语法树生成查询计划,包括:
基于所述查询语法树生成初始查询计划;所述初始查询计划的查询范围为所述存储资源中的数据表的全部范围;
对所述初始查询计划进行并行优化处理,得到包括多个子查询计划的并行查询计划,作为所述查询计划;所述子查询计划的查询范围为所述数据表的部分范围。
3.根据权利要求2所述的数据查询方法,其特征在于,所述对所述初始查询计划进行并行优化处理,包括:
确定所述存储资源中用于表征地理围栏范围的多个编码区间;
将所述多个编码区间按区域进行合并,得到合并后的与多个区域分别对应的多个查询区间;
基于所述多个查询区间将所述初始查询计划拆分为多个区域查询计划;每个区域查询计划的查询范围为一个查询区间,所述子查询计划为所述区域查询计划。
4.根据权利要求2所述的数据查询方法,其特征在于,所述对所述初始查询计划进行并行优化处理,包括:
确定所述存储资源中用于表征地理围栏范围的多个编码区间;
基于所述多个编码区间将所述初始查询计划拆分为多个区间查询计划;每个区间查询计划的查询范围为一个编码区间;
将所述多个区间查询计划按区域进行合并,得到合并后的多个区域查询计划;每个区域查询计划的查询范围为一个查询区间,所述子查询计划为所述区域查询计划。
5.根据权利要求2所述的数据查询方法,其特征在于,所述存储资源包括多个存储模块,所述目标数据为地理数据;
所述基于所述查询计划对所述存储资源中存储的目标数据进行扫描查询,包括:
在每个存储模块中并行执行与该存储模块对应的各子查询计划,基于各子查询计划的执行,对各存储模块中的各查询范围中存储的地理数据进行并行扫描查询。
6.根据权利要求5所述的数据查询方法,其特征在于,所述子查询计划包括:查询范围、扫描列名列表和第一过滤条件,所述第一过滤条件用于筛选所需要的行,所述扫描列名列表用于提供所需要的列的列名;
所述基于各子查询计划的执行,对各存储模块中的各查询范围中存储的地理数据进行并行扫描查询,包括:
在执行每个子查询计划时,基于所述子查询计划中的扫描列名列表和第一过滤条件对一个查询范围中存储的目标数据进行扫描查询。
7.根据权利要求6所述的数据查询方法,其特征在于,所述子查询计划还包括第二过滤条件,所述第二过滤条件包括所述存储资源中的多个编码区间的区间范围;
所述基于各子查询计划的执行,对各存储模块中的各查询范围中存储的地理数据进行并行扫描查询,包括:
基于所述第二过滤条件过滤掉同一个查询范围中任意两个编码区间之间的空隙。
8.一种数据存储方法,其特征在于,包括:
基于接收到的建表语句和数据插入语句分别转化为建表语法树和数据插入语法树;所述建表语句和所述数据插入语句均为SQL语句;
基于所述建表语法树和所述数据插入语法树分别生成建表执行计划和数据插入执行计划;
基于所述建表执行计划在存储资源中的起始区域构建用于存储目标数据的数据表;
基于所述数据插入执行计划在构建好的所述数据表中插入所述目标数据。
9.根据权利要求8所述的数据存储方法,其特征在于,所述建表语句包括主键信息,所述主键信息包括行唯一的身份标识号id字段和指定的主键编码类型。
10.根据权利要求8或9所述的数据存储方法,其特征在于,还包括:
在插入所述目标数据的过程中,确定已插入所述起始区域内的数据量是否达到预设的数据量上限;
在已插入所述起始区域内的数据量达到预设的数据量上限的情况下,增加当前服务器中的区域数量,在所增加的区域中继续插入所述目标数据。
11.根据权利要求10所述的数据存储方法,其特征在于,所述数据插入执行计划包括待插入的id值和待插入的目标数据;
所述基于所述数据插入执行计划在构建好的所述数据表中插入所述目标数据,包括:
基于所述数据表的主键编码类型对所述待插入的目标数据进行编码;
将编码结果和所述id值拼接为主键并插入所述数据表。
12.一种数据查询系统,其特征在于,用于执行如权利要求1-11中任一项所述的方法,所述系统包括:计算资源和存储资源;
所述计算资源和所述存储资源之间通信连接;
所述计算资源用于将接收到的SQL语句转化为对应的语法树,并基于所述语法树生成对应的执行计划;
所述存储资源用于执行所述执行计划。
13.一种电子设备,其特征在于,包括:存储器、处理器及存储在存储器上的计算机程序,所述处理器在执行所述计算机程序时实现权利要求12所述的数据查询系统中的计算资源和/或存储资源的功能。
14.一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310009999.5A CN115905310A (zh) | 2023-01-04 | 2023-01-04 | 数据查询方法、数据存储方法及相应的设备、系统、介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310009999.5A CN115905310A (zh) | 2023-01-04 | 2023-01-04 | 数据查询方法、数据存储方法及相应的设备、系统、介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115905310A true CN115905310A (zh) | 2023-04-04 |
Family
ID=86488320
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310009999.5A Pending CN115905310A (zh) | 2023-01-04 | 2023-01-04 | 数据查询方法、数据存储方法及相应的设备、系统、介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115905310A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116644090A (zh) * | 2023-07-27 | 2023-08-25 | 天津神舟通用数据技术有限公司 | 一种数据查询方法、装置、设备及介质 |
-
2023
- 2023-01-04 CN CN202310009999.5A patent/CN115905310A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116644090A (zh) * | 2023-07-27 | 2023-08-25 | 天津神舟通用数据技术有限公司 | 一种数据查询方法、装置、设备及介质 |
CN116644090B (zh) * | 2023-07-27 | 2023-11-10 | 天津神舟通用数据技术有限公司 | 一种数据查询方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107491485B (zh) | 生成执行计划的方法、计划单元装置和分布式NewSQL数据库系统 | |
CN107038207B (zh) | 一种数据查询方法、数据处理方法及装置 | |
CN101324896B (zh) | 一种矢量数据的存储方法、查询方法和管理系统 | |
CN109379398B (zh) | 一种数据同步方法及装置 | |
US11995059B2 (en) | Database index and database query processing method, apparatus, and device | |
CN113204571B (zh) | 涉及写入操作的sql执行方法、装置及存储介质 | |
CN104423982A (zh) | 请求的处理方法和处理设备 | |
CN115905310A (zh) | 数据查询方法、数据存储方法及相应的设备、系统、介质 | |
CN110968579A (zh) | 执行计划的生成与执行方法、数据库引擎及存储介质 | |
CN113901083A (zh) | 基于多解析器的异构数据源操作资源解析定位方法和设备 | |
CN115905630A (zh) | 一种图数据库查询方法、装置、设备及存储介质 | |
Kim et al. | Comprehensive Knowledge Archive Network harvester improvement for efficient open‐data collection and management | |
CN111324803B (zh) | 搜索引擎的查询请求处理方法、装置及客户端 | |
CN110222056B (zh) | 一种定位方法、系统及设备 | |
CN114003583A (zh) | 一种目标格式数据请求体的构建方法、装置、介质及设备 | |
CN114218278A (zh) | http接口的数据表字段查询方法及系统 | |
CN114238407A (zh) | 基于分库分表中间件的预编译方法与系统 | |
CN113868138A (zh) | 测试数据的获取方法、系统、设备及存储介质 | |
CN110334098A (zh) | 一种基于脚本的数据库合并方法及系统 | |
CN116756184B (zh) | 数据库实例处理方法、装置、设备、存储介质及程序产品 | |
CN115952203B (zh) | 数据查询方法、设备、系统及存储介质 | |
CN114416104B (zh) | 一种结构化数据文件处理方法及装置 | |
KR100634322B1 (ko) | 지리정보시스템의 공간 데이터 제공자 기반 버퍼관리 장치및 방법 | |
KR20170085786A (ko) | 빅 데이터 플랫폼에서 공간 데이터 분산 저장 시스템 및 그 방법 | |
CN117312368A (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 |