logo好方法网

用于数据查询的方法、装置、计算机系统及介质


技术摘要:
本公开提供了一种用于数据查询的方法。所述方法包括:获取对数据库进行查询的第一查询语句;查找缓存中是否存在所述第一查询语句;在所述缓存中没有所述第一查询语句的情况下,解析所述第一查询语句以获得第一执行计划信息;将所述第一执行计划信息中的至少部分信息与  全部
背景技术:
大数据场景下数据量的增加给数据查询带来了挑战。在实际中进行数据查询时发 现,经常使用到数据表往往是少数热点数据表,而且查询语句中会存在大量相似的sq1查询 语句。这样导致存在大量的重复查询操作,造成了集群资源的浪费。现有技术中可以通过缓 存查询语句来减少重复查询操作。 在实现本公开构思的过程中,发明人发现现有技术中至少存在如下问题:现有技 术中是对查询语句进行缓存,这样唯有再次查询的语句与缓存的语句完全一致时,才能够 根据从缓存中直接获得查询结果。这导致缓存命中率低,对查询速度的提升非常有限。
技术实现要素:
有鉴于此,本公开提供了一种能够提高缓存命中率、更进一步地提升查询速度的 用于数据查询的方法、装置、计算机系统及介质。 本公开的第一方面,提供了一种用于数据查询的方法。所述方法包括:获取对数据 库进行查询的第一查询语句;查找缓存中是否存在所述第一查询语句;在所述缓存中没有 所述第一查询语句的情况下,解析所述第一查询语句以获得第一执行计划信息,所述第一 执行计划信息为所述第一查询语句的执行计划信息,所述第一执行计划信息包括所述第一 查询语句的查询条件、数据源信息以及执行操作信息;将所述第一执行计划信息中的至少 部分信息与所述缓存中的已缓存语句的执行计划信息进行匹配,其中,将匹配上的已缓存 语句作为中间查询语句;从所述缓存中获得所述中间查询语句对应的中间查询结果;以及 基于所述中间查询结果,获得所述第一查询语句对应的第一查询结果。 根据本公开的实施例,将所述第一执行计划信息中的至少部分信息与所述缓存中 的已缓存语句的执行计划信息进行匹配,包括基于所述第一查询语句的查询条件,查找所 述缓存中是否存在子查询条件,其中所述子查询条件的范围等于或小于所述第一查询语句 的查询条件,以及在存在所述子查询条件时,将所述第一执行计划信息中的数据源信息和/ 或执行操作信息,与具有所述子查询条件的已缓存语句的执行计划信息进行匹配。 根据本公开的实施例,解析所述第一查询语句以获得第一执行计划信息,包括获 取所述第一查询语句的抽象语法树,以及基于所述抽象语法树得到所述第一执行计划信 息。 根据本公开的实施例,当从所述第一查询语句中拆分出所述中间查询语句后,所 述第一查询语句还包括第二中间查询语句,并且在所述缓存中没有与所述第二中间查询语 句相匹配的缓存语句的情况下,所述基于所述中间查询结果,获得所述第一查询语句对应 的第一查询结果,包括通过所述第二中间查询语句从所述数据库中获取第二中间查询结 5 CN 111597214 A 说 明 书 2/12 页 果,以及将所述中间查询结果与所述第二中间查询结果合并,获得所述第一查询结果。 根据本公开的实施例,所述方法还包括对应缓存所述第一查询语句、所述第一执 行计划信息、以及所述第一查询结果,以及对应缓存所述第二中间查询语句、以及所述第二 中间查询结果。 根据本公开的实施例,所述方法还包括:延长在所述缓存中所述中间查询语句的 缓存时间,或者增加所述缓存中所述中间查询语句的查询命中次数。 根据本公开的实施例,所述缓存为分布式缓存。 根据本公开的实施例,从所述缓存中获得所述中间查询语句对应的中间查询结 果,包括在所述中间查询语句对应的位于所述数据库中的数据表未发生变更时,从所述缓 存中获得所述中间查询语句对应的中间查询结果。所述方法还包括在所述中间查询语句对 应的位于所述数据库中的数据表发生变更时,通过所述中间查询语句从所述数据库中获取 所述中间查询结果,并更新所述缓存中的所述中间查询结果。 本公开的第二方面,提供了一种用于数据查询的装置。所述装置包括查询语句获 取模块、第一查找模块、解析模块、匹配模块、中间结果获得模块以及查询结果获得模块。查 询语句获取模块用于获取对数据库进行查询的第一查询语句。第一查找模块用于查找缓存 中是否存在所述第一查询语句。解析模块用于在所述缓存中没有所述第一查询语句的情况 下,解析所述第一查询语句以获得第一执行计划信息,所述第一执行计划信息为所述第一 查询语句的执行计划信息,所述第一执行计划信息包括所述第一查询语句的查询条件、数 据源信息以及执行操作信息。匹配模块用于将所述第一执行计划信息中的至少部分信息与 所述缓存中的已缓存语句的执行计划信息进行匹配,其中,将匹配上的已缓存语句作为中 间查询语句。中间结果获得模块用于从所述缓存中获得所述中间查询语句对应的中间查询 结果。查询结果获得模块用于基于所述中间查询结果,获得所述第一查询语句对应的第一 查询结果。 根据本公开的实施例,所述匹配模块具体用于基于所述第一查询语句的查询条 件,查找所述缓存中是否存在子查询条件,其中所述子查询条件的范围等于或小于所述第 一查询语句的查询条件,以及在存在所述子查询条件时,将所述第一执行计划信息中的数 据源信息和/或执行操作信息,与具有所述子查询条件的已缓存语句的执行计划信息进行 匹配。 根据本公开的实施例,所述解析模块具体用于获取所述第一查询语句的抽象语法 树,以及基于所述抽象语法树得到所述第一执行计划信息。 根据本公开的实施例,所述查询结果获得模块具体用于通过第二中间查询语句从 所述数据库中获取第二中间查询结果,其中,从所述第一查询语句中拆分出所述中间查询 语句后,所述第一查询语句还包括所述第二中间查询语句,并且在所述缓存中没有与所述 第二中间查询语句相匹配的缓存语句;以及将所述中间查询结果与所述第二中间查询结果 合并,获得所述第一查询结果。 根据本公开的实施例,所述装置还包括缓存模块。所述缓存模块用于对应缓存所 述第一查询语句、所述第一执行计划信息、和所述第一查询结果,以及对应缓存所述第二中 间查询语句、和所述第二中间查询结果。 根据本公开的实施例,所述装置还包括缓存信息记录模块。所述缓存信息记录模 6 CN 111597214 A 说 明 书 3/12 页 块用于延长在所述缓存中所述中间查询语句的缓存时间,或者,增加所述缓存中所述中间 查询语句的查询命中次数。 根据本公开的实施例,所述缓存为分布式缓存。 根据本公开的实施例,所述中间结果获得模块具体用于在所述中间查询语句对应 的位于所述数据库中的数据表未发生变更时,从所述缓存中获得所述中间查询语句对应的 中间查询结果,或者在所述中间查询语句对应的位于所述数据库中的数据表发生变更时, 通过所述中间查询语句从所述数据库中获取所述中间查询结果,并更新所述缓存中的所述 中间查询结果。 本公开的第三方面,提供了一种用于数据查询的计算机系统。所述计算机系统包 括一个或多个处理器、以及用于存储一个或多个程序的存储装置。其中,当所述一个或多个 程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如上所述的方法。 本公开的第四方面,提供了一种计算机可读介质,其上存储有可执行指令。该指令 被处理器执行时使处理器执行如上所述的方法。 本公开的第五方面,提供了一种计算机程序,所述计算机程序包括计算机可执行 指令,所述指令在被执行时用于实现如上所述的方法。 根据本公开的实施例,当缓存中不存在与第一查询语句完全一致的缓存语句时, 可以通过第一查询语句的执行计划信息的至少部分信息与缓存语句的执行计划信息进行 匹配来获取中间查询结果,能够有效地提高缓存命中率,从而在一定程度上提高了数据查 询的速度。 根据本公开的一些实施例,可以按照查询语句和执行计划信息两个粒度进行数据 缓存,从而在进行数据查询时可以通过查询语句和执行计划信息的多粒度匹配,提高缓存 命中率,进而避免了重复查询性操作中所需的计算资源与时间的消耗,在一定程度上对数 据查询起到了加速作用。 附图说明 通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和 优点将更为清楚,在附图中: 图1示意性示出了根据本公开实施例的用于数据查询的方法、装置、计算机系统及 介质的应用场景; 图2示意性示出了根据本公开实施例的用于数据查询的方法的流程图; 图3A示意性示出了根据本公开实施例的用于数据查询的方法中解析查询语句的 方法流程图; 图3B示意性示出了根据本公开实施例的解析得到一个查询语句的抽象语法树的 结构示意; 图4示意性示出了根据本公开实施例的用于数据查询的方法中与已缓存语句匹配 的方法流程图; 图5示意性示出了根据本公开实施例的用于数据查询的方法中获得第一查询结果 的方法流程图; 图6示意性示出了根据本公开另一实施例的用于数据查询的方法的流程图; 7 CN 111597214 A 说 明 书 4/12 页 图7示意性示出了根据本公开实施例的用于数据查询的装置的框图;以及 图8示意性示出了根据本公开实施例的用于数据查询的计算机系统的方框图。
分享到:
收藏