掌桥专利:专业的专利平台
掌桥专利
首页

数据查询方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 11:35:49


数据查询方法、装置、电子设备及存储介质

技术领域

本发明涉及数据查询技术领域,尤其涉及一种数据查询方法、装置、电子设备及存储介质。

背景技术

数据库跨域访问远程实例时,需要在网络间传递数据。特别地,若执行的跨域关联查询语句涉及多个域的远程实例数据库,则需要在不同域的实例数据库间传递数据,由此产生的网络传输代价不容忽视。而且在网络资源受限的跨域环境下,由于网络带宽低、延迟大,且存在严重的抖动现象,因此,数据查询效率较低。

发明内容

本发明提供一种数据查询方法、装置、电子设备及存储介质,用以解决数据库跨域访问时数据查询效率较低的问题。

本发明提供一种数据查询方法,包括:接收SQL语句,并根据所述SQL语句确定第一语法树;从所述第一语法树中查找各实例的数据表信息,并根据所述数据表信息创建查询计划节点的第一传输路径,所述第一传输路径包括以下至少一项:缓存路径、普通传输路径和压缩传输路径;确定所述第一语法树中的跨域连接节点,并根据所述跨域连接节点确定关系链表,从所述第一传输路径中确定所述关系链表中每个基础关系的目标传输路径,生成所述跨域连接节点的目标连接路径;通过所述目标连接路径执行跨域查询计划。

根据本发明提供的一种数据查询方法,所述根据所述SQL语句确定第一语法树,包括:通过对所述SQL语句的语法分析和语义分析确定第二语法树;遍历所述第二语法树的每个连接节点,根据连接节点对应的目标链表确定目标列,并将连接条件转化为过滤条件,得到逻辑优化后的所述第一语法树。

根据本发明提供的一种数据查询方法,所述根据所述数据表信息创建查询计划节点的第一传输路径,包括:查询共享哈希表,检索与所述数据表信息相关的缓存信息,执行缓存信息匹配操作;将检索到的缓存信息封锁在缓存路径信息中,遍历所述缓存路径信息中的所有缓存信息,寻找每个实例中缓存数据与所需数据差集最小的缓存信息,并创建所述缓存路径;将所述缓存路径附到对应的查询计划节点。

根据本发明提供的一种数据查询方法,所述根据所述数据表信息创建查询计划节点的第一传输路径,包括:确定所述数据表信息所属的实例信息;确定传输路径代价比、行宽、行数以及网络修正比;根据所述传输路径代价比、所述行宽、所述行数以及所述网络修正比确定将所述数据表信息传输到每个实例的传输代价;反解析数据表结构,生成所述普通传输路径,并附到对应的查询计划节点。

根据本发明提供的一种数据查询方法,所述确定传输路径代价比、行宽、行数以及网络修正比之后,所述根据所述数据表信息创建查询计划节点的第一传输路径,还包括:根据目标列类型组合,确定压缩算法并估算压缩比;根据所述传输路径代价比、所述行宽、所述行数、所述网络修正比以及所述压缩比计算压缩传输代价、压缩损耗代价、解压缩损耗代价,并基于所述压缩传输代价、所述压缩损耗代价和所述解压缩损耗代价确定将所述数据表信息传输到每个实例的传输代价;反解析数据表结构,生成压缩传输路径,并附到对应的查询计划节点。

根据本发明提供的一种数据查询方法,所述从所述第一传输路径中确定所述关系链表中每个基础关系的目标传输路径,包括:遍历所述关系链表,确定基础关系,并将所述关系链表中除所述基础关系外的其他关系作为待连接关系;查询元数据表,确定所述基础关系的所属实例以及所述实例的连接计算能力系数;判断所述待连接关系中是否存在关于所述基础关系的缓存路径;若存在,则将缓存路径确定为所述目标传输路径;若不存在,则从普通传输路径和压缩传输路径中选择传输代价较小的路径作为所述目标传输路径。

根据本发明提供的一种数据查询方法,所述方法还包括:通过缓存辅助进程申请元数据表共享内存;遍历所述元数据表,将查询到的缓存信息封装并插入共享哈希表;若监控到其他进程对所述元数据表中的数据进行了修改,则封锁所述共享哈希表,删除所述共享哈希表和所述元数据表中的对应数据。

根据本发明提供的一种数据查询方法,所述方法还包括:按照预设时间间隔向目标实例发送数据包,得到网络质量信息,所述网络质量信息包括丢包率、网络延迟和网络抖动;根据所述网络质量信息计算所述目标实例的传输路径代价比;将所述目标实例的传输路径代价比存储至共享哈希表。

