分布式查询引擎流水线方法和系统的制作方法

文档序号:6419515阅读:222来源:国知局

专利名称::分布式查询引擎流水线方法和系统的制作方法
技术领域
:本发明一般涉及在数据源上进行查询的软件领域,尤其涉及对包含不同数据模型的数据源的分布式查询。
背景技术
:在各种数据源上进行查询是在具有不同数据模型的数据源上执行搜索所急待解决的问题。在具有相同数据模型的异类数据源中也同样出现出这样的问题。为了查询具有多个数据模型的多个数据源,通常需要多个查询执行引擎。输入查询通常由单片机分解,该单片机确定与执行引擎相连的先验应当得到初始输入查询的哪个部分。从而单片地处理原始查询,以将该查询分成用于执行的清楚块。每个执行引擎对应于特殊数据模型或数据源。然后,各个查询执行引擎执行它们的查询部分并将结果返回到单片机。然后该单片机具有合并来自每个查询执行引擎的各个查询结果并将它们串在一起以形成一组完整的查询结果的任务。各种数据查询的该方法存在需要能识别和操作所有可能数据源的单片机的缺点。这是一个不好的任务,因为不同数据源具有用于与它们的数据相互作用的很不同的API’s或模型,并且建造熟知所有数据模型并能操作所有可能数据源的单片机一般不太可行或不期望。例如,如果有人想要在SQL数据库或XML文件上查询,与XML文件相互作用的唯一接口是文档对象模型(DOM),并且到数据库的唯一接口是SQL命令。因此,这人需要不同代码与数据库和XML文件一起工作。如果有人试图建造能够处理附加数据模型类型(如在本领域呈现出重要性的那些数据类型)的单片机的话,则该问题将会加剧。在这样的条件下,通过改变需求,单片引擎容量会被很大程度地超出,并且如果任何附加数据模型类型被添加或如果现存的数据模型类型明显改变,则需要重新设计。建立各种数据源查询机制的附加问题是虚拟查询。如果数据源可以以一种数据模型类型来轻松地查询,然而还希望以第二数据模型查询语言来建立查询,那么则需要一种数据模型查询语言类型的转换。该需要会导致需求多套硬件和软件模块以及对应数量的优化器来确保查询有效编码的多个查询语言转换。因此,存在避免设计和建造单片查询处理器的体系结构的需要,该单片查询处理器适合于改变查询语言需求。另外,存在对这样一种体系结构的需要,即该体系结构避免了与从一种形式到另一种形式转换多个查询语言相关的问题。本发明着手解决前面提到的需要并用本发明的体系结构解决它们,本发明的体系结构适合于改变查询环境需要。
发明内容本发明通过利用分布式查询引擎流水线,着手解决在具有多个数据模型类型的多个数据源上进行查询的问题。该流水线提供了优越于典型解决方案的优点,该典型解决方案使用单片机来分解输入查询,分配各个部分到具体的执行引擎并随后将结果合并来形成输入查询结果。本发明使用级联的分析引擎而不用单片机来识别和提取在具体执行引擎上能编译和执行的输入查询部分。在本发明的一个实施例中,分析引擎与执行引擎类型相联系,尽管被级联,但是每个分析引擎互相独立操作。每个分析引擎具有输出该引擎将其识别为对应于执行引擎的编译部分,以及该已识别部分被去除并用占位符置换的重写查询。在该级联中位于下一个的分析引擎接收该重写查询,识别它的可执行部分,用另一个占位符置换它,并将两次重写查询与两个占位符一起向下传递到下一阶段。处理该查询的执行阶段,优选与对应于最后一个分析引擎的执行引擎一起开始。该执行引擎执行分配给它的查询,并且在执行引擎的级联中,将呼叫放置到下一更高执行引擎,以恢复占位符查询结果。每个执行引擎将呼叫放置到更高堆栈引擎以恢复对应于占位符的数据。在级联的执行引擎中的连续呼叫最终导致一个执行引擎聚集对应于输入查询的所有查询结果。可选的,流水线查询执行阶段可以从最外面执行或第一分析引擎编译输出处开始。如前所述,每个执行引擎可以执行给其分配的查询并且为占位符数据对后续的执行引擎进行呼叫。该输入查询返回的结果是相同的。前面的发明概述,以及随后优选实施例的详细描述,将通过结合附图阅读时会得到更好的理解。为了说明本发明,在图中示出了本发明的示范性结构,但是本发明不局限于公开的具体方法和手段。附图为图1是示出了示范性计算环境的框图,在该示范性计算环境中本发明的各个方面可以完成;图2示出了框图体系结构,其中本发明的各个方面可以在其内完成;图3示出了框图体系结构,其中本发明的各个方面可以在其内完成;以及图4示出了适合于本发明各个方面的流程图。具体实施例方式本发明要解决的问题是从多个查询源的多个类型的数据源上进行查询。一种解决在虚拟XML数据源上进行查询的问题的方法可以是使用统一中间语言。用在本发明上下文中的XML中间语言表示查询的意思或语义。该XML中间语言被称为查询中间语言(QIL)。QIL着手解决通常所说的″查询/视图组合″问题。例如,假定XML查询在数据、或XML、XML虚拟或其他数据的虚拟XML视图上执行。一种方法可以将该数据源作为XML实现,但是这会是非常低效的并且会需要比系统可用存储器更多的存储器。另一种方法是虚拟化该视图,将该查询用该虚拟视图构成,并且将传送结果到原始数据上的操作上。用户虽然明白在逻辑XNIL数据模型上进行的XML查询,但是无论使用所提供的哪一个系统,该执行查询本地数据格式。这种方法用在关系数据库中用于在SQL视图上的SQL查询。使用XML中间语言,例如QIL,初始潜在的复杂视图可以分解为在更小原子数据上的查询操作。这样,复杂视图的查询变成在附加了简单视图的查询上的查询。查询组合将此转变为仅仅在简单视图上的查询,从而简化了该问题。XML中间语言QIL提供(1)XML查询和XML视图的统一表达,从而极大地简化了查询/视图组合问题以及(2)将所有视图视为″虚拟XML″,极大地简化了该系统的接口。与每个可能语言和数据模型具有一个API相反,所有的API共享一个公用数据模型,XML中间语言QIL的操作符。连同输入查询的中间语言表达的使用,本发明公开了示范性的利用分布式体系结构的体系结构,用于在多个数据源上处理查询。一个真正的分布式体系结构能够在不同的执行引擎上分配混合源查询而不需要单片机来监控工作。本发明示范的分布式查询引擎流水线同时具有模块化的能力,表现在新的或修改的执行引擎可以被添加到体系结构中去以适应不同查询需要。另外,为了正确的操作,所利用的执行引擎不必被告知另一个查询执行引擎的工作。每个引擎可以在彼此顶端堆栈或级联,同时在该链或级联中,每个引擎仅仅处理并优化该引擎所知道的部分查询,并将其余的查询传递到下一个引擎。示范性的计算装置图1及下面的描述意欲提供其中可实现本发明的合适计算环境的简要概述。然而应当理解到,手提、便携或其它计算装置和所有种类的计算物均可与本发明结合使用。因此,虽然下面描述的是通通计算机(这仅仅是一个实例),但是本发明可以使用其他计算装置来实现,例如具有网络/总线互操作性和交互的客户端。因此,本发明可以在联网的主机服务环境中实现,其中包含很少或极少客户端资源,例如,客户装置仅仅用作网络环境中的网络/总线接口,例如放入设备中的对象、或其他计算装置和对象。根本上,根据本发明,凡是可以存储或可以从中检索数据的环境均是用于操作所需的或合适的环境。尽管不需要,本发明还可以通过操作系统来实现,以由装置或对象服务的开发者使用,和/或包括在根据本发明操作的应用软件内部。软件可以在计算机可执行指令例如程序模块的一般上下文内描述,由一个或多个计算机,例如客户工作站、服务器或其他装置执行。通常,程序模块包括执行特定任务、实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。典型地,程序模块的功能性可以在不同实施例中依照需要被结合或分配。而且,本领域技术人员将会理解到本发明可以在其他计算机配置中实践。其他熟知的适合用于本发明的计算系统、环境和/或配置包括,但不局限于个人电脑(PC)、自动出纳机、服务器计算机、手提或膝上型装置、多处理器系统、基于微处理器的系统、可编程消费电子产品、网络PC、设备、光、环境控制元件、小型机、大型机等等。本发明也可在由远程处理装置执行任务的分布式计算环境中实践,其中远程处理装置通过通信网络/总线或其他数据传输媒介进行连接。在分布式计算环境中程序模块可以同时位于包括存储器存储装置的本地和远程计算机存储媒介中,并且客户节点可以依次充当服务器节点。图1示出了本发明可以在其中实现的合适的计算系统环境100的实例,尽管如先前所解释清楚的,该计算系统环境100仅仅是合适的计算环境的一个实例,并且不打算对本发明应用或功能的范围作出任何限定。该计算环境100也不应当解释为具有与示范性操作环境100所示出的组件中任何一个或其组合相关的依赖或需求。参照图1,用于实现本发明的示范性系统包括为计算机系统110形式的通用计算装置。计算机系统110的组件可以包括,但不局限于,处理单元120、系统存储器130和系统总线121,该系统总线121将包括系统存储器的不同系统组件耦合到处理单元120。该系统总线121可以是任何几种类型的总线结构,包括使用任何一种总线体系结构的存储器总线或存储控制器、外围总线和本地总线。举例来说,但不局限于,该体系结构包括工业标准结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子标准协会(VESA)本地总线和周边元件互连(PCI)总线(也称为Mezzanine总线)。计算机系统110典型地包括各种计算机可读媒介。计算机可读媒介可以是可由计算机系统110访问的任何可用媒介,包括易失和非易失媒介、可移除和不可移除媒介。举例来说,而不作为限定,计算机可读媒介可以包含计算机存储媒介和通信媒介。计算机存储媒介包括易失和非易失性、可移除和不可移除媒介,这些媒介可以以任何方法或技术来实现,用于存储信息例如计算机可读指令、数据结构、程序模块或其他数据。计算机存储媒介包括,但不局限于,随机存取存储器(RAM)、只读存储器(ROM)、电可擦可编程只读存储器(EEPROM)、闪速存储器或其他存储技术、只读光盘存储器(CDROM)、可重写光盘(CDRW)、数字化视频光盘(DVD)或其他光盘存储器、磁盒、磁带、磁盘存储器或其他磁存储器装置、或可用于存储所需信息和可以由计算机系统110访问的任何其他媒介。通信媒质典型地包含计算机可读指令、数据结构、程序模块或其他为调制数据信号(例如载波的数据)、或其他传送机构并且包括任何信息传递媒介。术语″调制数据信号″指具有一个或多个其特征集或在信号中以编码信息方式变化的信号。举例但不限定地说,通信媒介包括有线媒介例如有线网络或直接有线连接和无线媒介例如声、RF、红外及其他无线媒介。任何上述的组合也包括在计算机可读媒介范围内。系统存储器130包括计算机存储媒介,其为易失和/或非易失存储器形式,例如只读存储器(ROM)131和随机存取存储器(RAM)132。包含例如在启动期间,有助于在计算机系统110内部元件之间传递信息的基本例程基本输入/输出系统133(BIOS)典型地保存在ROM131中。RAM132典型地包含可由处理单元120立即访问和/或立刻操作的数据和/或程序模块。举例来说,而不限定,图1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。该计算机系统110也可以包括其他可移除/不可移除、易失/非易失计算机存储媒介。仅仅举例来说,图1示出了读写到不可移除、非易失性磁媒介的硬盘驱动器141、读写到可移除、非易失性磁盘152的磁盘驱动器151和读写到可移除、非易失性光盘156的光盘驱动器155,例如CDROM、CDRW、DVD或其他光媒介。可用于该示范性操作环境的其他可移除/不可移除、易失/非易失计算机存储媒介包括(但不局限于),磁带盒、闪存卡、数字化视频光盘、数字视频磁带、固态RAM、固态ROM等等。该硬盘驱动器141典型地经由不可移除存储器接口例如接口140连接到系统总线121,并且磁盘驱动器151和光盘驱动器155典型地经由可移除存储器接口例如接口150连接到系统总线121。上述所描述的和在图1中示出的驱动器和他们相联系的计算机存储媒介为计算机系统110提供计算机可读指令、数据结构、程序模块、及其他数据的存储。例如,在图1中所说明的硬盘驱动器141存储操作系统144、应用程序145、其他程序模块146和程序数据147。注意,这些元件可以与操作系统134、应用程序135、其他程序模块136、和程序数据137相同或者不同。操作系统144、应用程序145、其他程序模块146、和程序数据147在此处被给予不同的数字以最小量的示出他们是不同的版本。用户可以通过输入装置例如键盘162和指示设备161将命令和信息输入到计算机系统110中,所述的指示设备161通常指鼠标、跟踪球或触摸板。其他输入装置(未示出)可以包括麦克风、操纵杆、游戏板、卫星盘、扫描器等等。这些及其他输入装置经常经由耦合到系统总线121的用户输入接口160连接到处理单元120,还可以由其他接口和总线结构例如并行端口、游戏端口或通用的串行总线(USB)进行连接。监视器191或其他类型显示装置也经由接口例如视频接口190连接到系统总线121,该视频接口190可以依次与视频存储器(未示出)进行通信。除监视器191之外,计算机系统也可以包括其他的外围输出装置,例如扬声器197和打印机196,它们可以经由输出外围接口195进行连接。该计算机系统110可以在使用逻辑连接到一个或多个远程计算机例如远程计算机180的网络或分布式环境中操作。该远程计算机180可以是个人电脑、服务器、路由器网络PC、对等装置或其他公用网络节点,并且典型地包括许多或所有上面描述的相对于计算机系统110的元件,尽管在图1中仅仅示出了存储器装置181。在图1中显示的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但是也可以包括其他网络/总线。这样的网络环境常见于家庭、办公室、企业计算机网络、内部网和互联网。当用于LAN网络环境时,计算机系统110通过网络接口或适配器170连接到LAN171。当用于WAN网络环境时,计算机系统110典型地包括调制解调器172或用于在WAN173例如互联网上建立通信的其他装置。可是内置或外置的调制解调器172可以经由用户输入接口160或其他合适的机构连接到系统总线121。在网络环境中,相对于计算机系统110或其部分显示的程序模块可以保存在远程存储器存储装置中。举例来说,而不限定,图1示出了在存储器装置181上驻留的远程应用程序185。应当理解到所示出的网络连接是示范性的,并且也可以使用在计算机之间建立通信链路的其他方法。不同的分布式计算框架根据个人计算和互联网的交叉已经并正在发展着。个人和商业用户同样被提供了应用和计算装置的无缝共同操作的和Web使能的接口,使得面向Web浏览和面向网络的计算活动增加。例如从微软公司,OneMicrosoftWay,Redmond,Washington98052,可获得的MICROSOFT′s.NETTM平台包括服务器、预制组件服务、例如基于Web的数据存储和可下载的装置软件。当此处示范性实施例结合驻留在计算装置中的软件进行描述时,本发明的一个或多个部分也可以经由操作系统、应用程序接口(API)或在任何协同处理器之间的″中间人″对象、显示装置和请求对象来实现,使得根据本发明的操作可以经由所有.NETTM的语言和服务并也在其它分布式计算框架内被执行、支持或访问。示范性实施例图2显示了包含当前发明一些方面的示范性系统体系结构的框图。示出了包括中间语言编译器和分布式执行引擎流水线的查询体系结构200。该体系结构显示了示范性的基本块,这些基本块被用来执行接收、编译、解释和访问数据,用于在多个数据源和类型上查询。可以使用多个前端语言编译器210,并且其一般是相关语言。例如,编译器210可以是与XML或XML相关的标准一致的XML相关编译器。该初始或输入查询可以从例如图1所示的多个输入装置中任何一个接收或输入。返回图2,前端编译器210可以接收查询例如XML查询、XML视图、或其他涉及XML语言的查询,以产生已编译的输入查询含义的中间语言表达220。用于前端编译器的实例语言类型包括XPath的W3C标准、XMLStylesheet语言(XSL)、XSLT、XML。附加的实例包括XML视图编译器及其它。在查询及视图语言和多目标模型之间的中间语言抽象允许实际数据,例如将来自MICROS0FT′s.NETTM的XML数据和虚拟XML数据用作数据源。如图2所显示产生的中间语言代表输入查询或视图。同样,因为它是查询含义的明显表达,所以它也可以被定义为查询中间语言(QIL)。该查询中间语言可以被视为共同通过用于体系结构200的所有查询和视图语言编译器210的语义表达。例如,如果输入编译器在XML数据上操作,则QIL在多个不同目标数据源(例如关系和非关系数据)上使得多个不同XML查询语言和视图定义语言(例如XPath和XSLT)能够抽象。同样,QIL使得共用结构支撑所有兼容的XML查询语言。本领域技术人员将会认识到,在查询体系结构200中使用中间语言表达的优点。内部的每个操作都是明显和无歧义的,优选的是完全地将帮助生成QIL的前端编译器从使用QIL的分布式查询引擎流水线上分离。前面的实例表示了当前发明一个上下文的实施例,当前发明使用XML中间语言表达作为输入输入到分布式查询引擎流水线。其他中间语言表达或直接基础语言可以用作输入输入到本发明,例如作为实例,直接LDP、AD、XML或SQL语言查询输入来作几个例子。中间语言表达220可以选择性地是优化的230,用于随后阶段更加有效的处理。图2的优化器仅作为当前发明上下文提供,并且不严格需要。输入查询优化的或未优化的中间语言表达220可以提供到分布式查询引擎流水线240。分布式查询引擎流水线允许在不同数据源260上查询。该流水线引擎将中间语言查询分配到具有特定数据模型的执行机器中。这允许查询执行由执行机器来完成,该执行引擎在特定数据模型内最大化查询效率。因此在流水线240内的执行引擎可以构造为使得他们在每个支撑的数据源内,在与数据模块相一致的数据源的基础上有效工作。例如用于SQL数据库源的执行引擎可以在具有SQL数据库管理系统的相关数据库上查询效率最优化。在流水线内的每个执行引擎具有到其特定数据源的访问250,该特定数据源承受其自身数据模型。分布式查询引擎能够在一个或多个数据源上查询,该一个或多个数据源在各种查询中具有一个或多个数据模型。当执行分布式查询时,流水线的执行引擎通常产生为进一步处理、存储、显示给用户可用的查询结果270,或者例如提供给随后的软件应用。图3表示了图2中分布式查询引擎流水线240的框图。图3显示了分布式查询引擎流水线的基本内部体系结构。该流水线由级联或堆栈分析引擎310、320、330和执行引擎370、380和390组成。应当指出图3示出了三个分析引擎和三个执行引擎,但是像小至两个和多至N个的分析/执行引擎对可以被级联用于给定的流水线应用。输入查询300由分析引擎A310接收。该引擎检查查询和找出查询的部分,该查询部分知道如何优化或传递312到执行引擎。分析引擎310去除识别部分并用占位符替换他们。从而该引擎310重写查询并将314带有占位符的查询均衡传递到分析引擎B320上。因此在该堆栈内该引擎310将修改的查询传递到下一引擎。分析引擎A310已识别的查询的部分被编译并被传递312到累加器340以保持编译查询部分(编译查询A)。请注意分析引擎A310不了解分析引擎B。引擎A提取它能识别的和能由特定执行引擎处理的查询部分,并且将查询平衡传递出。堆栈中的下一分析引擎,若有的话,仅仅识别对应于不同执行引擎的查询部分。分析引擎B320从引擎A接收修改后的查询并识别修改后的查询部分,这一部分能传递322到执行引擎。然后分析引擎B去除该识别部分,编译它,并将它传送到保持已编译查询B的累加器350。然后分析引擎B320通过置换,用占位符、占位符识别和提取的部分来重写它所收到的查询。然后在该堆栈中该分析引擎320传递两次修改的查询324到下一引擎。分析引擎C330从引擎B接收该两次修改的查询并且识别该两次修改的查询部分可以传递332到执行引擎。分析引擎C然后去除该识别部分,编译它,并将它传送到保持已编译查询C的累加器360。在实现分析引擎的更多层或阶段的系统中,分析引擎C330可以通过置换,用占位符、它识别和提取的部分来重写它所收到的查询。在堆栈中,该分析引擎C320可以传递三次修改的查询到下一引擎。因此明显的分布式流水线分析引擎可以按所需级联。编译的查询累加器340、350和360一起形成组合查询。每个查询部分(A、B和C)与在具有特定数据模型的数据源上有效执行查询的执行引擎相联系。例如,编译查询A340能够由执行引擎A390执行。执行引擎A能够访问250、具有对应于与编译查询A一致的数据模型的至少一部分的一个或多个数据源260。由编译查询A、B和C组合形成的组合查询340、350和360分别可以视为打包系列查询。例如,编译查询C360是子查询并是编译查询B350的一部分。因此,编译查询C由编译查询B打包。同样地,编译查询B350是编译查询A340的子查询并且编译查询B由编译查询A打包。应当指出,由编译查询A、B和C导致的编译和嵌套或打包查询是本发明有用的输出,这些查询输出可以存储用于将来使用。该存储的查询可以在相同或不同计算机上立即或延迟一段时间后执行。为了执行编译查询A、B和C的组合查询组合,需要执行引擎次序工作,这允许连续级别的包被打开。例如,为了编译查询A完全执行,编译查询B应该优选被执行。但是为了将编译查询B执行到完全执行,编译查询C应该优选被执行。因此,打开包的顺序优选首先是最里边的包,随后是连续的更高级别的包。在图3的实例中,编译查询C可以在编译查询B之前优选执行并且编译查询B可以在编译查询A之前优选执行。图3的执行引擎允许执行的优先权。执行引擎C接收365最里边的可执行编译查询360。该执行引擎C然后执行它的编译查询。包含兼容数据模型的一个或多个数据源260、373和250被访问。该数据源260返回372所需要的数据。然而,所提供的由分析引擎B320插入编译查询C中的占位符表明执行引擎C需要附加信息来完成查询结果。实质上,执行引擎C作为信息的外部源回叫375到执行引擎B380,来完成编译查询C的执行。由分析引擎B插入到编译查询C中的占位符回叫前一执行引擎,好象它是外部数据源。执行引擎B380接收来自执行引擎C的呼叫。执行引擎B然后输入355编译查询B350。编译查询B的执行通过访问382和250、一个或多个数据源260来进行。数据源260返回382所需的数据。然而,所提供的由分析引擎A310插入的编译查询B中的占位符表明执行引擎B需要附加的信息来完成查询结果。执行引擎B作为信息的外部源回叫385到执行引擎A390,来完成编译查询B的执行。由分析引擎A插入到编译查询B中的占位符回叫前一执行引擎,好象它是外部数据源。执行引擎A390接收385来自执行引擎B的呼叫。然后执行引擎B输入345编译查询B340。编译查询A的执行通过访问392和250、一个或多个数据源260来进行。数据源260返回392所需的数据。在该实例中,在编译查询A内有明显插入的占位符,因此该查询可以完全执行。执行引擎A提供编译查询A340结果到执行引擎B。执行引擎A已经完成它对来自执行引擎B的呼叫的响应。收到来自执行引擎A的查询结果时,执行引擎B能够完成它的编译查询B350的执行。通过提供375从执行引擎A所获得的信息和它自身查询结果到执行引擎C,执行引擎B然后响应。执行引擎B已经完成它对来自执行引擎C的呼叫的响应。收到来自执行引擎B的查询结果时,执行引擎C能够完成它的编译查询C360的执行。通过提供395从执行引擎B所获得的信息和它自身查询结果来形成初始输入查询300的完整结果,执行引擎C然后响应。图4是相对于图3描述的示范性过程的流程图。该过程通过接收输入查询启动410。该查询被提供到第一分析引擎,该第一分析引擎识别415对应于执行引擎和数据模型的一部分查询。输入查询已识别部分被编译用来执行并被送到存储位置420用于后面的恢复。然后该第一分析引擎可以重写输入查询425来去除已识别部分并用占位符置换失去部分。该第一分析引擎然后可以传递重写后的查询430到下一分析引擎,用于处理查询平衡。如果最后一个分析引擎到达435,则该过程可以改变。如果未到达在分析引擎级联中最后一个分析引擎,那么通过下一分析引擎该过程继续进行阶段440,识别该下一分析引擎能够容纳的重写查询部分。该过程继续进行,下一分析引擎如前面一样走过识别415、编译420、重写425和传送430步骤。如果该最后一个分析引擎已完成它的任务435,那么执行阶段开始445。优选地,该执行阶段和被存储的最后一个分析引擎编译一起开始。该最后编译也已知为最里面的编译。可选地,该执行可以与第一分析引擎编译一起开始。图4的流程图构建来显示与最后一个分析引擎编译一起开始的执行,尽管本领域技术人员可以构建第一分析引擎编译用于开始执行组合查询的流程。应当指出,在执行445开始的编译查询部分可以为系统可使用的输出。在使用合适的执行引擎的相同或不同系统上,该编译查询可以立刻执行或者恢复用于后面的应用。与最后一个分析引擎445编译一起开始执行,该对应的执行引擎可以回叫查询450对应编译部分。该引擎执行恢复的编译查询455。最初,在查询中将会有占位符,其将告知执行引擎为信息460进行外部源呼叫。该外部源呼叫可以进行465,并且来自下一级联执行引擎的数据将被请求。在该实例中,外部数据源为下一级联执行引擎。该下一引擎从存储器中回叫它对应的编译查询450并执行查询455。如果在执行查询中遇到占位符,该执行引擎可以进行产生外部源数据呼叫到下一级联执行引擎。指出该过程继续从一个级联执行引擎移动到下一个,直到执行引擎不再遇到外部源的占位符为止。如果在级联中的执行引擎没有外部占位符,并因此没有外部呼叫需要进行,那么那个查询的全部响应可以被给出到呼叫执行引擎470。然后在级联中下一更高引擎对应于它的下一更高执行引擎呼叫,来收集或累加嵌套的查询结果475。如果下一更高引擎也对应于呼叫480,那么外部源呼叫的执行移到下一执行引擎485。然后下一执行引擎发送它的查询结果返回到呼叫引擎470来收集累加的查询结果475。当所有的外部数据呼叫完成时,最里面的执行引擎或者基础引擎基本上已经恢复所有更高等级执行的所有结果,并累加全部查询490的结果。在该点来自初始恢复输入查询410的查询结果被累加并为下一过程可用或供用户使用。上面讲述过程的编码实例在下面提供。例如设想如下查询<prelisting-type="program-listing">  ‘AnXQuerycombiningrelationalandXMLoperators’  For$insqltable(“customers”)  wheresqlcolumn($i,‘CustomerID’)=‘ALFKI’  return  <Customerid=“{sqlcolumn($i,‘CustomerID’)}”  name=“{sqlcolumn($i,‘ContactName’)}”>  <OrderList>{  for$jinsqltable(“Orders”)  wheresqlcolumn($i,‘CustomerID’)=sqlcolumn($i,‘CustomerID’)  andposition($j)&gt;=3  return&lt;Orderid=”{sqlcolumn($J,‘OrderID’)}“/&gt;  }</OrderList>  </Customer></pre>该查询将相关操作者例如对比列数值与XML操作符(例如位置)相组合。如果该查询分成两部分一部分使用SQL服务器引擎可以执行并且另一部分使用XML引擎可以执行。该XQuery可以编译入QIL并随后被分析为可由SQL服务器执行的模式。通过去除那些模式、在虚拟XML文档上用导航置换它们,该查询随后可以被重写。再次,优点为该操作实现了仅仅部分绝对需要的映射,并且尽可能多的查询被推入SQL服务器。这可以通过从查询中提取所有SQL服务器操作并在虚拟XML文档上用导航置换它们而完成,例如如下<prelisting-type="program-listing">  for$iindocument(“virtual”)/root/X1  return  <Customerid=“{$i@CustomerID}“name=“{$i/@ContactName}“>  <OrderList>  {  for$jin$i/X2  wherepositio($j)>=3  return,Orderid={$j/@OrderID}/>  }  </OrderList>  </Customer></pre>应当注意,位置操作符留在适当的位置用于XML引擎执行。置换SQL表格和列的该虚拟XML文档在概念上等同于SQL查询的结果‘ExtractedSQLpartsoftheXQuery,tobeexecutedbySQLServer’SELECTX1.CustomerID,X1.ContactName,X2.OrderIDFROMCustomersX1JOINOredersX2ONX1.CustomerID=X2.CustomerIDWHEREX1.CustomerID=‘ALFKI’FORXMLAUTO其提出的XML形式如下‘VirtualXMLdocument’&lt;root&gt;&lt;X1CustomerID=“ALFKI”ContactName=“MariaAnders”&gt;&lt;X2OrderID=“10643”/&gt;&lt;X2OrderID=“10692”/&gt;&lt;X2OrderID=“10702”/&gt;&lt;X2OrderID=“10835”/&gt;&lt;X2OrderID=“10952”/&gt;&lt;X2OrderID=“11011”/&gt;&lt;/X1&gt;&lt;/root&gt;然而,这仅仅在概念上是对的;事实上,没有XML曾被建造。相反,普通的SQL查询发送到SQL服务器来执行结合和过滤,并且行组(rowset)结果通过客户XPathNavigator接口作为虚拟XML暴露给XML引擎。如上所述,虽然结合不同计算装置和网络体系已经描述了本发明的示范性实施例,基础的概念也可以用于需要执行查询系统的任何计算装置或系统中。因此,本发明的方法和系统可以应用于不同应用和装置上。虽然此处选择示范性编程语言、命名和实例作为不同选择的表达,这些语言、命名和实例并不意欲限定。本领域普通技术人员将会理解到存在多种方法提供结果代码,该结果代码获得相同、相似或等同的本发明所获得的系统和方法。此处描述的不同技术可以结合硬件或软件或者在合适的地方两者的结合来实现。因此,本发明的方法和设备或者其某些方法或部分,可以采取包含在有形媒介内的程序代码(例如指令)的形式,该有形媒介例如软盘、CD-ROM、硬盘驱动器或者任何其它机器可读存储媒介,其中当程序代码由机器例如计算机载入并执行时,该机器变成实践本发明的设备。程序代码在可编程计算机上执行的情况下,计算装置一般包括处理器、由处理器可读的存储媒介(包括易失和非易失存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。通过使用数据处理API等,利用本发明信号处理服务的一个或多个程序优选以高等级程序上的或对象定位的编程语言执行,与计算机相通信。然而,如果需要,程序可以以装置或机器语言来执行。在任何情况下,该语言可以为编译或解释语言,并与硬件执行指令结合。本发明的方法和设备也可以经由为程序代码形式包含的通信来实践,该程序代码在一些传送媒介上传送,例如在电线或电缆上、通过光纤、或经由任何其它形式的传送,其中当程序代码由机器获得并载入和执行时,如上在示范性实施例中所描述的诸如EPROM、门阵列、可编程逻辑装置(PLD)、客户计算机、录像机等,或者具有信号处理能力的接收机器都变成实践本发明的设备。当在通用目的的处理器上执行时,程序代码与处理器相结合来提供专用设备,该专用设备进行操作来激活本发明功能性。另外,结合本发明使用的任何存储技术可以不变地为硬件和软件的结合。虽然本发明结合不同图形的优选实施例进行了描述,应当理解到可以使用其它类似的实施例或者对所描述的实施例进行修改和添加,用于执行与本发明相同的功能而不背离本发明。而且,尤其当无线网络装置的数量继续激增时,应当重点指出预期有不同的计算机平台,包括手提装置操作系统和其它应用特定的操作系统。因此,本发明不应当局限于任何一个单独的实施例,而应当根据附加的权利要求来构造保护幅度和范围。权利要求1.一种在一个或多个执行引擎上分配查询部分的方法,所述方法包括接收输入查询;用第一分析引擎识别可以由第一执行引擎处理的输入查询部分;编译输入查询的识别部分形成第一编译部分;重写输入查询以形成第一重写查询,其中该输入查询的识别部分从该输入查询中去除并由第一占位符置换;传递第一重写查询到第二分析引擎;用第二分析引擎识别可以由第二执行引擎处理的第一重写查询部分;以及编译第一重写查询的识别部分产生第二编译部分,其中该输入查询在第一执行引擎和第二执行引擎上分配。2.如权利要求1所述的方法,进一步包括重写第一重写查询以形成第二重写查询,其中第一重写查询的识别部分从第一重写查询中去除并由第二占位符置换。3.如权利要求1所述的方法,其中重写操作进一步包括将第二编译部分打包到输入查询的第一编译部分中。4.如权利要求1所述的方法,其中第一编译部分和第二编译部分可以在不同数据源上执行。5.如权利要求1所述的方法,其中第一分析引擎是基于结构化查询语言的引擎并且第二分析引擎是基于扩展标记语言的引擎。6.如权利要求1所述的方法,进一步包括使用第二执行引擎部分地执行第二编译部分形成第二中间结果和第一占位符的组合,其中第一占位符保持第二编译部分的未执行部分;从第二执行引擎产生呼叫到第一执行引擎,请求对应于第一占位符的数据;使用第一执行引擎执行第一编译部分以形成对应于第一占位符的第一中间结果并满足呼叫;将第一中间结果提供到第二执行引擎;以及用第一中间结果代替第一占位符形成第二中间结果和第一中间结果的组合,该第一中间结果包括组合的输入查询结果。7.如权利要求6所述的方法,其中第一执行引擎和第二执行引擎在包括不同数据模型的查询上操作。8.如权利要求1所述的方法,进一步包括使用第一执行引擎部分地执行第一编译部分形成第一中间结果;从第一执行引擎产生呼叫到第二执行引擎,请求与输入查询未识别部分相对应的数据;使用第二执行引擎执行第二编译部分以形成第二中间结果并满足该呼叫;将第二中间结果提供给第一执行引擎;以及将第一中间结果与第二中间结果组合以形成组合的输入查询结果。9.如权利要求8所述的方法,其中该第一执行引擎和第二执行引擎在包括不同数据模型的查询上操作。10.一种用于对输入查询分配处理的系统,所述的系统包括两个或多个分析引擎,用于分离出能被编译和执行的输入查询部分;两个或多个执行引擎,用于对输入查询执行操作;以及访问一个或多个数据源,其中两个或多个分析引擎操作独立地识别和编译输入查询的一个或多个部分,其中两个或多个分析引擎中至少一个重写该输入查询,以去除对应于执行引擎的输入查询部分,以及该两个或多个执行引擎处理输入查询的一个或多个编译部分,使得来自于一个执行引擎的部分查询结果被传递到随后的执行引擎并被组合以形成整个输入查询结果。11.一种包含指令的计算机可读媒介,当其在计算机上运行时,在两个或多个执行引擎上执行分配查询部分的方法,该方法包括接收输入查询;用第一分析引擎识别可以由第一执行引擎处理的输入查询部分;编译输入查询的识别部分形成第一编译部分;重写输入查询以形成第一重写查询,其中该输入查询的识别部分从该输入查询中去除并由第一占位符置换;传递第一重写查询到第二分析引擎;用第二分析引擎识别可以由第二执行引擎处理的第一重写查询部分;以及编译第一重写查询的识别部分产生第二编译部分,其中该输入查询在第一执行引擎和第二执行引擎上分配。12.如权利要求11所述的计算机可读媒介,进一步包括使用第二执行引擎部分地执行第二编译部分形成第二中间结果和第一占位符的组合,其中第一占位符保持第二编译部分的未执行部分;从第二执行引擎产生呼叫到第一执行引擎,请求对应于第一占位符的数据;使用第一执行引擎执行第一编译部分以形成对应于第一占位符的第一中间结果并满足呼叫;将第一中间结果提供到第二执行引擎;以及用第一中间结果代替第一占位符形成第二中间结果和第一中间结果的组合,该第一中间结果包括组合的输入查询结果。13.如权利要求12所述的方法,其中第一执行引擎和第二执行引擎在包括不同数据模型的查询上操作。14.如权利要求12所述的方法,其中第一编译部分和第二编译部分在不同数据源上执行。15.如权利要求11所述的计算机可读媒介,进一步包括使用第一执行引擎部分地执行第一编译部分形成第一中间结果;从第一执行引擎产生呼叫到第二执行引擎,请求与输入未识别部分对应的数据;使用第二执行引擎执行第二编译部分以形成第二中间结果并满足该呼叫;将第二中间结果提供给第一执行引擎;以及将第一中间结果与第二中间结果组合以形成组合的输入查询结果。16.如权利要求15所述的方法,其中第一分析引擎是基于结构化查询语言的引擎并且第二分析引擎是基于扩展标记语言的引擎。全文摘要一种分布式查询引擎流水线体系结构,包括级联的分析引擎,这些分析引擎接收输入查询并且每个识别能够传递到执行引擎的输入查询部分。每个阶段重写该输入查询以去除已识别的部分并用占位符置换它。在该级联中,该重写查询向前送到下一分析引擎。每个引擎编译它所识别的部分使得执行引擎可以处理该部分。优选的是从最后一个分析引擎编译的查询部分进行执行。对应于最后一个分析引擎的执行引擎执行该查询,并在级联中为数据从前一部分对下一更高执行引擎进行访问。该处理一直持续到来自输入查询的结果被完全收集。文档编号G06F9/45GK1573756SQ20041006391公开日2005年2月2日申请日期2004年6月23日优先权日2003年6月23日发明者T·F·普弗莱格,A·E·基姆巴尔,A·A·德塞申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1