新四季網

用於動態加載基於圖的計算的系統和方法與流程

2023-09-21 12:44:55 2


(本申請是申請日為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的存儲介質上提供軟體,該存儲介質是由通用或專用可編程計算機可讀的或經由到執行該軟體的計算機的網絡的通信介質被遞送。在專用計算機上或使用諸如協處理器的專用硬體執行所有的功能。以分布的方式實施軟體,其中由軟體指定的計算的不同部分由不同的計算機執行。優選地將每個這樣的電腦程式存儲在或下載到由通用或專用可編程計算機讀取的存儲介質或設備(例如,固態存儲器或介質,或磁或光介質)上,當由計算機系統讀取存儲介質或設備以便執行在此描述的過程時用於配置和操作計算機。發明系統還可以被認為是被實施為以電腦程式配置的計算機可讀存儲介質,其中存儲介質被這樣配置使得計算機系統以具體的和預定的方式操作以便執行在此描述的功能。

已經描述了本發明的一些實施例。然而,將理解進行各種修改而不背離本發明的精神和範圍。例如,上述的一些步驟可以是順序獨立的,從而可以以不同於該描述的順序執行。

將理解,前面的描述意於說明而不是限制本發明的範圍,由所附權利要求的範圍定義本發明。其他實施例在以下權利要求的範圍中。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