本发明还提供一种数据查询装置,包括:接收模块和处理模块;所述接收模块,用于接收SQL语句;所述处理模块,用于根据所述SQL语句确定第一语法树;从所述第一语法树中查找各实例的数据表信息,并根据所述数据表信息创建查询计划节点的第一传输路径,所述第一传输路径包括以下至少一项:缓存路径、普通传输路径和压缩传输路径;确定所述第一语法树中的跨域连接节点,并根据所述跨域连接节点确定关系链表,从所述第一传输路径中确定所述关系链表中每个基础关系的目标传输路径,生成所述跨域连接节点的目标连接路径;通过所述目标连接路径执行跨域查询计划。

根据本发明提供一种的数据查询装置,所述处理模块具体用于:通过对所述SQL语句的语法分析和语义分析确定第二语法树;遍历所述第二语法树的每个连接节点,根据连接节点对应的目标链表确定目标列,并将连接条件转化为过滤条件,得到逻辑优化后的所述第一语法树。

根据本发明提供一种的数据查询装置,所述处理模块具体用于:查询共享哈希表,检索与所述数据表信息相关的缓存信息,执行缓存信息匹配操作;将检索到的缓存信息封锁在缓存路径信息中,遍历所述缓存路径信息中的所有缓存信息,寻找每个实例中缓存数据与所需数据差集最小的缓存信息,并创建所述缓存路径;将所述缓存路径附到对应的查询计划节点。

根据本发明提供一种的数据查询装置,所述处理模块具体用于:确定所述数据表信息所属的实例信息;确定传输路径代价比、行宽、行数以及网络修正比;根据所述传输路径代价比、所述行宽、所述行数以及所述网络修正比确定将所述数据表信息传输到每个实例的传输代价;反解析数据表结构,生成所述普通传输路径,并附到对应的查询计划节点。

根据本发明提供一种的数据查询装置,所述处理模块还用于:根据目标列类型组合,确定压缩算法并估算压缩比;根据所述传输路径代价比、所述行宽、所述行数、所述网络修正比以及所述压缩比计算压缩传输代价、压缩损耗代价、解压缩损耗代价,并基于所述压缩传输代价、所述压缩损耗代价和所述解压缩损耗代价确定将所述数据表信息传输到每个实例的传输代价;反解析数据表结构,生成压缩传输路径,并附到对应的查询计划节点。

根据本发明提供一种的数据查询装置,所述处理模块具体用于:遍历所述关系链表,确定基础关系,并将所述关系链表中除所述基础关系外的其他关系作为待连接关系;查询元数据表,确定所述基础关系的所属实例以及所述实例的连接计算能力系数;判断所述待连接关系中是否存在关于所述基础关系的缓存路径;若存在,则将缓存路径确定为所述目标传输路径;若不存在,则从普通传输路径和压缩传输路径中选择传输代价较小的路径作为所述目标传输路径。

根据本发明提供一种的数据查询装置,所述处理模块还用于:通过缓存辅助进程申请元数据表共享内存;遍历所述元数据表,将查询到的缓存信息封装并插入共享哈希表;若监控到其他进程对所述元数据表中的数据进行了修改,则封锁所述共享哈希表,删除所述共享哈希表和所述元数据表中的对应数据。

根据本发明提供一种的数据查询装置,所述处理模块还用于:按照预设时间间隔向目标实例发送数据包,得到网络质量信息,所述网络质量信息包括丢包率、网络延迟和网络抖动;根据所述网络质量信息计算所述目标实例的传输路径代价比;将所述目标实例的传输路径代价比存储至共享哈希表。

本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述数据查询方法的步骤。

本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述数据查询方法的步骤。

本发明提供的数据查询方法、装置、电子设备及存储介质,由于提供了多种传输路径来实现跨域数据传输,即缓存路径、普通传输路径以及压缩传输路径,因此,可以综合考虑网络状态、数据量大小、压缩代价等因素,从中选择最优的传输路径,从而提高跨域连接效率。

附图说明

为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的数据查询方法的流程示意图之一;

图2为本发明实施例提供的原始目标链表结构图;

图3为本发明实施例提供的优化后的目标链表结构图;

图4为本发明实施例提供的原始连接条件结构图;

图5为本发明实施例提供的连接条件优化实例图;

图6为本发明实施例提供的缓存路径生成示意图;

图7为本发明实施例提供的普通传输路径分析图;

图8为本发明实施例提供的压缩传输路径分析图;

图9为本发明实施例提供的最优连接路径生成图;

图10为本发明实施例提供的缓存路径执行图;

图11为本发明实施例提供的普通传输路径和压缩传输路径执行图;

图12为本发明实施例提供的缓存辅助进程图;

图13为本发明实施例提供的网络状态检测辅助进程图;

图14是本发明提供的数据查询装置的结构示意图;

图15是本发明提供的电子设备的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本发明实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。

为了便于清楚描述本发明实施例的技术方案,在本发明实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,本领域技术人员可以理解“第一”、“第二”等字样并不是在对数量和执行次序进行限定。

本发明实施例为了阐释的目的而描述了一些示例性实施例,需要理解的是,本发明可通过附图中没有具体示出的其他方式来实现。

