专利名称:变换的上下文知晓数据源管理的制作方法
技术领域:
本发明涉及数据源管理,尤其涉及将单个源代码与用于不同执行上下文的多个数据源相协调的工具和技术。
背景技术:
适合于在单个机器上运行的计算机程序有时可由开发者修改来改为在多个机器上运行,以便利用额外的处理能力和/或额外的存储器。例如,开发者可能想要采用原始被编写成在单个台式计算机上执行的程序,并使其改为在诸如计算群集或计算云之类的一组计算机上运行。更为一般地,开发者可能想要应用特定的处理逻辑来处理不同的数据源,并且不希望明示地将每个数据源指定为该逻辑的参数。计算群集是通过快速局域网或其他相对快的通信机制链接在一起的一组计算机。在从群集外查看时,群集内的计算机彼此协作就像单个功能强的计算机一样。计算云是可配置的计算资源(如服务器、存储、应用和软件服务)的共享的联网池。随着用户的计算需求的增长或收缩,云的资源可快速地对用户可用以及可被容易地释放。应用可由云服务器提供给浏览器,使得不需要应用的本地安装的客户机副本。群集和云的各种定义已被使用。出于当前讨论的目的,群集包括少于一千个处理核和/或驻留在单个建筑物内。相反,计算云包括一千或更多个核,和/或驻留在两个或更多个建筑物内。
发明内容
将程序从本地执行上下文移植到群集或云执行可涉及乏味的且易于出错的源代码改变,且更为具体地,可涉及修改程序中所使用的对数据源的引用的改变。对于开发者来说,针对极其不同的大小的数据集来运行程序是非常有挑战的。本文描述的某些实施例以给予对各种各样的数据集的访问的方式来增加程序的可移植性,如用多个可供选择的计算数据源自动管理单个源代码算法的方式。例如,在某些情形中,存在数据源映射,其中某一数据源标识符被映射到相应执行目标处的相当不同大小的多个数据源,如本地机器处的数百G字节对群集处的数T字节以及云中的数十或数百T字节。一实施例接收将数据源标识符叙述为数据源的源代码。在标识第一执行目标之后,该实施例从该源代码自动产生被适合于第一执行目标的第一可执行代码。也就是说,当在第一执行目标中执行时,该可执行代码将用第一执行目标的映射的数据源作为数据源标识符所标识的数据源来操作。在标识具有与第一执行目标不同的数据源的第二执行目标之后,该实施例自动地一从同一源代码一产生被适合于该第二执行目标的第二可执行代码。也就是说,当在第二执行目标中执行时,第二可执行代码将用第二执行目标的映射的数据源作为被标识的数据源,而不是使用第一执行目标的数据源来操作。如所述,这种移植是在不要求开发者编辑源代码的情况下来实现的。在某些实施例中,数据源映射被维护在文本配置文件中,而在某些实施例中,它是从非文本项目特性、项目头部或另一项目特定结构中读取的。在某些实施例中,数据源映射被放置在可分发的软件包中,从而便于可移植性,而不管包中的可执行代码当前支持哪些执行位置。一实施例可减少或消除开发者在源代码中确定执行目标以及在源代码中显式地处理不同的执行位置的负担。在某些实施例中,例如,源代码不需要绝对路径数据源标识符。一实施例可提供灵活性,以帮助开发者用一个机器本地的较小数据子集来快速地完成源代码迭代,然后针对云或群集上的更大数据来测试所选的程序迭代。某些实施例利用自动源到源转换机制来移植代码。移植数据源可不仅仅包含物理存储位置标识符串的替代。例如,在某些实施例中,从造成第一可执行代码的相同源代码生成第二可执行代码涉及源到源转换,该源到源转换注入不存在于开 发者的源版本中的调用,如文件夹创建调用、云容器创建调用、或文件创建调用。其他映射可涉及数据库连接以及不仅仅是基于文件的存储,例如映射不同的数据库服务器,如本地、企业、云服务器、或开发服务器和生产服务器。诸如文件系统(如Windows NTFSts^S)和云存储(如Windows Azure 存储或其他云存储)之类的存储系统可具有不同的存储结构,且某些实施例提供了那些存储结构之间的映射(微软公司的标记)。从开发者的观点,某些实施例获得数据源映射,其中某一数据源标识符被映射到各相应执行目标处的多个数据源。然后,该实施例从数据源映射和源代码自动生成数据源分解,而不要求开发者对源代码的任何改变。不同数据源分解对应于不同的执行目标,如对应于使用通用资源标识符的某一云数据源,或某一群集数据源。执行目标可由开发者指定,或可按默认指定。在某些实施例中,数据源分解可基于以数据源标识符为根的相对路径。某些实施例将接受来自开发者的对数据源映射的修改。从架构的观点,某些实施例包括逻辑处理器和与逻辑处理器可操作地通信的存储器。数据源映射驻留在存储器中,并具有被映射到各相应的不同执行目标处的多个不同数据源的某一数据源标识符。数据源映射驻留或维持在例如文本配置文件、非文本项目特性、项目特定的结构、和/或用户特定的结构中。源代码也驻留在存储器中,且在源代码内数据源标识符被叙述为数据源。驻留在存储器中的可执行代码产生器具有指令,在执行时在不同时间从相同源代码自动产生多个不同的可执行代码,每个可执行代码引用这些数据源中的不同一个。在某些实施例中,源代码不需要用于检测执行位置的代码。在某些实施例中,源代码不需要绝对路径数据源标识符。某些实施例包括可执行代码产生器产生的可执行代码,该可执行代码包含源代码中不存在的注入的代码,例如文件夹创建调用、云容器创建调用、和/或文件创建调用。在某些实施例中,可执行代码产生器包括分解API。分解API包括指令,在由处理器执行时会将相对路径和执行目标分解成包含物理路径的数据源分解。在某些实施例中,可执行代码产生器包括源到源转换器。不同的实施例可采取一个或多个总体方法。在一个方法中,在本地机器上,源代码被转换成用于指定的执行目标的中间代码(IC)或可执行代码(EC)。然后,IC或EC被部署并运行在该可执行目标上。在第二方法中,源代码首先被部署到一执行目标上。为该执行目标设计的产生器当场转换该代码。在第三方法中,源代码被转换就好像数据相对于该代码是本地的。然后,当代码被部署到其中数据处于远程位置的一环境中时,预任务将首先下载该数据,使得代码可访问本地数据。所给出的示例只是说明性的。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。相反地,提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本发明由权利要求书限定,在本发明内容与权利要求书有冲突的情况下,应该以权利要求书为准。
将参考附图给出更具体的描述。这些附图只示出了选定的方面,且因此不完全确定覆盖或范围。图I是示出计算机系统并且还示出配置的存储介质实施例的框图,该计算机系统 具有至少一个处理器、至少一个存储器、源代码以及一般将存在于多个网络节点上的操作环境中的其他项目;图2是示出一示例架构中的变换的上下文知晓数据源管理;以及图3是示出一些过程的步骤和配置的存储介质实施例的流程图。
具体实施例方式概览随着某些领域面对数据激增,利用对大型和各种各样的数据集进行更迅速且强大的处理,如在群集或云中的分布式处理,变得有益处。传统的桌面和其他单节点计算机具有相对有限的处理能力和容量来处理大量数据,因此更多的开发者和工程师希望使用来自不同源的更大的数据集来在群集或云上运行他们的桌面应用。例如,开发者可能想要使用小的数据子集在本地桌面上开发算法,然后相对于包含具有与该子集相同格式的完整数据集合的群集或云在程序中运行该算法。一个导致的挑战是如何在不同的执行环境之间转换。工程师可能希望对每个不同的执行环境使用不同的数据源,这可能意味着在每个部署和执行之前改变众多的数据引用。如果所需数据被存储在用于不同执行环境的不同物理存储中,则工程师也可能被迫改变源代码,因为不同数据提供者常常使用不同的访问方法。但是,版本增生以及频繁的改变使得代码维护困难,对群集或云采用产生了障碍。幸运的是,本文描述的某些实施例提供了用于将单个源代码与用于不同执行上下文的多个数据源相协调的工具和技术。在某些实施例中,上下文知晓数据源/数据提供者提取机制允许用户能够避免嵌入对诸如本地文件系统、文件共享、云存储、FTP地址、特定数据库、特定数据流等等之类的物理数据源的明确引用。取决于执行位置(如本地、群集、云),项目可自动地将虚拟引用重定向到某一数据源。类似地,用户可虚拟化数据提供者供数据访问。项目然后可根据所需数据存储来自动地改编可执行代码。某些实施例提供了对物理数据源和它们的层次结构的虚拟化。某些实施例提供了对不同数据访问方法的虚拟化。某些实施例对每个执行位置在虚拟引用和物理数据源之间映射。某些实施例根据执行位置自动地重定向数据引用以及更新数据访问方法。在某些情形中,开发者所面对的主要挑战是如何相对于远远超出单个机器的存储能力的大量数据集来运行在单个机器上开发的程序。这里描述的某些实施例帮助开发者用不同大小的数据集使用计算机程序来探索算法,例如首先相对于单个机器上的小的子集来运行程序,然后以无缝的方式用相同的开发源代码移动到完整数据集。结果,更短的和更干净的代码是可能的,因为开发者可避免编写用于检测执行位置的代码,并可使用相对路径来访问数据。源代码维护可以更容易,因为即使多个执行位置被使用,开发者也只跟踪源代码的一个副本。在某些实施例中,在数据源映射中,在单个位置中标识/更新物理源。可通过避免在每次切换执行位置时改变数据源来在执行位置之间进行更平滑的转换。此处描述的某些实施例可以在较宽泛的上下文中查看。例如,诸如源代码、可执行代码、执行目标、数据源以及映射等概念可以与一具体实施例相关。然而,并不能从宽泛上下文的可用性中得出此处对抽象概念寻求专有权;它们并不是专有的。相反,本发明集中于提供适当具体的实施例。涉及源代码、可执行代码、执行目标、数据源和/或映射的其他介质、系统和方法在本范围之外。因此,在对本发明的正确理解下,也避免了模糊性和附带的证据问题。
现在将参考诸如附图中所示出的那些示例性实施例,并使用特定语言来对其进行描述。但是,相关技术领域的且拥有本公开内容的技术人员将想到的对此处所示出的特征的更改和进一步的修改以及对本文所示的原理的其他应用,都应该被视为在权利要求的范围内。在本公开中阐明了各术语的含义,因此应该在仔细关注这些阐明的情况下阅读权利要求书。给出了具体示例,但是相关领域的技术人员将理解其他示例也可落在所使用的术语的含义范围内以及落在一个或多个权利要求的范围内。术语在这里不一定具有与它们在一般用途中、在特定行业的用途中、或在特定词典或词典集中所拥有的相同含义。附图标记可以与各种措词一起使用,以帮助示出术语的广度。从给定文本片段中省略附图标记不一定意味着没有通过文本讨论附图的内容。发明人声明并行使他们对他们自己的词典的权利。这里可在具体实施方式
中和/或在申请文件的别处显式地或隐式地定义术语。如此处所使用的,“计算机系统”可包括例如一个或多个服务器、主板、处理节点、个人计算机(便携式或非便携式)、个人数字助理、蜂窝或移动电话、至少具有处理器和存储器的其他移动设备、和/或提供至少部分地由指令来控制的一个或多个处理器的其他设备。指令可以采用存储器中的固件或其他软件和/或专用电路的形式。具体而言,虽然可发生许多实施例在工作站或膝上型计算机上运行,但是其他实施例也可以在其他计算设备上运行,并且任何一个或多个这样的设备都可以是给定实施例的一部分。“多线程化”计算机系统是支持多个执行线程的计算机系统。术语“线程”应被理解为包括能够或经历调度(以及可能同步)的任何代码,并且也可以另一名称来为人所知,如“任务”、“进程”或“协同例程”等。线程可以并行地、按顺序、或以并行执行(例如,多处理)和顺序执行(例如,时间分片)的组合来运行。在各种配置中都已设计了多线程化环境。执行线程可以并行地运行,或者线程可以被组织为并行执行,但是实际上轮流按顺序执行。例如,多线程化可以通过在多处理环境中在不同核上运行不同线程、通过对单个处理器核上的不同线程进行时间分片、或者通过时间分片和多处理器线程化的某种组合来实现。线程上下文切换可以例如由内核的线程调度器、由用户空间信号、或由用户空间和内核操作的组合来发起。线程可以轮流对共享数据进行操作,或者例如每一线程都可以对其自己的数据进行操作。
“逻辑处理器”或“处理器”是单个独立硬件线程处理单元,如同时多线程实现中的核。作为另一示例,每核运行两个线程的超线程四核芯片具有8个逻辑处理器。处理器可以是通用的,或者它们可被定制用于特定用途,例如图形处理、信号处理、浮点算术处理、力口密、I/O处理等等。“多处理器”计算机系统是具有多个逻辑处理器的计算机系统。多处理器环境存在于各种配置中。在一给定配置中,所有处理器可在功能上相同,而在另一配置中,由于具有不同的硬件能力、不同的软件分配或两者,某些处理器可与其他处理器不同。取决于配置,处理器可在单个总线上紧密地彼此耦合,或它们可松散地耦合。在某些配置中,处理器共享一中央存储器,在某些配置中,它们各自具有自己的本地存储器,在某些配置中,存在共享和本地存储器两者。“内核”包括操作系统、系统管理程序、虚拟机、BIOS代码、以及类似的硬件接口软件。
“可执行代码”指的是采用除了编程语言的形式的处理器指令、数据(包括常量、变量、以及数据结构)、或指令和数据两者。“源代码”指的是具有任选地伴随的声明和/或数据的语句,它们是以计算机编程语言编写的并被设计成被用于自动地产生可执行代码。“程序”在本文中被广泛地使用以包括应用、内核、驱动程序、中断处理程序、库、以及程序员(也被成为开发者)编写的其他代码。“自动地”指的是使用自动化(例如,由用于这里所讨论的特定操作的软件配置的通用计算硬件),与没有自动化相对。特别地,“自动地”执行的步骤不是由手在纸上或在人的头脑中执行的,它们是用机器执行的。然而,“自动地”不必意味着“立即地”。贯穿本文,对任选复数“(诸)”的使用意味着一个或多个所指示的特征存在。例如,“(诸)数据源”意味着“一个或多个数据源”,或等价地“至少一个数据源”。贯穿本文,除非另外明确表明,否则对过程中的某一步骤的任何引用都假定该步骤可直接由所关注的一方执行和/或由该方通过介入机制和/或介入实体而间接地执行,且仍然在该步骤的范围内。也就是说,除非直接执行是被明确表明的要求,否则并不要求由关注方对步骤的直接执行。例如,涉及某一关注方的关于目的或其他主体的诸如接受、包含、检测、执行、生成、具有、标识、包括、注入、映射、获得、操作、执行、放置、产生、读取、接收、驻留、分解、替换、变换、或转换(或接受、接受了、包含、包含了、检测、检测了等)之类的动作的步骤可涉及诸如由某一其他方执行的转发、复制、上传、下载、编码、解码、压缩、解压、加密、解密、认证、调用等中间动作,但仍然被理解为是由该关注方直接执行的。在参考数据或指令时,要理解这些项目配置了计算机可读存储器,从而将其变换为特定物品,而非简单地存在于纸张上、人的头脑中、或作为例如线路上的瞬时信号。除非另外明确表明,否则计算机可读存储器或介质被认为是非瞬态的。操作环境参考图1,用于一个实施例的操作环境100可包括计算机系统102。计算机系统102可以是多处理器计算机系统,或者也可以不是。操作环境可包括给定计算机系统中的一个或多个机器,它们可以是群集的、客户机-服务器联网的、和/或对等联网的。个体机器是一计算机系统,且一组协同操作的机器也是计算机系统。给定计算机系统102可以例如用应用被配置用于最终用户、用于管理员、作为服务器、作为分布式处理节点、和/或以其他方式配置。人类用户104可以通过使用显示器、键盘、及其他外围设备106与计算机系统102进行交互。系统管理员、开发人员、工程技术人员、以及最终用户各自都是特定类型的用户104。代表一个或多个人操作的自动化代理也可以是用户104。在某些实施例中,存储设备和/或联网设备可以被认为是外围设备。图I中未示出的其他计算机系统可以与计算机系统102进行交互,或者例如通过网络接口设备使用到网络108的一个或多个连接与另一系统实施例进行交互。计算机系统102包括至少一个逻辑处理器110。计算机系统102与其他合适的系统一样,还包括一个或多个计算机可读非瞬态存储介质112。介质112可以是不同的物理类型。介质112可以是易失性存储器、非易失性存储器、被安装就位的介质、可移动介质、磁介质、光学介质、和/或其他类型的非瞬态介质(而不是诸如只传播信号的线路之类的瞬态介质)。具体而言,诸如⑶、DVD、记忆棒、或其他可移动非易失性存储器介质之类的配置的介质114在被插入或以其他方式安装时可以在功能上变为计算机系统的一部分,从而使其内 容可被访问以供处理器110使用。可移动的配置的介质114是计算机可读存储介质112的示例。计算机可读存储介质112的某些其他示例包括内置RAM、R0M、硬盘、以及其他不能被用户104轻松地移走的存储设备。介质114用可由处理器110执行的指令116来配置;“可执行”在此以宽泛的意义被使用以包括机器代码、可解释代码、以及在例如虚拟机上运行的代码。介质114还被配置有数据118,该数据通过指令116的执行被创建、修改、引用和/或以别的方式使用。指令116和数据118配置它们所驻留的介质114 ;当该存储器是给定计算机系统的功能部分时,指令116和数据118还配置该计算机系统。在某些实施例中,数据118的一部分代表了诸如产品特征、清单、物理测量值、设定、图像、读数、目标、卷等等之类的现实世界的项。也可以如本文中所讨论的,例如,通过注入、转换、分解、绑定、部署、执行、修改、显示、创建、加载和/或其他操作,来变换这样的数据。包含源代码122和可执行代码124的代码库120 ;诸如编译器128、调试器130、以及配置文件132之类的开发工具126 ;其他软件、本地数据源134 (概括地在136处指定的数据源)以及图中所示和/或本文中所讨论的其他项目可部分地或全部地驻留在一个或多个介质112内,从而配置那些介质。除了处理器110和存储器112之外,操作环境还包括其他硬件,如显示器138、总线、电源和加速度计,等等。设备102可通过网络108与一个或多个计算群集140和/或一个或多个计算云142通信,每个可具有它们自己相应的数据源144、146以及它们自己的处理器、存储器和软件。在一些环境中,群集和云上的数据源用于比本地数据集大得多的数据集。实际上,群集或云数据集的存储要求可能远远超出本地数据源的数据存储量的容量。给定操作环境100可包括向开发者提供一组协调的软件开发工具以用于软件开发项目150的集成开发环境(IDE) 148或其他软件。具体而言,对于一些实施例,合适的操作环境中的一些包括或帮助创建被配置成支持程序开发的Microsoft Visual Studio 开发环境(微软公司的标记)。一些合适的操作环境包括Java 环境(Oracle America公司的标记),并且一些操作环境包括利用诸如C++或C# (“C-Sharp”)等语言的环境,但本文的教导适用于各种各样的编程语言、编程模型、以及程序,以及适用于软件开发领域本身之外的使用群集计算、云计算、或两者的努力。在图I中以轮廓形式示出了一个或多个项目来强调它们不一定是所示操作环境的一部分,但是可以与此处讨论的操作环境中的项目互操作。未采用轮廓形式的项在任何附图或任何实施例中也不一定是必需的。系统图2示出了适合与一些实施例一起使用的架构。如下文进一步描述的,数据源映射202将源代码122中使用的数据源标识符204映射到诸如本地数据源134、群集数据源144和/或云数据源146之类的相应的数据源136。可执行代码产生器206使用源代码122和数据源映射202以相对于特定数据源和对它们的访问产生被适合于某一执行目标(如本地、群集或云)的可执行代码124。不同的数据执行目标可包含不同的数据集大小,如不同 量的相同格式化的数据。例如,数据集的大小可取决于数据集中的数据所代表的时间周期,如本地盘上相当于一个月的数据可占据数百G字节,而云/群集存储上的相当于数年的数据可占据一百T字节的存储。作为另一示例,被映射到某一数据源标识符的一个数据源可包含少于十G字节的数据,而映射到同一数据源标识符的另一数据源包含至少一百G字节的数据。诸如一百G字节或T字节等其他阈值(仅列举两个)也可被使用。无论如何,在这些情形中,一实施例可帮助使开发者容易地相对于多个数据集,如相对较小的一个和相对较大的一个,来测试相同的开发源代码。除了实现编译和链接的熟悉的指令之外,可执行代码产生器包含用于促进被改编的可执行代码的产生的指令210。例如,在某些实施例中,产生器206包括将数据源标识符204分解成物理位置(分解214)的API 212。在某些实施例中,产生器206包括源到源转换器216,源到源转换器将调用、声明和/或其他代码注入到开发者的源代码122中以获得中间源,中间源随后被编译成适合于执行目标的可执行代码124。尽管本地、群集和云目标208在本文中被用作示例,但是开发者104可提供不同执行目标208的指定218 (例如通过名称、地址、或其他细节)。例如,在某些实施例中可指定多个群集140,而在某些实施例中可不指定云142。在某些实施例中,用于一个或多个数据源标识符204的数据源映射202被存储在项目特定的结构中,如项目特性220 (有时也称为属性)中。在某些实施例中,用于一个或多个数据源标识符204的数据源映射202被存储在具有可执行代码124的软件包222中,要么以特性220的形式要么以另一形式,例如配置文件 132。参考图I至3,某些实施例提供了具有逻辑处理器110和存储器介质112的计算机系统102,该逻辑处理器和存储器介质由电路、固件和/或软件配置,以通过本文描述的将单个源代码与多个执行目标数据源相协调来变换开发环境,且更具体的是变换源代码。例如,某些实施例包括逻辑处理器110、操作上与逻辑处理器通信的存储器112、以及配置存储器112的项目。驻留在存储器112中(从而配置存储器)的数据源映射202具有被映射到相应不同执行目标208处的多个不同数据源136的至少一个数据源标识符204。在某些实施例中,数据源映射在存储器112中驻留在例如文本配置文件、非文本项目特性220、另一项目特定的结构、和/或用户特定的结构中。驻留在存储器112中的源代码122(也称为开发者源代码,因为它由开发者104提供)将数据源标识符204叙述为数据源136。驻留在存储器112中的可执行代码产生器206具有指令210、116,在执行时在不同时间从相同的开发者源代码122自动地产生多个不同的可执行代码124。这些可执行代码124中的每一个引用数据源中的不同一个,即使这些可执行代码中的每一个是从与其他可执行代码相同的源自动生成的。从而,开发者避免了在开发者的源代码122内管理不同执行目标的细节的负担。例如,开发者的源代码122可不需要用于检测执行位置的代码,并因此可不需要绝对路径346数据源标识符。为特定目标208来改编可执行代码所需的代码可由产生器206注入,例如用于创建用于后续编译的中间源344和/或作为对从开发者的源122产生的可执行代码的补丁。就注入而言,某些实施例使用包含开发者源代码中不存在的调用318的中间源代码344,如文件夹创建调用、云容器创建调用、文件创建调用。在某些实施例中,可执行代码产生器206包括分解API 212。分解API 212包括指·令210,在由处理器执行时会将相对路径334和执行目标208分解成包含物理路径346的数据源分解214。在某些实施例中,可执行代码产生器206包括创建中间源代码344的源到源转换器216。在某些实施例中,诸如人类用户I/O设备之类的外围设备106 (屏幕、键盘、鼠标、图形输入板、话筒、扬声器、运动传感器等等)将可操作地与一个或多个处理器110和存储器进行通信。然而,一实施例也可以深嵌入在系统中,以便没有人类用户104直接与该实施例进行交互。软件进程可以是用户104。在某些实施例中,该系统包括通过网络连接的多个计算机。网络接口设备可以使用例如诸如分组交换网络接口卡、无线收发机或电话网络接口之类的组件提供对网络108的接入,并将存在于计算机系统中。然而,一实施例也可以通过直接存储器访问、可移动非易失性介质、或其他信息存储-检索和/或传输方法进行通信,或者,计算机系统中的一实施例可以在不与其他计算机系统进行通信的情况下操作。过程图3以流程图300示出了某些过程实施例。附图中所示的过程可以在某些实施例中自动地执行,例如,通过IDE 148内的可执行代码产生器206、在脚本控制下、或需要极少或不需要同时地用户输入。除非另外指明,否则过程也可以部分自动地且部分手动地执行。在一给定实施例中,可以重复过程的零个或更多个所示出的步骤,有可能利用不同的参数或数据来操作。一实施例中的步骤也可以按照与图3中展示的自顶向下次序不同的次序来执行。步骤可以串行地、以部分重叠的方式、或完全并行地执行。遍历流程图300以指出在过程中执行的步骤的次序可以在过程的一次执行与该过程的另一次执行之间不同。流程图遍历次序也可以在一个过程实施例与另一过程实施例之间不同。各步骤还可以被省略、组合、重命名、重组、或以其他方式偏离所示出的流程,只要所执行的过程是可操作的,并符合至少一个权利要求。此处提供了帮助示出该技术的各方面的示例,但是在本文内给出的示例并未描述所有可能的实施例。实施例不仅限于此处所提供的具体实现、排列、显示、特征、方法或情形。给定实施例可包括例如附加的或不同的特征、机制、和/或数据结构,并可以以别的方式偏离此处所提供的示例。在映射获得步骤302期间,一实施例获得数据源映射202。步骤302可通过例如从文件或从特性集读取映射202,和/或通过其他机制来完成。在源代码接收步骤304期间,一实施例例如通过IDE 148编辑器、通过从例如文件读取代码和/或通过其他机制来接收开发者源代码122。在目标标识步骤306期间,一实施例标识至少一个执行目标208 (也称为“执行位置”或“执行上下文”)。步骤306可例如通过使用内建默认值和/或通过接受326来自用户104的指定218来完成。在可执行代码产生步骤308期间,一实施例从开发者源代码122、数据映射202以及目标208指定218自动地产生可执行代码124。与这里描述的数据源标识符204、分解332、分解API 212、源到源转换216、中间源代码344、和/或其他机制协同地可使用常用的 编译、链接和其他可执行代码生成机制,以支持管理不同目标处的多个数据源,同时允许开发者使用单个源代码122。在配置文件读取步骤310期间,该步骤可以是映射获得步骤302的一部分,一实施例使用文件系统、联网和/或其他机制从配置文件132读取数据源映射。更为一般地,在步骤310期间,一实施例从诸如配置文件、项目特性220、或用户特定的设定或环境结构等之类的结构312读取数据源映射202。在转换执行步骤314期间,一实施例通过注入声明、调用318、和/或使代码适合于某一执行位置的其他代码来自动地执行源到源转换,以从开发者提供的源代码122创建中间源代码344。与适合于如这里所描述地执行的常用语义分析一起,可使用常用的句法机制。在代码注入步骤316期间,该步骤可作为转换执行步骤314的一部分而发生,一实施例自动地将调用318和/或其他源代码注入到开发者源代码122以形成包含数据源的目标特定的细节和它们的访问机制的中间源代码344。合适的代码变换在本文中被讨论,且提供了示例。在某些实施例中,用户不会有中间源代码344的细节或甚至是存在的负担。在映射放置步骤320期间,一实施例将数据源映射202放置(如写入、关联、添加)在可分发的软件包222中。映射202可使用适合于放置数据源映射202的常见写入机制来被放置320在例如特性220中、头部中、或配置或环境变量文件中。在分解生成步骤322期间,该步骤可以是产生步骤308的一部分,一实施例从数据源映射202和开发者源代码122自动地生成数据源分解322。在映射202的数据源标识符204和源代码122中的相对路径334 —起使用时,步骤322可包括分解步骤332。在修改接受步骤324期间,一实施例通过(例如)编辑器或IDE从用户104接受对先前获得302的数据源映射的修改。例如,数据源标识符204可被添加、移除或重命名;目标208可被添加或移除;数据源物理位置可被改变。在修改被接受之前,步骤324可包括存在性检查(如物理位置或目标是否存在)、句法检查(如数据源标识符中缺少URI或绝对路径)、和/或其他有效性测试。在目标指定接受步骤326期间,一实施例通过(例如)编辑器或IDE从用户104接受对目标208中的至少一个改变的指定,如目标的添加或先前指定的目标的去除。在映射步骤328期间,一实施例(或操纵一实施例的各方面的用户)例如通过创建或修改数据源映射202将标识符204映射到执行目标数据源136。在描述步骤330期间,一实施例(或操纵一实施例的各方面的用户)在开发者源代码122中叙述(例如读或写)数据源标识符204。数据源标识符204是(a)标识数据源136且(b)不特定于某一具体目标的数据源的标识符。实际上,数据源标识符204在执行期间不可被原样使用一它必须被映射328。试图使用未经映射的数据源标识符204会导致编译时和/或运行时差错,因为数据源标识符本身中缺少诸如数据源的物理位置之类的细节。在相对路径分解步骤332期间,该步骤可以是分解生成步骤322的一部分,包括相对路径334的数据源标识符被分解成数据源分解214。在源修改避免步骤336期间,该步骤可被视作可执行代码产生步骤308的一部分、源代码接收步骤304的一部分、和/或包括从单个接收304到的源代码122产生308用于多个目标的代码的过程的一部分,用户(以及一实施例)避免修改源代码122的用户副本。因此,用户没有提供或理解目标特定的数据源实现细节的负担。·在绝对路径避免步骤338期间,该步骤可被视作可执行代码产生步骤308的一部分、源代码接收步骤304的一部分、和/或包括从单个接收304到的源代码122产生308用于多个目标的代码的过程的一部分,用户(以及一实施例)避免在源代码122中使用绝对路径346来访问数据源136。因此,用户没有提供或理解目标特定的数据源实现细节的负担。在位置检测代码避免步骤340期间,该步骤可被视作可执行代码产生步骤308的一部分、源代码接收步骤304的一部分、和/或包括从单个接收304到的源代码122产生308用于多个目标的代码的过程的一部分,用户(以及一实施例)避免使用试图检测目标位置或在目标208之间进行区分以便访问所希望的数据源136的源代码122。因此,用户没有提供或理解目标特定的数据源实现细节的负担。在存储器配置步骤342期间,通过数据源映射202、分解API 214、可执行代码产生器206的其他数据源变换指令,和/或以其他方式连同使用单个源代码和虚拟化在不同的执行位置的数据源的映射,来配置存储器介质112。下面将参考各实施例比较详细地讨论前面的步骤和它们的相互关系。某些实施例提供用于协作地管理源代码和多个可供选择的计算数据源的过程。该过程包括获得302数据源映射202,在数据源映射中某一数据源标识符204被映射到各相应执行目标208处的多个数据源136。该过程接收304将数据源标识符叙述330为数据源的开发者源代码,标识306第一执行目标,以及从开发者源代码自动地产生308第一可执行代码。第一可执行代码被适合于第一目标,在第一执行目标中执行时,第一代码124将用第一执行目标的映射的数据源作为由数据源标识符204标识的数据源来操作,即使该源136没有被明确地表示在源代码122中。在标识306具有与第一执行目标不同的数据源的第二执行目标之后,过程自动地一从同一源代码122—产生308被适合于该第二目标的第二可执行代码。也就是说,在第二执行目标中执行时,第二代码124将用第二执行目标的映射的数据源作为被标识的数据源,而不是使用第一执行目标的数据源来操作。许多变型被考虑。某些实施例包括通过读取文本配置文件或通过读取非文本项目特性来获得302数据源映射。在某些实施例中,接收步骤接收304不需要(即避免338)绝对路径数据源标识符的开发者源代码122。在某些实施例中,执行目标标识步骤标识306以下至少两个本地执行目标、群集执行目标、云执行目标。在某些实施例中,从相同开发者源代码自动产生308第二可执行代码包括执行314注入316以下调用318中的至少一个的源到源转换文件夹创建调用、云容器创建调用、文件创建调用。某些实施例包括将数据源映射202放置320在可分发的软件包222中。从开发者体验的观点,某些实施例包括获得302其中某一数据源标识符被映射到各相应执行目标处的多个数据源的数据源映射,以及从数据源映射202和源代码222为相应的不同执行目标自动地生成322至少两个不同的数据源分解214,而不要求(即避免336)开发者对源代码122的任何改变。再次,设想了变型。在某些实施例中,获得302包括从项目特定的结构读取310数据源映射。在某些实施例中,生成步骤生成322包含通用资源标识符(URI)的至少一个数据源分解214。在某些实施例中,生成步骤基于以数据源标识符为根的相对路径334生成322、332至少一个数据源分解。在某些实施例中,生成步骤332包含不仅仅是物理存储位置标识符串的替代;如调用318可被注入316。 在某些实施例中,该过程还包括接受324来自开发者104的对数据源映射的修改。某些实施例包括接受326来自开发者的对执行目标的指定,在该情况中,至少一个执行目标可包括多个计算设备,如群集或云作为目标。INPUT TEMP 示例作为非限制性示例,给出下文以进一步说明可能的实施例。假设一实施例获得302数据源映射202,在数据源映射中数据源标识符204被映射328到各相应执行位置(各目标208)处的多个数据源136。例如,在下面的映射202中,INPUT 和 TEMP 是数据源标识符,d:/MyData/Input/、\\fileshare\TeamFolder\MyInput\ 等是数据源,Local (本地)、Cluster (群集)和Cloud (云)是执行位置
权利要求
1.一种用于协作地管理源代码和多个可供选择的计算数据源的方法,所述方法包括以下步骤 获得数据源映射,在所述数据源映射中特定数据源标识符被映射到各相应执行目标处的多个数据源; 接收将所述数据源标识符叙述为数据源的开发者源代码; 标识第一执行目标; 从所述开发者源代码自动产生第一可执行代码,所述第一可执行代码在所述第一执行目标中执行时将以所述第一执行目标的映射的数据源作为所述数据源标识符所标识的数据源来操作; 标识具有与所述第一执行目标不同的数据源的第二执行目标;以及 从相同的源代码自动产生第二可执行代码,所述第二可执行代码在所述第二执行目标中执行时将以所述第二执行目标的映射的数据源而不是以所述第一执行目标的数据源作为所标识的数据源来操作。
2.如权利要求I所述的方法,其特征在于,执行目标标识步骤标识以下中的至少两个本地执行目标、群集执行目标、云执行目标。
3.如权利要求I所述的方法,其特征在于,从相同的开发者源代码自动产生第二可执行代码的步骤包括执行源到源转换,所述源到源转换注入以下中的至少一个文件夹创建调用、云容器创建调用、文件创建调用。
4.一种用数据和指令配置的计算机可读非瞬态存储介质,所述指令在被至少一个处理器执行时使所述处理器执行供开发者使用的方法,所述方法包括以下步骤 获得数据源映射,在所述数据源映射中特定数据源标识符被映射到各相应执行目标处的多个数据源;以及 从所述数据源映射以及源代码自动生成至少两个不同数据源分解用于相应的不同执行目标,而不要求由所述开发者对所述源代码做出任何改变。
5.如权利要求4所述的配置的介质,其特征在于,所述生成步骤生成以下中的至少一个包含统一资源标识符的数据源分解、基于以所述数据源标识符为根的相对路径的数据源分解。
6.如权利要求4所述的配置的介质,其特征在于,所述生成步骤不仅仅包含物理存储位置标识符串的替代。
7.如权利要求4所述的配置的介质,其特征在于,所述方法还包括从所述开发者接受对执行目标的指定,所述执行目标中的至少一个包括多个计算设备,用于该执行目标的映射的数据源包含至少一 T字节的数据。
8.一种计算机系统,包括 逻辑处理器; 与所述逻辑处理器操作上通信的存储器; 驻留在所述存储器中并具有特定数据源标识符的数据源映射,所述数据源标识符被映射到相应的不同执行目标处的多个不同数据源; 驻留在所述存储器中的开发者源代码,所述开发者源代码具有在所述开发者源代码内被叙述为数据源的数据源标识符;以及驻留在所述存储器中且具有指令的可执行代码产生器,所述指令在执行时在不同时间从相同的开发者源代码自动产生多个不同的可执行代码,每个可执行代码引用所述数据源中的不同一个。
9.如权利要求8所述的系统,其特征在于,所述开发者源代码不需要用于检测执行位置的代码,且所述开发者源代码也不需要绝对路径数据源标识符。
10.如权利要求8所述的系统,其特征在于,所述数据源映射驻留在以下中的至少一个中文本配置文件、非文本项目特性、项目特定的结构、用户特定的结构。
全文摘要
本发明涉及变换的上下文知晓数据源管理。通过对多个数据源使用相同的源代码来辅助本地、群集和云执行之间的移植。源代码中所叙述的数据源标识符映射到不同执行目标处的数据源。使用分解API而不改变开发者的源代码,产生适合于连续目标的可执行代码。可编辑的数据源映射是按项目的,维护在文件或项目特性中,以及放置在具有可执行代码的可分发的软件包中。减少了开发者在他们的源代码中确定执行目标以及在源代码中显式地处理不同的执行位置的负担。源代码可不需要绝对路径数据源标识符或用于检测执行位置的代码。源到源转换注入创建文件夹、文件或云容器的调用。数据源分解可基于以数据源标识符为根的相对路径。
文档编号G06F9/44GK102902529SQ201210327750
公开日2013年1月30日 申请日期2012年9月6日 优先权日2011年9月7日
发明者A·A-C·察奥, 曹阳, 张蒲生 申请人:微软公司