使用查询模板来将查询与数据操作相匹配的制作方法

xiaoxiao2020-7-23  3

专利名称:使用查询模板来将查询与数据操作相匹配的制作方法
技术领域
本发明涉及使用查询模板来将查询与数据操作相匹配。背景如今的信息技术人员常常使用具有η层(n-tier)、比如3层架构的数据检索系统。 通过将不同层分开,每个层都可以彼此独立地被管理、升级和使用。典型的三层数据检索系统可以包括前层、中间层和后层。前层通常与用户对接并且可以接收和/或生成针对数据的查询。中间层通常处理从前层接收到的查询并且将其翻译成后层可以处理的形式。后层通常由如下各项的某种组合构成响应诸如查询或所存储的过程之类的数据操作的数据库服务器;以及响应web服务操作的web服务。具体而言,中间层通常将从前层接收到的查询翻译成数据库或web服务操作(在此统称“数据操作”),这些操作由后层来执行以获得数据。然后,中间层将所获得的数据发送回前层。因此,中间层与诸如客户端计算机之类的前层、以及例如一个或多个数据库服务器或web服务之类的后层对接。然而,由中间层用于将从前层接收到的查询翻译成可由后层执行的数据操作的典型方案相当麻烦。典型的翻译技术仅能使用前层查询与数据操作的一对一匹配。例如,典型的方案可以直接将一个前层查询翻译成一个数据操作。结果,前层查询如果有的话也只能具有极少的变型,由此限制了其功能和效用性。此外,这些典型的方案要求前层使用可由中间层使用一对一映射容易地翻译的受限和严格的句法来呈现查询。结果,典型的方案可能不能补偿前层查询中的任何变型。事实上,这些方案限制了前层编写具有任何变型的查询的能力。即使尝试给前层在编写查询方面赋予更多灵活性的方案仍然使用查询与数据操作之间的受限和不灵活的映射。

发明内容
提供本概述以便以简化形式介绍将在以下的具体实施方式
中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。此外,注意到本发明不限于在详细描述和/或本文的其它章节中所述的特定实施例。本文呈现这些实施例仅用于说明性的用途。基于本文所包含的描述,其它实施例对于相关领域的技术人员将是显而易见的。在此描述了用于使用查询模板将查询与数据操作进行匹配的系统和方法。根据某些实施例,这样的系统和方法可以由三层数据检索系统的中间层来实现以选择对应于查询的数据操作。从前层接收到的查询可以访问后层中的数据服务。数据操作的选择是通过将查询与同每个数据操作相关联的查询模板相匹配来进行的。每个数据操作的查询模板都包括对查询的代数描述,这些查询每个都可被相应数据操作满足。然后,对数据服务执行所选数据操作以获得数据,这些数据然后被提供给前层。在一些实施例中,可以由中间层创建执行计划以用于满足该查询。该执行计划可以包括所选数据操作和后处理步骤。可以将后处理步骤应用于所获得的数据以满足该查询。然后,经过后处理的数据被提供给前层。下面将参考各个附图,详细描述本发明的进一步特点和优点,以及本发明的各实施例的结构和操作。值得注意的是,本发明不仅限于此处所描述的特定实施例。本文呈现这些实施例仅用于说明性的用途。基于本文所包含的描述,其它实施例对于相关领域的技术人员将是显而易见的。