下面结合具体实施例和附图对上述实现方式进行详细的阐述。

如图1所示,本发明实施例提供一种数据查询方法,该数据查询方法可以应用于数据查询装置。该数据查询方法可以包括S101-S104:

S101、数据查询装置接收SQL语句,并根据所述SQL语句确定第一语法树。

可选的,数据查询装置可以通过对所述SQL语句的语法分析和语义分析确定第二语法树;然后遍历所述第二语法树的每个连接节点,根据连接节点对应的目标链表确定目标列,并将连接条件转化为过滤条件,得到逻辑优化后的所述第一语法树。

具体的,数据查询装置可以通过S11-S13确定第一语法树:

S11、数据查询装置确定第二语法树。

数据查询装置可以先对SQL语句进行词法分析,即将SQL语句分解为(单词,编号)序列的形式,编号即单词所属类别;然后进行语法分析,即按定义好的文法将通过词法分析产生的序列转化为语法树;之后对产生的语法树进行语义分析,确定整个查询有意义,并根据元数据表,为语法树的各个节点附上详细信息,从而确定第二语法树。

S12、数据查询装置执行目标列优化。

如图2所示,为原始目标链表结构图。数据查询装置可以从第二语法树的根节点开始,遍历第二语法树,搜索连接节点,并遍历一个连接节点的目标链表,对每一个目标执行优化,遍历找到目标所属表,标记该列为所选择列,遍历该连接节点的目标链表后,继续搜索下一个连接节点进行分析,直到遍历完第二语法树,然后搜索关系列表,对每个表项的目标链表中未选择列执行搜索,对未搜索到的列执行删除操作,修正目标链表。如图3所示,为优化后的目标链表结构图。

继续参考图3,数据查询装置可以将连接关系t3中的目标列t1_id和t2_id转化为t1和t2的目标,这样在获取t1数据时,即可提前筛选出t1_id列,不必在网络中传输t1的其他列。

跨域连接目标列优化将对连接关系的目标列转化为对连接关系子节点的目标列,在子节点执行计算时将无关列过滤,从而减少了向连接节点传递数据量的大小。通过检索目标列所属关系,实现对其的转换。特别的,对于跨域连接节点,跨域连接节点的子树通常代表数据移动,如果不将连接关系的目标列转化为其子关系的目标列,则需要在向某实例传输数据时传输该数据表的全部目标列,当该数据表一行比较宽时,会造成高额的通信开销,因此目标列的转化优化手段在网络资源受限的情况下是一种很好的优化手段。

S13、数据查询装置执行连接条件优化。

如图4所示,为原始连接条件结构图。数据查询装置可以在经过目标列优化后的第二语法树中搜索连接节点,并提取连接节点的连接条件集合。然后,解析连接条件,如无意义表达式消除、等价类分析等。之后,对满足预设条件的连接条件执行复制操作,删除该连接条件,将复制后的连接条件加入可优化链表。最后,遍历可优化链表,解析连接条件包含的数据表,将该连接条件转化为过滤条件附到相应数据表的数据结构上,修正该条件部分内容,从而得到第一语法树。如图5所示,为优化后的连接条件结构图。

继续参考图5,连接关系上的连接条件为:“t1.id=t2.id”,“t1.class<10”,“t2.id>1000”,“5>1”,其中“t1.id=t2.id”需要两个表中的列作为一个等值条件,无法将其转化为单个表上的过滤条件,因此可以保留下来,而“t1.class<10”,“t2.id>1000”均只涉及单独的表,不等式的右值是常数,因此可以将其转化为t1、t2的过滤条件,这样在获取t1、t2数据时,即可计算这两个过滤条件,从而减少需要在网络中传输的数据量,而“t1.id>1000”则是由推理得到,因为有“t1.id=t2.id”,因此将t1.id和t2.id视为等价,对t2.id的条件,同样可推理到t1.id,因此产生了这个新的条件,将其附加到t1,可以进一步减小网络传输的数据量。

跨域连接的连接条件优化是将连接节点的连接条件转化为其关系子节点的过滤条件。这种转换需要满足预设条件,如果连接条件只包含单个表的一个或几个列,即可实现对该过滤条件的转化,且满足不影响查询结果;或者是通过等价类分析得出的只和单表有关的过滤条件亦可实现这种转化。在连接关系上的连接条件需要在连接操作计算的时候执行,通过分析推理将连接操作上的过滤条件转为其子节点的过滤条件,使得连接操作表达式计算可以在其子节点提前执行,减少了向连接节点传递的数据,亦减少了计算量。特别的,对于跨域连接操作,在子节点上执行的过滤条件减少了实例间传递的数据量,降低了通信开销,在网络资源受限的情况下是一种很好的优化手段。

S102、数据查询装置从所述第一语法树中查找各实例的数据表信息,并根据所述数据表信息创建查询计划节点的第一传输路径。

