(本申请是申请日为2011年6月15日、申请号为201180039226.7、发明名称为“动态加载基于图的计算”的申请的分案申请)
相关申请的交叉引用
本申请要求来自通过引用合并于此的、提交于2010年6月15日的美国申请序列第61/355,129号的优先权。
本发明涉及动态加载基于图的计算。
背景技术:
采用与图的顶点相关联的计算的组件和在对应于图的链接(弧、边)的组件之间的数据流,复杂的计算经常被表示为通过有向图的数据流(被称为“数据流图”)。组件可以包括:数据处理组件,其在一个或多个输入端口接收数据,处理数据和从一个或多个输出端口提供数据;和数据集组件,其用作数据流的源或接收器(sink)。在美国专利5,966,072,executingcomputationsexpressedasgraphs(执行表示为图的计算)中描述了实施这样基于图的计算的系统。
技术实现要素:
在总的方面,一种用于在使用存储在数据存储系统中的编译后的数据流图的数据处理系统中处理数据的方法,该方法包括:接收多个作业单元,每个作业单元包括一个或多个作业元素;以及响应于接收第一作业单元使用加载到数据处理系统中的第一编译后的数据流图处理第一作业单元。第一编译后的数据流图被编译为代表第一数据流图的数据结构,该第一数据流图包括通过代表在数据处理组件之间的作业元素的流的链接连接的代表数据处理组件的节点。处理包括分析第一作业单元以便确定第一作业单元的特征;在接收第一作业单元之前,从存储在包括至少一些被编译的编译后的数据流图的数据存储系统中的多个编译后的数据流图识别一个或多个编译后的数据流图,用于处理具有第一作业单元的确定的特征的作业单元;将识别的一个或多个编译后的数据流图中的一个加载到数据处理系统作为第一编译后的数据流图;以及使用第一数据流图从第一作业单元中的至少一个作业元素生成一个或多个输出作业元素。
在另一方面,一种用于在使用存储在数据存储系统中的编译后的数据流图的数据处理系统中处理数据的方法,该方法包括:接收多个作业单元,每个作业单元包括一个或多个作业元素;以及使用响应于接收第一作业单元加载到所述数据处理系统中的第一编译后的数据流图处理第一作业单元,该第一编译后的数据流图已被编译为代表第一数据流图的一个或多个数据结构,该第一数据流图包括通过代表数据处理组件之间的作业元素的流的链接所连接的代表数据处理组件的节点,该处理包括:(a)分析第一作业单元以便确定第一作业单元的特征,(b)从存储在所述数据存储系统中的包括接收到第一作业单元之前被编译的至少一些编译后的数据流图的多个编译后的数据流图识别一个或多个编译后的数据流图,用于处理具有第一作业单元的所确定的特征的作业单元,(c)将识别的一个或多个编译后的数据流图中的一个加载到数据处理程序中,其中在接收到第一作业单元之前,所述数据处理程序正在所述数据处理系统中运行,以及(d)使用第一数据流图从第一作业单元中的至少一个作业元素生成一个或多个输出作业元素。
在另一方面,一种使用存储在数据存储系统中的编译后的数据流图来处理数据的数据处理系统,该数据处理系统包括:输入设备或端口,其被配置为接收多个作业单元,每个作业单元包括一个或多个作业元素;以及至少一个处理器,其被配置为使用响应于接收第一作业单元加载到所述数据处理系统中的第一编译后的数据流图处理第一作业单元,该第一编译后的数据流图被编译为代表第一数据流图的一个或多个数据结构,该第一数据流图包括通过代表数据处理组件之间的作业元素的流的链接所连接的代表数据处理组件的节点,该处理包括:分析第一作业单元以便确定第一作业单元的特征;从存储在所述数据存储系统中的包括接收到第一作业单元之前被编译的至少一些编译后的数据流图的多个编译后的数据流图中识别一个或多个编译后的数据流图,用于处理具有第一作业单元的所确定的特征的作业单元;将识别的一个或多个编译后的数据流图中的一个加载到数据处理程序中,其中在接收到第一作业单元之前,所述数据处理程序正在所述数据处理系统中运行;以及使用第一数据流图从第一作业单元中的至少一个作业元素生成一个或多个输出作业元素。
在另一方面,一种使用存储在数据存储系统中的编译后的数据流图来处理数据的数据处理系统,该数据处理系统包括:用于接收多个作业单元的部件,每个作业单元包括一个或多个作业元素;以及使用响应于接收第一作业单元加载到所述数据处理系统中的第一编译后的数据流图来处理第一作业单元的部件,该第一编译后的数据流图被编译为代表第一数据流图的一个或多个数据结构,该第一数据流图包括通过代表数据处理组件之间的作业元素的流的链接所连接的代表数据处理组件的节点,该处理包括:分析第一作业单元以便确定第一作业单元的特征;从存储在所述数据存储系统中的包括接收到第一作业单元之前被编译的至少一些编译后的数据流图的多个编译后的数据流图中识别一个或多个编译后的数据流图,用于处理具有第一作业单元的所确定的特征的作业单元;将识别的一个或多个编译后的数据流图中的一个加载到数据处理程序中,其中在接收到第一作业单元之前,所述数据处理程序正在所述数据处理系统中运行;以及使用第一数据流图从第一作业单元中的至少一个作业元素生成一个或多个输出作业元素。
在另一方面,一种用于存储计算机程序的计算机可读介质,所述计算机程序使用存储在数据存储系统中的编译后的数据流图来在数据处理系统中处理数据,所述计算机程序包括指令,该指令使得计算机能够执行以下操作:接收多个作业单元,每个作业单元包括一个或多个作业元素;以及使用响应于接收第一作业单元加载到所述数据处理系统中的第一编译后的数据流图处理第一作业单元,该第一编译后的数据流图被编译为代表第一数据流图的一个或多个数据结构,该第一数据流图包括通过代表数据处理组件之间的作业元素的流的链接所连接的代表数据处理组件的节点,该处理包括:分析第一作业单元以便确定第一作业单元的特征;从存储在所述数据存储系统中的包括接收到第一作业单元之前被编译的至少一些编译后的数据流图的多个编译后的数据流图中识别一个或多个编译后的数据流图,用于处理具有第一作业单元的所确定的特征的作业单元;将识别的一个或多个编译后的数据流图中的一个加载到数据处理程序中,其中在接收到第一作业单元之前,所述数据处理程序正在所述数据处理系统中运行;以及使用第一数据流图从第一作业单元中的至少一个作业元素生成一个或多个输出作业元素。
方面可以包括以下特征中的一个或多个。
多个作业单元对应于接收的作业元素的流中的不同连续组的一个或多个作业元素。
多个作业单元对应于不同的各个接收的文件中的不同批的一个或多个作业元素。
加载还包括从第一编译后的数据流图获取代表第一数据流图的数据结构以及将获取的数据结构加载到第二数据流图。
在接收第一作业单元之前运行第二数据流图。
将获取的数据结构加载到第二数据流图包括在第二数据流图的包含组件中嵌入第一数据流图,该包含组件被配置为提供第一进程以便执行第一数据流图中的数据处理组件。
第二数据流图的包含组件还被配置为提供第二进程以便监视第一数据流图中的数据处理组件的执行。
响应于检测第一数据流图中的至少一个数据处理组件的失败以便正确地处理给定的作业元素,第二进程中断第一数据流图的执行而不中断第二数据流图的执行。
响应于检测在处理第一作业单元期间第一数据流图中的至少一个数据处理组件的延迟,第二进程暂停第一数据流图的执行而不中断第二数据流图的执行并且将第三数据流图嵌入在第二数据流图的包含组件中以便处理在第一作业单元之后接收的第二作业单元。
第二数据流图的包含组件还被配置为提供第一进程用来与第二进程通信的第一应用编程接口,该第一应用编程接口访问用于第一远程数据库的库。
第二数据流图的包含组件还被配置为提供第一进程用来与第三进程通信的第二应用编程接口,该第二应用编程接口访问不同于用于第一远程数据库的库的用于第二远程数据库的库。
第二数据流图的包含组件还被配置为提供与第二数据流图的多个组件兼容的第三应用编程接口。
第二数据流图的包含组件还被配置为将使用第三应用编程接口的应用调用转换为基于访问第一或第二远程数据库中的哪一个使用第一或第二应用编程接口中的选择的一个的应用调用。
将获取的数据结构加载到第二数据流图包括将第一数据流图嵌入在第二数据流图的包含组件中,嵌入包括:将从连接到包含组件的输入的链接接收的输入作业元素的流连接到第一数据流图的输入,以及将所生成的一个或多个输出作业元素连接到与包含组件的输出连接的链接。
第一数据流图包括:包括连接到第二组件的输入的至少一个输出链接的第一组件;当第一数据流图被嵌入在包含组件中时,向第二组件提供输入作业元素的指令;以及当第一数据流图没有被嵌入在包含组件中时,向第二组件提供来自存储位置的作业元素的指令。
第一数据流图包括:包括连接到第四组件的输出的至少一个输入链接的第三组件;当第一数据流图被嵌入在包含组件中时,向包含组件的输出提供来自第四组件的输出的生成的一个或多个输出作业元素的指令;以及当第一数据流图没有被嵌入在包含组件中时,向存储位置提供来自第四组件的输出的生成的一个或多个输出作业元素的指令。
第一数据流图包括多个接口组件,每个接口组件包括:当第一数据流图被嵌入在包含组件中时,用于在第一数据流图和包含组件之间发送作业元素的指令;以及当第一数据流图没有被嵌入在包含组件中时,用于在第一数据流图和存储位置之间发送作业元素的指令。
当第一数据流图被嵌入在包含组件中时,每个接口组件识别第一数据流图被连接到的包含组件的不同的对应的输入或输出端口。
在生成一个或多个输出作业元素之后,该方法还包括从第二数据流图卸载代表第一数据流图的获取的数据结构。
该方法还包括缓冲在第一作业单元到达之后以及在代表第一数据流图的获取的数据结构的卸载之前到达的作业单元中的作业元素。
该方法还包括加载加载到数据处理系统中的第二编译后的数据流图,第二编译后的数据流图被编译为代表第二数据流图的数据结构。
将识别的一个或多个编译后的数据流图中的一个作为第一编译后的数据流图加载到数据处理系统中包括,将第一数据流图嵌入在第三数据流图的第一包含组件中,以及将第二编译后的数据流图加载到数据处理系统中包括,将第二数据流图嵌入在第三数据流图的第二包含组件中。
响应于接收第一作业单元,第二编译后的数据流图被加载到数据处理系统中。
响应于在第一作业单元之后接收第二作业单元,第二编译后的数据流图被加载到数据处理系统中。
该方法还包括响应于接收第二作业单元使用加载到数据处理系统中的第二编译后的数据流图,在处理第一作业单元之后处理第二作业单元,第二编译后的数据流图被编译为代表第二数据流图的数据结构,处理包括:分析第二作业单元以便确定第二作业单元的特征;在接收第二作业单元之前,从存储在数据存储系统中的被编译的多个编译后的数据流图识别一个或多个编译后的数据流图,用于处理具有第二作业单元的确定的特征的作业单元;将识别的一个或多个编译后的数据流图中的一个作为第二编译后的数据流图加载到数据处理系统中;以及使用第二数据流图从第二作业单元中的至少一个作业元素生成一个或多个输出作业元素。
将识别的一个或多个编译后的数据流图中的一个作为第一编译后的数据流图加载到数据处理系统中包括,将第一数据流图嵌入在第三数据流图的包含组件中,以及将识别的一个或多个编译后的数据流图中的一个作为第二编译后的数据流图加载到数据处理系统中包括,将第二数据流图嵌入在第三数据流图的包含组件中。
分析第一作业单元包括读取用于包括在第一作业单元的作业元素中的编译后的数据流图的标识符。
识别一个或多个编译后的数据流图包括将标识符匹配到与一个或多个编译后的数据流图相关联的标识符。
分析第一作业单元包括识别作为第一作业单元的作业元素的特征的多个预定的类型中的一个。
识别一个或多个编译后的数据流图包括确定对应于一个或多个编译后的数据流图的数据流图被配置为处理以识别的类型为特征的作业元素。
分析第一作业单元包括识别包括在第一作业单元的作业元素中的内容的属性。
识别一个或多个编译后的数据流图包括确定对应于一个或多个编译后的数据流图的数据流图被配置为处理包括具有识别的属性的内容的作业元素。
分析第一作业单元包括确定与第一作业单元相关联的、被指定为用于第一数据流图的第一组的一个或多个参数的一个或多个值。
识别一个或多个编译后的数据流图包括确定采用绑定到匹配与第一作业单元相关联的确定的一个或多个值的各个值的第一组的一个或多个参数将识别的一个或多个编译后的数据流图编译为代表第一数据流图的数据结构。
将识别的一个或多个编译后的数据流图中的一个作为第一编译后的数据流图加载到数据处理系统中包括将第二组的一个或多个参数绑定到至少部分基于第一作业单元确定的各个值。
第二组的一个或多个参数包括至少一个参数,该参数的值包括用于提供输入作业元素的输入源的名称或用于接收输出作业元素的输出源的名称。
第一组的一个或多个参数包括至少一个参数,当代表第一数据流图的数据结构被编译为第一编译后的数据流图时,该参数的值确定是否要在该数据结构中包括一个或多个组件。
第一组的一个或多个参数包括至少一个参数,当代表第一数据流图的数据结构被编译为第一编译后的数据流图时,该参数的值确定将应用于由被包括在该数据结构中的组件处理的作业元素的变换。
该方法还包括,在接收第一作业单元之前,采用绑定到各个值的第一组的一个或多个参数从代表第一数据流图的数据结构编译第一编译后的数据流图。
该方法还包括将第一编译后的数据流图存储在数据存储系统中以及将存储的第一编译后的数据流图与指示被绑定到第一组的一个或多个参数的各个值的信息相关联。
另一方面,总的来说,一种使用存储在数据存储系统中的编译后的数据流图、用于处理数据的数据处理系统包括:输入设备或端口,其被配置为接收多个作业单元,每个作业单元包括一个或多个作业元素;以及至少一个处理器,其被配置为响应于接收第一作业单元使用加载到数据处理系统中的第一编译后的数据流图处理第一作业单元。第一编译后的数据流图被编译为代表第一数据流图的数据结构,该第一数据流图包括通过代表数据处理组件之间的作业元素的流的链接连接的代表数据处理组件的节点。处理包括:分析第一作业单元以便确定第一作业单元的特征;在接收第一作业单元之前,从存储在包括至少一些被编译的编译后的数据流图的数据存储系统中的多个编译后的数据流图识别一个或多个编译后的数据流图,用于处理具有第一作业单元的确定的特征的作业单元;将识别的一个或多个编译后的数据流图中的一个作为第一编译后的数据流图加载到数据处理系统中;以及使用第一数据流图从第一作业单元中的至少一个作业元素生成一个或多个输出作业元素。
另一方面,总的来说,使用存储在数据存储系统中的编译后的数据流图、用于处理数据的数据处理系统包括:用于接收多个作业单元的部件,每个作业单元包括一个或多个作业元素;以及响应于接收第一作业单元使用加载到数据处理系统中的第一编译后的数据流图用于处理第一作业单元的部件。第一编译后的数据流图被编译为代表第一数据流图的数据结构,该第一数据流图包括通过代表数据处理组件之间的作业元素的流的链接连接的代表数据处理组件的节点。处理包括:分析第一作业单元以便确定第一作业单元的特征;在接收第一作业单元之前,从存储在包括至少一些被编译的编译后的数据流图的数据存储系统中的多个编译后的数据流图识别一个或多个编译后的数据流图,用于处理具有第一作业单元的确定的特征的作业单元;将识别的一个或多个编译后的数据流图中的一个作为第一编译后的数据流图加载到数据处理系统中;以及使用第一数据流图从第一作业单元中的至少一个作业元素生成一个或多个输出作业元素。
另一方面,总的来说,计算机可读介质存储用于处理使用存储在数据存储系统中的编译后的数据流图的数据处理系统中的数据的计算机程序。计算机程序包括指令,其使得计算机:接收多个作业单元,每个作业单元包括一个或多个作业元素;并且响应于接收第一作业单元,使用加载到数据处理系统中的第一编译后的数据流图处理第一作业单元。第一编译后的数据流图被编译为代表第一数据流图的数据结构,该第一数据流图包括通过代表数据处理组件之间的作业元素的流的链接连接的代表数据处理组件的节点。处理包括:分析第一作业单元以便确定第一作业单元的特征;在接收第一作业单元之前,从存储在包括至少一些被编译的编译后的数据流图的数据存储系统中的多个编译后的数据流图识别一个或多个编译后的数据流图,用于处理具有第一作业单元的确定的特征的作业单元;将识别的一个或多个编译后的数据流图中的一个作为第一编译后的数据流图加载到数据处理系统中;以及使用第一数据流图从第一作业单元中的至少一个作业元素生成一个或多个输出作业元素。
本发明的方面可以包括一个或多个以下的优点。
可以以不同的方式配置使用数据流图的数据处理系统以便处理由单个作业元素构成的数据的输入流。每个作业元素可以代表分开的作业单元,或一系列多个作业元素可以代表作业单元。在此描述的技术可以被用于这样的系统的各种配置。一些配置对具有某个特征的数据流中的作业单元可能是更适当的。在一些情况下,作业单元中的一个或多个作业元素被提供到数据流图用于作为批处理(例如,由在相同的输入文件中的记录组成的作业元素的批),其中对一次的单个批数据流图将作业元素的数据流从一个或多个输入端口传递到一个或多个输出端口。从下流组件的输出端口提供的(并且可选地存储在数据集组件中的)一系列“输出作业元素”代表处理提供到输入端口的一系列“输入作业元素”的结果。在批处理的一个形式中,当批的第一输入作业元素准备好时数据流图开始,并且在提供最后的输出作业元素之后数据流图终止。在批处理的另一形式中,数据流图继续从一个批运行到下一批,同时确保在处理来自该下一批的第一输入作业元素之前输出来自前一批的最后的输出作业元素。在此批处理的后一形式中,可以存在被分割成作业单元的作业元素的连续流,每个作业单元由代表批的一个或多个作业元素组成。在此描述的一些技术示出如何响应于检测与接收的作业单元相关联的预定的特征动态加载给定的数据流图。如以下更详细地描述的,在一些情况下特征基于作业单元的内容(例如,文件的格式),并且在一些情况下特征基于与作业单元相关联的参数值(例如,确定是否将包括特定的条件组件的参数)。
在一些配置中,数据处理系统可以执行数据流图以便处理批处理数据使得运行相对短时间(例如,按秒的顺序)的数据流图处理给定的批处理数据。如果由选择的(例如,从数据流图的集合中选择的)数据流图处理许多小批,如果选择的数据流图的执行时间不由“开始时间”(从图的开始加载图和图准备开始处理批处理数据所花费的时间)主导。例如,如果数据流图的开始时间大约是五秒并且花费大约五秒来处理批处理数据,则仅一半的执行时间被用于有用的数据处理。在一些情况下,如果批很少到达(例如,在此示例中的每隔几分钟)处理时间和执行时间的这个低比率可能不影响整体效率。然而,如果批相对频繁的到达(例如,在此示例中的每隔几秒),则开始时间可以严重影响整体效率。如在此描述的,通过将在开始时间期间执行的一些任务移动到更早的编译阶段可以提高性能。
在一些配置中,数据处理系统可以执行数据流图以便处理数据的连续流使得数据流图连续运行处理数据的流中的一系列作业元素。作业元素可以被分为由一个或多个作业元素组成的作业单元,并且可能需要通过诸如批的不同的数据流图处理每个作业单元。如果按需将不同的数据流图动态加载到运行的容器图中(例如,相对于保持所有不同的数据流图独立运行,或将它们结合到单个大数据流图),可以显著地提高性能。例如,作业单元可以由给定类型的单个消息组成。一些类型的消息可以比其他的更频繁。因此,通过加载适当的数据流图以便处理给定类型的消息(而不是对所有不同类型的消息同时运行所有数据流图),可以为其他目的释放用于保持更少使用的数据流图运行的资源。此外,保持数据流图分开而不是将它们合并为大数据流图提供模块化,模块化使能用于不同类型的消息的定制数据流图的简单设计并且基于容器图的检查促进整个系统的开发者的理解。开发者通过改变对应的数据流图可以容易地改变如何处理一些类型的消息,并且在添加或移除消息类型时,可以容易地添加或移除数据流图。
在此描述的技术可以用于编译用于处理接收的批处理数据的可以在运行时采用适当的参数值动态加载的数据流图的不同的定制的版本。在一些实施中,编译后的数据流图可以被用作在包含数据流图运行时可以动态加载到该包含数据流图中的“微图”(micrograph),和可以从该包含数据流图中动态卸载的“微图”。在通过数据流图处理数据的连续流时,微图提供有效的方式以便作为批处理在该数据的连续流中的不同的作业单元。在一些情况下,如以下更详细描述的,使用用于加载微图的专用组件将微图加载为包含数据流图中的子图。用于编译数据流图(包括微图)的技术使得一些开始过程能够被提前执行,同时响应于接收的批处理数据(包括在数据的流中的作业单元)通过在数据流图的不同的编译后的版本中选择在运行时仍然允许灵活性。
从以下描述和从权利要求中本发明的其他特点和优点将变得显而易见。
附图说明
图1是其中执行数据流图的系统的示例布置的框图。
图2是包括微图的示例数据流图的说明图。
图3a是示例专用组件的说明图。
图3b是示例微图的说明图。
图4是在存储器中具有多个微图的示例专用组件的说明图。
图5a是具有处理数据流的多个微图的示例专用组件的说明图。
图5b是具有多个专用组件的示例数据流图的说明图。
图6是包括前置处理组件和后置处理组件的示例专用组件的框图。
图7是多个数据流组件的示例的说明图,每个数据流组件与单个数据库交互。
图8是与多个数据库交互的示例数据流组件的说明图。
图9a是与多个数据库交互的示例数据流组件的说明图。
图9b是使用公共协议层与多个数据库交互的示例数据流组件的说明图。
图10是其中在运行时间之前编译数据流图的系统的示例布置的框图。
具体实施方式
图1示出了示例数据处理系统100,其中可以使用动态加载技术。系统100包括数据源101,该数据源101可以包括数据的一个或多个源,例如存储设备或到在线数据流(onlinedatastream)的连接,其中的每一个可以以各种存储格式中的任意一种存储数据(例如,数据库表、电子表格文件、纯文本文件或由主机使用的本地格式)。执行环境104包括预执行模块105和执行模块106。执行环境104可以被托管在诸如unix操作系统的适当的操作系统控制下的一个或多个通用计算机上。例如,执行环境104可以包括多节点并行计算环境,该多节点并行计算环境包括使用多中央处理单元(cpu)的计算机系统的配置,该中央处理单元要么是本地的(例如,诸如smp计算机的多处理器系统)要么是本地分布的(例如耦接为集群或mpp的多处理器),要么是远程的,要么是远程分布的(例如经由局域网(lan)和/或广域网(wan)耦接的多处理器),要么是它们的任意组合。
预执行模块105被配置为执行各种任务以准备执行数据流图和诸如编译的数据流图的其他可执行程序,将编译后的数据流图存储到执行环境104可访问的存储系统107或从该存储系统107加载编译后的数据流图,或求解参数值并且将求解后的值绑定到参数。在一些情况下,预执行模块105响应于来自数据源101的数据执行任务(例如加载编译后的数据流图)。提供数据源101的存储设备可以对执行环境104是本地的,例如被存储在连接到运行执行环境104的计算机的存储介质上(例如硬盘驱动器102),或可以对执行环境104是远程的,例如被托管在经由远程连接与运行执行环境104的计算机通信的远程系统上(例如主机103)。
执行模块106使用由预执行模块105生成的编译后的数据流图以便生成输出数据,可以将该输出数据提供回数据源101和/或存储在数据存储系统107中。数据存储系统107还可被开发环境108访问,在开发环境108中开发者109能够设计数据流图。代表数据流图的数据结构可以被序列化并且存储在数据存储系统107中。
执行模块106可以从包括不同形式的数据库系统的各种类型的数据源101的系统接收数据。数据可以被组织为具有可能包括空值的用于各个字段(也被称为“属性”或“列”)的值的记录。当从数据源读取数据时,执行的数据流图可以包括处理数据源中的关于记录的初始格式信息的组件。在一些情况下,最初可以不知道数据源的记录结构而是在数据源的分析之后确定数据源的记录结构。关于记录的初始信息可以包括代表不同的值的比特数、在记录中的字段的顺序和由比特代表的值的类型(例如字符串、有符号/无符号整数)。
参考图2,由执行模块106执行的数据流图155的示例允许来自输入数据源110的数据被读取和被处理为离散作业元素的流。在被表示为图的顶点(或节点)的组件120、130和由图的链接(或弧、边)(例如连接组件120和130的链接125)表示的组件之间的数据流中,执行涉及处理作业元素的计算的不同部分。在通过引用合并于此的美国专利5,566,072,executingcomputationsexpressedasgraphs中描述实施这样的基于图的计算的系统。依照此系统做成的数据流图提供用于使信息进入和离开由图组件代表的单个进程的方法,用于在进程之间移动信息的方法和用于定义进程的运行顺序的方法。此系统包括选择进程间通信方法的算法(例如,根据图的链接的通信路径可以使用tcp/ip或unix域套接字,或使用共享存储器以便在进程之间传递数据)。
准备用于执行的未编译的数据流图的进程包括各种阶段。随同与提供在编译过程中使用的值的数据流图相关联的任何参数一起获取数据流图的未编译的表示。在静态参数求解阶段期间,求解静态参数(在运行时之前其值被指定用于求解)并且将解析后的值绑定到静态参数。在一些情况下,为了解析静态参数的值,执行计算以便导出某个值(例如,如在通过引用合并于此的命名为“managingmetadataforgraph-basedcomputations(管理用于基于图的计算的元数据)”的美国公开第2006/0294150号中描述的元数据值)。一些参数可以被指定为没有被解析以便稍后或紧挨着运行之前解析的动态参数。例如基于静态参数值,如果没有满足(或满足)预定的条件,则从图中移除被指定为条件组件的组件(例如通过由数据流链接替代)。在编译阶段期间,生成代表数据流图的数据结构,数据流图包括其组件和链接,在执行期间将使用该数据结构。编译还可以包括将采用脚本语言的嵌入的脚本编译为字节码或机器码。在运行时,将与数据流图相关联的任何动态参数绑定到解析后的值,并且通过开始一个或多个进程、打开任何需要的文件(例如通过动态参数识别的文件)、和/或链接任何动态库启动(launch)编译后的数据流图的数据结构。进程还执行任务以便设置由链接代表的数据流(例如分配共享存储器或打开tcp/ip串流)。在一些情况下,如在通过引用合并于此的命名为“managingcomputingresourcesingraph-basedcomputations(管理基于图的计算中的计算资源)”的美国公开第2007/0271381号中描述的,数据结构被配置为在单个进程中执行多个组件。
可以以各种抽象层级指定数据流图。“子图”本身是包含组件和链接的数据流图,子图可以在另一包含数据流图中被表示为仅显示将子图连接到包含数据流图的那些链接的单个组件。在一些情况下,显然,子图被用于隐藏在开发环境108中的包含数据流图的组件和链接,但是在包含数据流图中已经整合了代表组件和链接的数据。在一些实施例中,如以下更详细地描述的,子图最初没有被包括在包含数据流图中,而是稍后从开始作为编译后的数据流图的“微图”导出子图,该编译后的数据流图包括代表将被加载到包含数据流图中的组件和链接的数据结构。
再次参考图2,数据流图155能够从数据源接受输入数据的连续流,在此示例中由数据集组件110代表该数据源。数据的流在这个意义上是连续的,即,即使在数据流图155的操作期间数据的流可以变大和变小,然而数据的流也不一定有可分辨的开始或结束,例如信用卡交易的流或在进入系统中接收的顺序。此外,数据流图155能够将输出数据的连续流提供到输出数据储存库,在此示例中该输出数据储存库由数据集组件140表示。一些数据流图被设计用于作为连续数据流图执行,该连续数据流图在不确定的一段时间中处理数据的连续流,并且一些数据流图被设计用于作为批数据流图执行,该批数据流图开始执行以便处理数据的离散批并接着在处理该批之后终止执行。数据流图的数据处理组件120和130可以包含一系列的指令、子图或它们的一些组合。
在一些布置中,专用组件130可以加载微图160,微图160是专用种类的子图,其被配置为被动态获取并且被嵌入在包含数据流图中。可以将微图动态地嵌入在诸如专用组件130的包含数据流图的包含组件中。在一些布置中,从预先编译并且存储在数据存储系统107中的数据流图获得微图160。在一些布置中,当从数据存储系统107加载时,微图160保持处于未编译的形式。例如,专用组件130可以初始化图编译过程以便使得包含专用组件130的数据流图能够正好在使用之前执行被编译的微图,而不是加载编译后的数据流图。可以在专用组件130之外执行图编译过程,或在专用组件130中执行图编译过程。在一些布置中,在被存储在数据存储系统107中之前微图160被序列化。一般地,序列化是这样的进程,通过该过程将采用编译后或未编译表示的数据流图转换为零和一的二进制流使得数据流图为可以容易地被存储在持久性存储器或存储缓冲器中的格式。在微图的快速加载是可取的实施中,典型地将数据流图序列化为具有数据结构的编译后的表示并且将数据流图存储在数据存储系统107中,使得可以容易地获取序列化的编译后的数据流图并且在运行时动态去序列化和加载数据结构。编译是这样的过程,通过该过程准备由计算机执行包括被表示为数据流图的程序的计算机程序。编译可以导致机器码、或在计算机上准备好被执行的指令或诸如java字节码的由在计算机上执行的虚拟机执行的中间代码的生成。在数据流图的情况下,编译包括以在计算机上准备好被执行的形式代表数据流图的组件和链接的数据结构的生成。
在专用组件130加载微图160并且将微图160整合到数据流图155中的同时,沿专用组件130的进入链接125流过数据流图155的数据被临时存储在缓冲器中。类似地,在从数据流图155分离和卸载微图时,允许数据流在缓冲器中累积。在一些布置中,分离后的微图可以保持加载在存储器中以便稍后访问(例如,使用高速缓存机制)。
缓冲可以被配置为使用流控制机制,使用用于向组件提供作业元素的输入流的链接的输入队列来实施该流控制机制。此流控制机制允许数据在数据流图的组件之间流动而不必被写到诸如磁盘驱动的通常大而慢的非易失性本地存储器中。输入队列可以被保持为足够小以便在通常比非易失性存储器小和快的易失性存储器中保持作业元素。甚至对非常大的数据集存在存储空间和时间的此潜在节约。组件可以使用输出缓冲器而不是输入队列,或除了输入队列之外组件可以使用输出缓冲器。当两个组件通过流连接时,只要下游组件保持消耗作业元素,上游组件就发送作业元素到下游组件。如果下游组件落后,上游组件将填充下游组件的输入队列并且停止工作直到输入队列再次清除。
在一些布置中,作为批数据流图的部分,由调度进程在调度的基础上执行微图160,或根据命令行执行微图160,并且微图160不一定被加载到包含数据流图的专用组件中。可选地,通过发送消息到向包含专用组件的运行的数据流图来提供消息的连续流的队列,调度器可以使用专用组件以便启动用于批处理的微图,该专用组件将响应于来自队列的消息加载适当的微图。
2专用组件
参考图3a,在一个实施例中,专用组件200被配置为接受多个输入205、210、215和传递多个输出220、225、230和235。输入包括数据输入205、210和控制输入215。输出包括数据输出220、225、230和状态输出235。控制输入215接受要运行的微图240的标识符(例如在接收的控制元素中),并且可选地接受用于运行微图240的一组参数。一般地,专用组件200可以通过各个数据输入端口(例如数据输入205、210)接受零个或多个输入作业元素的流。状态输出235根据来自微图240的执行产生包括退出状态的状态记录和追踪信息。此外,专用组件通过各个数据输出端口(例如数据输出220、225和230)产生零个或多个输出作业元素的流。在一个实施例中,在正常执行期间专用组件200产生一个状态记录并且接受一个控制记录。
控制输入215可以接收一系列的多个控制元素,每个控制元素识别将加载的对应的微图。每个控制输入元素与通过数据输入接收的作业元素的流中的作业元素的不同的子集相关联,该作业元素的不同的子集代表通过识别的微图处理的作业单元。在一些情况下,基于分析作业单元中的一个或多个作业元素生成识别微图的控制元素以便选择适当的微图以便处理该作业单元。在一些情况下,独立接收并且使用各种技术中的任何一种相互匹配识别微图的控制元素和代表将通过识别的微图处理的作业单元的作业元素。例如,首先接收识别微图的控制元素,并且通过将出现在作业单元的至少一个作业元素中的键值与对应的控制元素匹配来确定代表将通过识别的微图处理的作业单元的作业元素(例如作业单元中的正好第一作业元素,或作业单元中的每个作业元素)。可选地,被称为“分隔符作业元素”的作业元素可以用作分隔属于相同作业单元的作业元素的不同序列的分隔符。可选地,专用组件200被配置为接收预定数量的作业元素,其中所述预定数量的作业元素属于与各个控制元素相关联的连续作业单元。
可以从已被设计为与专用组件200兼容的微图集中选择微图240。例如,微图240的输入端口和输出端口的数量可以与专用组件200的输入端口和输出端口的数量匹配。在此示例中,微图240有两个输入端口和三个输出端口,该两个输入端口和三个输出端口可以位于被配置为接收输入流的微图240的两个不同的组件上和被配置为提供输出流的微图240的三个不同的组件上。可选地,微图240的多个输入或输出端口可以位于相同的组件上。
在一些实施例中,专用组件200对于预定的条件监视微图240并且可以响应于那些条件。例如,专用组件200可以使用单独的进程来监视执行微图240的组件的进程以便确定在微图240的执行期间的延迟是否超过最大阈值或达到超时条件。例如,作为响应,专用组件200可以通过加载微图240的第二实例响应于该条件。类似地,监视错误条件。响应于检测错误条件,专用组件200可以记录错误,基于错误条件重定向作业单元,并且如果需要,可以重新开始微图240并且经由状态输出235报告错误。微图240的重新开始不需要中断包括其中包含专用组件200的数据流图的任何其他组件。
在一些实施例中,专用组件200分析输入端口上的数据流以便确定执行哪个微图240。在其他实施例中,作为数据流的部分将要运行的微图240的名称或其他识别信息提供到专用组件200。在又一实施例中,通过专用组件200的控制输入215提供识别微图240的信息。
如以下更详细地描述的,专用组件200从数据存储系统107加载微图240,将微图240嵌入到包含专用组件200的数据流图中,并且允许微图240处理数据流。
当操作完成时,专用组件200移除微图240。在一些实施例中,专用组件200可以将微图240存储微图高速缓存中、存储在从其比从数据存储系统107相对更容易访问的位置中,用于稍后访问。在一些实施例中,在加载、整合和移除微图240的同时专用组件200可以缓冲进来的数据。
3微图结构
参考图3b,微图240的示例包括数据处理组件305、310、315和320,该数据处理组件对到达链接到上流组件的一个或多个输入端口的数据流中的输入作业元素执行操作,并且产生离开链接到下游组件的一个或多个输出端口的数据流中的输出作业元素。微图240还包括被配置为便利将微图240嵌入到专用组件200的进程的、被称为“接口组件”的组件300a、300b和302a、302b、302c。接口组件还使得微图能够作为不需要嵌入到专用组件以便运行的独立的数据流图被运行。
接口组件被用于将微图连接到包含专用组件的端口。将微图嵌入到专用组件涉及确定如何将每个接口组件与专用组件的正确端口配对。输入接口组件(300a、300b)有输出端口并且输出接口组件(302a、302b、302c)有输入端口。当输入接口组件与专用组件的输入端口配对时,输入端口和输入接口组件的输出端口链接到的端口之间生成数据流链接。类似地,当输出接口组件与专用组件的输出端口配对时,在输出接口组件的输入端口链接到的端口和输出端口之间生成数据流图。
接口组件和它们的各个专用组件输入和输出端口的正确配对可以确定如下。可以可选地以标识符标识接口组件和专用组件的端口。如果在分配到专用组件的输入/输出端口的标识符和分配到输入/输出接口组件的标识符之间存在匹配,则将配对该端口和该接口组件。标识符之间的匹配可以是精确的或不精确的(例如在标识符的一些前缀或后缀之间寻找匹配)。在一配对过程中,在确定精确匹配之后,具有数字后缀的接口组件与具有匹配的数字后缀的端口相匹配(例如将专用组件的“out1”端口与“微图输出-1”的接口组件配对)。
当在专用组件之外执行微图时(例如响应于来自用于测试的开发环境108的命令),接口组件提供数据集组件的功能,提供连接到接口组件的输出或输入端口的链接上的数据流中的作业元素的源或接收器。基于是否在专用组件中嵌入微图确定适当的功能。每个接口组件包括当在专用组件中嵌入微图时用于在微图和专用组件之间发送作业元素的指令,和当在专用组件中没有嵌入微图时用于在微图和存储位置之间发送作业元素的指令。存储位置可以是被读取以便提供输入作业元素或被写入以便接收输出作业元素的文件。
在一些实施例中,通过将某些限制置于可以被包括在微图中的数据处理组件(在此示例中,组件305、310、315和320)的功能上配置微图240。例如,在一些实施例中,可能需要微图240的数据处理组件305、310、315和320能够在单个进程中运行(例如,如在通过引用合并于此的美国公开第2007/0271381号中更详细地描述的,通过被封入单个进程中)。在一些实施例中,微图不支持从订阅源(例如队列)接收数据的订阅者组件。在一些实施例中,可能需要微图被配置为批数据流图。在一些实施例中,由微图240执行的任何事务性(transactional)操作必须适合单个事务。在其他实施例中,通过控制输入215控制微图240的事务性方面(例如检查点、事务性内容和多阶段提交)。
在数据流图处理中,数据的连续流可以影响传统的事务性语义。检查点操作涉及在数据流中的点上存储足够的状态信息以便使数据流图能够从数据流中的该点重新开始。如果太频繁地采取检查点,则性能降低。如果太不频繁地采取检查点,则在事务性失败的情况下的恢复过程变得更复杂并且资源密集。事务性上下文可以被用于通知微图它的操作是更大的事务的一部分。此事务可以是包含与单个数据源相反的多个组件的更大的事务,或可以包括协调跨越多个数据源的事务(例如,在两阶段提交操作中)所需要的信息。
4微图管理
参考图4,在一个实施例中,专用组件405一次可以有一个以上被加载到专用组件可访问的高速缓存中(例如存储在本地存储器中)的微图。在此示例中,将一个微图430连接到包括专用组件405的数据流图中。通过到微图430的输入445的链接连接专用组件405的输入440并且通过到专用组件405的输出455连接专用微图430的输出450。例如,微图430的输入440和输出450代表输入和输出接口组件或用于嵌入微图到专用组件中的任何其他机制。
存储其他微图410、415、420和425的高速缓存可以位于存储连接的微图430的相同存储器中。在一些实施例中,微图410、415、420、425和430能够在运行专用组件405的相同进程中作为线程或作为该进程的子进程执行。可选地,可以在该进程的相同主线程中执行微图410、415、420、425和430。在一些实施例中,专用组件405运行微图410、415、420、425和430的多个副本。在一些实施例中,除非存储在高速缓存中的选择的微图的副本被标记为“污损”(指示在原始微图中有改变),在访问存储在数据存储系统107的原始微图之前专用组件405使用该副本。当选择的微图的副本不在高速缓存中时,专用组件405从数据存储系统107加载微图。在一些实施例中,选择的微图被指示(例如,通过高速缓存中的条目)为处于“离线”状态中,指示选择的微图目前无法使用(例如,微图可能在由开发者修改的进程中)。作为响应,专用组件可以指示在加载选择的微图中的错误,或可以加载代替微图(例如,有相似能力的不同微图)。
参考图5a,在一个场景中,单个专用组件505有同时整合到数据流中的多个微图510、515和520。使用将来自输入数据流的作业元素拆分到多个数据流的拆分组件557,专用组件505的输入端口525被分别连接到微图520、515和510的输入530、545和555。使用聚集来自多个数据流的作业元素并且将它们合并到单个输出数据流的组件562(被称为“聚集组件”),微图的输出535、550和560被连接到专用组件505的输出540端口。在此配置中,专用组件505能够将进来的数据路由到微图510、515和520。例如,当组件是相同微图的分离的副本时,当执行拆分时专用组件505可以使用加载平衡算法(例如循环、最少使用等)。
参考图5b,在另一场景中,数据流图565包括多个专用组件,使微图的灵活组合能够被布置在高度可定制的容器数据流图中。在此示例中,首先由数据处理组件572处理来自数据集组件570的作业元素(其可以代表输入数据批或输入数据的连续串流),接着经由链接574将该作业元素发送到第一专用组件576。响应于检测作业元素的特定类型,组件576加载被配置用于处理具有所检测的类型的作业元素的微图578。接着将来自第一专用组件576的处理后的输出作业元素发送到加载微图582的第二专用组件580。在此布置中,被选择用于加载到第二专用组件580中的微图582可以取决于第一选择的微图578的结果。将作为结果的输出作业元素发送到数据集组件584。使用数据流图中的关键位置中的专用组件可以动态地加载不同微图的大量组合。在此简单示例中,如果存在可以被加载到第一专用组件576中的10个不同的可能的微图和可以被加载到第二专用组件580中的10个不同的可能的微图,则已相较于将数据流拆分到100个不同的运行数据流图需要的可能少得多的资源,并且以相较于为每个作业单元开始100个不同的数据流图中的一个可能更快的延迟,存在在处理数据流的同时可以按需被动态构造的多达100个不同的数据流图。
5前置处理和后置处理
专用组件可以包括除了在加载的微图中的组件之外的其他组件。参考图6,在一个实施例中,专用组件605包括在执行微图之前的前置处理,和在执行微图之后的后置处理(在图中表示为围绕微图615的前置处理组件610和后置处理组件620)。例如,前置处理和后置处理活动可以涉及到事务管理。在一些实施例中,每个微图615代表单独的事务,在该情况下前置处理可以开始事务并且后置处理可以结束事务。在其他实施例中,微图615可以是使用两阶段提交协议的更长事务的部分。例如,可以使用多个不同的微图或相同微图的多个执行处理这样的事务。
前置处理组件610可以从数据存储(未示出)加载微图615并且可能将加载的微图存储在数据高速缓存中用于稍后访问或访问来自存储器中的高速缓存的微图的加载的版本并且将该微图的加载的版本整合到专用组件605。后置处理组件620可以以专用组件605的数据流从微图615的整合中移除加载的微图615。例如,可以执行多个其他前置处理和后置处理功能包括,通过准备在数据流中的记录的前置处理用于由微图615的处理(例如,重新格式化记录),和通过准备从微图615接收的记录的后置处理用于由连接到专用组件605的输出的组件的处理(例如,通过重新格式化记录)。
6数据库连接管理
参考图7,在一些场景中,需要不同的组件能够访问不同类型的数据库。例如,需要组件702访问由一个供应商提供的数据库706,然而需要另一组件704访问由另一供应商提供的数据库708。一般地,组件702将通过访问整合到组件的库710(例如,由数据库706的供应商提供的库)访问数据库706。类似地,组件704将通过访问整合到组件的另一库712(例如,由数据库708的供应商提供的库)访问数据库708。可以将库编译到特定的组件,或可以将库动态链接到特定的组件。
参考图8,专用组件802可以包括多个不同的微图804、806和808。在此示例中,将微图808嵌入在专用组件802中,并且将微图804和806加载到可访问的高速缓存中以便必要时动态嵌入微图804和806。一些微图可以访问一个数据库706并且其他微图可以访问另一数据库708。传统地,访问两个数据库可以需要库710支持第一数据库706并且另一库712支持将与专用组件802整合的其他数据库708。整合多个不同的数据库库可以导致与专用组件802相关联的二进制文件的增加的大小,以及如果由供应商提供的一个库710与由不同的供应商提供的另一库712不兼容可以导致不可预知的行为。例如,不兼容可以包括冲突的符号名或不同的编译模型。
避免不兼容和/或减少二进制文件的大小的一种方法是从专用组件中移除库,并且相反地,使这些库通过来自执行专用组件的进程的单独的计算机进程被访问。参考图9a,从专用组件902中移除数据库库710和712(例如,不是编译后的或动态链接到组件902)。微图组件904、906和908通过经由客户端/服务器接口访问库710、712来访问数据库706、708。为了访问库710、712,专用组件902使用整合的客户端存根910,该客户端存根910使用进程间通信与在外部进程中运行的配对的服务器存根912通信。例如,外部进程和专用组件902可以通过访问共享存储器段交换数据。类似地,为了访问运行服务器存根920的外部进程,专用组件902使用另一整合的客户端存根918,该客户端存根918使用进程间通信与运行外部进程的服务器存根920通信。
服务器存根912与数据库库710整合以便提供到数据库706的访问。类似地,服务器存根920与数据库库712整合以便提供到数据库708的访问。一般地,客户端存根910、918有比数据库库710、712更小的存储器占用(memoryfootprint),因此允许专用组件使用更少的存储器资源。此外,因为数据库库已被移出专用组件902,没有数据库库710、712之间的不兼容的风险。
参考图9b,在一些实施例中,客户端存根910、918和服务器存根912、920被配置为密切反应数据库库710、712的各个应用编程接口(api)。为了将微图904、906和908从不同的库api中隔离,将抽象层930整合到专用组件902中。抽象层930在微图中提供多个不同的组件,该微图可能需要以单个api访问不同的数据库,以该单个api执行独立于用于那些数据库的数据库库之间的差异的标准数据库操作。在一些实施例中,抽象层930将请求从微图的组件转变为到客户端存根910、918的库专用的api的具体调用。在一些实施例中,抽象层930作为通用调用从微图组件传递请求,并且每个客户端存根被配置为执行从通用调用到到该各个服务器存根的api的库专用调用的转变。
7编译和参数
参考图10,在一个实施例中,数据流图编译和执行系统1000包括数据流图编译器1015、参数分析器1030、数据流图加载器1035和数据流图执行引擎1040。编译器1015基于来自参数组数据存储1005的参数组中的参数处理来自未编译的数据流图数据存储1010的包括微图的未编译的数据流图。与给定的参数相关联的值可以确定数据流图的各种特征中的任意特征。编译器1015使用来自参数组的值编译数据流图以便生成编译后的数据流图。编译后的数据流图被存储在编译后的数据流图数据存储1020中。例如,数据存储1010和1020可以被托管在数据存储系统107中。例如,可以作为预执行模块105的部分实施编译器1015、参数分析器1030和加载器1035。可以作为执行模块106的部分实施执行引擎1040。
参数组数据存储1005包含多个参数组并且每个参数组可以与数据流图相关联。参数组包括一组参数元素。这些元素包含参数的名称和表达式,当计算该表达式(例如,通过执行计算以及在有些情况下,通过找到其他引用的参数的值)时其被求解为绑定到参数的值。每个未编译的数据流图可以与一个或多个参数组相关联。一些参数可以影响编译进程。例如,一些参数可以影响是否将某个条件组件包括在数据流图的编译后的版本中。一些参数可以影响编译后的数据流图的加载和启动。例如,参数的值可以是到存储在计算机上的文件的路径,或将与包含输入数据或作为输出数据的目标的数据集组件相关联的存储位置(例如代表数据库中的表的存储位置)的名称。参数的值可以确定给定的组件需要运行多少并行的方式。参数的值可以确定组件之间的链接的数据流是否越过不同处理器和/或运行链接的组件的计算机之间的边界,如果是这样则使得分配tcp/ip流而不是共享存储器流。在一些场景中,参数的值可以取决于于其他参数。例如,货币转换查找文件的名称可以取决于于指定日期的参数。
一般地,根据基于上下文的用于参数的范围的规则将参数绑定到值。给定的参数在第一上下文中可以有一个值并且在另一上下文中可以有不同的值。可以在编译期间(例如,如果参数可以影响编译过程,则由编译器1015)、在运行时(例如,当加载器1035将编译后的数据流图数据结构加载到用于执行引擎1040的存储器中时)、在执行数据流图的同时(例如,延迟提供文件名的参数被求解直到正好在文件被读取或写入之前)或在一些不同时间的组合的情况下将参数绑定到值。例如,可以由用户经由用户接口(例如,响应于提示)定义参数的值,根据包括在数据源中的文件定义或以相同上下文或不同上下文中的另一参数的方式定义。例如,可以通过指定参数拥有到另一参数的“相同”关系从不同的上下文中引入参数。
可以在诸如编译期间的接收任何输入数据之前绑定拥有数据流图的参数(例如由编译器1015)。在数据流图的编译之前或期间绑定的这样的参数被称为“静态参数”。还可以响应于诸如正好在运行时之前(例如,由加载器1035响应于接收新的数据批或在数据的流中的开始的作业单元)或运行时期间(例如,由执行引擎1040响应于加载新的微图以便处理数据的流中的新的作业单元)接收新的输入数据,绑定用于数据流图的参数。在数据流图的编译之后并且更接近运行时被绑定的这样的参数被称为“动态参数”。在一些情况下,对每个新的批处理数据或数据流中的作业单元不需要重新计算动态参数。在编译图时通常计算静态参数并且静态参数可以影响编译后的数据流图。然而,例如如果编译到运行时为止没有发生,则还可以在运行时计算静态参数。因为在运行时计算动态参数并且可以促成开始数据流图的整体延迟,在一些实施例中,可以通过限制动态参数的能力优化动态参数计算。例如,动态参数可以被限制为具体的数据类型(例如字符串),在某个表达式中它们可以不被引用,并且可以有更多的受限制的绑定(例如,通过“相同”绑定不直接引用或间接引用)。然而,在其他实施例中,动态参数可以不受限于它们的功能并且就像其他参数一样被利用。
有各种方式使得编译器1015能够在编译过程期间区分静态和动态参数。一个技术使用用于参数组中的动态参数的标记或特殊语法,用信号通知编译器动态参数应该维持未绑定。另一技术分隔参数组的静态和动态参数,并且仅将静态参数的子集提供到编译器1015。动态参数的子集接着在运行时被提供到加载器1035。即使编译器1015没有将动态参数绑定到求解后的值,编译器1015仍然可以被配置为在编译期间检查动态参数(例如,用于非法语法或其他错误)。给定的表达式可以包括静态和动态参数引用两者。例如,可以通过编译器1015求解静态目录名参数,但是可以将动态文件名参数维持为未求解的,并且因为未求解的动态参数被识别为动态参数,编译器1015可以在编译过程期间保存未求解的动态参数引用。
在一些场景中,参数的存在或值可以影响数据流图中的组件的拓扑结构和/或连通性。参数可以指示由一个或多个组件执行的操作在图的特定执行期间是不被执行的。当在两个不同的数据源上使用相同的数据流图时,这可以是特别相关的。例如,一个数据源可以采用第一格式(例如utf-8)并且另一源可以包含采用对至少一些符号使用不同编码的第二格式的文本。处理两个数据源的数据流图可能需要将采用第二格式的文本变换为utf-8格式。然而,当访问utf-8数据源时,不需要变换。可以使用参数来通知数据流图数据已经是utf-8格式并且可以绕过变换组件。在一些布置中,基于参数值的条件组件的排除可以导致移除条件组件并且将条件组件替换为编译后的数据流图中的数据流。可以在通过引用合并于此的美国专利第7,164,422号中找到条件组件的额外描述。
再次参考图10,编译器1015从未编译的数据流图数据存储1010中获得未编译的数据流图。编译器1015从参数组数据存储1005获得将用于编译数据流图的参数组。在一些情况下,多个不同的参数组可以被用于给定的数据流图,并且对每个参数组,图编译器1015能够编译未编译的数据流图的对应版本。数据流图的每个编译后的版本可以包括或排除基于参数组中的参数的值的一些组件或其它可执行的语句。例如,当序列化编译后的数据流图时,编译后的数据流图与来自用于生成编译后的数据流图的参数组的绑定的参数值相关联。编译后的数据流图使用多个不同的机制中的任意机制(例如,查找表、数据库中的外键到主键的关系等)与来自相关联的参数组的参数值相关联。例如,使用任何文件系统或能够进行读取和写入操作的数据库,可以实施编译后的数据流图数据存储1020。
在数据流图期间(在运行时),数据从输入数据源1025进入系统。输入数据源1025可以包括各种单独的数据源,每个数据源可以有唯一的存储格式和接口(例如,数据库表、电子表格文件、纯文本文件或由主机使用的本地格式)。单独的数据源对系统1000可以是本地的(例如,被托管在相同的计算机系统上(例如文件)),或可以对系统1000是远程的(例如,被托管在经由局域或广域数据网访问的远程计算机上)。
参数分析器1030和加载器1035使数据流图能够从存储的编译后的数据流图快速加载,避免可能地冗长的编译过程,而在运行时响应于接收的输入数据通过在数据流图的不同的编译后的版本中选择仍然允许灵活性。响应于从输入数据源1025接收输入数据,参数分析器1030分析输入数据以及直到运行时为止可以不知道的可能的其他值,以便确定要与目标数据流图一起使用的一个或多个参数的值(可能包括静态参数和动态参数两者)。目标数据流图是使用不同的各个参数组存储在编译后的数据流图数据存储1020中的已编译为不同的版本的未编译的数据流图。加载器1035将由参数分析器1030提供的静态参数的任意值与已被用于生成目标数据流图的任何编译后的版本的那些相同参数的任意值相比较以便找到匹配。如果加载器在静态参数中找到匹配,则加载器1035可以求解并绑定动态参数,并且加载由执行引擎1040开始的作为结果的数据流图。如果加载器1035在静态参数中没有找到匹配,则加载器1035可以将输入数据路由到错误处理器(未示出),或加载器1035可以有可用的目标数据流图版本,其中所述可用的目标数据流图版本能够将不同的可能的参数值处理为非优化默认值。可选地,加载器可以发动编译器1015以便采用适当的静态参数值编译目标数据流图的新版本。在这些情况下,可以根据需要进行运行中编译。第一次运行目标数据流图时,在运行时进行编译并且存储有绑定的静态参数的作为结果的编译后的数据流图。接着下一次运行目标数据流图时,如果没有找到有理想的静态参数值的编译后的版本,那么仅重编译。
例如,对于包括参数a、b、c(a和b是静态的,并且c是动态的)的参数组,考虑使用a=true和b=false的已被编译的目标数据流图的第一编译后的版本,以及使用a=true和b=true的已被编译的目标数据流图的第二编译后的版本。如果参数分析器1030确定将使用采用a=true、b=true和c=true的目标数据流图处理接收的作业单元,则可以加载第二编译后的版本并且由加载器1035绑定动态参数c。如果参数分析器1030确定将使用采用a=false、b=true和c=true的目标数据流图处理接收的作业单元,则由采用a=false、b=true的编译器1015编译目标数据流图的新版本并且由加载器1035绑定动态参数c。还可以将新编译后的版本存储在编译后的数据流图数据存储1020中用于稍后访问。
加载器1035将选择的编译后的数据流图加载到将执行的图执行引擎1040可访问的存储器中以便处理来自输入数据源1025的输入数据的流。在一些实施例中,由运行的数据流图中的专用组件执行加载器1035的功能并且加载的数据流图是嵌入到专用组件中的微图。加载器1035可以访问在存储器中保持高速缓存的选择的编译后的数据流图的预先加载的版本(在确定适当的静态参数值被使用之后)而不一定需要访问编译后的数据流图数据存储1020。接着由执行引擎1040执行加载的数据流图。一旦由目标数据流图处理输入数据,可以要么从系统中卸载数据流图,或可以要么高速缓存数据流图用于稍后访问。
一般地,数据流图的编译是通过其将图转变为可执行格式的过程。可执行的格式可以采用平台特定形式(例如,机器码)或采用中间形式(例如,字节码)。在一些实施例中,编译器1015求解静态参数,遍历数据流图并且将其减少到准备执行的一组数据结构。从被表示为顶点和链接的数据流图到机器码的转变可以包括几个步骤。这些步骤中的一个可以包括动态代码生成,其中将数据流图转变为第三代编程语言(例如,c、c#、c++、java等)。从第三代语言,可以使用标准编译器生成机器可读代码或字节码。
在一些实施例中,直到编译为止没有确定参数是否被视为静态参数或动态参数。被计算的参数和硬编码到编译后的数据流图的参数的值被视为静态参数。同时,通常没有在编译时计算动态参数,而是在图加载或执行期间计算。如上所述,为了准备用于在运行时快速加载和执行不同的数据流图的编译后的版本的目的使用由参数组确定的值。在来自参数组的参数的值明确定义对编译后的图有效的唯一可能值的情况下,该值被编码到编译后的数据流图,并且参数被视为静态参数。在其他情况下,其中来自参数组的参数的值提供可能值的范围,在编译时参数可以不作为静态参数被计算,而是在加载时和运行时可以作为动态参数被计算。
例如,通过消除不需要的可执行的语句,在编译过程期间编译器还可以优化数据流图。例如,数据流图可以包含条件组件。条件组件可以包括一系列可执行语句,基于一个或对个参数的值该语句要么被包含在编译后的数据流图中要么被排除在编译后的数据流图中。条件组件可以用于各种目的,例如图优化或图专门化。对于图优化,如果将不会使用来自数据集的值,应用可以省略处理或创建数据集。对于图专门化,基于期望的详细的程度应用可以调节几个不同的输出数据集的生产,或允许图的几个可选的部分中的一个的执行。
可以使用软件实施上述方式用于在计算机上执行。例如,软件在执行在一个或多个编程的或可编程的计算机系统(其是各种架构的,例如分布式、客户端\服务器或网格)上的一个或多个计算机程序中的形成过程,每个计算机系统包括至少一个处理器、至少一个数据存储系统(包括易失性和非易失性、非临时性存储器和/或存储元素)、至少一个输入设备或端口和至少一个输出设备或端口。例如,软件可以形成提供与计算图的设计和配置相关的其他服务的更大的程序的一个或多个模块。图的节点和元素可以被实施为存储在计算机可读介质中的数据结构或符合存储在数据储存库中的数据模型的其他有组织的数据。
在诸如cd-rom的存储介质上提供软件,该存储介质是由通用或专用可编程计算机可读的或经由到执行该软件的计算机的网络的通信介质被递送。在专用计算机上或使用诸如协处理器的专用硬件执行所有的功能。以分布的方式实施软件,其中由软件指定的计算的不同部分由不同的计算机执行。优选地将每个这样的计算机程序存储在或下载到由通用或专用可编程计算机读取的存储介质或设备(例如,固态存储器或介质,或磁或光介质)上,当由计算机系统读取存储介质或设备以便执行在此描述的过程时用于配置和操作计算机。发明系统还可以被认为是被实施为以计算机程序配置的计算机可读存储介质,其中存储介质被这样配置使得计算机系统以具体的和预定的方式操作以便执行在此描述的功能。
已经描述了本发明的一些实施例。然而,将理解进行各种修改而不背离本发明的精神和范围。例如,上述的一些步骤可以是顺序独立的,从而可以以不同于该描述的顺序执行。
将理解,前面的描述意于说明而不是限制本发明的范围,由所附权利要求的范围定义本发明。其他实施例在以下权利要求的范围中。