合并在此并作为说明书一部分的附图与说明书一起示出了本发明的实施例,且进一步用于解释本发明的原理的作用,并且使相关领域的技术人员能够实现并使用本发明。图I是根据一实施例的示例性三层数据检索系统的框图,该系统被配置为使用查询模板将查询与数据操作相匹配。图2是根据一实施例的示例性三层数据检索系统的详细框图,该系统被配置为使用查询模板将查询与数据操作相匹配。图3描绘了根据一实施例的使用查询模板将查询与数据操作相匹配的数据检索方法的流程图。图4描绘了根据一实施例的使用查询模板将查询与数据操作相匹配的方法的另
一流程图。图5示出了可用于实现根据一实施例的用于使用查询模板将查询与数据操作相匹配的方法的示例性联网计算机系统的框图。当结合其中相同的参考字符标识对应的元素的附图时,本发明的特征和优点将从以下阐述的详细描述中变得更加显而易见。在附图中,相同的参考标号一般指相同的、功能上相似的和/或结构上相似的元素。其中元素第一次出现的附图由对应的参考标号中最左侧的数字指示。
具体实施例方式I.介绍以下详细描述参考示出本发明的示例性实施例的附图。但是,本发明的范围不限于这些实施例,而是由所附权利要求书定义。因此,诸如所示实施例的修改版本之类的在附图所示之外的实施例仍然由本发明所包含。本说明书中对“一个实施例”、“实施例”、“示例实施例”等的参考,指的是所述实施例可包括具体的特征、结构或特点,但是每个实施例不一定包括该具体的特征、结构或特点。此外,这些短语不一定指相同的实施例。此外,当结合实施例描述具体特征、结构或特性时,应当理解在相关领域的技术人员的知识范围内能够结合其他实施例来实现具体特征、 结构或特性,无论是否被显式地描述。在此描述了一种用于使用查询模板将查询与数据操作进行匹配的系统。根据某些实施例,这样的系统可以由η层数据检索系统(比如三层数据检索系统)的中间层来实现以选择对应于查询的数据操作。从前层接收到的查询可以访问后层中的数据服务。数据操作的选择是通过将查询与同每个数据操作相关联的查询模板相匹配来进行的。每个数据操作的查询模板都包括对查询的代数描述,这些代数描述每个都可被相应数据操作满足。使用与每个数据操作相关联的查询模板将有利地允许将多种查询与数据操作相匹配。在某些实施例中,可以使用具有任选算子以及可从查询中提取出的算子和值的查询模板来提供附加的灵活性。然后,针对数据服务执行所选数据操作以获得数据,这些数据然后被提供给前层。在一些实施例中,可以由中间层创建执行计划以用于满足该查询。该执行计划可以包括所选数据操作和一个或多个后处理步骤。可以针对数据服务执行所选数据操作以获得仅仅部分地满足该查询的数据。然后,可以将后处理步骤应用于所获得的数据以基本上完全满足该查询。然后,经过后处理的数据被提供给前层。示例性数据检索系统图I是示例性的三层数据检索系统104的框图100,该系统被配置为使用查询模板将查询与数据操作相匹配。图I的框图100示出了一个或多个用户102以及数据检索系统 104。用户102可以与数据检索系统104对接。例如,用户102可以向数据检索系统104提出查询。数据检索系统104可以处理该查询并且比如通过针对数据服务执行该查询来将该查询的结果返回给用户102。在一个实施例中,用户102可以包括使用个人计算机或其他计算系统或设备的人。用户102还可以致使应用被数据检索系统104的前层106执行以生成查询。数据检索系统104可以使用诸如三层架构之类的η层架构来实现。数据检索系统 104可以包括前层106、中间层108和后层110。在一个实施例中,三个层106、108和110可以是在单个计算系统或设备上实现的逻辑层(亦称层次(layer))。在另一实施例中,数据检索系统104的三个层106、108和110中的一个或多个可以每个都使用单独的计算系统或设备来实现。在此处所呈现的各个实施例和示例中,描述了三层数据检索系统104。然而,示例性实施例的范围不限于三层数据检索系统。例如,可以使用另一种类型的具有更多逻辑和/ 或物理层的η层数据检索系统。在一个实施例中,前层106可以包括允许用户编写或选择查询的用户界面,比如图形用户界面(⑶I)。在另一实施例中,前层106可以执行生成查询的应用。中间层108可以包括查询处理逻辑,该查询处理逻辑处理从前层106接收到的查询。中间层108可以比如通过将查询与同每个数据操作相关联的查询模板进行匹配来选择与该查询相对应的一个或多个数据操作。用于选择与查询相对应的数据操作的实施例将在后面予以描述。然后,中间层108将所选数据操作传递回后层110以供执行。后层110例如可以包括数据库服务器以及与其相关联的一个或多个数据库、或者一个或多个web服务,但是这些实施例不旨在为限制性的。后层110执行所选数据操作以获得数据并且然后将所获得的数据传递给中间层108。中间层108可以对所获得的数据执行一个或多个后处理功能以便满足该查询。用于选择或标识出后处理功能以满足查询的实施例将在后面予以描述。然后,中间层108将所获得和/或经过后处理的数据返回给前层106。由前层106实现的诸如图形用户界面(⑶I)之类的界面可以向用户102呈现所获得和/或经过后处理的数据。而且,最初在前层106上请求该数据的应用(例如通过生成该查询)可以使用所获得和/或经过后处理的数据。在实施例中,数据操作可以以各种方式基于查询来选择。例如,图2是根据一实施例的示例性三层数据检索系统200的详细框图100,该系统被配置为使用查询模板将查询与数据操作相匹配。数据检索系统200包括请求实体202、中间层204和数据服务206。请求实体202是诸如图I的前层106之类的前层的示例,并且可以与用户102对接。中间层 204是图I的中间层108的示例。数据服务206是诸如图I的后层110之类的后层的示例。A.请求实体请求实体202旨在宽范围地表示能够生成查询并将其提供给中间层204的任何系统或设备。在一个实施例中,用户可以与在请求实体202上执行的应用交互以便生成该查询。例如,用户可以与在web浏览器的上下文中执行的应用交互,例如在该上下文中,请求实体202包括该应用和该web浏览器。该应用可以致使web浏览器生成统一资源位置(URL) 形式的查询。然后,URL形式的查询可以被转换成可由诸如Windows通信基础(WCF)服务组件之类的web服务组件提供给中间层204的形式。然后,该查询被请求实体202提供给中间层204。在另一实施例中,请求实体202可以执行在运行时自动生成查询的应用。例如,该应用可以包括在该应用的开发期间使用C、C++、C#、Java和/或本领域已知的任何其他编程语言被编写(即硬编码)到该应用中的查询。在该应用的编译期间,被硬编码的查询可以被自动转换成可提交给中间层204的形式。在经编译的应用的执行期间,该查询然后可以按照需要自动被提交给中间层204以履行该应用的功能。在另一实施例中,请求实体202可以执行允许用户在运行时动态地编写查询以及将其提交给中间层204的应用。构思了被请求实体202用于生成查询的又一方法,并且示例性实施例的范围不限于上述示例。中间层204以下面将描述的方式来处理从前层202接收到的查询以从数据服务 204获得数据并且将包括所获得数据的查询结果返回给请求实体202。然后,请求实体202 可以比如通过经由合适界面向用户(比如用户102)呈现查询结果和/或将该查询结果用在生成该查询的应用中来使用该查询结果。由中间层204所接收的查询可以使用诸如下列用于呈现查询的各种协议中的一种或多种来表达标准查询语言(SQL)、语言集成查询(LINQ)、可扩展标记语言查询(XML查询或XQuery)等等。在此处所呈现的各个实施例和示例中,描述了 LINQ形式的查询,但是示例实施例的范围在此方面不受限。在一个实施例中,该查询可以使用本领域已知的诸如LINQ表达式树之类的数据结构来表示。例如,在一个实施例中,该查询被表示成LINQ表达式树,该LINQ表达式树包括指向该查询的根节点和连接到根节点的一个或多个子节点,所述节点包含该查询的主体和/或参数。然而,这仅仅是一个示例,并且可以使用其他数据结构和形式来表示查询。B.中间层如图2进一步示出的那样,中间层204包括多个互连的组件,包括请求处理器 208、查询规范化器210、查询匹配器212、目录214以及结果组装器216。这些组件例如可以包括在单个计算设备上执行的软件模块、或者可替代地包括分布在单独但相连接的计算设备间并在所述计算设备上执行的软件模块。中间层204从请求实体202接收查询。中间层204以下面所描述的方式处理该查询,其中这样的处理包括从固定的一组与该查询相对应的数据操作中选择一个或多个数据操作。中间层204针对数据服务206执行所选数据操作,并且响应于所选数据操作的执行而从数据服务206接收数据。中间层204被配置为向请求实体202返回包括所获得的数据的查询结果。I.请求处理器请求处理器204从请求实体202接收查询。请求处理器208将该查询转发给查询规范化器210用于将对其应用规范化过程。查询规范化器向请求处理器208返回该查询的经规范化的版本(在此称为经规范化的查询)。然后,请求处理器208将经规范化的查询转发给查询匹配器212。查询匹配器212向查询处理器208返回执行计划,其中该执行计划包括要针对数据服务206来执行的基于经规范化查询所选择的一个或多个数据操作。然后, 请求处理器208将执行计划转发给结果组装器216。结果组装器216针对数据服务206执行所选数据操作以获得数据。结果组装器216将包括所获得数据的查询结果传送给请求处理器208。然后,请求处理器208将从结果组装器216接收到的包括所获得的数据的查询结果转发给请求实体202。在一个实施例中,由查询匹配器212所生成的执行计划除了将要针对数据服务 206执行的所选数据操作以外还包括一个或多个后处理功能。这些后处理功能将对从数据服务206获得的数据执行,以满足该查询。根据该实施例,请求处理器208将包括后处理功能和数据操作的执行计划转发给结果组装器216。2.查询规范化器查询规范化器210通过生成查询的符合某个标准或规范查询形式的表示来对从请求处理器208接收到的查询进行规范化。所生成的表示在此被称为经规范化的查询。 该经规范化的查询然后被返回给请求处理器208。通过执行规范化功能,查询规范化器 210保证查询匹配器212将针对请求相同数据但以不同形式表达的等价查询返回一致的结果(即将选择相同的一个或多个数据操作)。可由查询规范化器210在查询被表达成LINQ表达式时所执行的示例性规范化操作可以包括对二进制算子的表达式进行重排 (reorder),使得这些表达式被一致地处理,或者将连续过滤(例如Where ())调用合并成单个调用,将其联合成联合(进行与(AND)运算)形式。如果查询规范化器210确定从请求处理器208所接收到的查询不需要被修改为标准或规范形式,则被查询规范化器210传递回请求处理器208的经规范化的查询可以与原始查询相同。3.查询匹配器查询匹配器212从请求处理器208接收经规范化的查询。查询匹配器212被配置为通过将经规范化的查询与同每个数据操作相关联的查询模板进行匹配来从固定的一组数据操作中选择与经规范化的查询相对应的一个或多个数据操作。在一个实施例中,查询匹配器212创建包括所选数据操作的执行计划。可以针对数据服务(例如数据服务206) 执行所选数据操作以获得完全满足经规范化的查询的数据。在另一实施例中,查询匹配器 212创建包括所选数据操作和一个或多个后处理步骤的执行计划。根据该实施例,针对数据服务206所执行的所选数据操作获得仅仅部分满足经规范化的查询的数据。然后,可以将后处理步骤应用于所获得的数据以完全满足经规范化的查询。根据两个实施例,执行计划被传送给请求处理器208以用于转发给结果组装器216。如上所述,查询匹配器212基于经规范化的查询从固定的一组数据操作中选择数据操作。具体而言,查询匹配器212访问存储一组查询模板的目录214,其中每个查询模板都与该固定的一组数据操作中的数据操作相关联。每个查询模板都包括查询的可被相关联的数据操作满足的代数描述。然后,查询匹配器212基于与每个数据操作相关联的查询模板来选择与经规范化的查询相匹配的一个或多个数据操作。在一个实施例中,该目录可以包括关于数据操作的附加信息,例如相关联的成本估计。查询匹配器212可以利用该信息来使所选数据操作的成本最小化。为了促进匹配,可以使用与用于表示经规范化的查询的语言或格式基本类似的语言或格式来指定每个查询模板。例如,在使用LINQ表达式来表达经规范化的查询的实施例中,每个查询模板也可以被表达成LINQ表达式。此外,在使用LINQ表达式树来表达经规范化的查询的实施例中,每个查询模板都可以由LINQ表达式树来表达。查询匹配器212从与查询模板相关联的固定的一组数据操作中选择被认为与经规范化的查询最佳地匹配的那些数据操作。根据某些实施例,查询匹配器212通过如下方式来执行该功能评估表示经规范化的查询的LINQ表达式或LINQ表达式树与表示与数据操作相关联的查询模板的多个LINQ表达式或LINQ表达式树中的每个之间的相似性。这例如可以包括评估表达经规范化的查询的LINQ表达式树的节点的内容与同每个数据操作相关联的LINQ表达式树的相应节点的内容之间的相似性。相关领域内的技术人员将理解, 还可以使用多种用于匹配树结构的可替代方法。此外,在某些实施例中,查询匹配器212可以使用一组规则来驱动匹配过程。查询模板代数描述中的附加的查询模板算子可以允许查询匹配器212匹配更宽的一组经规范化的查询并且从其中提取出信息。现在将提供由查询匹配器212所执行的匹配过程的示例。将参考使用LINQ表达式来表示经规范化的查询和查询模板的实施例来描述这些示例。然而,示例性实施例的范围在此方面不受限。例如,下面所述的经规范化的查询和查询模板还可以使用LINQ表达式树来表示,并且查询匹配器212可以使用与所述过程类似的选择过程。例如,经规范化的查询可以由如下LINQ表达式来表示[Customers],其旨在从数据服务206获得所有顾客的列表。查询匹配器212可以接收在上面被规范化的以所述形式二者任一和/或作为LINQ表达式树的查询。查询匹配器212可以将经规范化的查询与存储在目录214中的每个查询模板相比较。这样的查询模板可以包括用于如下数据操作的查询模板List<Customer>GetAllCustomers(),其中相关联的查询模板是如下形式的LINQ表达式GetAlICustomers:[Customers]。根据上面的示例,查询匹配器212可以基于经规范化的查询的[Customers] LINQ表达式与同List〈Customer>GetAlICustomers O数据操作相关联的查询模板的 GetAllCustomers: [Customers]LINQ表达式的比较来从固定的一组数据操作中选择 List〈Customer>GetAl ICustomers O数据操作。在该示例中,当针对数据服务206执行所选数据操作List〈Customer>GetAllCustomers O时,将返回满足该经规范化的查询的数据。 因此,根据该示例,查询匹配器212可以从固定的一组数据操作中选出可以针对数据服务 206来执行的单个数据操作以满足经规范化的查询[Customers]。应当注意,在某些实施例中,查询匹配器可以从固定的一组数据操作中选择在针对数据服务206执行时将满足经规范化的查询的两个或更多个数据操作。
i.后处理功能在一个实施例中,查询匹配器212可以从固定的一组数据操作中选择仅部分满足经规范化的查询的数据操作。换言之,响应于所选数据操作的执行而从数据服务206所返回的数据将不完全满足经规范化的查询。例如,所返回的这样的数据可以包括比经规范化的查询本打算获得的数据更多的数据和/或以与经规范化的查询所指定的顺序不同的顺序所存储的数据。在一个实施例中,查询匹配器212可以标识出一个或多个后处理功能,这些后处理功能将被结果组装器216应用于通过针对数据服务执行所选数据操作所获得的数据。这些后处理功能可以被标识为执行计划的如下部分该部分与所选数据操作的标识或描述一起由查询匹配器212提供给查询处理器208。举例来说,经规范化的查询可以由如下LINQ表达式来表示[Customers]. Where (c = > c. ID = = “MSFT” ),其旨在从数据服务206获得具有顾客标识符“MSFT”的所有顾客的列表。查询匹配器212可以接收在上面被规范化的以所述形式二者任一和/或作为LINQ表达式树的查询。查询匹配器212可以将经规范化的查询与存储在目录214中的每个查询模板相比较。 这样的查询模板可以包括用于如下数据操作的查询模板List<Customer>GetAllCustomers(),其中相关联的查询模板是如下形式的LINQ表达式GetAlICustomers:[Customers]。根据上面的示例,查询匹配器212可以基于经规范化的查询的[Customers]. Where (c = > c. ID = = ’^ISFT”)表达式与同 List〈Customer>GetAl ICustomers O 数据操作相关联的查询模板的GetAllCustomers: [Customers]LINQ表达式的比较来从固定的一组数据操作中选择List〈Customer>GetAllCustomers O数据操作。在该示例中,当针对数据服务206执行所选数据操作List〈Customer>GetAllCustomers O时,将返回将不完全满足该经规范化的查询的数据。因此,查询匹配器212可以标识出为了满足经规范化的查询将由结果组装器216对从数据服务206获得的数据执行的一个或多个后处理功能。根据该示例,所标识出的后处理功能可以对基于所选数据操作List〈Customer>GetAllCustomers O 的执行对从数据服务206获得的数据进行过滤,以生成该数据的包含具有顾客标识符 “MSFT”的顾客的列表的子集,由此满足该经规范化的查询。在另一示例中,经规范化的查询可以由如下LINQ表达式来表示[Customers]. Where (c = > c. ID = = “MSFT” ). SelectMany (c = > c. Orders),其旨在从数据服务206获得具有顾客标识符“MSFT”的所有顾客的所有订单的列表。查询匹配器212可以接收在上面被规范化的以所述形式二者任一和/或作为LINQ表达式树的查询。查询匹配器212可以将经规范化的查询与存储在目录214中的每个查询模板相比较。这样的查询模板可以包括用于如下数据操作的查询模板List<Customer>GetAllCustomers ()以及List〈Customer>GetAlIOrders O其中相关联的相应查询模板是如下形式的LINQ表达式GetAlICustomers: [Customers],以及GetAllOrders:[Orders]
根据上面的示例,查询匹配器212可以基于经规范化的查询的[Customers]. Where (c = > c. ID = = “MSFT”)· SelectMany (c = > c. Orders) LINQ 表达式与同 List<Customer>GetA110rders ()数据操作相关联的查询模板的 GetAllOrders: [Orders] LINQ表达式的比较来从固定的一组数据操作中选择List〈Customer>GetA110rders O数据操作。例如,查询匹配器212可以基于若干匹配因素来在该固定的一组数据操作中的其他数据操作的范围内选择List〈Customer>GetA110rders O数据操作,所述匹配因素包括:与该数据操作相关联的查询模板的LINQ表达式如何紧密地匹配经规范化的查询的LINQ表达式。在该示例中,当针对数据服务206执行所选数据操作GetAllOrders: [Orders]时,将返回将不完全满足该经规范化的查询的数据。因此,查询匹配器212可以标识出为了满足该查询将由结果组装器216对从数据服务206获得的数据执行的一个或多个后处理功能。根据该示例,所标识出的后处理功能可以对基于所选数据操作GetAllOrders: [Orders]的执行从数据服务206获得的数据进行过滤,以获得该数据的包含具有顾客标识符“MSFT”的顾客的列表的所有订单的子集,由此满足该经规范化的查询。ii.指示任选性的查询模板算子在一个实施例中,查询匹配器212可以将经规范化的查询与包括指示任选性的算子的查询模板相比较。查询匹配器212查明具有指示任选性的算子的查询模板是否匹配该经规范化的查询。指示任选性的算子被用于指示查询模板的元素将在匹配期间被认为是任选的,这意味着,经规范化的查询不必为了被认为是匹配的而包括该任选元素。使用包括指示任选性的算子的查询模板将有利地使得能够定义将与相同查询的许多不同变型相匹配的查询模板,其中这些变型的前提是包括或排除诸如任选参数之类的某些任选元素。根据实施方式可以在查询模板内使用多种合适算子中的任何算子来指示任选性。例如,在某些实施例中,被表达成LINQ表达式的查询模板的Where O元素可以通过将 Where ()元素表达成OptionalWhereO而被标识为任选的,其中对任选性的指示符是所插入的“Optional (任选)”文字。然而,这仅仅是一个示例。相关领域的技术人员将容易地理解,可以使用任何数目的其他算子。iii.具有提取元素的查询模板在一个实施例中,查询匹配器212可以将经规范化的查询与包括至少一个提取元素的查询模板相比较。如在此所称呼的那样,提取元素是查询模板的如下部分该部分被指定为向查询匹配器212指示在匹配以前应当用从经规范化的查询中提取出的特定值或算子替换该元素。在由查询匹配器212执行的选择过程期间,查询匹配器212将在经规范化查询中提取出由提取元素所标识出的值、算子或信息元素(比如属性元素的名称或属性元素引用序列),并且然后用所提取出的值、算子或信息元素来替换该提取元素。该特性使得能够以灵活的方式定义查询模板,这些灵活的方式允许参考经规范化的查询的相应元素来定义该模板的元素。例如,经规范化的查询可以由如下LINQ表达式来表示[Customers]. Where (c = > c. ID = = “MSFT”). SelectMany (c = > c. Orders). OrderBy (o = > o. Date),其旨在从数据服务206获得具有顾客标识符“MSFT”的所有顾客的所有订单的列表,其中该订单列表以按日期排序的形式被返回。查询匹配器212可以接收在上面被规范化的以所述形式二者任一和/或作为LINQ表达式树的查询。查询匹配器212可以将该查询与存储在目录214中的每个查询模板相比较。这样的查询模板可以包括用于如下数据操作的查询模板List<Order>GetOrdersForCustomer(string customerID),其中相关联的查询模板是如下形式的LINQ表达式GetOrdersForCustomer: [Customers]. Where (c = > c. ID = = ExtractConstantF orParam( “customerID,,))· SelectMany(c = > c. Orders)。根据上面的示例,查询匹配器212可以基于经规范化的查询的LINQ表达式与同相应数据操作相关联的查询模板的LINQ表达式的比较来从固定的一组数据操作中选择Lis t<0rder>Get0rdersForCustomer(string customerID)数据操作。在该不例中,查询模板中的 Where (c = > c. ID = = ExtractConstantForParam( “customerID,,))兀素包括提取兀素ExtractConstantForParam( “customerID”)。在选择过程期间,查询匹配器212从经规范化的查询中提取出参数“customerID”,该参数在该情况下可以是“MSFT”。一旦从查询中提取出该参数,则该参数就可以用作相应查询模板的一部分。根据该示例,提取和替换以后的查询模板为GetOrdersForCustomer: [Customers]. Where (c = > c. ID = = “MSFT”). SelectMany (c = > c. Orders)。换言之,提取兀素 ExtractConstantForParam被从经规范化的查询中提取的常量“MSFT”替换。然后,查询匹配器212使用包括所提取的常量的查询模板继续该选择过程。查询匹配器212可以在执行计划中记录关于提取发生的信息。例如, 查询匹配器212可以用从查询中提取出的、或者由与所选数据操作相关联的查询模板所提供的相应元素来配置执行计划的描述的指定元素。应当注意,根据某些实施例,可以定义包括上面特性的任何组合的查询模板。例如,可以定义将一个或多个提取元素与一个或多个任选元素结合使用的一个或多个查询模。iv.空匹配在一个实施例中,查询匹配器212可以确定在该固定的一组数据操作中不存在可以完全满足经规范化的查询的数据操作,并且还可以确定不存在可以应用于从数据服务206获得的数据以完全满足该查询的可用后处理功能。例如,在某些实施例中,某些后处理功能可能由于中间层204的开发者或管理员确定这样的后处理功能过于昂贵或以其他原因不期望执行而不可用。在这种情况下,查询匹配器212可以向请求处理器208返回指示经规范化的查询不能被执行的结果,并且该结果可以被传递回请求实体202。可替代地, 查询匹配器212可以向请求处理器208返回如下的执行计划在执行计划在被结果组装器 216执行时将导致产生不完全满足原始提交的查询的查询结果。然后,这些查询结果可以被请求处理器208传递回请求实体202。4.目录在一个实施例中,目录214存储固定的一组数据操作和相关联的查询模板。在另一实施例中,目录214仅仅存储与该固定的一组数据操作相关联的查询模板,并且该组固定的数据操作存储在结果组装器216中并且准备好供结果组装器216执行。存储在目录 214中的该固定的一组数据操作和相关联的查询模板可以由中间层204的管理员和/或开发者或者由其他某个实体来定义。在一个实施例中,目录214可以存储随时间被开发者或其他某个实体修改的一组数据操作。在另一实施例中,目录214可以不存储相关联的查询模板,而是从诸如关于数据操作名称的一组约定之类的其他信息中导出所述查询模板。应当注意,尽管目录214在图2中被示为逻辑上不同的组件,但是一实施方式可以将目录214与数据检索系统200的另一组件相组合。例如,一实施方式可以将目录214直接集成到查询匹配器212中或者可以将目录214存储在数据服务206本身之内。5.结果组装器结果组装器216从请求处理器208接收执行计划。该执行计划可以包含将针对数据服务206执行以获得数据的所选数据操作。在一个实施例中,结果组装器216包括该固定的一组数据操作,其中针对该组数据操作,目录214存储有相关联的相应查询模板。换言之,目录214可以仅为包括在结果组装器216中并由其执行的数据操作存储有查询模板。 结果组装器216可以针对数据服务206执行由执行计划所指定的所选数据操作。数据服务 206可以响应于所选数据操作的执行而向结果组装器216返回数据。结果组装器216还可以存储以及能够执行后处理功能。如上所述,执行计划还可以包含可以对从数据服务206获得的数据执行的后处理功能。结果组装器216可以对从数据服务206获得的数据执行由执行计划所指定的后处理功能。如上所述,后处理功能可以包括过滤和可以对所获得数据执行以满足经规范化的查询的其他功能。在一个实施例中,可由结果组装器216执行的该固定的一组数据操作可以包括与简单对象访问协议(SAOP)、分布式公共对象模型(DCOM)和/或远程过程调用(RPC)相关联的一个或多个数据操作。例如,所选数据操作可以是在执行时访问数据服务206的SOAP操作。结果组装器216向请求处理器208返回查询结果以用于转发给请求实体202。该查询结果包括所获得的数据和/或经过后处理的数据。C.数据服务数据服务206充当3层数据检索系统200的后层。数据服务206可以包括数据库服务器和与其连接的一个或多个数据库或一个或多个web服务。在数据服务206包括数据库服务器的实施例中,该数据库服务器可以包括任何类型的数据库服务器,包括任何类型的关系数据库服务器、对象/关系数据库服务器、面向对象的数据库服务器等等。如上所述,数据服务206可以使用由中间层204(即结果组装器216)执行的数据操作来访问。响应于从结果组装器216接收到数据操作,数据服务206被配置为返回数据。III.用于使用查询模板将查询与数据操作进行匹配的示例性方法现在将描述根据各个实施例的用于使用查询模板将查询与数据操作进行匹配的示例性方法。具体而言,图3描绘了根据一实施例的使用查询模板将查询与数据操作进行匹配的示例性数据检索方法的流程图300。现在将在继续参考上面参照图2所述的系统200 的情况下描述流程图300的方法。然而,相关领域的技术人员能够理解,流程图300的方法不限于这些实施方式。如图3所示,流程图300的方法始于步骤302,在该步骤302,从请求实体接收查询。该步骤例如可以由系统200的请求处理器208来执行。如上面参考系统200所述,该查询可以向诸如系统200的数据服务206之类的数据服务请求所指定的数据。例如,请求处理器208可以从请求实体202接收该查询。
13
在步骤304,通过将该查询与同每个数据操作相关联的查询模板相比较来从用于访问该数据服务的固定的一组数据操作中选择数据操作。每个查询模板都包括查询的可被相关联的数据操作满足的代数描述。该步骤例如可以由系统200的查询匹配器212来执行。在步骤306,针对数据服务执行所选数据操作以获得数据。该步骤例如可以由系统200的结果组装器216来执行。例如,可以由结果组装器216针对数据服务206执行所选数据操作来获得数据。在任选步骤308,可以对从该数据服务获得的数据执行后处理功能以满足该查询。 该步骤例如可以由系统200的结果组装器216来执行。例如,这些后处理功能可以由结果组装器216对从数据服务206获得的数据执行以满足该查询。在步骤310,将所获得的数据提供给请求实体。该步骤例如可以由系统200的请求处理器208来执行。例如,请求处理器208可以向请求实体202提供包括所获得的数据 (或经过后处理的数据)的查询结果。图4描绘了根据一实施例的使用查询模板将查询与数据操作相匹配的另一示例性数据检索方法的流程图400。现在将在继续参考上面参照图2所述的系统200的情况下描述流程图400的方法。然而,相关领域的技术人员能够理解,流程图400的方法不限于这些实施方式。如图4所示,流程图400的方法始于步骤402,在该步骤402,接收查询。该步骤例如可以由系统200的请求处理器208来执行。如上面参考系统200所述,该查询可以向诸如系统200的数据服务206之类的数据服务请求所指定的数据。在步骤404,生成用于满足该查询的执行计划。该执行计划可以包括对可针对数据服务执行的数据操作和将应用于从数据服务获得的数据的后处理步骤的引用。该步骤例如可以由系统200的查询匹配器212来执行。例如,查询匹配器212可以生成包括用于获得数据的数据操作以及将对所获得数据执行的后处理步骤的执行计划。该执行计划基于查询与查询的可被每个数据操作满足的代数描述的匹配程度标识出数据操作。在任选步骤406,将执行计划提供给实体以供执行。该步骤例如可以由系统200的请求处理器208来执行。例如,请求处理器208可以将执行计划提供给结果组装器216以供执行。示例性计算机系统实施方式图5示出了可用于实现根据一实施例的用于使用查询模板将查询与数据操作相匹配的系统的示例性计算机系统500。例如,图I的三层数据检索系统104或图2的三层数据检索系统200的任何组件都可以使用计算机系统500来实现。计算机系统500例如可以表示常规个人计算机、移动计算机或工作站形式的通用计算设备,或者计算机系统500可以是专用计算设备。此处所提供的对计算机系统500的描述只是为了说明,并不是限制性的。实施例也可以在相关领域的技术人员所知的其它类型的计算机系统中实现。如图5所示,计算机系统500包括处理单元502、系统存储器504,以及将包括系统存储器504的各种系统组件耦合到处理单元502的总线506。处理单元502可包括一个或多个处理器或处理核心。系统总线506表示若干类型的总线结构中的任何一种总线结构的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口,以及使用各种总线体系结构中的任何一种的处理器或局部总线。系统存储器504包括只读存储器(ROM) 508和随机存取存储器(RAM)510。基本输入/输出系统512 (BIOS)存储在ROM 508中。计算机系统500还具有一个或多个以下驱动器用于读写硬盘的硬盘驱动器514、 用于读或写可移动磁盘518的磁盘驱动器516、以及用于读或写诸如⑶R0M、DVD ROM或其他光介质之类的可移动光盘522的光盘驱动器520。硬盘驱动器514、磁盘驱动器516,以及光驱动器520分别通过硬盘驱动器接口 524、磁盘驱动器接口 526,以及光学驱动器接口 528连接到系统总线506。驱动器以及它们相关联的计算机可读介质为计算机提供了对计算机可读指令、数据结构、程序模块,及其他数据的非易失存储器。虽然描述了硬盘、可移动磁盘和可移动光盘,但是,也可以使用诸如闪存卡、数字视频盘、随机存取存储器(RAM)、只读存储器(ROM)等等之类的其他类型的计算机可读介质来存储数据。数个程序模块可被存储在硬盘、磁盘、光盘、ROM,或RAM上。这些程序模块可以包括请求处理器208、查询规范化器210、查询匹配器212和/或结果组装器216中的一个或多个。当被处理单元502执行时,这些程序模块可以执行上述功能和特性,包括、但不限于 上面参考图3的流程图300和图4的流程图400所述的任何步骤和功能。用户可以通过诸如键盘538和定点设备540之类的输入设备向计算机系统500中输入命令和信息。其它输入设备(未示出)可包括话筒、操纵杆、游戏控制器、扫描仪等等。 在一个实施例中,结合显示器544提供具有多点触控能力的触摸屏以允许用户通过向触摸屏上的一个或多个点施加触摸(例如通过手指或指示笔)来提供用户输入。这些及其他输入设备常常通过耦合到总线506的串行端口接口 542连接到处理单元506,但是,也可以通过其他接口,诸如并行端口、游戏端口、通用串行总线(USB)端口,来进行连接。显示器544 还通过诸如视频适配器546之类的接口连接到总线506。除了显示器之外,计算机系统500 还可包括其他外围输出设备(未示出),比如扬声器和打印机。计算机系统500通过网络接口或适配器550、调制解调器552或其它用于在网络上建立通信的装置连接到网络548 (例如,局域网或诸如因特网之类的广域网)。调制解调器552(可以是内置的或外置的),通过串行端口接口 542连接到系统总线506。如此处所用的,术语“计算机程序介质”以及“计算机可读介质”被用于泛指非瞬态介质,诸如与硬盘驱动器514相关联的硬盘、可移动磁盘518、可移动光盘522,以及其他介质,诸如闪存卡、数字视频盘、随机读取存储器(RAM)、只读存储器(ROM)等。如上文所指示的,计算机程序和模块(包括应用程序532及其他程序模块534)可被存储在硬盘、磁盘、光盘、ROM或RAM上。这样的计算机程序也可以通过网络接口 550或串行端口接口 542来接收。这些计算机程序在由应用程序执行或加载时使得计算机500能够实现此处所讨论的实施例的特征。因此,这样的计算机程序表示计算机系统500的控制器。实施例还针对包括存储在任何计算机可读介质上的软件的计算机程序产品。这样的软件,当在一个或多个数据处理设备中执行时,使数据处理设备如此处所描述的那样操作。实施例可使用现在已知或将来知晓的任何计算机可使用或计算机可读介质。计算机可读介质的例子包括但不限于存储设备,诸如RAM、硬盘、软盘、CD ROM,DVD R0M、Zip盘、磁带、 磁存储设备、光存储设备、基于MEMS的存储设备、基于纳米技术的存储设备,等等。V.结语虽然以上描述了不同的实施例,但应当理解的是它们只是作为示例而非限制。对于相关领域的技术人员显而易见的是,可以对其做出各种改变而不背离本发明的精神和范围。因此,此处所公开的本发明的宽度和范围不应被上述所公开的示例性实施例所限制,而应当仅根据所附权利要求书及其等同替换来定义。
权利要求
1.一种方法(300),包括从请求实体接收(302)查询;基于该查询从固定的一组用于访问数据服务的数据操作中选择(304) —个或多个数据操作,其中该选择包括将该查询与同该固定的一组数据操作中的每个数据操作相关联的查询模板相比较,每个查询模板都包括查询的能够被相关联的数据操作满足的代数描述;针对数据服务执行(306)所选数据操作以从其获得数据;以及将所获得的数据提供(310)给请求实体。
2.如权利要求I所述的方法,其特征在于,该查询包括LINQ表达式,并且其中将该查询与同该固定的一组数据操作中的每个数据操作相关联的查询模板相比较包括将该LINQ表达式与同该固定的一组数据操作中的每个数据操作相关联的LINQ表达式模板相比较。
3.如权利要求I所述的方法,其特征在于,该选择包括选择一个或多个能够针对该数据服务执行以满足该查询的一个或多个数据操作。
4.如权利要求I所述的方法,其特征在于,该选择包括选择一个或多个能够针对该数据服务执行以部分地满足该查询的一个或多个数据操作,该方法还包括对从该数据服务获得的数据执行一个或多个后处理功能以满足该查询。
5.如权利要求I所述的方法,其特征在于,还包括在该选择步骤以前对该查询进行规范化。
6.如权利要求I所述的方法,其特征在于,将该查询与同该固定的一组数据操作中的每个数据操作相关联的查询模板相比较包括将该查询与包括算子的至少一个查询模板相比较,所述算子指示该查询模板的一部分在查明该查询模板是否与该查询相匹配时是任选的。
7.如权利要求I所述的方法,其特征在于,将该查询与同该固定的一组数据操作中的每个数据操作相关联的查询模板相比较包括用从该查询中提取的由至少一个查询模板的指定元素标识出的相应元素替换该指定元素。
8.一种包括上面记录有计算机程序逻辑的计算机可读介质的计算机程序产品,该计算机程序逻辑包括用于使得处理器能够执行如权利要求1-7任一项所述的装置。
9.一种系统(200),包括请求处理器(208),该请求处理器(208)被配置为从请求实体(202)接收查询;查询匹配器(212),该查询匹配器(212)被配置为基于该查询从固定的一组用于访问数据服务(206)的数据操作中选择一个或多个数据操作,其中该查询匹配器(212)被配置为通过将该查询与同该固定的一组数据操作中的每个数据操作相关联的查询模板相比较来执行该选择,每个查询模板都包括查询的能够被相关联的数据操作满足的代数描述;以及结果组装器(216),该结果组装器(216)被配置为针对数据服务(206)执行所选数据操作以从其获得数据;请求处理器(208)还被配置为向请求实体(202)提供所获得的数据。
10.如权利要求9所述的系统,其特征在于,该查询包括LINQ表达式;以及其中该查询匹配器被配置为将该LINQ表达式与同该固定的一组数据操作中的每个数据操作相关联的LINQ表达式模板相比较。
11.如权利要求9所述的系统,其特征在于,该查询匹配器被配置为选择一个或多个能够针对该数据服务执行以满足该查询的一个或多个数据操作。
12.如权利要求9所述的系统,其特征在于,该查询匹配器被配置为选择一个或多个能够针对该数据服务执行以部分地满足该查询的一个或多个数据操作;以及其中该结果组装器还被配置为对从该数据服务获得的数据执行一个或多个后处理功能以满足该查询。
13.如权利要求9所述的系统,其特征在于,还包括查询规范化器,该查询规范化器被配置为在由该查询匹配器执行该选择以前对该查询进行规范化。
14.如权利要求9所述的系统,其特征在于,该查询匹配器被配置为将该查询与包括算子的至少一个查询模板相比较,所述算子指示该查询模板的一部分在查明该查询模板是否与该查询相匹配时是任选的。
15.如权利要求9所述的系统,其特征在于,该查询匹配器还被配置为用从该查询中提取的由至少一个查询模板的指定元素标识出的相应元素替换该指定元素。
全文摘要
本发明涉及使用查询模板来将查询与数据操作相匹配。在此描述了由多层数据检索系统的中间层执行以选择对应于查询的数据操作的系统和方法。可以从前层接收查询。该选择是通过将查询与同每个数据操作相关联的查询模板相匹配来执行的。每个数据操作的查询模板都包括查询的每个可被相应数据操作满足的代数描述。然后,针对数据服务执行所选数据操作以获得数据,这些数据然后被提供给前层。在一些实施例中,可以由中间层创建执行计划以用于满足该查询。该执行计划可以包括所选数据操作和后处理步骤。可以将后处理步骤应用于所获得的数据以满足该查询。然后,经过后处理的数据被提供给前层。
文档编号G06F17/30GK102609445SQ20111046279
公开日2012年7月25日 申请日期2011年12月9日 优先权日2010年12月10日
发明者M·L·鲁伊斯 申请人:微软公司

最新回复(0)