其中,所述第一传输路径包括以下至少一项:缓存路径、普通传输路径和压缩传输路径。

可选的,在第一传输路径包括缓存路径的情况下,数据查询装置可以查询共享哈希表,检索与所述数据表信息相关的缓存信息,执行缓存信息匹配操作;将检索到的缓存信息封锁在缓存路径信息中,遍历所述缓存路径信息中的所有缓存信息,寻找每个实例中缓存数据与所需数据差集最小的缓存信息,并创建所述缓存路径;将所述缓存路径附到对应的查询计划节点。

具体的,如图6所示,数据查询装置可以通过优化器在第一语法树中获取各实例的数据表信息,查询共享哈希表,检索相关缓存信息,并执行缓存信息匹配操作,即相关数据表所需的目标列表、过滤条件为缓存信息的子集,对检索出的缓存条目执行相应的封锁,确保该缓存不被删除。然后将缓存信息封装在该表的缓存路径信息中,遍历所有缓存信息,按照过滤条件的包含性关系,寻找每个实例中缓存数据与所需数据差集最小的缓存信息,删除该缓存路径中的其他缓存信息,并解除对它们的封锁。最后,将生成的缓存路径附到相应的查询计划节点。

需要说明的是,跨域连接计算时,要求连接算子之下的扫描算子提供扫描的数据,在网络资源受限的条件下,数据库实例间的通信开销对查询性能影响很大,因此可以根据第一语法树中关于该表的信息,在共享哈希表中进行查找其他实例关于该表的缓存。使用(实例-表)作为键,用于哈希搜索,返回的条目包含了这份缓存的所有信息,如缓存名、缓存行数、缓存位置、缓存所在实例等。使用目标列表、过滤条件来匹配缓存信息,即当前所需的目标列表与过滤条件为缓存信息所述的子集是符合要求的缓存。检索哈希表返回的条目集合,对于每个实例上的缓存,选择缓存信息与所需信息差集最小的缓存为最优缓存,使用最优缓存可以获得更高的性能。如果存在这样缓存,就将其信息封装在缓存路径中,添加到相应的查询计划节点,供执行器使用,否则,缓存路径为空。

可选的,在第一传输路径包括普通传输路径的情况下,数据查询装置可以确定所述数据表信息所属的实例信息;确定传输路径代价比、行宽、行数以及网络修正比;根据所述传输路径代价比、所述行宽、所述行数以及所述网络修正比确定将所述数据表信息传输到每个实例的传输代价;反解析数据表结构,生成所述普通传输路径,并附到对应的查询计划节点。

具体的,如图7所示,数据查询装置可以查询元数据中的实例信息表,获取该数据表所属实例信息;查询元数据中的传输代价邻接矩阵,获取传输路径代价比;解析所选目标列组合,目标列数据类型,估算目标列组合后的行大小;解析过滤条件,查询元数据表包含的数据行数,根据直方图、最值、均值等统计信息估算该过滤条件所筛选出的数据行数;查询实时网络信息,检出实时网络抖动情况、丢包率、平均响应时间、排队时间等信息确定的修正比,结合这个修正比修正传输代价比,根据估算出的数据行数、目标列组合大小和传输代价比率确定传输到每个实例的传输代价;最后反解析数据表结构,生成普通传输路径,将计算出的信息存储在普通传输路径中,添加到相应的查询计划节点。

需要说明的是,对于获取远程实例表数据,虽然缓存路径是最优选择,但不是每次都能成功使用缓存路径的,因此就需要创建普通传输路径来获取远程数据表的数据。

可选的,在第一传输路径包括压缩传输路径的情况下,数据查询装置可以在确定传输路径代价比、行宽、行数以及网络修正比之后,根据目标列类型组合,确定压缩算法并估算压缩比;根据所述传输路径代价比、所述行宽、所述行数、所述网络修正比以及所述压缩比计算压缩传输代价、压缩损耗代价、解压缩损耗代价,并基于所述压缩传输代价、所述压缩损耗代价和所述解压缩损耗代价确定将所述数据表信息传输到每个实例的传输代价;反解析数据表结构,生成压缩传输路径,并附到对应的查询计划节点。

具体的,如图8所示,数据查询装置可以查询实例信息元数据表,确定该数据表所属实例信息,解析该表所选目标列表、目标列类型,估算出行大小;根据目标列类型组合,确定压缩算法,估算压缩比;解析所选目标列组合,目标列数据类型,估算目标列组合后的行大小;解析过滤条件,查询元数据表该表所对应的行数,根据统计信息估算该过滤条件所筛选出的数据行数;根据估算出的数据行数、目标列组合大小、压缩比和传输代价比计算出压缩传输代价,同时计算出压缩、解压缩损耗代价;查询实时网络信息,检出实时网络抖动情况、丢包率、平均响应时间、排队时间等信息,修正压缩传输代价;反解析数据表结构,生成压缩传输路径,将计算出的信息存储在压缩传输路径中,加入相应的查询计划节点。

