函数式查询方法及系统与流程

文档序号:11774803阅读:230来源:国知局
本发明属于计算机的查询优化领域,尤其涉及一种函数式查询方法及系统。
背景技术
::关系型数据库的查询计划以二叉树形式组织,从叶节点向上,通过各个节点的计算,最终汇总为查询结果,当涉及多表连接时,单线程进行数据扫描,在高性能的磁盘和cpu(中央处理器)配置下,无法充分利用硬件优势且执行效率太低。技术实现要素:本发明要解决的技术问题是为了克服现有技术中在多表连接情况下,查询语句的执行效率较低的缺陷,提供一种函数式查询方法及系统。本发明是通过下述技术方案来解决上述技术问题:一种函数式查询方法,包括:s1、将sql(结构化查询语言)查询语句转换为函数式语言的表达语句;s2、将函数式语言的表达语句进行编译生成多个查询指令和至少一个非查询指令;s3、将所述多个查询指令发送到多个线程上并行运行,以分别对多个列表进行查询并生成查询结果;s4、在线程上运行所述非查询指令,以对所述查询结果进行运算。较佳地,步骤s1包括:s101、将sql查询语句进行语法处理生成语法树,所述语法树包括语法元素和执行操作;s102、根据所述语法元素和所述执行操作查询数据字典获取对应的sql数据库对象和sql执行操作;s103、根据映射表将所述sql数据库对象和所述sql执行操作转化为对应的函数式语言的参数和函数式语言的执行操作并生成函数式语言的表达语句。较佳地,所述函数式查询方法还包括:s5、根据非查询指令的运算结果生成结果集。一种函数式查询系统,包括:表达转换模块,用于将sql查询语句转换为函数式语言的表达语句;指令生成模块,用于将函数式语言的表达语句进行编译生成多个查询指令和至少一个非查询指令;查询模块,用于将所述多个查询指令发送到多个线程上并行运行,以分别对多个列表进行查询并生成查询结果;执行模块,用于在线程上运行所述非查询指令,以对所述查询结果进行运算。较佳地,表达转换模块包括:语法处理模块,用于将sql查询语句进行语法处理生成语法树,所述语法树包括语法元素和执行操作;解析模块,用于根据所述语法元素和所述执行操作查询数据字典获取对应的sql数据库对象和sql执行操作;映射模块,用于根据映射表将所述sql数据库对象和所述sql执行操作转化为对应的函数式语言的参数并生成函数式语言的表达语句。较佳地,所述函数式查询系统还包括:结果生成模块,用于根据非查询指令的运算结果生成结果集。本发明的积极进步效果在于:将sql查询语句转换为函数式语言的表达语句来执行查询计划,将函数式的表达语句进行编译生成多个查询指令和至少一个非查询指令,多表连接情况下,多个查询指令在多个线程上并行运行,以实现对多个列表进行并发扫描和过滤,从而提高查询语句的执行效率。附图说明图1为本发明较佳实施例的函数式查询方法的流程图。图2为本发明较佳实施例的函数式查询系统的结构框图。具体实施方式下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。一种函数式查询方法,如图1所示,包括:步骤101、将sql查询语句转换为函数式语言的表达语句,如将sql语句“sql:select*fromt1,t2,t3”转换为“cross_jointable_scane(t1)table_scane(t2)table_scane(t3)”,t1、t2、t3均表示数据表。其中,步骤101具体包括:步骤1011、将sql查询语句进行语法处理生成语法树,所述语法树包括语法元素和执行操作;步骤1012、根据所述语法元素和所述执行操作查询数据字典获取对应的sql数据库对象和sql执行操作,该步骤用于检验数据库中是否存储该sql查询语句中的语法元素和执行操作;步骤1013、根据映射表将所述sql数据库对象和所述sql执行操作转化为对应的函数式语言的参数和函数式语言的执行操作并生成函数式语言的表达语句,如将“select”转化为“crossjoin”;“*fromt1”转化为“table_scane(t1)”。步骤102、将函数式语言的表达语句进行编译生成多个查询指令和至少一个非查询指令;步骤103、将所述多个查询指令发送到多个线程上并行运行,以分别对多个列表进行查询并生成查询结果;步骤104、在线程上运行所述非查询指令,以对所述查询结果进行运算;步骤105、根据非查询指令的运算结果生成结果集。本实施例的函数式查询系统,如图2所示,包括表达转换模块1、指令生成模块2、查询模块3、执行模块4和结果生成模块5。所述表达转换模块1,用于将sql查询语句转换为函数式语言的表达语句,其中,所述表达转换模块具体包括:语法处理模块11,用于将sql查询语句进行语法处理生成语法树,所述语法树包括语法元素和执行操作;解析模块12,用于根据所述语法元素和所述执行操作查询数据字典获取对应的sql数据库对象和sql执行操作;映射模块13,用于根据映射表将所述sql数据库对象和所述sql执行操作转化为对应的函数式语言的参数并生成函数式语言的表达语句。所述指令生成模块2,用于将函数式语言的表达语句进行编译生成多个查询指令和至少一个非查询指令;所述查询模块3,用于将所述多个查询指令发送到多个线程上并行运行,以分别对多个列表进行查询并生成查询结果;所述执行模块4,用于在线程上运行所述非查询指令,以对所述查询结果进行运算。所述结果生成模块5,用于根据非查询指令的运算结果生成结果集。本实施例将sql查询语句转换为函数式语言的表达语句来执行查询计划,将函数式的表达语句进行编译生成多个查询指令,多表连接情况下,多个查询指令在多个线程上并行运行,以实现对多个列表进行并发扫描和过滤,从而提高查询语句的执行效率。虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。技术特征:技术总结本发明公开了一种函数式查询方法及系统,所述函数式查询方法包括:S1、将SQL查询语句转换为函数式语言的表达语句;S2、将函数式语言的表达语句进行编译生成多个查询指令和至少一个非查询指令;S3、将所述多个查询指令发送到多个线程上并行运行,以分别对多个列表进行查询并生成查询结果;S4、在线程上运行所述非查询指令,以对所述查询结果进行运算。本发明通过将SQL查询语句转换为函数式语言的表达语句来执行查询计划,从而实现了在多表连接情况下,实现数据的并发扫描和过滤,从而提高查询语句的执行效率。技术研发人员:姜宇祥受保护的技术使用者:上海携程商务有限公司技术研发日:2017.06.23技术公布日:2017.10.20
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1