一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

具有公共数据结构的阶段式查询编译的制作方法

2023-03-20 00:04:01 来源:中国专利 TAG:
具有公共数据结构的阶段式查询编译
背景技术
::1.描述性语言(例如sql)和查询广泛地用于数据库应用中,并且需要编译成可以提供期望查询结果的过程。利用不同级别的细节,可以使用计划来描述这种过程。然而,随着数据库技术继续演进,多个软件模块可以参与查询编译。查询处理和编译的现有方法在若干场景中可能是脆弱的。在一个方面中,在接口的任一侧经历版本改变时,查询优化器与其它模块或服务之间的接口连接可以导致维护挑战。在另一方面中,随着编译或优化的改进,计划可以改变,并且有时可以给出意外结果。现有方法可能缺乏用于追踪或诊断计划改变的设施。因此,仍然需要改进的技术来管理现代数据库部署中的查询编译。技术实现要素:2.简而言之,所公开的技术将数据结构规范用于可以在多个用例中提供稳定性的查询计划。该规范适用于逻辑计划或物理计划(统称为中间计划)并且可扩展到执行计划。对于逻辑计划,数据结构规范可以提供用于指定数据源和计划流程的字段。对于物理计划,数据结构规范可以提供用于注释(例如提示)的附加字段。可以扩展数据结构规范来例如以序列化形式支持执行计划的存储。随着查询编译的分阶段进行,在一些示例中,可以将字段或字段值添加到现有数据结构。在其它示例中,可以在每个阶段内使用单独数据结构实例。集线器架构可以灵活地支持一系列阶段式编译工作流。3.在第一用例中,可以从一个软件模块接收在一个编译阶段的计划。可以根据数据结构规范来存储计划,并且将该计划传达给第二软件模块以用于第二编译阶段或在执行计划的情况下,用于执行。在另一用例中,可以按正常方式将查询引导到内联查询优化器以供进行实时编译,并且也可以将查询引导到离线优化器。离线优化器的结果可以在对相同查询的后续调用时用作对内联查询优化器的输入。在另一用例中,可以从外部服务接收计划或将计划提供给外部服务以供编译或执行。也就是说,数据结构规范可以提供用于随时间而跨编译阶段或在各种软件模块之间传送计划的稳定接口。更进一步地,所存储的计划可以用于在编译阶段之间缓存计划,或在优化器技术、数据库架构或底层平台的演进中保存计划的历史。4.在某些示例中,所公开的技术可以被实现为一种用于编译描述性数据库查询的计算机实现的方法。从第一软件模块接收查询的物理计划。物理计划包含一个或多个数据源、计划流程和存储为计划数据结构的相应字段的一个或多个注释。指令第二软件模块确定物理计划的执行计划。5.在一些示例中,第一软件模块可以是离线查询优化器。在接收之前,可以指令离线查询优化器确定查询的物理计划。因此,离线查询优化器可以响应于从第一客户端接收到查询的第一实例而被指令。执行计划可以响应于从第二客户端接收到相同查询的后续实例而被执行。计划数据结构的规范可以包含用于执行计划的可选字段。可以在可选字段中用执行计划扩充计划数据结构。第一软件模块可以根据所扩充的计划数据结构执行所述执行计划。注释可以包含对第二软件模块的有范围的提示。可以指令另一软件模块执行执行计划并且获得查询的结果。可以将结果转发到第一软件模块。6.在其它示例中,执行计划可以是第一执行计划,并且第二软件模块可以经历到第三软件模块的版本改变。随后,可以指令第三软件模块确定物理计划的第二执行计划。版本改变可以使第二执行计划与第一执行计划不同。7.在某些示例中,所公开的技术可以被实现为一种系统,该系统具有:一个或多个硬件处理器,其中存储器耦合到该硬件处理器;以及计算机可读介质,该计算机可读介质存储至少可由硬件处理器执行的以下指令。第一指令在执行时使数据库查询的逻辑计划从第一软件模块被接收。第二指令在执行时使第二软件模块确定逻辑计划的物理计划。逻辑计划和物理计划各自包括根据公共数据结构规范存储的一个或多个数据源和计划流程。物理计划可以包含同样根据公共数据结构规范存储的一个或多个注释。8.在一些示例中,第二软件模块可以包含内联查询优化器。公共数据结构规范可以在第二软件模块的版本改变期间保持不变。数据库查询可以是sql查询。第一软件模块可以实现多维服务的全部或一部分。逻辑计划可以根据公共数据结构规范而被存储在第一数据结构中。第二指令在被执行时可以使一个或多个注释被添加到第一数据结构。指令可以包含第三指令,该第三指令在执行时使第三软件模块确定物理计划的执行计划并且用执行计划扩充所存储的物理计划。9.在某些示例中,所公开的技术可以被实现为存储至少可在硬件处理器上执行的以下第一指令到第五指令的计算机可读介质。第一指令在被执行时使得接收描述性数据库查询。第二指令在被执行时指令第一软件模块确定查询的第一中间计划。第三指令在被执行时指令第二软件模块确定第二中间计划的执行计划。第四指令在被执行时使第三中间计划从第三软件模块被接收。第五指令在被执行时使第四中间计划被存储或检索。第一中间计划、第二中间计划、第三中间计划和第四中间计划中的每个中间计划包含一个或多个数据源和计划流程,并且被组织为符合公共规范的序列化数据结构,该公共规范提供用于计划流程的字段和用于一个或多个数据源的附加的一个或多个字段。对于给定中间计划具有一个或多个注释的情况,公共规范还提供用于一个或多个注释的一个或多个附加字段。10.在一些示例中,可执行指令包含第六指令和第七指令。第六指令在被执行时使第二中间计划得以用执行计划扩充。第七指令在被执行时使执行计划由第四软件模块执行。在相应情况下,第四指令可以使相应中间计划从包含第三软件模块的相应不同软件模块被接收。11.在其它示例中,第一软件模块可以是离线查询优化器,第二软件模块可以包含内联查询优化器,并且第三软件模块可以实现多维服务的一部分或全部。可执行指令可以包含第七指令,该第七指令在执行时使第六中间计划针对第五中间计划而被确定。第六中间计划和第五中间计划可以根据公共规范而被存储,该第六中间计划包含一个或多个注释。12.本发明的前述和其它目的、特征和优点将根据以下参考附图进行的详细描述而变得更加显而易见。附图说明13.图1是图示了根据所公开的技术的阶段式查询编译的示例的数据流程图。14.图2是根据所公开的技术的示例的用于查询编译的第一方法的流程图。15.图3是根据所公开的技术的示例的用于查询编译的第二方法的流程图。16.图4是可以实现所公开的技术的示例的软件环境的图。17.图5是描绘了所公开的技术的示例用例的序列图。18.图6a至图6e是根据所公开的技术的示例计划数据结构规范的图。19.图7a至图7e是根据所公开的技术的第一查询和相关联的示例计划数据结构的图。20.图8a至图8g是根据所公开的技术的第二查询和相关联的示例计划数据结构的图。21.图9a至图9b是示出了根据所公开的技术的第三查询和相关联的计划流程的图。22.图10a至图10b是示出了根据所公开的技术的第四查询和相关联的计划流程的图。23.图11是示意性地描绘了适合于实现所公开的技术的计算环境的图。24.图12是示意性地描绘了结合用于实现所公开的技术的计算云操作的计算设备的图。具体实施方式25.概述26.描述性查询(例如sql查询)需要编译成可以提供期望查询结果的过程。利用不同级别的细节,可以使用计划来描述这种过程。阶段式编译可以用于细化具有增加的细节和优化的计划,直到获得精确地映射到底层数据库实现的执行计划为止。27.所公开的技术提供用于存储查询计划的数据结构规范,该查询计划可以在多个用例中提供稳定性。该规范适用于逻辑计划或物理计划(统称为中间计划)并且可扩展到执行计划。对于逻辑计划,数据结构规范可以提供用于指定数据源和计划流程的字段。对于物理计划,数据结构规范可以提供用于注释(例如提示)的附加字段。可以扩展数据结构规范来例如以序列化形式支持执行计划的存储。计划数据结构可以在编译通过连续阶段进行时进行扩充或修改,同时遵守相同规范。28.稳定的数据结构规范提供了附加益处。随着数据库技术继续演进,多个软件模块可以参与查询编译和实现。可互操作的计划数据结构提供了公共交换介质,这是由于计划数据结构可以从一个模块输出,输入到另一模块,保存到储存库,或修改。29.在第一用例中,可以从一个软件模块接收在一个编译阶段的计划。可以根据数据结构规范来存储计划,并且将该计划传达给第二软件模块以用于第二编译阶段或在执行计划的情况下,用于执行。在另一用例中,可以按正常方式将查询引导到内联查询优化器以供进行实时编译,并且也可以将查询引导到离线优化器。离线优化器的结果可以在对相同查询的后续调用时用作对内联查询优化器的输入。在另一用例中,可以从外部服务接收计划或将计划提供给外部服务以供编译或执行。也就是说,数据结构规范可以提供用于随时间而跨编译阶段或在各种软件模块之间传送计划的稳定接口。更进一步地,所存储的计划可以用于在编译阶段之间缓存计划,或在优化器技术、数据库架构或底层平台的演进中保存计划的历史。30.所公开的技术的这些和其它优点将根据本文中所描述的示例而变得显而易见。31.术语[0032]“注释”是伴随计划流程以指导下游编译或执行阶段的元数据。注释可以指导对计划流程的一个或多个操作的物理算法的选择或实现。注释可以涉及整个计划流程,或其“范围”可以涉及作为计划流程的适当子集的一个或一组分量。注释可以是描述性的(例如描述或解释计划或分量)、建议性的(将非强制性指导提供给下游阶段)或强制性的(将强制性指导提供给下游阶段)。建议性注释被称为“暗示”。借助非限制性说明,注释可以包含sql提示、过滤器选择性或注解。[0033]术语“扩充”是指将一个或多个新数据项合并到现有数据结构中。在一些场景中,新数据项可以存储在数据结构的现有字段处,该现有字段先前可能已经是空的或可以具有空值或另一占位符值。在其它场景中,新数据项可以存储在为保存新值而创建的新字段处。存储新数据项的字段可以是在分层组织的数据结构的任何级别下的字段。为了说明,可以通过针对执行计划添加新顶级字段,通过针对新注释添加新字段或通过将新数据项添加到现有注释来扩充计划数据结构。[0034]术语“编译”是指为查询或其阶段开发执行计划。编译操作可以由优化器进行。编译操作的输入或输出可以存储在计划数据结构中。[0035]未经限定的(unqualified)术语“数据”是指信息的任何数字表示。“数据项”是其值将特定含义传达给软件应用的数据实体。[0036]术语“数据库”是指在计算机可读介质上维护并且可通过在一个或多个处理器处执行指令来访问的组织数据类集。数据库可以是相关的,存储器内的或磁盘上的,分层的或非分层的,或任何其它类型的数据库。[0037]“数据结构”是相应字段的值的类集,并且还可以包含“未定义”字段,尚未为“未定义”字段定义值。具有值的字段被称为“定义的”。未定义字段可以用空字节或以另一方式进行编码。本公开中的一些感兴趣的数据结构是计划数据结构。数据结构可以是可扩展的,这意味着可以将新字段添加到该数据结构;或可以是可变的,这意味着可以添加或删除字段。数据结构可以具有定义数据结构的字段的“规范”;数据结构被视为是其规范的“实例”。规范可以具有多个实例。为了说明,根据公共规范的多个计划数据结构可以存储相应查询计划。如本文中所使用,“公共”数据结构规范对于三个或更多个计划是公共的,在查询编译的三个或更多个阶段之间进行共享,由三个或更多个软件模块使用或跨一次或多次版本更新进行维护。[0038]在查询计划的上下文中,“字段”是具有特定角色的计划数据结构的成员。字段可以保存所存储的值或可以是未定义的。为了说明,计划数据结构的给定字段可以保存数据源的标识符,而另一字段可以保存注释。术语字段也可以用于包含关系数据库的表的其它数据结构的上下文中。[0039]术语“转发”是指将从一个软件模块或计算机接收到的数据项或消息发送到另一软件模块或计算机。[0040]“主数据服务”是软件环境中的服务,可以通过该服务环境来管理组织的主数据。因为主数据可以像任何其它数据一样存储在数据库中,所以主数据服务可以接收和处理查询。为了支持查询处理,主数据服务可以是查询优化器的客户端,并且可以通过存储在如本文中所描述的计划数据结构中的计划与查询优化器接口连接。在一些示例中,主数据服务可以发布或转发查询并且作为响应,接收计划。在其它示例中,主数据服务可以提供中间计划并且作为回报,接收执行计划或查询结果。[0041]常规数据库操作可以是二维表上的一维操作。“多维服务”是支持更高维度操作的数据库环境中的服务。多维查询可以包含聚合、变换或计算功能。多维服务可以是通过存储在如本文中所描述的计划数据结构中的计划的查询优化器的客户端。在一些示例中,多维服务可以将客户端查询变换为可以发送到查询优化器的sql,从而导致作为响应,接收到计划。在其它示例中,多维服务可以将客户端查询变换为可以传达给查询优化器的逻辑计划;作为响应,可以接收执行计划或查询结果。[0042]术语“优化器”(或“查询优化器”)是指至少进行查询编译阶段的软件模块。至优化器的输入可以是查询、查询的一部分或来自较早编译阶段的计划。来自优化器的输出可以是中间计划或可执行计划。通常,优化器尝试至少相对于所考虑的一个或多个其它选择,根据某个标准(例如执行速度或存储器要求)为优化的输出。然而,这并不是必需的,并且在一些示例中或对于一些输入,优化器可以在不评估任何备选方案的情况下生成输出。“内联”优化器例如在预期其输出端的客户正在等待输出的情况下实时操作。因此,可能期望内联优化器的执行时间较短。“离线”优化器在预期其输出将在生成输出之后的某个未来时间被消耗的情况下操作。因此,离线优化器可以使结果质量优先于离线优化器的执行时间。为了说明,在内联优化器可以考虑约1,000个备选方案(通常100个到10,000个备选方案)的情况下,离线优化器可以考虑1,000,000个备选方案(通常10,000个到100,000,000个)。所考虑的备选方案可以是完整计划、子查询计划、计划的部分或其它决策标准。离线优化器还可以使用机器学习、动态编程或对于时间约束的内联优化器可能不可行的其它探索技术。尽管所公开的技术的一些示例结合描述性(例如sql)查询来操作,但这并不是必需的。在其它示例中,过程查询也可以在一个或多个阶段中例如使用物理算法或底层数据库实现的知识被优化,以将过程查询推进到更具体的计划或开发执行计划。[0043]“计划”(或“查询计划”)是将如何实现查询的过程描述。计划可以以不同级别的特定性存在,并且可以分阶段开发(编译),其中与前一阶段相比,每个阶段提供更多特定性或减少模糊性。“逻辑计划”描述了可以用于实现查询的高级操作的有序序列。为了说明,如果查询需要来自三个数据源a、b、c的数据,那么逻辑计划可以指定((a联合b)联合c),从而消除(a联合(b联合c))或其它选项。操作的有序序列被称为“计划流程”。计划流程和数据源一起构成逻辑计划。对物理算法的描述可以不存在于逻辑计划中。“物理计划”可以通过以下操作而构建在逻辑计划上:例如基于数据源的知识合并注释以指导用于逻辑计划的操作的物理算法的选择或实现。为了说明,注释可以禁止或推荐用于查询中的一个或多个联合操作的olap(在线分析处理)联合。另一注释可以指定给定联合操作的联合基数。“执行计划”可以由使用数据库的物理结构、数据库方案、架构、分区、存储层等的知识将物理计划映射到底层数据库而产生。执行计划可以在无进一步编译的情况下直接执行。执行计划可以特定于特定情况。为了说明,数据库可以具有预置型实例和云实例。给定查询可以针对两个数据库实例具有相同逻辑计划和相同物理计划,然而,执行计划可以不同。[0044]“查询”(或“数据库查询”)是对数据库环境内的信息的请求。编译查询、检索任何所需数据、根据需要分析检索到的数据以确定所请求的信息和用所请求的信息对查询作出响应的动作被共同称为查询的“实现”。查询“结果”是指所请求的信息。“描述性”查询是在不表达将如何获得结果的情况下表达要返回的结果的查询。单个查询可以执行多次(例如以从数据库产生每日、每周或每月的报告),其被表示为查询的“实例”。[0045]在查询和对应响应的上下文中,术语“接收”、“发送”或“传达”是指通过网络进行的通信,其可以呈消息的形式。通信可以例如通过有线、无线或光学介质而为电磁的,但这并不是必需的。可以通过传送所传送的实体的全部数据或通过引用(诸如传递数据实体的链路、指针或其它地址)来进行数据实体(诸如计划数据结构或其字段)的通信。[0046]“sql”是指结构化查询语言及其变型和修订。sql是描述性编程语言。[0047]“阶段”是指一个或多个编译操作,其将查询计划从特定性的一个级别推进到具有较大特定性或较少模糊性的另一级别。在一些示例中,编译可以分三个阶段进行,例如查询→逻辑计划→物理计划→执行计划,但这并不是必需的。在其它示例中,可以省略逻辑计划和物理计划中的一者或两者,以仅在一个或两个阶段中进行编译。也可以使用编译阶段的其它组织。[0048]在应用于数据项时,术语“存储”是指将数据项的值写入存储介质上的位置,而术语“检索”是指从存储介质上的位置读取数据项的值。存储介质的非限制性示例可以包含硬盘或半导体存储器。数据项可以包含原子数据项,诸如整数、布尔值或字符串,并且还可以包含数据结构(例如计划数据结构)或其中的一个或多个字段。[0049]在应用于具有查询计划作为输入或输出的软件模块时,“版本改变”是指软件模块中的导致软件模块的旧版本和新版本针对相同输入产生不同输出的改变。版本改变还可以导致以不同方式解释未改变的输入数据。[0050]“软件”是指计算机可执行程序、指令或相关联的数据结构。软件可以处于活动状态或静止状态。在活动状态下,软件可以被加载到存储器中,或可以由一个或多个处理器执行。在静止状态下,软件可以存储在计算机可读介质上,从而等待发送或执行。“指令”(或“程序指令”)对要由处理器执行的操作(有时连同一个或多个操作数、操作数地址或目的地地址)进行编码。可以组织一组指令来执行功能。软件可以被组织为含有涉及公共任务或相关任务组的一个或多个功能和相关联的数据的“模块”。软件可以作为服务提供,其可以由一个或多个模块实现。[0051]示例数据流程[0052]图1是图示了根据所公开的技术的阶段式查询编译的示例的数据流程图100。在此图中,分阶段编译和执行查询以获得结果。数据流程可以由集线器软件模块编排,并且可以使用如本文中所公开的用于中间或存档存储的一个或多个计划数据结构来进行。尽管图1示出了从查询到结果的完整进程,但不要求所公开的技术实现如所图示的完整进程。在一些示例中,所公开的技术可以用于进行所图示的数据流程的一部分。在其它示例中,所图示的数据流程的一部分可以在查询的一个实例上进行,并且编译或部分编译的计划数据结构可以用于实现相同查询的后续实例。在图1中,数据对象被描绘为具有倾斜边缘的矩形或仅被描绘为矩形,而操作被描绘为圆形。[0053]最初,可以将查询111输入到软件模块m1141以产生逻辑计划113。如箭头132所描绘,可以将逻辑计划113的分量存储到计划数据结构120。这些分量可以包含一个或多个数据源122和计划流程124。[0054]在下一个阶段,软件模块m2142可以对逻辑计划113进行下一个编译阶段以获得物理计划115。如箭头136所描绘,可以用来自物理计划115的一个或多个注释126扩充计划数据结构120。在一些场景中,注释126可以存储在计划数据结构120的与逻辑计划113相同的实例中,而在其它场景中,可以创建计划数据结构120的新实例以存储整个物理计划115,包含数据源122、计划流程124和注释126。通常,数据源122和计划流程124从逻辑计划113到物理计划115保持不变,但这并不是必需的。在其它场景中,由模块m2142进行的优化可以导致数据源122或计划流程124的改变。为了说明,优化可以减少需要处理的行数,并且这可以导致数据源122中的改变。[0055]在随后的阶段,软件模块m3143可以根据物理计划115生成执行计划117。如箭头138所指示,可以用执行计划128扩充计划数据结构120,该执行计划128可以是执行计划117的序列化形式。在一些场景中,执行计划117可以存储在计划数据结构120的与逻辑计划113或物理计划115相同的实例中,而在其它场景中,可以创建计划数据结构120的新实例以存储执行计划117。通常,数据源122、计划流程124或注释126在由软件模块m3143优化执行计划117期间保持不变,但这并不是必需的。在其它场景中,由模块m3143进行的优化可以导致数据源122、计划流程124或注释126的改变。特定地,优化器m3143可以用其自己的确定来覆写关于给定操作的物理算法的物理计划的建议。还可以将此类改变后端注释到计划数据结构120中。为了说明,模块m3可以拒绝注释126中的提示,这可以导致从计划数据结构120中删除该提示。[0056]可替代地,模块m3可以将其优化解决方案的一个或多个方面记存为可以保存为新注释126(提示或命令句中的任一者)的约束。由此,即使模块m3143经历了版本改变,新注释126也可以指导更新后的模块m3以使得先前优化不会丢失。也就是说,更新后的模块m3可以为执行计划117找到上级解决方案,但可以降低收敛于下级解决方案的风险。[0057]然后,执行计划117可以由软件模块m4144执行以获得可以被存储、发送到请求客户端或用作输入以供附加查询处理的查询结果119。例如,查询111可以是子查询,并且可以将结果119供应到父查询。[0058]在示例中,软件模块m0140可以以任何组合来编排所图示的数据流程,从而指令要进行的所描绘的操作131中的一者或多者。软件模块m0140还可以管理由箭头132、136至138描绘的计划数据结构120的读取或写入。[0059]在图1中,箭头132、138是双向的,从而指示在所图示的数据流程期间可以读取或写入计划数据结构的分量。也就是说,可以将由模块m1141确定的逻辑计划分量122、124写入计划数据结构120,并且可以从计划数据结构120读取(箭头132)作为输入提供给模块m2142的相同分量。类似地,可以将由模块m3143确定的执行计划117写入计划数据结构120,并且可以从计划数据结构120读取作为输入提供给模块m4144的相同执行计划(箭头138)。在一些示例中,由模块m2142确定的物理计划115可以导致仅将注释126写入计划数据结构120,如箭头136所示出。然而,将物理计划115输入到模块m3143可以包含从计划数据结构120读取所有分量122、124、126,如箭头137所指示。[0060]在一些示例中,计划113、115或117中的一者或多者可以在与计划数据结构120分离的模块m1至m4141至144内或之间具有临时但非暂时性的实例化。在其它示例中,计划113、115、117中的一者或多者可以仅作为非暂时性持久计划数据结构120而存在。也就是说,可以在计划数据结构120上直接操作模块m1至m4141至144中的一者或多者。[0061]图1中所图示的阶段式编译仅仅是说明性的,并且可以在所公开的技术的范围内实现许多变型或扩展,这些技术中的一些在上面或本公开的其它部分中进行了描述。变型可以包含所图示的阶段中的一者或多者的合并。为了说明,由模块m1至m2141至142进行的编译阶段可以被合并以直接从查询111产生物理计划115,并且将整个物理计划115(包含分量122、124、126)存储在计划数据结构120中。可替代地,由模块m2至m3142至143进行的编译阶段可以被合并以在不暴露任何中间物理计划的情况下直接从逻辑计划113产生执行计划117。更进一步地,编译阶段m3143可以与执行阶段m4144组合以直接从物理计划115编译和执行。[0062]第一示例方法[0063]图2是根据所公开的技术的示例的用于查询编译的第一方法的流程图200。在此方法中,接收物理计划,此后触发执行计划的生成。使用如本文中所公开的计划数据结构。即时方法可以由与图1的模块140类似的软件模块m0(未示出)进行。[0064]在框210中,可以从第一软件模块m2接收描述性数据库查询的物理计划。物理计划可以具有一个或多个数据源222、计划流程224和一个或多个注释226,这些注释中的全部可以存储为计划数据结构220的字段。计划数据结构220可以存储在软件模块m0可访问的存储设备205上。[0065]在框230中,可以指令软件模块m3确定物理计划的执行计划。[0066]可以在所公开的技术的范围内实现该方法的许多扩展和变型。注释226中的一者或多者可以是对模块m3的暗示。也就是说,这些提示可以指导执行计划的确定。特定地,注释可以是适用于计划流程224的一个或多个操作但不适用于整个计划流程224的有范围的提示。计划数据结构还可以可选地包含字段228,其中可以存储由模块m3确定的执行计划。执行计划可以诸如在base-64编码时存储为序列化字符串。[0067]虚线箭头213至214、233至234表示软件模块m0与存储计划数据结构220的存储装置205之间的交互。在一些示例中,可以在框210中从存储装置205接收存储为计划数据结构220的物理计划,如箭头213所示出。为了说明,模块m2可以是存储装置205的管理器或客户端,并且可以引导数据结构220传达到模块m0,使得可以在框210中接收物理计划。可替代地,模块m2可以为模块m0提供指向结构220的指针,从而允许模块m0检索结构220。在其它示例中,可以从另一源接收物理计划,并且模块m0可以在接收(例如作为框210的一部分)后或在稍后的时间将物理计划存储为计划数据结构220,如箭头214所指示。[0068]在其它示例中,作为框230的一部分或在进行框230之前,模块m0可以检索数据结构220或至数据结构220的链路,如箭头233所指示,并且可以将数据结构或链路传递到模块m3,作为处理框230的一部分。更进一步地,在确定执行计划之后,执行计划可以存储为计划数据结构220的字段228,如箭头234所指示。执行计划228可以以各种方式由模块m0存储或直接由模块m3存储。[0069]在一些示例中,模块m2可以是离线优化器,并且方法可以例如在进行框210之前由指令离线查询优化器确定物理计划的另一处理框来扩展。可以响应于从第一客户端接收到查询的第一实例而进行对离线优化器的指令。在离线优化器已经完成了其任务之后(并且在来自框230的执行计划可用之后),可以接收相同查询的第二实例。然后,可以响应于第二查询实例而执行(例如从字段228)该执行计划。在一些示例中,第二客户端可以与第一客户端不同,而在其它示例中,第二客户端可以是第一客户端。[0070]在一些示例中,模块m2可以是诸如多维服务的外部服务的一部分。在确定执行计划之后,可以将其传达回始发软件模块m2以供执行。以这种方式,模块m0(和m3)可以将服务提供给模块m2:接收物理计划并且返回执行计划。在其它示例中,在确定执行计划之后,模块m0可以指令第三软件模块m4执行该执行计划,从而获得即时查询的结果,并且可以将结果转发到第一软件模块m2。在此类示例中,模块m0、m3和m4可以将服务提供给模块m2:接收物理计划并且返回查询结果。执行计划也可以与查询结果一起返回到模块m2。[0071]在一些场景中,软件模块m3的版本改变可以在已经进行了框230并且已经确定了对应(第一)执行计划之后发生。然后,可以重用物理计划(例如存储为数据结构220)来用软件模块m3的新版本进行框230,从而产生不同(第二)执行计划。这两个执行计划可以存储在计划数据结构220的相应实例中。也就是说,结构220的两个实例可以存储物理计划的相同副本(例如字段222、224、226),但存储执行计划的不同版本(作为相应字段228)。与计划数据结构220或存储环境205相关联的元数据或日志文件可以指定计划数据结构220的相应字段的起源。为了说明,元数据可以指示字段228的一个实例是由软件模块m3的原始版本确定的,而字段228的另一个实例是由模块m3的更新版本确定的。[0072]第二示例方法[0073]图3是根据所公开的技术的示例的用于查询编译的第二方法的流程图300。在此方法中,接收逻辑计划,此后触发物理计划的生成。使用如本文中所公开的计划数据结构。即时方法可以由与图1的模块140类似的软件模块m0(未示出)进行。[0074]在框310中,可以从第一软件模块m1接收数据库查询的逻辑计划。逻辑计划可以具有一个或多个数据源322和计划流程324,这些数据源和计划流程中的每一者可以根据公共数据结构规范而被存储为相应字段(例如在计划数据结构320中)。计划数据结构320可以存储在进行即时方法的软件模块m0可访问的存储设备(类似于205)上。[0075]在框330中,可以指令软件模块m2确定逻辑计划的物理计划。物理计划还可以存储在计划数据结构320的相同或另一实例中,包含数据源322、计划流程324和注释326。也就是说,公共数据结构规范可以用于存储逻辑计划和物理计划两者。[0076]可以在所公开的技术的范围内实现该方法的许多扩展和变型。在不同示例中,由模块m2确定的物理计划可以返回到模块m0,或可以直接存储在计划数据结构320中。继而,可以指令另一软件模块m3将物理计划编译成执行计划。可以由模块m3将注释326用作提示。计划数据结构320还可以可选地包含可以存储执行计划的字段328。[0077]虚线箭头313至314、333至334表示软件模块m0对计划数据结构320的输入或输出(例如读取或写入)。在一些示例中,可以在框310中接收存储为计划数据结构320的字段322、324的逻辑计划,如箭头313所示出。为了说明,模块m1可以引导数据结构320的字段传达到模块m0,由此可以在框310中接收逻辑计划。可替代地,模块m1可以为模块m0提供指向结构320的指针(或指向字段322或字段324的指针),从而允许模块m0检索结构320的字段。在其它示例中,可以从另一源接收逻辑计划,并且模块m0可以在接收(如箭头314所指示,例如作为框310的一部分)后或在稍后的时间将逻辑计划存储为计划数据结构320。[0078]在其它示例中,作为框330的一部分或在进行框330之前,模块m0可以检索数据结构320或至数据结构320的链路,如箭头333所指示,并且可以将数据结构或链路传递到模块m2,作为处理框330的一部分。更进一步地,在确定物理计划之后,物理计划的注释可以存储为计划数据结构320的字段326,如箭头334所指示。稍后,执行计划328也可以存储在计划数据结构320中。[0079]在其它示例中,模块m1可以是离线优化器,并且该方法可以例如在进行框310之前由指令离线查询优化器确定逻辑计划的另一处理框(未示出)扩展。可以响应于从第一客户端接收到查询的第一实例而进行对离线优化器的指令。在离线优化器已经完成了其任务之后,可以从第二客户端接收相同查询的第二实例。可以应用由离线优化器实现并且体现在逻辑计划中的优化以实现第二查询实例。可以在接收到第二查询实例之前或之后完成从逻辑计划到执行计划的剩余编译。在一些示例中,第二客户端可以与第一客户端不同,而在其它示例中,第二客户端可以是第一客户端。[0080]在一些示例中,模块m1可以是诸如多维服务的外部服务。在确定了物理计划(或后续执行计划)之后,可以将其传达回始发软件模块m1以供进一步编译。以这种方式,模块m0和m2(以及可选地,模型m3)可以将服务提供给模块m1:接收逻辑计划并且返回物理计划(或执行计划)。在其它示例中,在确定执行计划之后,模块m0可以指令第四软件模块m4执行该执行计划,从而获得即时查询的结果,并且可以将结果转发到第一软件模块m1。在此类示例中,模块m0、m2、m3和m4可以将服务提供给模块m1:接收逻辑计划并且返回查询结果。物理计划(或执行计划)也可以与查询结果一起返回到模块m1。[0081]在一些场景中,软件模块m2的版本改变可以在已经进行了框330并且已经确定了对应(第一)物理计划之后发生。然后,可以重用逻辑计划(例如存储为数据结构320)来用软件模块m2的新版本进行框330,从而产生不同(第二)物理计划。这两个物理计划可以存储在计划数据结构320的相应实例中。也就是说,结构320的两个实例可以存储逻辑计划的相同副本(例如字段322、324),但存储物理计划的不同版本(作为相应注释326)。与计划数据结构320相关联的元数据或日志文件可以指定计划数据结构320的相应字段的起源。为了说明,元数据可以指示字段326的一个实例是由软件模块m2的原始版本确定的,而字段326的另一个实例是由模块m2的更新版本确定的。[0082]在一些示例中,软件模块m2可以包含内联查询优化器。由模块m0、m1或m2使用的公共数据结构规范(例如计划数据结构320的规范)在模块m0、m1或m2的一次或多次版本改变期间可以是不变的。可以通过sql查询或其它描述性查询的编译来导出与即时方法相关联的计划(或存储为计划数据结构320的计划),但这并不是必需的。也可以使用即时方法或本文中所公开的其它技术来进行强制查询的优化或编译。[0083]示例环境[0084]图4是可以实现所公开的技术的示例的软件环境的图400。在此示例中,集线器与优化模块和其它软件组件接口连接,以使用计划数据结构的储存库来编排查询处理的阶段。[0085]如图4中所示出,查询编译集线器410可以合并软件模块411至415、417,并且可以控制计划数据结构420的储存库419。[0086]模块411可以在集线器410内提供查询接口。模块411的指令的执行可以使例如从客户端470接收查询。还可以从外部服务460接收查询。[0087]模块412可以引导为查询生成中间计划。在一些示例中,模块412可以指令离线优化器模块450生成中间计划,而在其它示例中,模块412可以指令内联优化器模块430生成中间计划。中间计划可以是根据查询生成的逻辑计划、根据逻辑计划生成的物理计划或直接根据查询生成的物理计划。参考图1,模块412的目标可以是模块m1141、m2142或组合。[0088]模块413可以引导为查询生成执行计划。在一些示例中,模块413可以指令内联优化器模块430生成执行计划,但这并不是必需的,并且在其它示例中,执行计划可以由模块450离线生成。用于执行计划生成的输入可以是中间计划(例如物理或逻辑计划),但在一些示例中,集线器410还可以支持直接根据查询生成执行计划。参考图1,模块413的目标可以是模块m3143,或m2至m3142至143或m1至m3141至143的组合。[0089]模块414可以为集线器410提供计划数据结构接口。模块414的指令的执行可以使中间计划(例如逻辑或物理计划)从外部服务的软件模块460被接收。模块414可以支持多个外部服务460,诸如多维服务、主数据服务或联合数据库环境中的其它自主数据库的软件模块。在一些示例中,集线器410可以充当用于来自这种其它数据库的客户端的服务器,并且还可以充当用于其它数据库的另一类似集线器的客户端。[0090]模块415可以在集线器410内提供存储接口。模块415的指令的执行可以使中间计划被存储到储存库419中的计划数据结构420中或从储存库419中的计划数据结构420被检索。模块415还可以支持计划数据结构420上的其它操作,诸如:扩充计划数据结构420(例如用执行计划或注释);对计划数据结构420的分量的更新,例如当后续编译改变修改在较早阶段确定的分量时;复制计划数据结构420,使得可以为公共查询的逻辑和物理计划维护单独实例420;或维护计划数据结构420的元数据、目录或日志。目录可以将给定计划数据结构420与对应查询相关联。日志可以维护计划数据结构420的时间戳和使用。元数据可以记录计划数据结构420的各个分量的起源,例如哪个软件模块的哪个版本生成了给定分量。[0091]模块417可以为集线器410提供执行接口。模块417的指令的执行可以使执行计划由查询执行引擎440执行。[0092]模块412至414、417中的每一者可以使用例如存储接口415来读取或写入计划数据结构420的一个或多个分量。计划数据结构420的分量可以包含如本文中的其它地方所描述的数据源422、计划流程424、注释426或执行计划428。[0093]图4图示了所描绘的软件环境的附加特征。内联查询优化器430可以耦合到开发环境480,由此可以对模块430进行版本改变的更新。开发环境480还可以用于更新其它所描绘的模块,包含但不限于,离线优化器450、执行引擎440或集线器410的模块。内联优化器430还可以直接耦合到执行引擎440,使得中间计划可以被编译为执行计划并且直接执行。查询执行引擎还可以将查询结果返回到集线器410,可以将该查询结果传达回请求客户端470或发起了对查询实现的即时请求的外部服务460。[0094]软件环境还可以耦合到数据库层490,该数据库层490可以是sap的云或数据中心部署或另一数据库。在一些示例中,数据库层490耦合到查询执行引擎440或查询优化器430,而在其它示例中,集线器410或其它所图示的模块也可以与数据库层490通信。[0095]管理模块470可以支持集线器410上的控制、监测或管理功能。为了说明,管理模块470可以托管在真实或虚拟管理员工作站处,并且可以启用或禁用集线器410的各种功能性;监测集线器410或储存库419的资源利用;或调度备份或其它维护操作。[0096]示例序列图[0097]图5是描绘了所公开的技术的示例用例的序列图500。用例涉及与图4的集线器410类似的或能够协调与图1的软件模块m0140类似的操作的集线器510。描述了五个用例501、503至506,并且这些用例仅仅是说明性的,这是由于所描述的特征可以以无数组合、子组合或子组合的组合进行使用或以如本文中所公开的完全不同的方式进行使用。[0098]将序列图500示出为具有六个行动者:客户端570(标识为“cl”)、外部服务560(“ext”)、优化器550(“opt”,其在一些用例中可以是离线优化器)、集线器510(“hub”)、优化器530(“opt”,其在一些示例中可以是内联优化器)和执行引擎540(“exe”)。在不同示例中,离线优化器550可以根据查询或根据较早阶段的中间计划(例如来自逻辑计划的物理计划)来确定中间计划(例如物理计划或逻辑计划)。在不同示例中,内联优化器可以根据查询或根据较早阶段的中间计划来确定中间计划或执行计划。在不同部署或场景中,可以使用更多、更少或不同的行动者。例如,集线器510可以离线或内联地与附加优化器接口连接,例如以用于负载平衡;用于优化器的测试、评估或比较;如由请求客户端或服务选择的;或用于针对特定类型的查询选择性地利用特定优化器的强度。[0099]在序列图500中,每个行动者具有在如箭头595所示出的增加时间游程的方向上向下运行的相应时间线。时间上的中断由时间线中的一者或多者上的对角线指示。[0100]为了清楚说明起见,集线器510在图5中被描绘为单片式实体。然而,集线器510的实施例可以包含如在图4的上下文中所描述的许多软件模块,这些模块是针对图5中所描绘的各种操作而以不同组合调用的。此外,在图5中未示出涉及计划数据结构的操作的细节。通常,可以理解,涉及在集线器510处接收计划的任何操作可以涉及将计划的一个或多个分量存储在如本文中所描述的对应计划数据结构中,并且涉及将计划从集线器510输入或发送到另一软件模块的任何操作可以涉及从对应计划数据结构检索计划的一个或多个分量。[0101]用例-离线优化器[0102]用例501展示使用离线优化器550来补充内联优化器530。用例501利用在数据库环境中常常多次调用相同查询的事实。查询的第一实例可以被优化两次,一次由内联优化器530进行以提供对初始查询的低延时响应,并且一次由离线优化器550进行以提供对相同查询的第二次出现和后续出现的更高效或更高级的执行。用于更高效或更高级的计划的各种示例性度量可以包含挂钟时间的较快执行、cpu周期的较快执行、其它cpu资源的较少利用、较少存储器使用、对本地或远程存储设备的较少访问或云实现的较少成本。[0103]在箭头511处,可以在集线器510处从客户端570接收查询的第一实例,此时,方法可以分叉。可以将查询发送到优化器530以供内联编译(箭头512)以生成执行计划,将该执行计划直接发送到执行引擎540(箭头513)以供执行。可以将执行结果返回到集线器510(箭头514)并且转发到客户端570以实现第一查询实例。[0104]在分叉的另一分支上,可以将查询转发到优化器550以供离线编译(箭头516)。该编译阶段不是受时间约束的,并且在一些延迟之后,中间计划可以返回到集线器510(箭头517)。可以将中间计划输入到内联优化器530(箭头518)以确定可以返回到集线器510的执行计划(箭头519)。随后,可以在集线器510处从客户端570接收查询的第二实例(箭头521)。可以检索保存在集线器510处的离线优化执行计划(从箭头519)并且将其发送到执行引擎540(箭头522)以供执行。箭头523至524分别示出了返回到集线器510并且转发到客户端570的执行结果。[0105]可以在所公开的技术的范围内实现用例501的许多变型。在示例中,可以省略或推迟操作518至519。可以仅在接收到第二查询实例之后发送中间计划以转换成执行计划。也就是说,箭头518可以在箭头521之后发生并且响应于箭头521而发生。此后,计划执行可以由集线器510用与箭头519、522类似的动作或类似于箭头513直接从优化器530进行调解。在其它示例中,客户端570的角色可以由外部服务560进行。[0106]用例-外部服务[0107]用例503展示使用所公开的技术来支持外部服务560。所公开的计划数据结构规范可以有利地在查询处理环境的本地软件模块与外部软件模块之间提供稳定接口,使得可以划分版本改变的效果。[0108]在箭头531处,可以从外部服务560接收中间计划。在箭头532处,可以将中间计划发送到优化器530以确定对应执行计划。执行计划可以在箭头533处返回到集线器510,并且在箭头534处转发到请求服务560。[0109]在变型中,箭头531可以将查询提供给集线器531,而非中间计划。在另一变型中,类似于箭头522至523,执行计划可以在本地执行,并且查询结果可以在箭头534处返回到请求服务560。在另一变型中,中间计划可以在箭头534处返回到外部服务560。箭头531处的输入可以是查询或较早阶段的中间计划中的任一者。[0110]用例-计划缓存[0111]在一些示例中,主要精力花费在优化中以生成中间计划,并且执行计划的后续生成可以主要涉及将中间计划映射到底层数据库。在其它示例中,中间计划可以比执行计划更紧凑一个或多个数量级。因此,集线器510可以在缓存中紧凑地维护一个或多个中间计划,准备好即时编译成执行计划,然后立即执行。这在用例504中进行了图示。[0112]在箭头541处,集线器510可以指令优化器550确定即时查询的中间计划。在箭头542处,中间计划可以返回到集线器510以便针对相同查询的未来实例进行缓存。随后,可以在箭头543处从客户端570接收相同查询的另一实例。响应地,可以将来自箭头542的缓存计划发送到优化器530以便生成执行计划,该执行计划可以在箭头545处发送到执行引擎540以供执行。结果可以在箭头546处返回到集线器510并且在箭头570处转发到请求客户端。[0113]类似缓存技术可以用于从外部服务560接收到的查询或中间计划。[0114]用例-计划历史化[0115]可能需要在优化器中的版本改变中保持中间计划中的优化。计划优化的维护被称为“计划历史化”,这也可以参考用例504进行描述。特定地,可以将在箭头542处接收到的中间计划保留为存档计划数据结构。然后,如果优化器530的版本改变在箭头542与543之间发生,那么可以使用存档计划数据结构和体现在其中的优化来处理查询。虽然箭头541、542描绘了由优化器550(其可以是离线优化器)进行的中间计划生成,但该技术也适用于由内联优化器530生成的中间计划或执行计划。[0116]用例-多个优化引擎[0117]所公开的技术允许容易地换入或换出用于一个或多个编译阶段的引擎,从而共享计划数据结构的公共表示。这在用例505中进行了图示。[0118]中间计划可以在箭头551处发送到第一优化引擎530以便生成第一执行计划,该第一执行计划在箭头552处返回到集线器510。在箭头553处发送第一执行计划以供执行,并且第一结果在箭头554处返回到集线器510。[0119]在箭头555至558处,用第二优化引擎550重复类似操作。优化引擎550在箭头555处接收相同中间计划并且在箭头556处将第二执行计划返回到集线器510。优化引擎530、550是行存储表的“row_table”);可选行计数(例如75,指示表“部分”具有75行);以及属性列、可选索引和分区,它们中的每一者可以具有另一结构。数据源可以具有一列或多列、一个或多个分区和(如果存在)一个或多个索引,如在数据源属性621中的这些属性的每一者旁边的(n)所指示。其它属性可以用针对每个属性的单个字段进行实例化。[0128]在下一级别下,列具有列说明符属性623,其包含名称(例如“p_partkey”,其标识“部分”表的列,参见图8b)和类型(例如“integer”,其指示p_partkey列的值具有整数数据类型)。另外,列说明符属性623可以包含可选属性nullable(布尔型,其指示列是否可以具有空值)、distinct_count(指示列中的不同值的数量;以根据abo血型说明列“blood_type”可以针对{“o”“a”“b”“ab”}具有4的不同计数)和null_count(指示在即时列中具有空值的行数)。可以针对一些列包含可选属性,而从其它列中排除这些可选属性。另外,一些部署可以完全省略对一个或多个可选属性的支持。[0129]同样在下一级别下,索引具有索引说明符属性625,其包含名称(例如指示与部分表的p_partkey列对应的索引的名称的“#part_p_partkey”,参见图8b)、列出索引中的一列或多列的列(例如指示p_partkey是即时索引的唯一列的“p_partkey”)、类型(例如指示即时索引被组织为自平衡b树数据结构的“btree”)和唯一(布尔型)标记。如所示出,类型和唯一属性是可选的。[0130]类似地,数据源属性621的分区属性可以具有包含标识符(例如1,参见图8b)和volume卷(例如1)的分区属性627的更深结构,该分区属性627通过存储分区的标识符和卷来标识部分表中的给定分区。分区可以可选地具有一个或多个分区规范。分区规范又可以具有分区规范属性629,其包含类型(字符串)、规范字符串(字符串)和桶(整数)。在一些示例中,可以基于使用(例如最近最多使用(或热存储层)到最近最少使用(或冷存储层))来确定分区。[0131]转到图6c,计划流程624可以具有计划流程属性641,其包含根运算符标识符和一个或多个运算符的列表。每个运算符又可以具有运算符属性643,其包含根标识符(例如8,参见图8d)、名称(例如“内部联合”)、源的列表(例如[1],其指示用于该运算符的源是数据源1本身;或[6,7],其指示用于另一运算符的源具有作为即时计划流程的较早运算符的标识符6、7)和列的列表(例如[0][1],其指示源的在源属性中具有索引0的列1,即,运算符6;或[1][2],其指示源的具有索引1的列2,在这种情况下为运算符7)。另外,运算符属性643可以包含可选属性过滤器(例如“[0][0]=1and[0][3]like'%test%'”,其定义了要就[source][column]符号而言应用于即时运算符的过滤器)、限值(例如80,其定义了要返回的记录的最大数量)、偏移(例如400,其指示跳过400条记录并且从记录401开始)和具有另一结构的子查询。另外,运算符属性可以包含名称特定属性(例如"join":"[0][0]=[1][0]",其指示将要在源id6的列0(源属性中的索引0)与源id7的列0之间进行内部联合)和操作(例如group_by运算符的“grouping”,参见图7c)。操作可以具有可以作为特定于即时操作的参数列表的操作属性647。[0132]在一些场景中,查询可以分解成子查询,从而产生可重复使用的存储中间结果。子查询可以具有子查询属性645,其包含根(标识目标子查询的根节点)和参数列表。可以支持标量子查询和相关子查询两者。标量子查询可以针对所有数据记录共同评估一次,而相关子查询的结果取决于即时记录的其它数据。诸如“$[m][n]”、“[][n]”或":[][n]"的列符号的扩展可以用于分别指定子查询列、实体化表达或相关变量。[0133]转到图6d,注释626可以具有注释属性661,其包含标识符(例如8,参见图8g,其指示该注释的范围是具有id8的运算符)和一个或多个名称特定属性(例如“join_cardinality":"1..n")。[0134]最后,转到图6e,执行计划628可以具有执行计划属性681,其包含类型(例如3,参见图7e,其指示该执行计划的base-64编码)和序列化计划本身。[0135]示例计划数据结构[0136]图7a至图7e是第一查询和相关联的示例计划数据结构的图701至705。图7a示出了可以应用所公开的技术的sql查询715。图7b示出了对应数据源722。在此示例中,存在具有为1的标识符(“id”)的单个数据源。图7c示出了具有id为2至5的三个运算符的对应计划流程724。计划流程724具有为5的根id,这指示运算符id5提供查询结果。图7a至图7c的检查展示图7b至图7c的逻辑计划正确地实现查询715。图7d示出了两个注释字段726,一个(“提示”)是全局的,而另一个(“选择性”)的范围是运算符id3。如本文中所描述,字段722、724、726可以是查询715的中间计划的一部分。最后,图7e示出了类型3(指示base-64编码)并且包含序列化计划(“bz9…”)的执行计划。字段722、724、726以json格式示出,但这并不是必需的,也可以使用其它标准或专属表示。[0137]图8a至图8g是第二查询和相关联的示例计划数据结构的图801至807。图8a示出了可以应用所公开的技术的sql查询815。图8b至图8c示出了可以是查询815的中间计划的一部分的数据源字段822。在此示例中,存在id为1至5的五个数据源。图8d至图8f示出了具有id为6至25并且根id为25的20个运算符的对应计划流程824。图8g示出了两个注释字段826。如本文中所描述,字段822、824、826可以是查询815的中间计划的一部分。在此示例中,从计划数据结构的规范中省略执行计划的字段。[0138]图9a至图9b是示出了第三查询和相关联的计划流程的图901至902。图9a示出了用于选择功能的sql查询915,而图9b示出了对应计划流程924。计划流程具有id为3、4、5并且根id为5的三个运算符。从此示例中省略了其它计划数据结构字段。[0139]图10a至图10b是示出了第四查询和相关联的计划流程的图1001至1002。图10a示出了用于选择指定并集的前10行的sql查询1015,而图10b示出了对应计划流程1024。计划流程具有id为3至6并且根id为6的四个运算符。从此示例中省略了其它计划数据结构字段。关于图7,图8至图10的中间计划与其相应查询匹配。[0140]通用计算机环境[0141]图11图示了合适的计算系统1100的通用示例,其中可以根据所公开的技术来实现所描述的示例、技术和技艺,包含用于计划数据结构的查询编译或管理的软件的构造、部署、操作和维护。计算系统1100不旨在就本公开的使用范围或功能性而言提出任何限制,这是由于可以在不同的通用或专用计算系统中实现创新。[0142]参考图11,计算环境1110包含一个或多个处理单元1122和存储器1124。在图11中,这种基本配置1120包含在虚线内。处理单元1122执行计算机可执行指令,诸如以用于实现本文中所描述的方法或对象中的任一者来进行本文中所描述的查询编译的一个或多个阶段、其它查询实现操作或读取、写入或管理计划数据结构或各种其它架构、软件组件、处理程序、管理器、模块或服务。处理单元1122可以是通用中央处理单元(cpu)、专用集成电路(asic)中的处理器或任何其它类型的处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力。计算环境1110还可以包含图形处理单元或协处理单元1130。有形存储器1124可以是可由处理单元1122、1130访问的易失性存储器(例如寄存器、缓存或ram)、非易失性存储器(例如rom、eeprom或闪速存储器)或它们的某种组合。存储器1124以适合于供处理单元1122、1130执行的计算机可执行指令的形式存储实现本文中所描述的一种或多种创新的软件1180。存储器1124还可以存储计划数据结构、相关联的元数据、日志或目录;其它配置数据、包含数据表、工作表、改变日志、输出结构、数据值、索引或标记的数据结构以及其它操作数据。[0143]计算系统1110可以具有附加特征,诸如存储装置1140、输入设备1150、输出设备1160或通信端口1170中的一者或多者。诸如总线、控制器或网络的互连机制(未示出)互连计算环境1110的硬件组件。通常,操作系统软件(未示出)为在计算环境1110中执行的其它软件提供操作环境,并且协调计算环境1110的硬件和软件组件的活动。[0144]有形存储装置1140可以是可移动的或不可移动的,并且包含磁盘、磁带或盒式磁带、cd-rom、dvd或可以用于以非暂时性方式存储信息并且可以在计算环境1110内访问的任何其它介质。存储装置1140存储实现本文中所描述的一种或多种创新的软件1180的指令(包含指令和/或数据)。[0145]输入设备1150可以是机械的、触摸感测的或接近感测的输入设备,诸如键盘、鼠标、笔、触摸屏、轨迹球、语音输入设备、扫描设备或将输入提供给计算环境1110的另一设备。输出设备1160可以是显示器、打印机、扬声器、光盘写入器或提供来自计算环境1110的输出的另一设备。[0146]通信端口1170使得能够通过通信介质与另一计算设备通信。通信介质在调制数据信号中传达诸如计算机可执行指令或其它数据的信息。调制数据信号是以在信号中对信息进行编码的方式设置或改变其特性中的一者或多者的信号。作为示例而非限制,通信介质可以使用电气、光学、rf、声学或其它载体。[0147]在一些示例中,计算机系统1100还可以包含计算云1190,其中执行实现所公开的技术的全部或一部分的指令。存储器1124、存储装置1140和计算云1190的任何组合可以用于存储所公开的技术的软件指令或数据。[0148]本创新可以在目标真实或虚拟处理器上的计算系统中执行的计算机可执行指令(诸如程序模块中所包含的计算机可执行指令)的一般上下文中进行描述。通常,程序模块或软件组件包含进行任务或实现特定抽象数据类型的例程、程序、库、软件对象、类、数据结构等。程序模块的功能性可以在各种实施例中根据需要在程序模块之间组合或分开。用于程序模块的计算机可执行指令可以在本地或分布式计算系统内执行。[0149]术语“系统”、“环境”和“设备”在本文中可互换使用。除非上下文另外明确指出,否则这些术语中没有一者暗示对计算系统、计算环境或计算设备的类型的任何限制。一般而言,计算系统、计算环境或计算设备可以是本地的或分布式的,并且可以包含专用硬件和/或通用硬件和/或虚拟化硬件连同实现本文中所描述的功能性的软件的任何组合。虚拟处理器、虚拟硬件和虚拟化设备最终体现在硬件处理器或另一形式的物理计算机硬件中,并且因此包含与虚拟化相关联的软件和底层硬件两者。[0150]示例云计算环境[0151]图12描绘了可以实现所描述的技术的示例云计算环境1200。云计算环境1200包括计算云1290,该计算云1290含有资源并且提供服务。计算云1290可以包括各种类型的云计算资源,诸如计算机服务器、数据存储库、网络资源等。计算云1290可以是中央定位的(例如由企业或组织的数据中心提供)或分布式的(例如由位于诸如不同数据中心的不同位置处和/或位于不同城市或国家中的各种计算资源提供)。[0152]计算云1290可操作地连接到诸如计算设备1212、1214和1216的各种类型的计算设备(例如客户端计算设备),并且可以向其提供计算服务的范围。计算设备1212、1214和1216中的一者或多者可以是计算机(例如服务器、虚拟机、嵌入式系统、台式或膝上型计算机)、移动设备(例如平板计算机、智能电话或可穿戴用具)或其它类型的计算设备。计算云1290与计算设备1212、1214和1216之间的通信链路可以是有线、无线或光学链路或它们的任何组合,并且可以是短期或长期的。通信链路可以是连续的或零星的。这些通信链路可以是静止的或可以随时间移动,从而通过不同路径来实现并且在每一端具有不同附接点。计算设备1212、1214和1216也可以彼此连接。[0153]计算设备1212、1214和1216可以利用计算云1290来获得计算服务并且进行计算操作(例如数据处理、数据存储等)。特定地,用于进行所描述的创新技术的软件1280可以驻留在计算云1290、计算设备1212、1214和1216或云和计算设备的分布式组合中或在其中执行。[0154]一般考虑[0155]如本公开中所使用,除非周围语言另外清楚指示,否则单数形式“一”、“一个”和“该”包含复数形式。另外,术语“包含”和“合并”是指“包括”。另外,术语“耦合”或“附接”涵盖机械的、电学的、磁性的、光学的以及将项目耦合在一起的其它实际方式,并且不排除在耦合项目之间存在中间元件。此外,如本文中所使用,术语“或”和“和/或”意指短语中的任何一个项目或项目的组合。[0156]尽管为了便于呈现,以特定顺序描述了一些所公开的方法的操作,但应当理解,除非下面所阐述的特定语言需要特定顺序,否则这种描述方式涵盖重新排列。例如,在一些情况下,按顺序描述的操作可以重新排列或同时进行。此外,出于简单起见,附图可以不示出所公开的事物和方法可以与其它事物和方法结合使用的各种方式。另外,本说明书有时使用比如“添加”、“扩充”、“调用”、“组合”、“编译”、“计算”、“配置”、“控制”、“传达”、“确定”、“评估”、“执行”、“转发”、“生成”、“指令”、“修改”、“通知”、“获得”、“输出”、“进行”、“读取”、“接收”、“请求”、“响应”、“返回”、“检索”、“选择”、“发送”、“服务”、“设置”、“存储”、“传输”、“更新”、“使用”或“写入”的术语来指示计算机系统中的计算机操作。这些术语表示由计算机进行或控制的实际操作。与这些术语对应的实际操作将根据特定实现而改变,并且可由本领域的普通技术人员容易地辨别。[0157]本文中参考本公开的装置或方法提出的操作理论、科学原理或其它理论描述已经出于更好理解的目的而提供并且不旨在作为对范围的限制。所附权利要求中的装置和方法不限于以这种操作理论所描述的方式起作用的那些装置和方法。[0158]在一些示例中,值、过程或装置可以被称为“最优的”、“最低的”、“最佳的”、“最大值”、“极值”等。应当理解,此类描述旨在表明可以在几个备选方案中或许多备选方案中进行选择,并且此类选择不需要比未考虑的其它备选方案更低、更好、更少或优选。[0159]所公开的方法中的任一者可以被实现为存储在诸如有形的非暂时性计算机可读存储介质的一种或多种计算机可读存储介质上的计算机可执行指令或计算机程序产品,并且在计算设备(例如任何可用计算设备,包含平板、智能电话或其它移动设备,该平板、智能电话或其它移动设备包含计算硬件)上执行。有形计算机可读存储介质是可以在计算环境内访问的任何可用有形介质(例如,诸如dvd或cd的一个或多个光学介质盘、易失性存储器组件(诸如dram或sram)或非易失性存储器组件(诸如闪速存储器或硬盘驱动器))。作为示例并且参考图11,计算机可读存储介质包含存储器1124和存储装置1140。术语计算机可读介质或计算机可读存储介质不包含信号和载波。此外,术语计算机可读介质或计算机可读存储介质不包含通信端口(例如1170)或通信介质。[0160]用于实现所公开的技术的计算机可执行指令中的任一者以及在实现所公开的实施例期间创建和使用的任何数据可以存储在一种或多种计算机可读存储介质上。计算机可执行指令可以是例如专用软件应用或经由web浏览器或其它软件应用(诸如远程计算应用)访问或下载的软件应用的一部分。这种软件可以例如在单个本地计算机(例如任何合适的可商购计算机)上或在使用一个或多个网络计算机的网络环境中(例如经由互联网、广域网、局域网、客户端-服务器网络、云计算网络或其它这种网络)执行。[0161]为了清楚起见,仅描述了基于软件的实现的某些选定方面。省略了本领域中熟知的其它细节。例如,应当理解,所公开的技术不限于任何特定计算机语言或程序。例如,所公开的技术可以通过以abap、adobeflash、angular、c、c 、c#、curl、dart、fortran、go、java、javascript、julia、lisp、matlab、octave、perl、python、r、ruby、sas、spss、webassembly、它们的任何衍生物或任何其它合适的编程语言编写的软件来实现,或在一些示例中,以诸如html或xml的标记语言编写的软件来实现或以合适的语言、库和程序包的任何组合编写的软件来实现。同样,所公开的技术不限于任何特定计算机或硬件类型。合适的计算机、硬件和通信技术的某些细节是熟知的,并且不需要在本公开中详细阐述。[0162]此外,基于软件的实施例(包括例如用于使计算机进行所公开的方法中的任一者的计算机可执行指令)中的任一者可以通过合适的通信部件来上传、下载或远程访问。这种合适的通信部件包含例如互联网、万维网、内联网、软件应用、电缆(包含光纤电缆)、磁通信、电磁通信(包含rf、微波、红外和光学通信)、电子通信或其它此类通信部件。[0163]所公开的方法、装置和系统不应被解释为以任何方式进行限制。相反,本公开单独地和以彼此的各种组合和子组合涉及各种所公开的实施例的所有新颖和非显而易见的特征和方面。所公开的方法、装置和系统不限于任何特定方面或特征或它们的组合,所公开的实施例也不要求存在任何一个或多个特定优点或解决问题。来自任何示例的技术可以与在其它示例中的任何一者或多者中描述的技术组合。[0164]鉴于可以应用所公开的发明的原理的许多可能实施例,应认识到,所说明的实施例仅仅是本发明的优选示例,而不应被视为限制本发明的范围。相反,本发明的范围由所附权利要求限定。因此,我们要求保护落入这些权利要求的范围和精神内的所有发明。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献