需要说明的是,压缩传输路径与普通传输路径类似,是在没有可选择的缓存路径的情况下使用的传输路径,目的是缩小在实例传输的数据量,以提升查询性能。压缩传输需要在发送端执行压缩以及在接收端执行解压,虽然可以减少网络传输的数据量,却也增加了压缩解压的成本,因此需要综合考虑需要压缩的数据量、压缩比、以及当时的网络状态,计算压缩传输路径的代价。

S103、数据查询装置确定所述第一语法树中的跨域连接节点,并根据所述跨域连接节点确定关系链表,从所述第一传输路径中确定所述关系链表中每个基础关系的目标传输路径,生成所述跨域连接节点的目标连接路径。

数据查询装置可以遍历所述关系链表,确定基础关系,并将所述关系链表中除所述基础关系外的其他关系作为待连接关系;查询元数据表,确定所述基础关系的所属实例以及所述实例的连接计算能力系数;判断所述待连接关系中是否存在关于所述基础关系的缓存路径;若存在,则将缓存路径确定为所述目标传输路径;若不存在,则从普通传输路径和压缩传输路径中选择传输代价较小的路径作为所述目标传输路径。

具体的,如图9所示,数据查询装置可以先查询跨域连接节点,遍历该跨域连接节点子树将连接关系扁平化为关系链表;遍历关系链表,选择一个关系作为基础关系;查询元数据,确定该基础关系的所属实例以及该实例的连接计算能力系数;选择该关系链表除基础关系外的其他关系作为待连接关系;检查该待连接关系中是否有关于基础关系的缓存路径,如果有缓存路径则选择缓存路径作为该远程计划节点的最优路径,否则,选择普通传输路径和压缩传输路径中代价较小的路径作为最优路径;之后,选择关系链表中的其他关系作为待连接关系,全部关系都为已连接关系,为每个待连接关系计算关于基础关系的最优传输路径;遍历关系链表,根据每个关系的行数、过滤条件以及系统统计信息估算出每个关系的行数,结合基础关系所属实例连接计算能力系数,计算这种基础关系所在实例计算这些数据需要的代价,将该代价与相应的各个传输代价之和作为该连接路径的代价,生成连接路径添加到跨域连接节点;然后选择其他关系作为基础关系计算连接代价,生成连接路径。

S104、数据查询装置通过所述目标连接路径执行跨域查询计划。

若该计划节点的最优路径是缓存路径,数据元组将在本地缓存中读取,如图10所示,为数据查询装置执行缓存路径的示意图。

若该计划节点的最优路径是普通传输路径,数据元组将在远程实例中获取;若该计划节点的最优路径是压缩传输路径,数据元组将在远程实例中获取,与普通传输路径不同的是,压缩传输需要远程实例将检出的元组集合压缩后再传输给本数据库,本数据接受到数据后,先执行解压缩操作,本数据库向远程实例发送带有压缩功能的语句,指定压缩算法。如图11所示,为数据查询装置执行普通传输路径或压缩传输路径的示意图。

需要说明的是,数据查询装置执行缓存路径时,只需要构建一个扫描路径来扫描本地缓存即可,效率最高,缓存路径执行时需要对缓存信息保持封锁,以防止其他操作影响缓存信息的有效性或是辅助进程对缓存信息的修改。

可选的,如图12所示,数据查询装置还可以通过缓存辅助进程申请元数据表共享内存(shared memroy);遍历所述元数据表,将查询到的缓存信息封装并插入共享哈希表;若监控到其他进程对所述元数据表中的数据进行了修改,则封锁所述共享哈希表,删除所述共享哈希表和所述元数据表中的对应数据。

具体的,数据查询装置可以建立缓存元数据表,该步骤仅在初始化数据库时执行一次。创建缓存辅助进程;缓存辅助进程申请共享内存,注册信号处理函数;创建共享哈希表,遍历缓存元数据表,封锁共享哈希表,将查询到的缓存信息封装为key-entry的形式插入共享哈希表,解除共享哈希表的封锁;若收到新的缓存信息,将新的缓存信息插入共享哈希表,并将缓存信息插入缓存元数据表;若监控到其他进程对数据表数据进行了修改操作,缓存辅助进程封锁共享哈希表,删除共享哈希表中相应表数据表对应的数据,并删除缓存元数据表相应的信息。

缓存系统辅助进程是为了维护缓存系统而创建的守护进程,该进程可以接收执行SQL语句的后端进程传来的消息,对当前缓存信息做增加或删除。即该辅助进程维护一个位于共享内存的哈希表,为其他查询进程提供检索服务,并接收其他进程生成的消息,用以更新哈希表和元数据表,如新增一条缓存信息或是使一条缓存信息失效等操作。

