CN109299133A - 数据查询方法、计算机系统及非暂时性计算机可读介质 - Google Patents

数据查询方法、计算机系统及非暂时性计算机可读介质 Download PDF

Info

Publication number
CN109299133A
CN109299133A CN201710944094.1A CN201710944094A CN109299133A CN 109299133 A CN109299133 A CN 109299133A CN 201710944094 A CN201710944094 A CN 201710944094A CN 109299133 A CN109299133 A CN 109299133A
Authority
CN
China
Prior art keywords
programming language
data
logical
write
computer
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
Application number
CN201710944094.1A
Other languages
English (en)
Inventor
田丰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xun Xun Technology (beijing) Co Ltd
Original Assignee
Xun Xun Technology (beijing) Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xun Xun Technology (beijing) Co Ltd filed Critical Xun Xun Technology (beijing) Co Ltd
Publication of CN109299133A publication Critical patent/CN109299133A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2452Query translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/313Logic programming, e.g. PROLOG programming language

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Operations Research (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种数据查询方法、计算机系统及非暂时性计算机可读介质。在示例方法中,计算机系统接收针对关系数据库管理系统中存储的数据的查询。该查询包括以第一编程语言编写的一个或多个第一功能、以及以与该第一编程语言不同的第二编程语言编写的指定计算机代码的一个或多个第二功能。计算机系统基于该查询生成逻辑查询计划,该逻辑查询计划以互连逻辑树的形式包括与一个或多个第一功能相对应的一个或多个第一逻辑节点以及与一个或多个第二功能相对应的一个或多个第二逻辑节点。该计算机系统基于该逻辑查询计划来生成物理执行计划,并且执行该物理执行计划以检索关系数据库管理系统中存储的数据。

Description

数据查询方法、计算机系统及非暂时性计算机可读介质
技术领域
本公开涉及计算机化数据存储系统。
背景技术
计算机可以使用诸如计算机化数据库等的数据存储系统来存储、访问和/或修改数据。作为示例,计算机可以将数据存储在数据库内,使得该数据被记录并保留以供进一步使用。作为另一示例,计算机可以处理、操纵或以其它方式修改数据库内所存储的数据,以根据该数据产生有用或有意义的信息。作为另一示例,计算机可以从数据库中检索数据的副本。
数据库是数据的有组织集合。在一些情况下,数据库可以使用图式、表、查询、报告、视图和/或其它计算机对象的集合来表示数据。
数据库管理系统(DBMS)是与用户、其它应用和数据库本身交互以捕获并分析数据的计算机软件应用。在一些情况下,DBMS可被设计为使得能够进行数据库的定义、创建、查询、更新和管理。示例的DBMS包括MySQL、PostgreSQL、MongoDB、MariaDB、Microsoft SQLServer、Oracle,Sybase、SAP HANA、MemSQL、SQLite和IBM DB2。
关系数据库管理系统(RDBMS)是基于关系模型或者关系模型的近似的DBMS。例如,数据可以用分组成各个关系的元组来表示。根据关系模型组织的数据库是关系数据库。关系模型提供用于指定数据和查询的声明式方法。例如,用户可以直接声明数据库包含什么信息以及用户想要从数据库获得什么信息,并且使数据库管理系统软件负责描述用于存储数据的数据结构和用于回答查询的检索过程。示例的RDBMS包括Oracle、MySQL、MicrosoftSQL Server、PostgreSQL、IBM DB2、Microsoft Access和SQLite。
在一些情况下,关系数据库可以使用SQL(结构化查询语言)数据定义和查询语言。在SQL数据库模式中,表与谓词(predicate)变量相对应。此外,表的内容与关系相对应。此外,关键约束、其它约束和SQL查询与谓词相对应。
发明内容
如本文所述,转换器可以嵌入在RDBMS中以针对RDBMS中存储的数据执行代码。在一些情况下,转换器可用于扩展RDBMS的能力。例如,转换器可用于执行与RDBMS原生的编程语言不同的编程语言的代码。作为示例,RDBMS可以原生地执行以声明式编程语言(例如,SQL)编写的代码,并且转换器可用于使得能够执行诸如命令式编程语言(例如,C++、Java、Ruby、C#、Python、Go、Lips、Haskell、Lips、Haskell、OCaml和/或F#)等的不同语言的代码。
在一些情况下,转换器使得执行引擎能够无缝地执行以多个不同编程语言编写的代码。作为示例,转换器可以使得用户能够选择性地开发采用第一编程语言的代码以进行某些任务,并且选择性地开发采用第二编程语言的代码以进行某些其它任务。可以以无缝方式一起执行代码,而不要求用户操作针对各编程语言的多个不同的系统和/或工作流程。
转换器提供各种技术效果。作为示例,转换器可以扩展RDBMS的能力。例如,转换器使得RDBMS能够执行根据多个不同的编程语言所编写的代码。因而,转换器可以提高RDBMS的能力,使得转换器可以更高效地用在各种不同的上下文中。此外,这里说明了技术效果。
本发明的一方面提供一种方法,包括:计算机系统接收针对关系数据库管理系统中存储的数据的查询。该查询包括以第一编程语言编写的一个或多个第一功能、以及以与第一编程语言不同的第二编程语言编写的指定计算机代码的一个或多个第二功能。该方法还包括:计算机系统基于查询生成逻辑查询计划。生成逻辑查询计划包括:生成与一个或多个第一功能相对应的一个或多个第一逻辑节点。一个或多个第一逻辑节点表示利用一个或多个第一功能定义的关系运算符。生成逻辑查询还包括:生成与一个或多个第二功能相对应的一个或多个第二逻辑节点。一个或多个第二逻辑节点表示利用第二编程语言的计算机代码定义的操作。生成逻辑查询还包括:生成包括表示查询的逻辑树的逻辑查询计划。逻辑树包括与一个或多个第二逻辑节点互连的一个或多个第一逻辑节点。各互连表示节点之间的中间数据的交换。该方法还包括:计算机系统基于逻辑查询计划生成物理执行计划,并且执行该物理查询计划以检索关系数据库管理系统中存储的数据。
该方面的实施例可以包括以下特征中的一个或多个。
在一些实施例中,第一编程语言可以是声明式编程语言。第一编程语言可以是结构化查询语言(SQL)。
在一些实施例中,第二编程语言可以是命令式编程语言。第二编程语言可以是C、C++、Java、Scala、Python、Perl、Go、R、Lisp或F#其中之一。
在一些实施例中,各个第二功能可以包括以第二编程语言编写的指定计算机代码的代码子功能、以第二编程语言编写的指定针对计算机代码的输入数据的输入子功能和指定通过针对输入数据执行计算机代码所得到的输出数据的输出子功能。
在一些实施例中,生成逻辑查询计划可以包括:生成表示查询的多个候选逻辑树;基于一个或多个优化标准来选择多个候选逻辑树中的一个;以及将所选择的候选逻辑树包括在逻辑查询计划中。
在一些实施例中,一个或多个优化标准可以包括以下至少之一:关系数据库管理系统中存储的数据的数据大小、关系数据库管理系统中存储的数据的排列或与检索关系数据库管理系统中存储的数据相关的估计资源成本。
在一些实施例中,一个或多个优化标准可以包括与执行第二编程语言的计算机代码相关的估计资源成本。
本发明的其它方面涉及用于执行本文所述的功能的系统、装置和非暂时性计算机可读介质。
在以下附图和具体实施方式中详细描述了一个或多个实施例。通过以下具体实施方式和附图以及权利要求书,其它特征和优点将变得明显。
附图说明
图1是用于存储、检索并修改数据的系统的框图。
图2是用于在RDBMS中执行查询的示例处理的流程图。
图3是逻辑查询计划的示例逻辑树的图。
图4是逻辑查询计划的另一示例逻辑树的图。
图5是示例计算机系统的图。
具体实施方式
转换器(transducer)是接收一个输入序列并且基于该输入序列产生不同的输出序列的组件。在一些情况下,转换器可以基于单个相应输入(例如,当前输入值)产生单个输出。在一些情况下,转换器可以累积一段时间内的输入数据(例如,获得多个输入的序列),并且基于这些输入来生成一个或多个输出。转换器可以用在各种上下文中,以诸如根据数据产生有用或有意义的信息等。
如本文所述,转换器可以嵌入在RDBMS中以针对RDBMS中所存储的数据执行代码。在一些情况下,转换器可用于扩展RDBMS的能力。例如,转换器可用于执行与RDBMS原生的编程语言不同的编程语言的代码。
作为示例,RDBMS可以原生地执行以声明式编程语言编写的代码。声明式编程语言的语言风格为,无需描述计算的控制流而表现计算的逻辑。从实际角度,声明式编程语言关注于程序应实现什么而无需指定程序应如何实现结果。例如,使用声明式编程语言,用户可以直接声明数据库包含什么信息和用户想要从数据库获得什么信息。作为响应,RDBMS解析用户的指令,并且处理数据结构和检索过程的描述,其中,数据结构用于存储数据,检索过程用于回答查询。示例的声明式编程语言包括SQL、Query By Example(QBE)和Pig Latin等。
然而,转换器可用于使得能够在执行引擎内执行诸如命令式编程语言(还被称为“过程式”编程语言或“功能式”编程语言)等的不同语言的代码。命令式编程语言是使用改变程序的状态和/或定义控制流的语句的语言。从实际角度,命令式编程语言关注于描述程序如何工作。例如,使用命令式编程语言,用户可以直接声明用于执行特定任务的特定过程、功能、自变量和/或参数。作为响应,RDBMS解析用户的指令,并且按照规定执行这些指令。示例的命令式编程语言包括C++、Java、Ruby、C#、Python、Go、Lips、Haskell、Lips、Haskell、OCaml和F#等等。
编程语言不必仅是声明式的或仅是命令式的,而是可以包括这两者的特性。作为示例,Scala是包括命令式编程语言和声明式编程语言这两者的特性的编程语言。
在一些情况下,转换器使得执行引擎能够无缝地执行采用多个不同的编程语言编写的代码。作为示例,转换器可以使得用户能够选择性地开发采用第一编程语言的代码以进行某些任务,并且选择性地开发采用第二编程语言的代码以进行某些其它任务。这些代码可以以无缝方式一起被执行,而不要求用户针对各编程语言操作多个不同的系统和/或工作流。
转换器提供各种技术效果。在一些情况下,转换器扩展RDBMS的性能。例如,诸如SQL等的声明式编程语言依赖于关系代数或等价的一阶逻辑的运用。关系代数经常很好地适合特定类型的工作负荷(即,通过使用一阶查询来识别数据库中的关注记录)。然而,关系代数可能不太适合诸如图形数据、流事件数据、深度学习等的应用,这是因为这些应用中所使用的查询往往难以使用关系代数来表示。此外,RDBMS在执行这些查询上也经常不够高效。
作为对比,命令式编程语言经常更适合在不是声明式编程语言的上下文中。例如,在一些情形下,用户可能更容易使用命令式编程语言来开发代码以实现特定期望结果。此外,根据命令式编程语言所编写的代码经常被计算机系统更高效地执行,由此提高性能。
转换器使得RDBMS能够执行根据多个不同的编程语言所编写的代码。因而,转换器可以提高RDBMS的能力,使得转换器可以更高效地用在各种不同的上下文中。此外,提高了RDBMS的性能。
图1是用于存储、检索和修改数据的系统100的框图。系统100包括一个或多个数据相关处理102(例如,在该系统上执行的计算机程序或计算机程序的一部分)、执行引擎104以及一个或多个数据存储系统106。
在示例实施例中,用户(例如,经由适当的用户接口)与系统100交互以创建、删除和修改数据。在用户期望存储特定数据(例如,保留特定数据以供后续检索)的情况下,数据相关处理102将该数据与请求一起发送至执行引擎104。而该执行引擎解释并执行请求,并且将该数据发送至数据存储系统106以供存储(例如,在一个或多个物理存储装置或者逻辑单元内)。
作为另一示例,在用户期望检索特定数据时,数据相关处理102将针对该数据的请求发送至执行引擎104。执行引擎104解释该请求,从数据存储系统106中检索所请求的数据,并且使该数据可供数据相关处理102利用。
作为另一示例,在用户期望修改特定数据时,数据相关处理102将请求和修改后的数据发送至执行引擎104。执行引擎104解释该请求并执行该请求,并且将修改后的数据发送至数据存储系统106以供存储。
系统100的各种组件可以互连,使得这些组件各自可以相对于其它互连组件发送数据和接收数据。例如,系统100的一些组件可以按照使得数据相关处理102可以与执行引擎104进行通信、以及使得执行引擎104可以与数据存储系统106进行通信的方式来被连接。可以以各种方式实现组件的互连。在一些实施例中,一些组件可以通过以下方式来直接连接至其它组件,例如经由串行总线连接、系统总线或其它直接连接等。在一些实施例中,系统100的一些组件可以经由局域网(LAN)、经由诸如因特网等的广域网(WAN)、或者经由诸如光纤通道网络、iSCSI网络、以太网上的ATA或HyperSCSI网络等的存储区域网络(SAN)互连。还可以使用其它类型的网络,例如电话网络(蜂窝和/或有线)、Wi-Fi网络、蓝牙网络、近场通信(NFC)网络或能够在互连系统之间发送数据的其它网络。在一些实施例中,两个或更多个网络可以互连,使得连接至一个网络的组件可以与连接至另一网络的装置进行通信。在一些实施例中,一些组件可以例如经由串行总线连接或其它直接连接而直接连接至其它组件。在一些实施例中,可以利用云存储接口来管理组件中的一个或多个(例如,数据存储系统106)。在示例中,数据存储系统106可以分布在一个或多个网络上,并且云存储接口可以管理来自/去往执行引擎104的数据相关请求。
在一些实施例中,用户可以经由适当的用户接口与系统100交互以直接地或间接地处理数据。作为示例,系统100可以是客户端计算装置,诸如台式计算机、膝上型计算机、个人数字助理(PDA)、智能电话、平板计算机或者使得用户能够查看数据或与数据交互的任何其它计算装置。在一些实施例中,系统100不是直接地与用户交互,而是经由中介系统间接地从用户接收指令和数据。作为示例,系统100可以是计算装置,诸如经由一个或多个客户端计算装置间接地从用户接收指令和数据的服务器计算机等。在一些实施例中,系统100根本不必从用户接收指令和数据。例如,在一些情况下,系统100可以自动化,使得系统100创建、删除和修改数据,而无需来自用户的大量输入。
数据相关处理102是创建、存储、访问和/或修改数据的计算机化处理。作为示例,数据相关处理102可以是执行用于创建、存储、访问和/或修改数据的特定任务的可执行指令(例如,计算机程序)的一个或多个实例(instance)。可以在各种组件上实现数据相关处理102。例如,在一些实施例中,可以在用于执行数据存储装置(例如,存储器和物理存储装置等)上所存储的指令集合的处理设备(例如,计算机处理器)上实现数据相关处理102。这些指令在被执行时,可以执行数据处理任务。在一些实施例中,数据相关处理102可以是用于执行除创建、存储、访问和/或修改数据以外的附加功能的更广泛应用(例如,计算机程序)的子处理。作为示例,在一些实施例中,数据相关处理102可被实现为操作系统内核的一部分。
执行引擎104是用于进行如下操作的组件:解析并解释来自数据相关处理102的请求;优化该请求;并且执行该请求以存储、访问和/或修改数据存储系统106上所存储的数据。例如,执行引擎104可以接收具有一个或多个查询或命令的请求,解释这些命令或查询以确定这些命令或查询的含义,优化该请求使得可以更加高效地和/或有效地执行该请求,并且执行这些命令或查询以实现该请求。执行引擎104可以包括诸如解析器模块120、优化模块130和执行模块140等的各种子组件以进行这些任务中的各任务。执行引擎104可以包括一个或多个转换器模块150以提供附加功能和/或修改执行引擎104的功能。
在一些情况下,执行引擎104还可以以一个或多个计算机系统可以容易地理解的格式来管理信息的存储和检索。例如,执行引擎104可以包括数据存储器中(例如,存储介质上)的数据排列方式的规范、以及使得能够对数据进行操作(例如,数据的读取和写入)的实用程序(utilities)这两者。作为示例,执行引擎104可以包括控制如何从一个或多个数据存储系统106存储并检索数据的一个或多个计算机化处理或组件。例如,执行引擎104可以控制如何从物理存储装置存储并检索数据,所述物理存储装置诸如盘访问存储装置(例如,硬盘驱动器)、非易失性随机存取存储器(RAM)装置、易失性RAM装置、闪速存储器装置、磁带驱动器、存储卡或者能够保留信息以供将来检索的任何其它装置。作为另一示例,执行引擎104可以包括控制如何从数据存储系统106的一个或多个逻辑单元(例如,由一个或多个物理存储装置或其它存储单元映射到的一个或多个逻辑单元)存储并检索数据的一个或多个计算机化处理或组件。
在一些情况下,系统100可以是RDBMS。例如,系统100可以将数据存储在关系数据库(例如,按照被分组成各个关系的元组来表示数据的数据库)中。此外,数据相关处理102可以是基于查询来访问数据的计算机化处理,该查询由以声明式编程语言(例如,SQL)编写的代码(例如,部分代码指定针对信息的请求)来表示。
图2示出用于在RDBMS中执行查询的示例处理200。例如可以使用系统100来执行处理200,以处理用以从系统100中检索数据的查询。
系统100解析查询(步骤202)。作为示例,查询可以利用代码来表示,并且根据纯文本(例如,包括使用数字字母特征和/或符号编写的一个或多个命令)来编写。系统100可以(例如,使用解析器模块120)解析代码以确定利用代码表示的各个命令之间的存在关系。作为示例,可以利用SQL编写的代码来表示查询。查询中可包括的示例SQL命令包括SELECT(例如,从数据库中提取数据)、UPDATE(例如,更新数据库中的数据)、DELETE(例如,从数据库中删除数据)、INSERT INTO(例如,将新数据插入数据库中)、CREATE DATABASE(例如,创建新的数据库)、ALTER DATABASE(例如,修改数据库)、CREATE TABLE(例如,创建新的表)、ALTERTABLE(例如,修改表)、DROP TABLE(例如,删除表)、CREATE INDEX(例如,创建索引或搜索关键字)和DROP INDEX(例如,删除索引)等。
系统100将查询转换成用于从系统100检索所请求的数据的逻辑查询计划(步骤204)。这例如可以使用解析器模块120来进行。逻辑查询计划是描述为了实现查询而可以进行的一个或多个关系代数运算的一组信息。示例的关系代数运算包括合集(∪)、交集(∩)、差(–)、选择(σ)、投影(π)、联接重复删除(δ)、分组和聚合(γ)、排序(τ)和重命名(ρ)等。
在一些情况下,逻辑查询计划可被表示为具有两个或更多个互连逻辑节点的逻辑树。作为示例,在图3中示出简化的逻辑树300。逻辑树300包括多个逻辑节点302,其中各逻辑节点302表示为了实现查询所进行的不同关系代数运算。
此外,逻辑树可以表示进行不同的关系代数运算的顺序以及各关系代数运算的输入和输出之间的关系。例如,可以以分层方式执行与逻辑节点相对应的运算。例如,可以首先执行与逻辑树的最下层中的逻辑节点相对应的运算,之后执行与稍高的下一层中的逻辑节点相对应的运算,等等,直到执行了所有运算为止。此外,可以使用来自一个运算的输出作为另一运算的输入,使得对数据相继进行多个不同的运算。这例如可以通过逻辑节点之间的互连来表示,其中各互连表示这些逻辑节点之间的中间数据的交换。
作为示例,如图3所示,逻辑树300包括相对于第一层(例如,顶层)定位的逻辑节点302a、相对于第二层定位的逻辑节点302b和302c以及相对于第三层(例如,底层)定位的逻辑节点302d~302f。首先执行与(例如,第三层中的)各个逻辑节点302d~302f相对应的运算,之后执行与(例如,第二层中的)逻辑节点302b和302c各自相对应的运算,之后执行与(例如,第一层中的)逻辑节点302a相对应的运算。此外,使用逻辑节点302d的输出作为逻辑节点302b中的输入(利用连接线来表示)。同样,使用逻辑节点302e和302f的输出作为逻辑节点302c中的输入。同样,使用逻辑节点302b和302c的输出作为逻辑节点302a中的输入。
尽管在图3中示出示例的逻辑树300,但应当理解,这仅是例示性示例。实际上,逻辑树可以包括任意数量的逻辑节点,所述逻辑节点可以配置成任何数量的层并且利用任何数量的不同方式互连。
系统100将逻辑查询计划转换成用于从系统100中检索所请求的数据的物理执行计划(步骤206)。这例如可以使用解析器模块120来进行。物理执行计划是描述如何进行逻辑查询计划中所使用的一个或多个关系代数运算的一组信息。在一些情况下,物理执行计划可以与逻辑查询计划相似(例如,包括逻辑树中的关系代数运算的排列),并且还附加包括与如何将数据提供至逻辑树的各节点有关的信息。例如,物理执行计划可以包括描述要用作输入的数据相对于逻辑节点中的一个或多个逻辑节点的位置的信息(例如,访问路径、文件扫描或该数据的索引)。作为另一示例,物理执行计划可以包括描述可以如何执行各运算的信息(例如,特定计算机处理、技术或进行该运算所要使用的算法)。作为另一示例,物理执行计划可以包括描述执行运算的时间的调度信息。
随后,系统100执行物理执行计划以从系统100中检索所请求的数据(步骤208)。这例如可以使用执行模块140来进行。在一些情况下,可以将所请求的数据直接返回至数据相关处理(例如,可以将所请求的数据的副本发送至数据相关处理以供使用)。在一些情况下,可以将所请求的数据存储在单独位置中,并且可以将所请求的数据的位置发送至数据相关处理。
如本文所述,转换器可以嵌入在RDBMS中以针对RDBMS中所存储的数据执行代码。在一些情况下,可以使用转换器来扩展RDBMS的能力。例如,可以使用转换器来执行与RDBMS原生的编程语言不同的编程语言的代码。
作为示例,如图1所示,执行引擎104包括转换器模块150。转换器模块150可被配置为解析、解释和/或执行以除执行引擎104原生的(例如,解析器模块120原生的)编程语言以外的一个或多个编程语言所编写的代码。例如,在一些情况下,执行引擎104可被配置为使用解析器模块120来原生地处理以声明式编程语言(例如,SQL)编写的代码,而转换器模块150可被配置为处理以命令式编程语言(例如,Python)编写的代码。因而,执行引擎104可以使用转换器模块150来执行两个或更多个不同的编程语言的代码。
在一些情况下,执行引擎104可以使用解析器模块120来将查询转换成逻辑查询计划。例如,解析器模块120可以生成表示该查询的逻辑树,并且利用一个或多个互连的逻辑节点来填入该逻辑树,所述逻辑节点表示为了实现该查询而可以进行的一个或多个运算。在一些情况下,逻辑树可以包括与以执行引擎104原生的编程语言(例如,SQL)编写的命令相对应的一个或多个逻辑节点。此外,逻辑树可以包括与以转换器模块150可以解析、解释并执行的不同编程语言(例如,Python)编写的命令相对应的一个或多个逻辑节点。作为示例,参考图3,逻辑节点302a~302f中的一个或多个可以与以执行引擎104原生的(例如,解析器模块120原生的)编程语言编写的命令相对应,而逻辑节点302a~302f中的一个或多个可以与以转换器模块150可以解析、解释和执行的不同编程语言编写的命令相对应。
在一些情况下,执行引擎104可以使用解析器模块120来解析从数据相关处理102接收到的查询,并且生成针对以执行引擎104原生的编程语言编写的任何命令的逻辑节点。此外,在解析器模块120遇到以不是执行引擎104原生的编程语言编写的代码的情况下,执行引擎104可以选择性地调用、发起或访问(call on)转换器模块150。在一些情况下,在解析器模块120遇到指定使用转换器模块150的命令或功能(例如,转换器模块150特定的功能或其它命令)的情况下,执行引擎104选择性地调用、发起或访问转换器模块150。在一些情况下,这些命令或功能可以是用户定义的功能。
作为简化示例,以下示出代码序列:
在该示例中,代码包括用SQL编写的命令(例如,“SELECT”和“FROM”)、以及以第二编程语言编写的命令(例如,利用“[transducer code]”来表示)。利用子功能(例如,“Transducer”)来指定以第二编程语言编写的命令。此外,利用各个子功能(例如,“Transducer_Output”和“Transducer_inputs”)来指定以第二编程语言编写的针对所述命令的输入和输出。
在将查询提供至执行引擎104以供执行的情况下,执行引擎104使用解析器模块120来解析代码,并且识别以执行引擎104原生的(例如,解析器模块120原生的)编程语言编写的命令。在该示例中,SQL是执行引擎104原生的。因而,执行引擎104将使用解析器模块120来生成具有表示这些命令的一个或多个逻辑节点的逻辑计划。
然而,在执行引擎104遇到以第二编程语言编写的指定这些命令以及这些命令的输出和输入的子功能(例如,“Transducer”、“Transducer_Output”和“Transducerinputs”)的情况下,执行引擎104调用、发起或访问转换器模块150以处理该代码(“[transducer code]”)。而转换器模块150解析并解释以第二编程语言编写的命令,并且生成表示该节点的逻辑节点。而转换器模块150将该逻辑节点提供至执行引擎104(例如,提供至解析器模块120)以包括在逻辑查询计划中。
在一些情况下,利用特定逻辑节点(例如,“转换器逻辑节点”)表示写入第二编程语言中的命令。此外,这些命令的输入由从另一逻辑节点指向转换器逻辑节点的互连来表示,并且表示数据如何被发送至转换器逻辑节点以供处理。此外,这些命令的输出由从转换器逻辑节点指向另一逻辑节点的互连来表示,并且表示数据如何从转换器逻辑节点被发出以供进一步处理。
执行引擎104继续使用解析器模块120来解析并解释其余代码以在逻辑查询计划的逻辑树中添加逻辑节点,从而根据需要选择性地访问转换器模块150以解释非原生编程语言的代码。在执行引擎104使用解析器模块120生成逻辑查询计划之后,执行引擎104使用解析器模块120生成相应的物理执行计划,并且使用执行模块140来执行物理执行计划。
逻辑查询计划可以包括嵌入其它逻辑节点(例如,与以不是执行引擎104原生的编程语言编写的命令相对应的逻辑节点)之间的、由转换器模块150所提供的逻辑节点(例如,与以执行引擎104原生的编程语言编写的命令相对应的逻辑节点)。因而,逻辑查询计划在转换成物理执行计划并且由执行引擎104执行的情况下,表示两个或更多个不同语言的命令的无缝执行。结果,执行引擎104(否则其可能使用解析器模块120来解释单个编程语言的执行命令)可以无缝地执行根据多个不同的编程语言所编写的命令。这使得用户能够使用多个不同语言来开发代码,并且根据用户的应用的需求来选择性地使用不同的编程语言。作为示例,在一些情况下,用户可以使用SQL命令来进行特定任务,并且使用Python命令来进行特定其它任务。可以无缝地一起执行这些命令的各个命令,而不要求用户操作多个不同系统和/或工作流以执行这些命令。
在一些情况下,逻辑查询计划可以在被转换成物理执行计划之前被“优化”。这例如可以使用优化模块130来进行。如本文所述,逻辑查询计划是描述为了实现该查询而可以进行的一个或多个关系代数运算的一组信息。由于声明式编程语言的性质(其使得用户能够简单地声明数据库包含什么信息以及用户想要从数据库获得什么信息,而无需指定如何进行这些任务),多个不同的逻辑查询计划可以潜在地表示相同的查询。例如,即使在逻辑查询计划中所指定的特定步骤和步骤顺序可能不同,被转换成物理执行计划并且由执行引擎执行的多个不同的逻辑查询计划也可能得到相同的输出。
为了改善系统的性能,可以优化逻辑查询计划,使得逻辑查询计划的使用更快和/或更高效。在一些情况下,优化模块130可以生成表示特定查询的多个不同的候选逻辑树。优化模块130可以选择这些候选逻辑树其中之一以包括在逻辑查询计划中。在一些情况下,优化模块130可以基于诸如以下等的因素或标准来作出选择:关系数据库管理系统中所存储的数据的数据大小、关系数据库管理系统中所存储的数据的排列、或者与检索关系数据库管理系统中所存储的数据相关的估计资源成本。在一些情况下,可以基于与执行以不是执行引擎原生的编程语言编写的代码(例如,由转换器解析、解释并执行的代码)相关的估计资源成本来选择逻辑树。
作为示例,可能存在多个(例如,数百万个)不同的逻辑树(在被执行的情况下),这些逻辑树均产生针对查询的正确答案。可以通过选择执行成本最小(或相对较低)的一个这种逻辑树来进行优化。为了选择该树,优化模块可以计算执行这些逻辑树各个的估计成本。
可以使用统计和排序(ordering)信息来计算成本。可以使用的示例统计例如包括输入至特定逻辑节点(例如,关系代数运算)的行数、输入数据的直方图和系统可用的系统资源(例如,可用存储器)。系统可以使用该信息来计算针对逻辑节点的输出的统计(例如,行数、输出数据的直方图等)。可以使用该信息来优化从该逻辑节点接收输入的其它逻辑节点。
在优化处理期间,分区和排序信息也可以是有用的。例如,如果优化模块知晓输入数据已相对于特定列中的值进行了排序,则优化模块可以选择利用该信息的算法。例如,如果优化模块知晓数据排序成组,则可以逐个组执行组内的数据的聚合(例如,总和、平均值等),而不必使用哈希表来将数据分成组。
在一些情况下,转换器模块150还可用于优化逻辑查询计划。例如,优化模块130可以确定要输入至与“转换器”代码(例如,转换器模块150所处理的而不是解析器模块120原生的代码)相对应的逻辑节点中的数据的统计。转换器模块150可以以与以上针对优化模块类似的方式使用信息。
作为示例,优化器模块可以确定要输入至与转换器节点相对应的逻辑节点中的输入数据的统计(例如,数据中的行数、数据的直方图等),并且调用转换器所供给的功能以将该信息供给至转换器模块。转换器模块可以使用该信息以优化转换器代码。例如,如果输入的行数相对较小并且适合存储器,则转换器模块可以使用诸如“快速排序”等的存储器内排序算法。然而,如果行数相对较大并且不能适合存储器,则作为代替,转换器模块可以选择外部归并排序(external merge sort)。
同样,转换器模块可以计算与从转换器节点相对应的逻辑节点输出的数据有关的统计(例如,输出数据中的行数、输出数据的直方图等),并且将这些供给回给优化模块,作为对于优化模块调用转换器模块的响应。以与上述类似的方式,优化模块可以使用所返回的信息来继续优化查询的其余部分。
尽管图1示出具有解析器模块120、优化模块130、执行模块140和转换器模块150作为子组件的执行引擎104,但应当理解,这是示例性示例。实际上,这些模块中的一个或多个可以与执行引擎104分开实现。作为示例,在一些情况下,转换器模块150可以与执行引擎104分开实现,并且执行引擎104可以与转换器模块150进行通信以提供这里所述的功能。
第一示例应用
以下针对历史股票价格描述了转换器的示例应用。在表1中示出RDBMS中所存储的一组示例数据。
<u>股票符号</u> <u>天</u> <u>价格</u>
A 1 1.05
A 2 1.07
A 3 1.11
A 4 1.02
A 5 1.09
A 6 1.13
B 1 22.3
B 2 20.1
表1.RDBMS中所存储的一组示例数据
表1示出一系列天数内的两只股票“A”和“B”的历史价格。这可被称为“时间系列”数据。
用户可能希望将该时间系列数据合并成“走势”。例如,对于各股票,用户可能希望求出该股票持续上涨或下跌的天的范围(例如,连续收益或亏损的“走势”)。
参考股票“A”,在第1天~第3天内,该股票从$1.05上涨到$1.11。然后,在第3天~第4天内,该股票从$1.11下跌到$1.02。然后,在第4天~第6天内,该股票从$1.02上涨到$1.13。
针对这种查询编写SQL相对较难。例如,为了判定第N天的股票价格是大于还是小于前一天的股票价格,将需要知晓来自第N-1天的数据。这种表述难以在关系数据库中表示。例如,使用联机分析处理(OLAP)窗功能,可以使用SQL来从表中的“先前行”访问数据。然而,并不知晓走势的长度的上限。因而,这基本上超出了关系代数的表现力。此外,尽管递归查询和OLAP窗函数的组合理论上可以表示该查询,但该结果将复杂且不够高效,并且可能或多或少偏于实际值。
然而,可以使用过程程序(例如,使用命令式编程语言所编写的程序)来更高效地实现这种查询。例如,可以将股票“A”的价格数据反馈到相对简单的过程程序中,并且该程序仅需追踪开始走势的标记日期。这种任务用命令式编程语言表示(例如,与开发复杂SQL查询以进行相同任务相比)相对简单。此外,该代码执行起来比较高效。例如,代码将具有线性走势时间,并且具有相对恒定的存储器消耗。
以下提供用于调用转换器的示例伪代码:
注意,“INPUT_DATA”可以利用任何SQL子查询。通常,在“不共享”(SN)架构中,可以在多个计算机节点中对数据进行划分。因此,不必按“股票符号”对数据进行划分。此外,针对各“股票符号”,数据不必采用日期顺序。因而,可以将“INPUT_DATA”写为:
SELECT row_number()OVER(PARTITION_BY Symbol ORDER BY Date)
Symbol,Date,Price
FROM DATA
“OVER(PARTITION BY…ORDER BY…)”是标准SQL OLAP窗口规范子句。将强制约束输入至转换器中的数据按“股票符号”划分并且按日期排序。
例如,进一步查询转换器的结果以求出各股票的上涨走势的平均长度。例如:
SELECT Symbol,AVG(end_date–start_date)--compute average length
FROM TRANSDUCER_SUBQUERY
WHERE end_price&gt;=start_price--we treat no change as ascending
GROUP BY Symbol
如图4所示,可以将上述SQL中的转换器代码转译成关系运算符“TR”(例如,转换器逻辑代码)并且包括在逻辑查询计划的逻辑树400中,位于其它关系运算“联接”和“扫描”(例如,其它逻辑节点)之间。此外,可以优化逻辑查询计划。例如,优化模块可以首先优化输入“TR”并且推导该输入的统计。如果提供了分区或排序信息,则优化模块可以向转换器通知这些约束。转换器可以使用该信息来优化其自身的代码,然后将关于该优化代码的统计提供给优化模块。优化模块可以使用该信息以优化其余查询。
转换器还可以将分区/排序信息供给回至优化模块。例如,在该示例中,在计算走势之后,数据仍按“股票符号”分区并且输出按开始日期排序。获得至转换器的统计并将该统计反馈回至优化模块的这种机构,可以被用来产生优化的高效计划。
在一些情况下,可以在多个计算机节点上并行执行查询。转换器节点和关系运算符之间的数据通信可以是有限的(例如,恒定的存储器消耗)并且无死锁。此外,转换器代码可以是JIT的以提高性能。此外,转换器实现的时间复杂度是O(n)(例如,相对于时间呈线性)并且空间复杂度是O(1)(例如,恒定)。这是理论上的最优结果。
以下包括用以进行上述功能的示例代码。
load.sql–该查询将产生模拟股票价格数据并且将该数据加载到数据库中的表内。该数据将包括与四只股票(“S1”、“S2”、“S3”、“S4”)有关的信息,其中各股票具有200天的价格数据(第0天~第199天)。各股票在交易日有80%的机会上涨,并且在交易日有20%的机会下跌。
tsrun.sql–该查询将处理由load.sql所生成的数据并且产生上涨走势和下跌走势。请注意,该查询将使用SQL OLAP窗函数,row_number()over(按符号分区,按天排序)以强制按股票符号分区并按交易日排序。这些制约对于转换器代码的正确性和效率而言是重要的。
以上的两个示例查询难以用SQL表示,并且此外,难以在关系数据库中高效地执行。例如,为了生成模拟数据并产生走势,需要各个股票的“历史”知识(例如,股票的当前状态以及股票的前一状态)。这可以使用用不同的编程语言编写的代码(例如,Go)来更加容易地实现。
第二示例应用
以下针对合著数据库(co-authorship database)来描述转换器的示例应用。
可以将图形数据(有时称为“树数据”)的结构存储在RDBMS中。在示例方案中,图形可被编码为边表(edge table),其中各块行表示图形中的边(从源到目的地)。例如:
CREATE TABLE Edge(src int,dest int);
然而,图形算法可能难以用SQL(例如,使用关系代数)表示。可选地,许多可用的图形算法可以使用Bulk Sync Parallel(大容量同步并行,BSP)方案来并行地执行。因而,BSP方案可以使用转换器而不是通过使用SQL来实现。
作为示例,难以用SQL执行Bread First Search(宽度优先搜索,BSF)。然而,BFS可以在使用BSP的命令式编程语言中更容易地实现。以下包括这种处理所用的示例伪代码:
以下说明用以执行上述功能的示例代码。
dblp.sql–DBLP是计算机科学领域的学术出版物的合著图。该查询在该图形数据库内运行BFS(Breadth First Search,宽度优先搜索)。该算法使用BSP(Bulk SynchronousParallelism,批量同步并行)以在所有的数据库节点上并行地运行该算法。
上述的示例查询难以用SQL来表示,并且此外,难以在关系数据库中高效地执行。例如,图形查询数据在性质上是递归的。针对图形数据编写递归SQL查询较为困难。例如,如果图形是无循环的树,则可能可以开发SQL查询,但将是困难的。如果有循环,由于RDBMS不能正确地处理循环并且将系统挂起,因此可能非常困难并且潜在危险。这可以使用用不同的编程语言(例如,Go)编写的代码来更容易地实现。
尽管这里说明了各种示例,但应当理解,这些示例是例示性示例。实际上,其它实施例也是可以的。此外,尽管针对SQL来说明各种示例,但应当理解,这仅是例示性示例。实际上,还可以结合转换器使用其它编程语言(例如,示例查询(QBE)和Pig Latin等)。
示例技术效果
本文所述的实施例可以提供各种技术效果。例如,如本文所述,转换器能够提高RDBMS的能力和/或增强RDBMS的性能。在一些情况下,可以使用转换器来解析、解释和执行采用任何数量的不同语言编写的程序。在一些情况下,可以使用转换器来解析、解释和执行及时(JIT)代码编译的代码以提高性能。
如本文所述,为了利用转换器,可以开发将语法正确的SQL与转换器特定的功能(例如,用户定义的功能,诸如指定转换器要解析、解释和执行的代码的功能、以及指定转换器代码的输入和输出的功能等)相组合的代码。这是有益的,因为这使得用户能够使用相同的客户端侧工具来开发代码,否则用户可能就要以排他方式来使用客户端工具开发SQL代码。例如,用户可以使用相同的Java数据库连接(JDBC)应用、命令行工具、图形用户界面和/或其他经常用来开发SQL代码的工具来开发转换器代码。
如本文所述,可以使用转换器来将转换器逻辑节点(例如,与以命令式编程语言编写的代码相对应)嵌入关系物理执行计划中。此外,在一些情况下,转换器逻辑节点和表示关系运算的逻辑节点可以经由一个或多个行序列来进行通信(例如,交换输入/输出)。在一些情况下,可以行可以被分类。例如,可以推断各行的字段的数据类型,并且可以对转换器代码进行类别检查。对行分类以及进行类别检查可以提供各种益处。例如,在SQL中,通常数据被分类。因此,对行分类使得转换器逻辑节点能够与表示关系运算的“分类的”逻辑节点相连接(例如,从基于SQL的子查询读取输入,将输出发送至另一基于SQL的运算等)。此外,如果转换器代码是强类型语言(例如,Java、Go和C++),则可能需要类别信息以对代码进行编译。在一些情况下,还可以使用该类别信息来生成机器代码(例如,JIT代码)以进一步提高性能。
在一些情况下,转换器逻辑节点和呈现关系运算符的节点之间的通信可以处于流程控制下。例如,在流程控制下,各个节点之间的通信流水线可以被调节,使得仅消耗特定或恒定量的存储器。这是有益的,例如,由于降低了因缺少可用资源而发生存储器饥饿或“死锁”的可能性。在一些情况下,使用转换器可能得到完全限制的缓冲器大小(例如,锁定至特定大小)并且完全消除死锁。
在一些情况下,RDBMS可以使用“不共享”架构来并行地处理数据。转换器被配置成使得该转换器尊重RDBMS的数据并行性。例如,在划分数据时,转换器可以在不同的节点上并行地运行。
在一些情况下,转换器代码可能需要以特定方式划分数据,并且至转换器的输入可能需要采用特定顺序。所有这些可以通过以如下方式开发SQL代码来强制执行,即,按子句顺序地使用SQL的分区。物理执行约束(例如,分区约束、排序约束等)可以在SQL子查询中指定并且由转换器遵守。
例如,用户可以使用以下的SQL代码来将数据划分成不同的节点以供执行:
SELECT Transducer_Outputs,Transducer('code'),Trasducer_input.*from
(select row_number over partition by(col1,col2)order by(col3)from T)
Transducer_Input
粗体字体使用SQL窗函数,以通过(col1,col2)并且按各分区强制执行数据分区,并且将按col3排序的各行反馈至转换器。在将数据返回至转换器之前,通过高度优化的RDBMS运算符来进行划分和排序。
此外,转换器可以与SQL优化模块紧密集成。此外,在查询计划和优化期间,转换器可以读取其输入序列的统计,推导其输出序列的统计(例如,输出的基数、直方图、最频繁的值等)。推导统计可被反馈到RDBMS优化模块中以获取最优计划以供进一步处理。因而,可以将SQL代码中所指定的排序约束传送到转换器代码中,并且可用于确保正确性(例如,由于转换器代码假定顺序或分区)和效率(例如,由于转换器知晓顺序和分区信息,因此可以使用更高效算法或处理以执行其运算)这两者。
在特定情形下使用转换器是特别有益的。例如,关系代数运算(例如,如在诸如SQL等的声明式编程语言中所使用的)不能表现递归查询。此外,在一些情况下,用以进行特定功能的句法(例如,SQL扩展句法)可能有些不得当、不够高效和/或不安全。然而,经常可以使用过程式或命令式编程语言(例如,Python)来实现递归查询。因而,转换器可以使得能够在特定上下文中选择性地使用非SQL代码以提高系统的功能和/或效率。
在一些情况下,转换器使得能够使用可用于处理图形数据的大容量同步并行(BSP)编程模型。在一些情况下,转换器使得能够针对RDBMS中存储的数据使用特定BSP特定算法,诸如“宽度搜索优先”、“最短路径”和“页面排名”。
此外,转换器可以是例如提取RDBMS外的数据并且联接、聚合RDBMS内的数据的数据集成工具。仅使用声明式编程语言的命令来进行这种任务,可能是困难的或资源禁止的。
此外,可以使用转换器来实现各种时间系列算法和流数据算法。同样,仅使用声明式编程语言的命令来进行这些任务,可能是困难的或资源禁止的。
示例系统
本说明书中所述的主题和操作的一些实施例可以以数字电路、或者以包括本说明书中所公开的结构或它们的结构等同的计算机软件、固件或硬件、或者以它们的一个或多个的组合实现。例如,在一些实施例中,系统100可以利用数字电子电路实现、或者以计算机软件、固件或硬件实现或者以它们的一个或多个的组合实现。在另一示例中,处理200可以利用数字电子电路实现、或者以计算机软件、固件或硬件实现、或者以它们中的一个或多个的组合实现。
本说明书所述的一些实施例可被实现为数字电子电路、计算机软件、固件或硬件的一个或多个组或模块、或者以它们中的一个或多个的组合实现。尽管可以使用不同的模块,但各模块不必不同,并且可以在相同的数字电子电路、计算机软件、固件或硬件或它们的组合上实现多个模块。
本说明书所述的一些实施例可被实现为在计算机存储介质上编码的一个或多个计算机程序、即计算机程序指令的一个或多个模块,以供数据处理设备执行或者控制数据处理设备的操作。计算机存储介质可以是或可以包括在计算机可读存储装置、计算机可读存储基质、随机或串行访问存储器阵列或装置、或者它们中的一个或多个的组合。此外,尽管计算机存储介质不是传播信号,但计算机存储介质可以是编码在人工生成的传播信号中的计算机指令的源或目的地。计算机存储介质还可以是或者可以包括在一个或多个单独物理组件或介质(例如,多个CD、盘或其它存储装置)中。
术语“数据处理设备”包含所有种类的设备、装置和用于处理数据的机器,包括例如可编程处理器、计算机、芯片上系统或者上述中的各个或其组合。该设备可以包括专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。该设备除硬件外,还可以包括创建上述计算机程序所用的执行环境的代码,例如构成处理器固件、协议堆栈、数据库管理系统、操作系统、跨平台运行时环境、虚拟机或者它们中的一个或多个的组合的代码。该设备和执行环境可以实现各种不同的计算模型基础设施,诸如web服务、分布式计算和网格计算基础设施等。
计算机程序(还已知为程序、软件、软件应用程序、脚本或代码)可以以包括编译或解释语言、声明式或过程式语言的任意形式的编程语言来编写。计算机程序可以但不必与文件系统中的文件相对应。程序可以存储在保持其它程序或数据(例如,标记语言文档中所存储的一个或多个脚本)的文件的一部分中、上述程序专用的单个文件中、或者在多个协调文件(例如,用于存储一个或多个模块、子程序或代码的一部分的文件)中。计算机程序可以被部署为在一个计算机上或者在位于一个地点或跨多个地点分布并且利用通信网络互连的多个计算机上执行。
本说明书所述的部分处理和逻辑流程可以通过如下方式来被执行,即:一个或多个可编程处理器执行一个或多个计算机程序,以通过对输入数据进行操作并生成输出来执行各个动作。这些处理和逻辑流程还可以由设备来执行并且可被实现为专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
适合计算机程序的执行的处理器例如包括通用微处理器和专用微处理器以及任何种类的数字计算机的处理器。通常,处理器将从只读存储器或随机存取存储器或这两者接收指令和数据。计算机包括用于根据指令来进行动作的处理器以及用于存储指令和数据的一个或多个存储器装置。计算机还可以包括或有效地连接至用于存储数据的一个或多个大容量存储装置(例如,磁盘、磁光盘或光盘),以接收数据或传送数据或进行这两者的操作。然而,计算机不必具有这些装置。适合存储计算机程序指令的装置包括非易失性存储器、介质和存储器装置的所有形式,包括例如半导体存储器装置(例如,EPROM、EEPROM、闪速存储器装置等)、磁盘(例如,内部硬盘和可移除盘等)、磁光盘以及CD-ROM盘和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。
为了提供与用户的交互,可以在具有显示装置(例如,监视器或其它类型的显示装置)以及键盘和指示装置(例如,鼠标、追踪球、平板电脑、触敏屏幕或其它类型的指示装置)的计算机上实现操作,其中该显示装置用于向用户显示信息,通过该键盘和指示装置用户可以向计算机提供输入。还可以使用其它类型的装置来提供与用户的交互;例如提供至用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以以包括声学、语音或触觉输入的任何形式接收来自用户的输入。另外,计算机可以通过向/从用户使用的装置发送/接收文档来与用户交互,例如通过响应于从web浏览器接收到的请求将网页发送至用户的客户端装置上的web浏览器。
计算机系统可以包括单个计算装置、或者彼此近距离或远程工作并且通常经由通信网络进行交互的多个计算机。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”)、互连网(例如,因特网)、包括卫星链路的网络和对等网络(例如,自组织对等网络)。客户端和服务器的关系可以通过运行在各计算机上并且彼此具有客户端-服务器关系的计算机程序显现。
图5示出示例的计算机系统500,其中该计算机系统500包括处理器510、存储器520、存储装置530和输入/输出装置540。组件510、520、530和540各自例如可以利用系统总线550互连。处理器510能够处理用于在系统500内执行的指令。在一些实施例中,处理器510是单线程处理器、多线程处理器或其它类型的处理器。处理器510能够处理存储器520中或存储装置530上所存储的指令。存储器520和存储装置530可以在系统500内存储信息。
输入/输出装置540提供针对系统500的输入/输出操作。在一些实施例中,输入/输出装置540可以包括以下的一个或多个:例如以太网卡的网络接口装置、例如RS-232端口的串行通信装置、以及/或者例如802.11卡、3G无线调制解调器、4G无线调制解调器、5G无线调制解调器等的无线接口装置。在一些实施例中,输入/输出装置可以包括被配置为从其它输入/输出装置560(例如键盘、打印机和显示装置)接收输入数据以及向其他输入/输出装置发送输出数据的驱动器装置。在一些实施例中,可以使用移动计算装置、移动通信装置和其它装置。
尽管本说明书包含许多细节,但这些不应当被解释为对所要求保护范围的限制,而是被解释为针对特定示例特有的特征的说明。在本说明书中对于各单个实施例的上下文中描述的特定特征也可以被组合。相反,在单个实施例的上下文中所述的各种特征也可以在多个实施例中单独实现或者以任何适当子组合的形式实现。
多个实施例已被说明。然而,应当理解,可以在没有背离本发明的主旨和范围的情况下进行各种变型。因此,其它实施例在所附权利要求书的范围内。

Claims (27)

1.一种数据查询方法,包括:
计算机系统接收针对关系数据库管理系统中存储的数据的查询,其中所述查询包括以第一编程语言编写的一个或多个第一功能、以及以第二编程语言编写的指定计算机代码的一个或多个第二功能,其中,所述第二编程语言不同于所述第一编程语言;
所述计算机系统基于所述查询生成逻辑查询计划,其中生成所述逻辑查询计划包括:
生成与所述一个或多个第一功能相对应的一个或多个第一逻辑节点,其中所述一个或多个第一逻辑节点表示由所述一个或多个第一功能定义的关系运算符;
生成与所述一个或多个第二功能相对应的一个或多个第二逻辑节点,其中所述一个或多个第二逻辑节点表示由以所述第二编程语言编写的所述计算机代码定义的运算;以及
生成包括表示所述查询的逻辑树的所述逻辑查询计划,所述逻辑树包括与所述一个或多个第二逻辑节点互连的所述一个或多个第一逻辑节点,其中各互连表示节点之间的中间数据的交换;
所述计算机系统基于所述逻辑查询计划生成物理执行计划;以及
所述计算机系统执行所述物理执行计划以检索所述关系数据库管理系统中存储的数据。
2.根据权利要求1所述的方法,其中,所述第一编程语言是声明式编程语言。
3.根据权利要求1或2所述的方法,其中,所述第一编程语言是结构化查询语言SQL。
4.根据权利要求1所述的方法,其中,所述第二编程语言是命令式编程语言。
5.根据权利要求1或4所述的方法,其中,所述第二编程语言包括以下之一:C、C++、Java、Scala、Python、Perl、Go、R、Lisp和F#。
6.根据权利要求1所述的方法,其中,每个所述第二功能包括:
代码子功能,其是以所述第二编程语言编写的,用于指定所述计算机代码;
输入子功能,其是以所述第二编程语言编写的,用于指定针对所述计算机代码的输入数据;以及
输出子功能,其指定通过对所述输入数据执行所述计算机代码所得到的输出数据。
7.根据权利要求1或6所述的方法,其中,生成所述逻辑查询计划还包括:
生成表示所述查询的多个候选逻辑树,
基于一个或多个优化标准来选择所述多个候选逻辑树中的一个,以及
将所选择的候选逻辑树包括在所述逻辑查询计划中。
8.根据权利要求7所述的方法,其中,所述一个或多个优化标准包括以下至少一个:
所述关系数据库管理系统中存储的数据的数据大小,
所述关系数据库管理系统中存储的数据的排列,以及
与检索所述关系数据库管理系统中存储的数据相关的估计资源成本。
9.根据权利要求7所述的方法,其中,所述一个或多个优化标准包括与执行以所述第二编程语言编写的所述计算机代码相关的估计资源成本。
10.一种非暂时性计算机可读介质,其包括一个或多个指令序列,在通过一个或多个处理器执行所述指令序列的情况下,使得计算机系统:
接收针对关系数据库管理系统中存储的数据的查询,其中所述查询包括以第一编程语言编写的一个或多个第一功能、以及以第二编程语言编写的指定计算机代码的一个或多个第二功能,其中,所述第二编程语言不同于所述第一编程语言;
基于所述查询生成逻辑查询计划,其中生成所述逻辑查询计划包括:
生成与所述一个或多个第一功能相对应的一个或多个第一逻辑节点,其中所述一个或多个第一逻辑节点表示由所述一个或多个第一功能定义的关系运算符;
生成与所述一个或多个第二功能相对应的一个或多个第二逻辑节点,其中所述一个或多个第二逻辑节点表示由以所述第二编程语言编写的所述计算机代码定义的运算;以及
生成包括表示所述查询的逻辑树的所述逻辑查询计划,所述逻辑树包括与所述一个或多个第二逻辑节点互连的所述一个或多个第一逻辑节点,其中各互连表示节点之间的中间数据的交换;
基于所述逻辑查询计划生成物理执行计划;以及
执行所述物理执行计划以检索所述关系数据库管理系统中存储的数据。
11.根据权利要求10所述的非暂时性计算机可读介质,其中,所述第一编程语言是声明式编程语言。
12.根据权利要求10或11所述的非暂时性计算机可读介质,其中,所述第一编程语言是结构化查询语言SQL。
13.根据权利要求10所述的非暂时性计算机可读介质,其中,所述第二编程语言是命令式编程语言。
14.根据权利要求10或13所述的非暂时性计算机可读介质,其中,所述第二编程语言包括以下之一:C、C++、Java、Scala、Python、Perl、Go、R、Lisp和F#。
15.根据权利要求10所述的非暂时性计算机可读介质,其中,各所述第二功能包括:
代码子功能,其是以所述第二编程语言编写的,用于指定所述计算机代码;
输入子功能,其是以所述第二编程语言编写的,用于指定针对所述计算机代码的输入数据;以及
输出子功能,其指定通过对所述输入数据执行所述计算机代码所得到的输出数据。
16.根据权利要求10或15所述的非暂时性计算机可读介质,其中,生成所述逻辑查询计划还包括:
生成表示所述查询的多个候选逻辑树,
基于一个或多个优化标准来选择所述多个候选逻辑树中的一个,以及
将所选择的候选逻辑树包括在所述逻辑查询计划中。
17.根据权利要求16所述的非暂时性计算机可读介质,其中,所述一个或多个优化标准包括以下至少一个:
所述关系数据库管理系统中存储的数据的数据大小,
所述关系数据库管理系统中存储的数据的排列,以及
与检索所述关系数据库管理系统中存储的数据相关的估计资源成本。
18.根据权利要求16所述的非暂时性计算机可读介质,其中,所述一个或多个优化标准包括与执行以所述第二编程语言编写的所述计算机代码相关的估计资源成本。
19.一种计算机系统,包括:
一个或多个处理器;以及
非暂时性计算机可读介质,其包括一个或多个指令序列,在通过所述一个或多个处理器执行所述指令序列的情况下,使得所述计算机系统:
接收针对关系数据库管理系统中存储的数据的查询,其中所述查询包括以第一编程语言编写的一个或多个第一功能、以及以第二编程语言编写的指定计算机代码的一个或多个第二功能,其中,所述第二编程语言不同于所述第一编程语言;
基于所述查询生成逻辑查询计划,其中生成所述逻辑查询计划包括:
生成与所述一个或多个第一功能相对应的一个或多个第一逻辑节点,其中所述一个或多个第一逻辑节点表示由所述一个或多个第一功能定义的关系运算符;
生成与所述一个或多个第二功能相对应的一个或多个第二逻辑节点,其中所述一个或多个第二逻辑节点表示由以所述第二编程语言编写的所述计算机代码定义的运算;以及
生成包括表示所述查询的逻辑树的所述逻辑查询计划,所述逻辑树包括与所述一个或多个第二逻辑节点互连的所述一个或多个第一逻辑节点,其中各互连表示节点之间的中间数据的交换;
基于所述逻辑查询计划生成物理执行计划;以及
执行所述物理执行计划以检索所述关系数据库管理系统中存储的数据。
20.根据权利要求19所述的系统,其中,所述第一编程语言是声明式编程语言。
21.根据权利要求19或20所述的系统,其中,所述第一编程语言是结构化查询语言SQL。
22.根据权利要求18所述的系统,其中,所述第二编程语言是命令式编程语言。
23.根据权利要求18或22所述的系统,其中,所述第二编程语言包括以下之一:C、C++、Java、Scala、Python、Perl、Go、R、Lisp和F#。
24.根据权利要求19所述的系统,其中,各所述第二功能包括:
代码子功能,其是以第二编程语言编写的,用于指定所述计算机代码;
输入子功能,其是以第二编程语言编写的,用于指定针对所述计算机代码的输入数据;以及
输出子功能,其指定通过对所述输入数据执行所述计算机代码所得到的输出数据。
25.根据权利要求19或24所述的系统,其中,生成所述逻辑查询计划还包括:
生成表示所述查询的多个候选逻辑树,
基于一个或多个优化标准来选择所述多个候选逻辑树中的一个,以及
将所选择的候选逻辑树包括在所述逻辑查询计划中。
26.根据权利要求25所述的系统,其中,所述一个或多个优化标准包括以下至少一个:
所述关系数据库管理系统中存储的数据的数据大小,
所述关系数据库管理系统中存储的数据的排列,以及
与检索所述关系数据库管理系统中存储的数据相关的估计资源成本。
27.根据权利要求25所述的系统,其中,所述一个或多个优化标准包括与执行以所述第二编程语言编写的所述计算机代码相关的估计资源成本。
CN201710944094.1A 2017-07-24 2017-09-30 数据查询方法、计算机系统及非暂时性计算机可读介质 Pending CN109299133A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201762536350P 2017-07-24 2017-07-24
US62/536,350 2017-07-24

Publications (1)

Publication Number Publication Date
CN109299133A true CN109299133A (zh) 2019-02-01

Family

ID=65019031

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710944094.1A Pending CN109299133A (zh) 2017-07-24 2017-09-30 数据查询方法、计算机系统及非暂时性计算机可读介质

Country Status (2)

Country Link
US (1) US20190026336A1 (zh)
CN (1) CN109299133A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111159219A (zh) * 2019-12-31 2020-05-15 湖南亚信软件有限公司 一种数据管理方法、装置、服务器及存储介质
CN112988778A (zh) * 2019-12-13 2021-06-18 北京沃东天骏信息技术有限公司 一种处理数据库查询脚本的方法和装置
CN113064928A (zh) * 2021-04-25 2021-07-02 深圳壹账通智能科技有限公司 报表数据查询方法、装置、电子设备及存储介质
CN113168410A (zh) * 2019-02-14 2021-07-23 华为技术有限公司 增强对关系型数据库的查询处理的系统和方法
CN113204602A (zh) * 2021-05-07 2021-08-03 星环信息科技(上海)股份有限公司 数据处理方法、装置、设备及存储介质
CN116541536A (zh) * 2023-05-30 2023-08-04 北京百度网讯科技有限公司 知识增强的内容生成系统、数据生成方法、设备和介质

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11914592B2 (en) 2018-02-27 2024-02-27 Elasticsearch B.V. Systems and methods for processing structured queries over clusters
US11188531B2 (en) * 2018-02-27 2021-11-30 Elasticsearch B.V. Systems and methods for converting and resolving structured queries as search queries
US11461270B2 (en) 2018-10-31 2022-10-04 Elasticsearch B.V. Shard splitting
US10997204B2 (en) 2018-12-21 2021-05-04 Elasticsearch B.V. Cross cluster replication
US11431558B2 (en) 2019-04-09 2022-08-30 Elasticsearch B.V. Data shipper agent management and configuration systems and methods
US11943295B2 (en) 2019-04-09 2024-03-26 Elasticsearch B.V. Single bi-directional point of policy control, administration, interactive queries, and security protections
US10891165B2 (en) 2019-04-12 2021-01-12 Elasticsearch B.V. Frozen indices
US11182093B2 (en) 2019-05-02 2021-11-23 Elasticsearch B.V. Index lifecycle management
US11604674B2 (en) 2020-09-04 2023-03-14 Elasticsearch B.V. Systems and methods for detecting and filtering function calls within processes for malware behavior
US11567735B1 (en) * 2020-10-19 2023-01-31 Splunk Inc. Systems and methods for integration of multiple programming languages within a pipelined search query
US11461080B1 (en) * 2021-06-07 2022-10-04 Snowflake Inc. Inline compilation of user defined functions
CN115221249B (zh) * 2022-09-20 2023-02-24 金蝶软件(中国)有限公司 跨库数据查询方法、装置、计算机设备和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070214111A1 (en) * 2006-03-10 2007-09-13 International Business Machines Corporation System and method for generating code for an integrated data system
US20080065590A1 (en) * 2006-09-07 2008-03-13 Microsoft Corporation Lightweight query processing over in-memory data structures
CN101208660A (zh) * 2005-06-27 2008-06-25 奎朴兹有限公司 代码转换
US20120130986A1 (en) * 2010-11-19 2012-05-24 Abdellatif Taoufik B Systems and methods for managing a database
US9703768B1 (en) * 2014-09-30 2017-07-11 EMC IP Holding Company LLC Object metadata query

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9110706B2 (en) * 2009-02-09 2015-08-18 Microsoft Technology Licensing, Llc General purpose distributed data parallel computing using a high level language
US10318491B1 (en) * 2015-03-31 2019-06-11 EMC IP Holding Company LLC Object metadata query with distributed processing systems

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101208660A (zh) * 2005-06-27 2008-06-25 奎朴兹有限公司 代码转换
US20070214111A1 (en) * 2006-03-10 2007-09-13 International Business Machines Corporation System and method for generating code for an integrated data system
US20080065590A1 (en) * 2006-09-07 2008-03-13 Microsoft Corporation Lightweight query processing over in-memory data structures
US20120130986A1 (en) * 2010-11-19 2012-05-24 Abdellatif Taoufik B Systems and methods for managing a database
US9703768B1 (en) * 2014-09-30 2017-07-11 EMC IP Holding Company LLC Object metadata query

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113168410A (zh) * 2019-02-14 2021-07-23 华为技术有限公司 增强对关系型数据库的查询处理的系统和方法
CN113168410B (zh) * 2019-02-14 2024-06-11 华为技术有限公司 增强对关系型数据库的查询处理的系统和方法
CN112988778A (zh) * 2019-12-13 2021-06-18 北京沃东天骏信息技术有限公司 一种处理数据库查询脚本的方法和装置
CN111159219A (zh) * 2019-12-31 2020-05-15 湖南亚信软件有限公司 一种数据管理方法、装置、服务器及存储介质
CN111159219B (zh) * 2019-12-31 2023-05-23 湖南亚信软件有限公司 一种数据管理方法、装置、服务器及存储介质
CN113064928A (zh) * 2021-04-25 2021-07-02 深圳壹账通智能科技有限公司 报表数据查询方法、装置、电子设备及存储介质
CN113204602A (zh) * 2021-05-07 2021-08-03 星环信息科技(上海)股份有限公司 数据处理方法、装置、设备及存储介质
CN113204602B (zh) * 2021-05-07 2023-08-01 星环信息科技(上海)股份有限公司 数据处理方法、装置、设备及存储介质
CN116541536A (zh) * 2023-05-30 2023-08-04 北京百度网讯科技有限公司 知识增强的内容生成系统、数据生成方法、设备和介质
CN116541536B (zh) * 2023-05-30 2024-03-01 北京百度网讯科技有限公司 知识增强的内容生成系统、数据生成方法、设备和介质

Also Published As

Publication number Publication date
US20190026336A1 (en) 2019-01-24

Similar Documents

Publication Publication Date Title
CN109299133A (zh) 数据查询方法、计算机系统及非暂时性计算机可读介质
US10372707B2 (en) Query execution pipelining with pump operators
US10733184B2 (en) Query planning and execution with source and sink operators
US9053210B2 (en) Graph query processing using plurality of engines
US8224807B2 (en) Enhanced utilization of query optimization
US20140114952A1 (en) Optimizing queries of parallel databases
JP2017157229A (ja) 半構造データのためのスケーラブルな分析プラットフォーム
US11693856B2 (en) Query processing in a polystore
US9229979B2 (en) Optimizing parallel queries using interesting distributions
US11132366B2 (en) Transforming directed acyclic graph shaped sub plans to enable late materialization
JP5791149B2 (ja) データベース・クエリ最適化のためのコンピュータで実装される方法、コンピュータ・プログラム、およびデータ処理システム
CN105718593A (zh) 一种数据库查询优化方法及系统
US20200265028A1 (en) Method and systems for mapping object oriented/functional languages to database languages
US11977546B1 (en) System and method for integrating disparate information sources
US10860579B2 (en) Query planning and execution with reusable memory stack
US20230418824A1 (en) Workload-aware column inprints
US20190354521A1 (en) Concurrent Data Processing in a Relational Database Management System Using On-Board and Off-Board Processors
Zhao et al. A parallel approach for improving Geo-SPARQL query performance
KR101955376B1 (ko) 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치
US9135302B2 (en) Query rewrite with a nested materialized view
Niu et al. Applying database optimization technologies to feature recognition in CAD
Angelis et al. Generating and exploiting semantically enriched, integrated, linked and open museum data
WO2021248319A1 (en) Database management system and method for graph view selection for relational-graph database
Abdallah et al. Towards a gml-enabled knowledge graph platform
US11886435B1 (en) Systems and methods for executing queries on tensor datasets

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
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20190201

WD01 Invention patent application deemed withdrawn after publication