上述元数据表用于持久化缓存信息以便在数据库重启或者机器重启后提供数据。元数据表记录了实例、表和相应的缓存关系。

可选的,数据查询装置还可以按照预设时间间隔向目标实例发送数据包,得到网络质量信息,所述网络质量信息包括丢包率、网络延迟和网络抖动;根据所述网络质量信息计算所述目标实例的传输路径代价比;将所述目标实例的传输路径代价比存储至共享哈希表。

具体的,如图13所示,数据查询装置可以创建网络状态检测辅助进程;申请共享内存,注册信号处理函数,创建共享哈希表,遍历元数据表,获取实例信息;每隔时间间隔T,向各个实例发送N个检测数据包,计算丢包率、网络延迟、网络抖动等信息;根据丢包率、网络延迟和网络抖动等信息,计算出额外传输代价比;将实例-额外传输代价比等信息插入共享哈希表。

网络状态检测辅助进程是用来定时检测实例间网络状态的辅助进程,该辅助进程定时地向各个实例发送数据包,计算丢包率、网络抖动等信息,由这些信息计算出额外的传输代价比,向优化器提供这个信息,以获取实时的、更精确的传输代价。该进程维护一个共享哈希表,供查询进程检索,随数据库的启动而创建,数据库的关闭而消亡。

本发明实施例中,由于提供了多种传输路径来实现跨域数据传输,即缓存路径、普通传输路径以及压缩传输路径,因此,可以综合考虑网络状态、数据量大小、压缩代价等因素,从中选择最优的传输路径,从而提高跨域连接效率。

下面通过一个具体实例说明本发明实施例提供的数据查询方法。

以数据库CN现管理三个实例ins1、ins2、ins3、且这三个实例分别位于域1、域2、域3为例。现有三张表students、grade、class分别存储在这三个实例,SQL为:“SELECT name,score, classname FROM students AS stu JOIN grade AS grd ON stu.id = grd.idAND grd.score >= 60 AND stu.id > 500 JOIN class AS cls ON stu.classno =cls.id”。

第1步、上述SQL可以被转化为形如(SELECT,6)、(name,10)的序列,然后数据查询装置执行语法分析,将序列按照文法组织成树的形式,并根据元数据表,为语法树的各个节点附上详细信息。

第2步、数据查询装置搜索连接节点,可以看到,stu X grd X class作为连接节点表示的内容被搜索到;遍历该连接节点的目标链表,即name、score、classname,依次对其进行分析;查询元数据表,可判断各个目标所属的关系,并在关系上标记所选,如name,可以查到是students关系中的列,在相应结构上做标记;搜索下一个连接节点,无;删除无用的目标,如students,在查询树中可以搜索到id、name、classno,其他列删除。

第2步、数据查询装置可以查找到如下连接条件stu.id=grd.id、grd.score>=60、stu.classno=cls.id、stu.id>500;可分析得到stu.id与grd.id为等价关系,stu.classno、cls.id一样,结合stu.id>500,可推理出grd.id>500;将grd.score>=60、stu.id>500、grd.id>500加入可优化链表;将优化链表中的内容转化为过滤条件附到相应数据表的数据结构上。

第3步、通过上述步骤,stu X grd X class 的name、score、classname被转化为stu.name、grd.score、class.classname,连接条件“grd.score >= 60”被转化为grd的过滤条件,“stu.id > 500”被转化为stu的过滤条件,根据推理得“grd.id > 500”作为新的过滤条件附到grd上。如表1所示,为优化后生成的信息。

表1

第4步、数据查询装置生成缓存路径。数据查询装置找到students、class、grade信息;查询缓存哈希表,该表由缓存辅助进程维护,多进程共享。结合表1和表2内容,其中,表1为所需信息,表2为共享哈希表中的现有信息,执行匹配操作,如表1第三条信息与表2第一条信息相匹配,我们对这条缓存信息执行封锁操作;封装缓存信息,生成缓存路径,寻找每个实例中缓存数据与所需数据差集最小的缓存信息,当前只有一条信息,即选择它;将生成的缓存路径附到相应查询计划节点。

表2

数据查询装置接收优化后的第一语法树,尝试生成缓存传输路径,构建如下键:“students-ins2”、“students-ins3”、“grade-ins1”、“grade-ins3”、“class-ins1”、“class-ins2”,在共享哈希表中检索,根据缓存信息,可构建class-ins1的缓存路径,第二条缓存信息不满足子集原则,无法生成缓存路径。

第5步、数据查询装置生成普通传输路径。找到students、class、grade信息;查询元数据中的实例信息表,确定该数据表所属实例信息,如students所属ins1;查询元数据中的传输代价邻接矩阵,确定传输路径代价比;解析所选目标列组合,目标列数据类型,估算目标列组合后的行大小,这一步骤主要目的是估算行宽,如students,id、classno各占8字节,name均值为8字节,行宽16字节;估算行数,主要是结合统计信息计算选择率,查询统计信息行数为1000,id>500结合统计信息最值1、1000,对于大于条件选择率计算:(字段最大值-value)/(字段最大值-字段最小值),计算后为0.5,因此为1000*0.5=500行;查询网络哈希表,该表由网络状态检测辅助进程维护,定时更新,查出修正代价后,即可计算传输代价,如students向ins2传输为例计算普通传输路径代价8*0.5*2.0=8,公式为:传输数据量*传输代价*修正代价;步骤508:反解析数据表结构,生成普通传输路径,添加到相应查询计划节点。

第6步、数据查询装置生成压缩传输路径。压缩传输路径生成与普通传输路径生成相同,此处不再赘述,相较于普通传输路径,压缩传输路径多了计算压缩比,压缩、解压的代价,相应地,代价计算也要做相应的改动,即传输的数据量要除以压缩比,以及最后代价计算要加上压缩与解压的代价。

示例性的,以students为例,id、classno各占8字节,name均值为8字节,行宽16字节,查询统计信息行数为1000,id>500结合统计信息最值1、1000,对于大于条件选择率计算:(字段最大值-value)/(字段最大值-字段最小值),计算后为0.5,因此需要传输的数据量为16*1000*0.5=8000字节,计算压缩比以及压缩代价,计算后的压缩数据为4000字节,压缩/解压代价为5。

进一步地,检查邻接矩阵与修正传输比率,参考表4,以students向ins2传输为例计算普通传输路径代价8*0.5*2.0=8,压缩传输路径代价4*0.5*2.0+5=9,说明students向ins2传输采用普通传输路径较优。

表3

第7步、对于students、class、grade,选择students作为基础关系,之后依次选择class、grade;查询元数据,确定所属实例ins1连接计算能力系数;选择class作为待连接关系,检查是否有关于students和class的缓存路径,检查后存在缓存路径,选择该缓存路径作为最优路径;选择其他的关系作为待连接,这里只有grade,检查后没有关于grade与students的连接路径,因此选择普通传输路径与压缩传输路径中代价较小的作为最优路径;查出各关系行数,结合该实例计算能力,计算出该连接路径代价;为该连接节点添加连接路径,接着依次选择class、grade作为基础关系,计算相应的连接代价,选出最优的连接路径。

进一步地,连接路径计算模块接收路径生成模块传递的计划,不妨假定各实例连接计算能力相同,只考虑传输代价,以students为基表时,最优传输代价为2,grade-ins1选择普通传输路径代价为2,class-ins1选择缓存传输路径,缓存传输路径不计入传输代价;以grade为基表时,students-ins2选择普通传输路径,代价为8,class-ins2选择压缩传输路径,代价为45,总传输代价为53;选择class为基表时,students-ins3选择压缩传输路径,代价5,grade-ins3选择普通传输路径,代价5,总代价10。可以看出选择students为基表,grade-ins1选择普通传输路径,class-ins1选择缓存路径,这条连接路径传输代价最小。

进一步地,在将grade传输到ins1后,生成新的缓存信息存入共享内存区,通知缓存辅助进程更新信息,更新后的缓存信息如表4所示:

表4

上述主要从方法的角度对本发明实施例提供的方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本发明实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

本发明实施例提供的数据查询方法,执行主体可以为数据查询装置,或者该数据查询装置中的用于数据查询的控制模块。本发明实施例中以数据查询装置执行数据查询方法为例,说明本发明实施例提供的数据查询装置。

需要说明的是,本发明实施例可以根据上述方法示例对数据查询装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。可选的,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

如图14所示,本发明实施例提供一种数据查询装置1400。该数据查询装置1400包括:接收模块1401和处理模块1402。所述接收模块1401,可以用于接收SQL语句;所述处理模块1402,用于根据所述SQL语句确定第一语法树;从所述第一语法树中查找各实例的数据表信息,并根据所述数据表信息创建查询计划节点的第一传输路径,所述第一传输路径包括以下至少一项:缓存路径、普通传输路径和压缩传输路径;确定所述第一语法树中的跨域连接节点,并根据所述跨域连接节点确定关系链表,从所述第一传输路径中确定所述关系链表中每个基础关系的目标传输路径,生成所述跨域连接节点的目标连接路径;通过所述目标连接路径执行跨域查询计划。

可选的,所述处理模块1402具体用于:通过对所述SQL语句的语法分析和语义分析确定第二语法树;遍历所述第二语法树的每个连接节点,根据连接节点对应的目标链表确定目标列,并将连接条件转化为过滤条件,得到逻辑优化后的所述第一语法树。

可选的,所述处理模块1402具体用于:查询共享哈希表,检索与所述数据表信息相关的缓存信息,执行缓存信息匹配操作;将检索到的缓存信息封锁在缓存路径信息中,遍历所述缓存路径信息中的所有缓存信息,寻找每个实例中缓存数据与所需数据差集最小的缓存信息,并创建所述缓存路径;将所述缓存路径附到对应的查询计划节点。

可选的,所述处理模块1402具体用于:确定所述数据表信息所属的实例信息;确定传输路径代价比、行宽、行数以及网络修正比;根据所述传输路径代价比、所述行宽、所述行数以及所述网络修正比确定将所述数据表信息传输到每个实例的传输代价;反解析数据表结构,生成所述普通传输路径,并附到对应的查询计划节点。

可选的,所述处理模块1402还用于:根据目标列类型组合,确定压缩算法并估算压缩比;根据所述传输路径代价比、所述行宽、所述行数、所述网络修正比以及所述压缩比计算压缩传输代价、压缩损耗代价、解压缩损耗代价,并基于所述压缩传输代价、所述压缩损耗代价和所述解压缩损耗代价确定将所述数据表信息传输到每个实例的传输代价;反解析数据表结构,生成压缩传输路径,并附到对应的查询计划节点。

可选的,所述处理模块1402具体用于:遍历所述关系链表,确定基础关系,并将所述关系链表中除所述基础关系外的其他关系作为待连接关系;查询元数据表,确定所述基础关系的所属实例以及所述实例的连接计算能力系数;判断所述待连接关系中是否存在关于所述基础关系的缓存路径;若存在,则将缓存路径确定为所述目标传输路径;若不存在,则从普通传输路径和压缩传输路径中选择传输代价较小的路径作为所述目标传输路径。

可选的,所述处理模块1402还用于:通过缓存辅助进程申请元数据表共享内存;遍历所述元数据表,将查询到的缓存信息封装并插入共享哈希表;若监控到其他进程对所述元数据表中的数据进行了修改,则封锁所述共享哈希表,删除所述共享哈希表和所述元数据表中的对应数据。

可选的,所述处理模块1402还用于:按照预设时间间隔向目标实例发送数据包,得到网络质量信息,所述网络质量信息包括丢包率、网络延迟和网络抖动;根据所述网络质量信息计算所述目标实例的传输路径代价比;将所述目标实例的传输路径代价比存储至共享哈希表。

本发明实施例中,由于提供了多种传输路径来实现跨域数据传输,即缓存路径、普通传输路径以及压缩传输路径,因此,可以综合考虑网络状态、数据量大小、压缩代价等因素,从中选择最优的传输路径,从而提高跨域连接效率。

图15示例了一种电子设备的实体结构示意图,如图15所示,该电子设备可以包括:处理器(processor)1010、通信接口(Communications Interface)1020、存储器(memory)1030和通信总线1040,其中,处理器1010,通信接口1020,存储器1030通过通信总线1040完成相互间的通信。处理器1010可以调用存储器1030中的逻辑指令,以执行数据查询方法,该方法包括:接收SQL语句,并根据所述SQL语句确定第一语法树;从所述第一语法树中查找各实例的数据表信息,并根据所述数据表信息创建查询计划节点的第一传输路径,所述第一传输路径包括以下至少一项:缓存路径、普通传输路径和压缩传输路径;确定所述第一语法树中的跨域连接节点,并根据所述跨域连接节点确定关系链表,从所述第一传输路径中确定所述关系链表中每个基础关系的目标传输路径,生成所述跨域连接节点的目标连接路径;通过所述目标连接路径执行跨域查询计划。

此外,上述的存储器1030中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的数据查询方法,该方法包括:接收SQL语句,并根据所述SQL语句确定第一语法树;从所述第一语法树中查找各实例的数据表信息,并根据所述数据表信息创建查询计划节点的第一传输路径,所述第一传输路径包括以下至少一项:缓存路径、普通传输路径和压缩传输路径;确定所述第一语法树中的跨域连接节点,并根据所述跨域连接节点确定关系链表,从所述第一传输路径中确定所述关系链表中每个基础关系的目标传输路径,生成所述跨域连接节点的目标连接路径;通过所述目标连接路径执行跨域查询计划。

又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的数据查询方法,该方法包括:接收SQL语句,并根据所述SQL语句确定第一语法树;从所述第一语法树中查找各实例的数据表信息,并根据所述数据表信息创建查询计划节点的第一传输路径,所述第一传输路径包括以下至少一项:缓存路径、普通传输路径和压缩传输路径;确定所述第一语法树中的跨域连接节点,并根据所述跨域连接节点确定关系链表,从所述第一传输路径中确定所述关系链表中每个基础关系的目标传输路径,生成所述跨域连接节点的目标连接路径;通过所述目标连接路径执行跨域查询计划。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 数据存储方法和装置、数据查询方法和装置、数据结构、电子设备及计算机可读存储介质
  • 数据库中数据的查询方法和装置、存储介质及电子设备
技术分类

06120112986264