IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アビニシオ テクノロジー エルエルシーの特許一覧

特表2024-537020可変レベル並列性を用いたデータ処理動作を行うためのシステム及び方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-10
(54)【発明の名称】可変レベル並列性を用いたデータ処理動作を行うためのシステム及び方法
(51)【国際特許分類】
   G06F 9/50 20060101AFI20241003BHJP
   G06F 9/48 20060101ALI20241003BHJP
【FI】
G06F9/50 150Z
G06F9/48 370
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024518290
(86)(22)【出願日】2022-09-30
(85)【翻訳文提出日】2024-05-21
(86)【国際出願番号】 US2022045358
(87)【国際公開番号】W WO2023056003
(87)【国際公開日】2023-04-06
(31)【優先権主張番号】63/250,763
(32)【優先日】2021-09-30
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】ディッキー,ガース,アレン
(57)【要約】
データフローグラフのノードに対する処理レイアウトを決定する技術。この技術は、データフローグラフを指定する情報を取得することであって、データフローグラフが、複数のノード、及び複数のノードを接続する複数のエッジを含み、複数のエッジが、複数のノード中のノード間のデータのフローを表し、複数のノードが、1つ又は複数のノードの第1のセットと、ノードの第1のセットから独立した、1つ又は複数のノードの第2のセットと、を含む、取得することと、ノードの第1のセットに関する1つ又は複数の処理レイアウトの第1のセットを取得することと、処理レイアウトの第1のセットと、1つ又は複数のレイアウト決定ルールであって、異なる度合いの並列性を有する処理レイアウトの中から選択するための少なくとも1つのルールを含む、1つ又は複数のレイアウト決定ルールと、ノードの第1のセット及び/又はノードの第3のセット内の少なくとも1つのノードによって生成されたデータが、少なくとも1つのノードから下流のデータフローグラフ内の何れのノードによっても使用されないことを示す情報と、に基づいて、ノードの第2のセット内の各ノードの処理レイアウトを決定することと、を含む。
【特許請求の範囲】
【請求項1】
少なくとも1つのコンピュータハードウェアプロセッサを使用して、
データフローグラフを指定する情報を取得することであって、前記データフローグラフが、複数のノード、及び前記複数のノードを接続する複数のエッジを含み、前記複数のエッジが、前記複数のノード間のデータのフローを表し、前記複数のノードが、
1つ又は複数のノードの第1のセットであって、前記ノードの第1のセットにおける各ノードが、1つ又は複数の入力データセットのセットにおけるそれぞれの入力データセットを表す、1つ又は複数のノードの第1のセットと、
1つ又は複数のノードの第2のセットであって、前記ノードの第2のセットにおける各ノードが、1つ又は複数の出力データセットのセットにおけるそれぞれの出力データセットを表す、1つ又は複数のノードの第2のセットと、
1つ又は複数のノードの第3のセットであって、前記ノードの第3のセットにおける各ノードが、少なくとも1つの、それぞれのデータ処理動作を表す、1つ又は複数のノードの第3のセットと、
を含む、取得することと、
前記入力データセットのセットに関する1つ又は複数の処理レイアウトの第1のセット、及び前記出力データセットのセットに関する1つ又は複数の処理レイアウトの第2のセットを取得することであって、前記処理レイアウトの第1のセットが異なる度合いの並列性を有する処理レイアウトを含み、及び/又は前記処理レイアウトの第2のセットが異なる度合いの並列性を有する、取得することと、
(a)前記処理レイアウトの第1のセットと、(b)前記処理レイアウトの第2のセットと、(c)異なる度合いの並列性を有する処理レイアウトの中から選択するための少なくとも1つのルールを含む1つ又は複数のレイアウト決定ルールと、(d)前記ノードの第1のセット及び/又は前記ノードの第3のセット内の少なくとも1つのノードによって生成されたデータが、前記少なくとも1つのノードから下流の前記データフローグラフ内の何れのノードによっても使用されないことを示す情報とを使用して、前記ノードの第3のセット内のノードの処理レイアウトを決定することと、
を行うことを含む、方法。
【請求項2】
前記ノードの第1のセット及び/又は前記ノードの第3のセット内の前記少なくとも1つのノードを識別することをさらに含む、請求項1に記載の方法。
【請求項3】
前記処理レイアウトを決定することが、2つのレイアウト伝播パスを使用して、
前記ノードの第1のセット内のノードから開始される順方向パスでは、前記データフローグラフの構造に従って、前記処理レイアウトの第1のセット、前記1つ又は複数のレイアウト決定ルール、及び前記少なくとも1つのノードによって生成された前記データが、前記少なくとも1つのノードから下流の前記データフローグラフ内の何れのノードによっても使用されないことを示す前記情報を使用して、前記ノードの第3のセット内の1つ又は複数のノードの1つ又は複数の初期処理レイアウトを決定することと、
前記ノードの第2のセット内のノードから開始される逆方向パスでは、前記データフローグラフの前記構造に従って、前記処理レイアウトの第2のセット、前記1つ又は複数の初期処理レイアウト、及び前記1つ又は複数のレイアウト決定ルールを使用することによって、前記ノードの第3のセット内の1つ又は複数のノードの前記処理レイアウトを決定することと、
によって行われる、請求項1又は2に記載の方法。
【請求項4】
前記順方向パス中に前記少なくとも1つのノードを識別することをさらに含む、請求項3に記載の方法。
【請求項5】
前記少なくとも1つのノードに関連付けられた処理レイアウトが、前記順方向パス中に、前記データフローグラフ内の前記少なくとも1つのノードから下流の1つ又は複数のノードに伝播されない、請求項4に記載の方法。
【請求項6】
前記少なくとも1つのノードに関連付けられた処理レイアウトが、前記逆方向パス中に、前記データフローグラフ内の前記少なくとも1つのノードから上流の1つ又は複数のノードに伝播されない、請求項4に記載の方法。
【請求項7】
前記ノードの第1のセット、前記ノードの第2のセット、及び前記ノードの第3のセット内のノードの前記処理レイアウトに基づいて、前記データフローグラフがマイクログラフとして処理されるか否かを決定することをさらに含む、請求項1又は2~6の何れか一項に記載の方法。
【請求項8】
前記データフローグラフがマイクログラフとして実行されるか否かを決定することが、
前記ノードの第1のセット、前記ノードの第2のセット、及び前記ノードの第3のセットの前記処理レイアウトが、同じ度合いの並列性を有する場合に、前記データフローグラフをマイクログラフとして実行することを決定することを含む、請求項7に記載の方法。
【請求項9】
前記データフローグラフがマイクログラフとして実行されるか否かを決定することが、
前記少なくとも1つのノードを除く、前記ノードの第1のセット、前記ノードの第2のセット、及び前記ノードの第3のセットの前記処理レイアウトが、同じ度合いの並列性を有する場合に、前記データフローグラフをマイクログラフとして実行することを決定することを含む、請求項7に記載の方法。
【請求項10】
前記ノードの第3のセットが、第1のノードを含み、前記複数のエッジが、前記第1のノードと、前記データフローグラフにおいて前記第1のノードに先行する第2のノードとの間に第1のエッジを含み、前記ノードの第3のセット内の前記1つ又は複数のノードの前記1つ又は複数の初期処理レイアウトを決定することが、
前記第2のノードに関して決定された第2の初期処理レイアウトに基づいて、前記第1のノードの第1の初期処理レイアウトを決定することを含む、請求項3~9の何れか一項に記載の方法。
【請求項11】
前記複数のエッジが、前記第1のノードと、前記データフローグラフにおいて前記第1のノードに先行する第3のノードとの間に第2のエッジを含み、第3の初期処理レイアウトが、前記第3のノードに関連付けられ、前記第1のノードの前記第1の初期処理レイアウトを決定することが、
前記第2のノードに関して決定された前記第2の初期処理レイアウト又は前記第3のノードに関して決定された第3の初期処理レイアウトの一方を前記第1の初期処理レイアウトとして選択することを含む、請求項10に記載の方法。
【請求項12】
前記第2の初期処理レイアウトが、第1の度合いの並列性を指定し、前記第3の初期処理レイアウトが、前記第1の度合いの並列性とは異なる第2の度合いの並列性を指定し、及び前記選択が、
前記第1の度合いの並列性が、前記第2の度合いの並列性よりも大きい場合に、前記第2の初期処理レイアウトを選択することと、
前記第1の度合いの並列性が、前記第2の度合いの並列性よりも小さい場合に、前記第3の初期処理レイアウトを選択することと、
を含む、請求項11に記載の方法。
【請求項13】
前記第2の初期処理レイアウト及び前記第3の初期処理レイアウトのそれぞれが、同じ又は異なる度合いの並列性を有する並列処理レイアウトを指定し、前記第1のエッジが、第1の数のデータレコードのデータフローを表し、前記第2のエッジが、第2の数のデータレコードのデータフローを表し、前記選択が、
前記第1の数のデータレコードが、前記第2の数のデータレコードよりも多い場合に、前記第2の初期処理レイアウトを選択することと、
前記第1の数のデータレコードが、前記第2の数のデータレコードよりも少ない場合に、前記第3の初期処理レイアウトを選択することと、
を含む、請求項11に記載の方法。
【請求項14】
前記決定中に、第1の処理レイアウトが、ノードの第3のセットにおける第1のノードに関して決定され、前記第1の処理レイアウトが、第1の度合いの並列性を指定し、
前記グラフにおいて前記第1のノードの直前の第2のノードに関する第2の処理レイアウトが、前記第1の度合いの並列性とは異なる第2の度合いの並列性を指定し、
前記方法がさらに、少なくとも1つの再パーティショニング動作を行うように前記データフローグラフの少なくとも1つのノードを構成することを含む、請求項1又は2~13の何れか一項に記載の方法。
【請求項15】
前記決定中に、第1の処理レイアウトが、ノードの第3のセットにおける第1のノードに関して決定され、前記第1の処理レイアウトが、第1の度合いの並列性を指定し、
前記グラフにおいて前記第1のノードの直前の第2のノードに関する第2の処理レイアウトが、前記第1の度合いの並列性とは異なる第2の度合いの並列性を指定し、
前記方法がさらに、前記データフローグラフに対して、前記第1のノードと前記第2のノードとの間に新しいノードを追加することを含み、前記新しいノードが、少なくとも1つの再パーティショニング動作を表す、請求項1又は2~14の何れか一項に記載の方法。
【請求項16】
前記決定が、前記ノードの第3のセットにおける第1のノードに関する第1の処理レイアウトを決定することを含み、前記第1のノードが、第1のデータ処理動作を表し、及び前記第1の処理レイアウトを決定することが、
前記第1のデータ処理動作を行うための並列性の度合いを決定することと、
前記決定された並列性の度合いに従って、前記第1のデータ処理動作を行うための1つ又は複数のコンピューティングデバイスのセットを識別することと、
を含む、請求項1又は2~15の何れか一項に記載の方法。
【請求項17】
前記第1の処理レイアウトを決定することが、
単一のプロセッサが前記第1のデータ処理動作を行うために使用されることを決定することと、
前記第1のデータ処理動作を行うためのコンピューティングデバイスを識別することと、
を含む、請求項16に記載の方法。
【請求項18】
前記処理レイアウトの決定が、異なる度合いの並列性を有する処理レイアウトの中から選択するための前記少なくとも1つのルールを使用して行われる、請求項1又は2~17の何れか一項に記載の方法。
【請求項19】
前記データフローグラフにおける各ノードの前記処理レイアウトを決定した後に、前記データフローグラフにおける各ノードに関して決定された処理レイアウトに従って、前記データフローグラフを実行することをさらに含む、請求項1又は2~18の何れか一項に記載の方法。
【請求項20】
構造化照会言語(SQL)クエリーを受信することと、
前記SQLクエリーからクエリープランを生成することと、
前記生成されたクエリープランから前記データフローグラフを生成することと、
をさらに含む、請求項1又は2~19の何れか一項に記載の方法。
【請求項21】
動作を表すノードの処理レイアウトが、前記動作を行うために使用される並列性の度合いを指定する、請求項1又は2~20の何れか一項に記載の方法。
【請求項22】
前記ノードの第3のセット内のノードの前記処理レイアウトの前記決定が自動的に行われる、請求項1又は2~21の何れか一項に記載の方法。
【請求項23】
前記ノードの第3のセット内のノードの前記処理レイアウトの前記決定が、
前記ノードの第1のセット内のノードから開始して行われる順方向パスにおいて、前記データフローグラフの構造に従って、並びに前記処理レイアウトの第1のセット及び前記1つ又は複数のレイアウト決定ルールを使用して、前記ノードの第3のセットの少なくとも幾つかのノードの各特定のノードの初期処理レイアウトを、各特定のノードごとに、前記データフローグラフ内の前記特定のノードに先行するノードの処理レイアウトが、前記順方向パス中に、前記特定のノードに関する前記初期処理レイアウトとして選択されるように、決定することであって、前記データフローグラフにおいて前記特定のノードに先行する複数のノードが存在する場合に、
前記少なくとも1つのルールによって示されるように、
前記複数の先行するノードのうちの1つのノードの前記並列処理レイアウトが、前記複数の先行するノードのうちの他のノードの前記処理レイアウトが順次である場合に、前記特定のノードの前記初期処理レイアウトとして前記順方向パス中に選択され、又は
前記最大数のレコードを処理するために使用される、前記複数の先行するノードのうちの前記1つのノードの前記処理レイアウトが、前記順方向パス中に、前記特定のノードの前記初期処理レイアウトとして選択される、決定することを含む、請求項1又は2~22の何れか一項に記載の方法。
【請求項24】
前記データフローグラフ内の前記特定のノードに先行する前記複数のノードが、順次処理レイアウトのみを有するか、又は互いに前記同じ又は異なる度合いの並列性を有する複数の並列処理レイアウトのみを有する場合に、前記最大数のレコードを処理するために使用される、前記複数の先行するノードのうちの前記1つのノードの前記処理レイアウトが、前記初期処理レイアウトとして前記順方向パス中に選択される、請求項23に記載の方法。
【請求項25】
前記順方向パス中に前記特定のノードの前記初期処理レイアウトを選択する際に、前記少なくとも1つのノードに関連付けられた処理レイアウトが無視される、請求項23又は24に記載の方法。
【請求項26】
前記ノードの第3のセット内のノードの前記処理レイアウトの前記決定が、
前記ノードの第2のセット内のノードから開始して行われる逆方向パスにおいて、前記データフローグラフの前記構造、前記初期処理レイアウト、及び前記1つ又は複数のレイアウト決定ルールに従って、前記ノードの第3のセットの少なくとも幾つかのノードの各特定のノードの最終処理レイアウトを、各特定のノードごとに、
前記少なくとも1つのルールによって示されるように、
前記特定のノードの前記初期処理レイアウト又は前記特定のノードの後続の前記ノードの前記処理レイアウトの一方に応じた前記並列処理レイアウトが、前記特定のノードの前記初期処理レイアウトの前記処理レイアウト及び前記特定のノードの後続の前記ノードの前記処理レイアウトの他方が順次である場合に、前記逆方向パス中に前記特定のノードの前記最終処理レイアウトとして選択され、又は
前記特定のノードの前記初期処理レイアウト、及び前記特定のノードの後続の前記ノードの前記処理レイアウトのうち、前記最大数のレコードを処理するために使用される前記処理レイアウトが、前記逆方向パス中に前記特定のノードの前記最終処理レイアウトとして選択されるように、決定することをさらに含む、請求項23、24、又は25に記載の方法。
【請求項27】
前記特定のノードの前記初期処理レイアウト及び前記特定のノードの後続の前記ノードの前記処理レイアウトの両方が順次処理レイアウトを有するか、又は両方が複数の並列処理レイアウトを有するが互いに前記同じ又は異なる度合いの並列性を有する場合に、前記特定のノードの前記初期処理レイアウト及び前記特定のノードに後続する前記ノードの前記処理レイアウトのうち、前記最大数のレコードを処理するために使用される前記処理レイアウトが、前記逆方向パス中に前記特定のノードの前記最終処理レイアウトとして選択される、請求項26に記載の方法。
【請求項28】
前記逆方向パス中に前記特定のノードの前記最終処理レイアウトを選択する際に、前記少なくとも1つのノードに関連付けられた処理レイアウトが無視される、請求項26又は27に記載の方法。
【請求項29】
前記順方向パス及び/又は前記逆方向パスを行った後に、異なる度合いの並列性を有する処理レイアウトを有する、前記データフローグラフ内の隣接ノードによって処理されるデータに対して再パーティショニング動作を行うように前記データフローグラフを構成することをさらに含む、請求項26~28の何れか一項に記載の方法。
【請求項30】
動作を表すノードの処理レイアウトが、前記指定された度合いの並列性に従って、前記動作を行うために使用される1つ又は複数のコンピューティングデバイスをさらに指定し、前記処理レイアウトが、前記動作を行うために使用されるコンピューティングデバイスの数も指定し、及び前記動作を行うために使用される1つ又は複数の特定のコンピューティングデバイスを識別する、請求項21~29の何れか一項に記載の方法。
【請求項31】
前記ノードの第3のセットが第1のノードを含み、前記第1のノードが、第1のデータ処理動作を表し、前記順方向パス及び/又は前記逆方向パスを行った後に、
前記データフローグラフ内の各ノードに関して決定された前記処理レイアウトに従って、前記データフローグラフを実行し、前記実行が、
異なる度合いの並列性を有する処理レイアウトを有する前記データフローグラフ内の隣接ノードによって処理されるデータに対して再パーティショニング動作を行うことと、
前記ノードの第3のセットの前記第1のノードに関して決定された前記初期処理レイアウト又は前記最終処理レイアウトに基づいて、1つ又は複数のコンピューティングデバイスのセットを識別することと、前記識別されたコンピューティングデバイスのセットを使用して、前記ノードの第3のセットの前記第1のノードに関して決定された前記初期処理レイアウト又は前記最終処理レイアウトによって指定された前記並列性の度合いに従って、前記第1のデータ処理動作を行うことと、
を含む、請求項30に記載の方法。
【請求項32】
前記少なくとも1つのコンピュータハードウェアプロセッサを使用して、前記データフローグラフに対して、前記隣接ノード間に新しいノードを追加することをさらに含み、前記追加された新しいノードを有する前記データフローグラフに従ってデータレコードが処理される際に、前記隣接ノードによる前記データレコードの前記処理の間に、前記再パーティショニング動作に従って前記データレコードのパーティショニングが行われるように、前記新しいノードが、前記再パーティショニング動作を表す、請求項30又は1~29、31の何れか一項に記載の方法。
【請求項33】
前記少なくとも1つのコンピュータハードウェアプロセッサを使用して、異なる度合いの並列性を有する処理レイアウトを有する、前記データフローグラフ内の前記隣接ノードのうちの1つを、前記再パーティショニング動作を行うように構成することにより、前記隣接ノードのうちの前記構成された1つを有する前記データフローグラフに従ってデータレコードが処理される際に、前記隣接ノードによる前記データレコードの前記処理の間に、前記再パーティショニング動作に従って前記データレコードのパーティショニングが行われることをさらに含む、請求項1又は2~32の何れか一項に記載の方法。
【請求項34】
少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに請求項1~33の何れか一項に記載の方法を行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項35】
少なくとも1つのコンピュータハードウェアプロセッサと、
前記少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに請求項1~33の何れか一項に記載の方法を行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体と、
を含む、データ処理システム。
【請求項36】
少なくとも1つのコンピュータハードウェアプロセッサを使用して、
データフローグラフを指定する情報を取得することであって、前記データフローグラフが、複数のノード、及び前記複数のノードを接続する複数のエッジを含み、前記複数のエッジが、前記複数のノード間のデータのフローを表し、前記複数のノードが、
1つ又は複数のノードの第1のセットであって、前記ノードの第1のセットにおける各ノードが、1つ又は複数の入力データセットのセットにおけるそれぞれの入力データセットを表す、1つ又は複数のノードの第1のセットと、
1つ又は複数のノードの第2のセットであって、前記ノードの第2のセットにおける各ノードが、少なくとも1つの、それぞれのデータ処理動作を表す、1つ又は複数のノードの第2のセットと、
を含む、取得することと、
前記入力データセットのセットに関する1つ又は複数の処理レイアウトの第1のセットを取得することであって、前記処理レイアウトの第1のセットが異なる度合いの並列性を有する処理レイアウトを含む、取得することと、
前記処理レイアウトの第1のセットと、異なる度合いの並列性を有する処理レイアウトの中から選択するための少なくとも1つのルールを含む1つ又は複数のレイアウト決定ルールと、前記ノードの第2のセット内の少なくとも1つのノードによって生成されたデータが、前記少なくとも1つのノードから下流の前記データフローグラフ内の何れのノードによっても使用されないことを示す情報とを使用して、前記ノードの第2のセット内のノードの処理レイアウトを決定することと、
を行うことを含む、方法。
【請求項37】
少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに請求項36に記載の方法を行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項38】
少なくとも1つのコンピュータハードウェアプロセッサと、
前記少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに請求項36に記載の方法を行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体と、
を含む、データ処理システム。
【請求項39】
少なくとも1つのコンピュータハードウェアプロセッサを使用して、
前記結果が、少なくとも1つのそれぞれのデータ処理動作を表すデータフローグラフ内の少なくとも1つのノードから下流の前記データフローグラフ内のノードによって表されるデータ処理動作によって使用されない前記少なくとも1つのノードを識別する情報を取得することと、
前記取得した情報を使用して、前記データフローグラフ内の少なくとも幾つかのノードの処理レイアウトを決定することと、
を行うことを含む、方法。
【請求項40】
少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに請求項39に記載の方法を行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項41】
少なくとも1つのコンピュータハードウェアプロセッサと、
前記少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに請求項39に記載の方法を行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体と、
を含む、データ処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、米国特許法第119条に基づいて、2021年9月30日に出願され、「可変レベル並列性を用いたデータ処理動作を行うためのシステム及び方法(Systems and Methods for Performing Data Processing Operations Using Variable Level Parallelism)」という名称の米国特許出願第63/250,763号明細書(代理人整理番号:A1041.70071US00)に対する優先権の便益を主張するものであり、この出願は、その全体が参照により本明細書に組み込まれる。
【背景技術】
【0002】
データ処理システムは、1つ又は複数のコンピュータプログラムを使用して、データを処理し得る。データ処理システムによって利用されるコンピュータプログラムの1つ又は複数は、データフローグラフとして展開され得る。データフローグラフは、入力データに対して行われるデータ処理動作、及びデータのフローを表すコンポーネント間のリンクを表す、「ノード」又は「節点」と呼ばれるコンポーネントを包含し得る。データフローグラフのノードは、各入力データセットを表す1つ又は複数の入力ノード、各出力データセットを表す1つ又は複数の出力ノード、及びデータに対して行われるデータ処理動作を表す1つ又は複数のノードを包含し得る。データフローグラフによってエンコードされる計算を実行するための技術が、それぞれ本明細書に全体として援用される、「グラフとして表現される計算の実行(Executing Computations Expressed as Graphs)」というタイトルの米国特許第5,966,072号明細書、及び「グラフベース計算のパラメータ管理(Managing Parameters for Graph-Based Computations)」というタイトルの米国特許第7,716,630号明細書に記載されている。
【発明の概要】
【課題を解決するための手段】
【0003】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサを使用して、データフローグラフを指定する情報を取得することであって、データフローグラフが、複数のノード、及び複数のノードを接続する複数のエッジを含み、複数のエッジが、複数のノード間のデータのフローを表し、複数のノードが、1つ又は複数のノードの第1のセットであって、ノードの第1のセットにおける各ノードが、1つ又は複数の入力データセットのセットにおけるそれぞれの入力データセットを表す、1つ又は複数のノードの第1のセットと、1つ又は複数のノードの第2のセットであって、ノードの第2のセットにおける各ノードが、1つ又は複数の出力データセットのセットにおけるそれぞれの出力データセットを表す、1つ又は複数のノードの第2のセットと、1つ又は複数のノードの第3のセットであって、ノードの第3のセットにおける各ノードが、少なくとも1つの、それぞれのデータ処理動作を表す、1つ又は複数のノードの第3のセットと、を含む、取得することと、入力データセットのセットに関する1つ又は複数の処理レイアウトの第1のセット、及び出力データセットのセットに関する1つ又は複数の処理レイアウトの第2のセットを取得することであって、処理レイアウトの第1のセットが異なる度合いの並列性を有する処理レイアウトを含み、及び/又は処理レイアウトの第2のセットが異なる度合いの並列性を有する、取得することと、(a)処理レイアウトの第1のセットと、(b)処理レイアウトの第2のセットと、(c)異なる度合いの並列性を有する処理レイアウトの中から選択するための少なくとも1つのルールを含む1つ又は複数のレイアウト決定ルールと、(d)ノードの第1のセット及び/又はノードの第3のセット(例えば、第1のセットのみ、第3のセットのみ、又は第1及び第3のセットの両方)内の少なくとも1つのノードによって生成されたデータが、少なくとも1つのノードから下流のデータフローグラフ内の何れのノードによっても使用されないことを示す情報とを使用して、ノードの第3のセット内のノードの処理レイアウトを決定することと、を行うことを含む、方法を提供する。
【0004】
幾つかの実施形態では、方法は、ノードの第1のセット及び/又はノードの第3のセット内の少なくとも1つのノードを識別することをさらに含む。
【0005】
幾つかの実施形態では、処理レイアウトを決定することが、2つのレイアウト伝播パスを使用して、ノードの第1のセット内のノードから開始される順方向パスでは、データフローグラフの構造に従って、処理レイアウトの第1のセット、1つ又は複数のレイアウト決定ルール、及び少なくとも1つのノードによって生成されたデータが、少なくとも1つのノードから下流のデータフローグラフ内の何れのノードによっても使用されないことを示す情報を使用して、ノードの第3のセット内の1つ又は複数のノードの1つ又は複数の初期処理レイアウトを決定することと、ノードの第2のセット内のノードから開始される逆方向パスでは、データフローグラフの構造に従って、処理レイアウトの第2のセット、1つ又は複数の初期処理レイアウト、及び1つ又は複数のレイアウト決定ルールを使用することによって、ノードの第3のセット内の1つ又は複数のノードの処理レイアウトを決定することと、によって行われる。
【0006】
幾つかの実施形態では、方法は、順方向パス中に少なくとも1つのノードを識別することをさらに含む。
【0007】
幾つかの実施形態では、少なくとも1つのノードに関連付けられた処理レイアウトは、順方向パス中に、データフローグラフ内の少なくとも1つのノードから下流の1つ又は複数のノードに伝播されない。
【0008】
幾つかの実施形態では、少なくとも1つのノードに関連付けられた処理レイアウトは、逆方向パス中に、データフローグラフ内の少なくとも1つのノードから上流の1つ又は複数のノードに伝播されない。
【0009】
幾つかの実施形態では、方法は、ノードの第1のセット、ノードの第2のセット、及びノードの第3のセット内のノードの処理レイアウトに基づいて、データフローグラフがマイクログラフとして処理されるか否かを決定することをさらに含む。
【0010】
幾つかの実施形態では、データフローグラフがマイクログラフとして実行されるか否かを決定することは、ノードの第1のセット、ノードの第2のセット、及びノードの第3のセットの処理レイアウトが、同じ度合いの並列性を有する場合に、データフローグラフをマイクログラフとして実行することを決定することを含む。
【0011】
幾つかの実施形態では、データフローグラフがマイクログラフとして実行されるか否かを決定することは、少なくとも1つのノードを除く、ノードの第1のセット、ノードの第2のセット、及びノードの第3のセットの処理レイアウトが、同じ度合いの並列性を有する場合に、データフローグラフをマイクログラフとして実行することを決定することを含む。
【0012】
幾つかの実施形態では、ノードの第3のセットが、第1のノードを含み、複数のエッジが、第1のノードと、データフローグラフにおいて第1のノードに先行する第2のノードとの間に第1のエッジを含み、ノードの第3のセット内の1つ又は複数のノードの1つ又は複数の初期処理レイアウトを決定することが、第2のノードに関して決定された第2の初期処理レイアウトに基づいて、第1のノードの第1の初期処理レイアウトを決定することを含む。
【0013】
幾つかの実施形態では、複数のエッジが、第1のノードと、データフローグラフにおいて第1のノードに先行する第3のノードとの間に第2のエッジを含み、第3の初期処理レイアウトが、第3のノードに関連付けられ、第1のノードの第1の初期処理レイアウトを決定することが、第2のノードに関して決定された第2の初期処理レイアウト又は第3のノードに関して決定された第3の初期処理レイアウトの一方を第1の初期処理レイアウトとして選択することを含む。
【0014】
幾つかの実施形態では、第2の初期処理レイアウトが、第1の度合いの並列性を指定し、第3の初期処理レイアウトが、第1の度合いの並列性とは異なる第2の度合いの並列性を指定し、選択が、第1の度合いの並列性が、第2の度合いの並列性よりも大きい場合に、第2の初期処理レイアウトを選択することと、第1の度合いの並列性が、第2の度合いの並列性よりも小さい場合に、第3の初期処理レイアウトを選択することと、を含む。
【0015】
幾つかの実施形態では、第2の初期処理レイアウト及び第3の初期処理レイアウトのそれぞれが、同じ又は異なる度合いの並列性を有する並列処理レイアウトを指定し、第1のエッジが、第1の数のデータレコードのデータフローを表し、第2のエッジが、第2の数のデータレコードのデータフローを表し、選択が、第1の数のデータレコードが、第2の数のデータレコードよりも多い場合に、第2の初期処理レイアウトを選択することと、第1の数のデータレコードが、第2の数のデータレコードよりも少ない場合に、第3の初期処理レイアウトを選択することと、を含む。
【0016】
幾つかの実施形態では、決定中に、第1の処理レイアウトが、ノードの第3のセットにおける第1のノードに関して決定され、第1の処理レイアウトが、第1の度合いの並列性を指定し、グラフにおいて第1のノードの直前の第2のノードに関する第2の処理レイアウトが、第1の度合いの並列性とは異なる第2の度合いの並列性を指定し、方法がさらに、少なくとも1つの再パーティショニング動作を行うようにデータフローグラフの少なくとも1つのノードを構成することを含む。
【0017】
幾つかの実施形態では、決定中に、第1の処理レイアウトが、ノードの第3のセットにおける第1のノードに関して決定され、第1の処理レイアウトが、第1の度合いの並列性を指定し、グラフにおいて第1のノードの直前の第2のノードに関する第2の処理レイアウトが、第1の度合いの並列性とは異なる第2の度合いの並列性を指定し、方法がさらに、データフローグラフに対して、第1のノードと第2のノードとの間に新しいノードを追加することを含み、新しいノードが、少なくとも1つの再パーティショニング動作を表す。
【0018】
幾つかの実施形態では、決定が、ノードの第3のセットにおける第1のノードに関する第1の処理レイアウトを決定することを含み、第1のノードが、第1のデータ処理動作を表し、第1の処理レイアウトを決定することが、第1のデータ処理動作を行うための並列性の度合いを決定することと、決定された並列性の度合いに従って、第1のデータ処理動作を行うための1つ又は複数のコンピューティングデバイスのセットを識別することと、を含む。
【0019】
幾つかの実施形態では、第1の処理レイアウトを決定することが、単一のプロセッサが第1のデータ処理動作を行うために使用されることを決定することと、第1のデータ処理動作を行うためのコンピューティングデバイスを識別することと、を含む。
【0020】
幾つかの実施形態では、処理レイアウトの決定が、異なる度合いの並列性を有する処理レイアウトの中から選択するための少なくとも1つのルールを使用して行われる。
【0021】
幾つかの実施形態では、方法は、データフローグラフにおける各ノードの処理レイアウトを決定した後に、データフローグラフにおける各ノードに関して決定された処理レイアウトに従って、データフローグラフを実行することをさらに含む。
【0022】
幾つかの実施形態では、方法は、構造化照会言語(SQL)クエリーを受信することと、SQLクエリーからクエリープランを生成することと、生成されたクエリープランからデータフローグラフを生成することと、をさらに含む。
【0023】
幾つかの実施形態では、動作を表すノードの処理レイアウトは、動作を行うために使用される並列性の度合いを指定する。
【0024】
幾つかの実施形態では、ノードの第3のセット内のノードの処理レイアウトの決定は、自動的に行われる。
【0025】
幾つかの実施形態では、ノードの第3のセット内のノードの処理レイアウトの決定は、ノードの第1のセット内のノードから開始して行われる順方向パスにおいて、データフローグラフの構造に従って、並びに処理レイアウトの第1のセット及び1つ又は複数のレイアウト決定ルールを使用して、ノードの第3のセットの少なくとも幾つかのノードの各特定のノードの初期処理レイアウトを、各特定のノードごとに、データフローグラフ内の特定のノードに先行するノードの処理レイアウトが、順方向パス中に、特定のノードに関する初期処理レイアウトとして選択されるように、決定することであって、データフローグラフにおいて特定のノードに先行する複数のノードが存在する場合に、少なくとも1つのルールによって示されるように、複数の先行するノードのうちの1つのノードの並列処理レイアウトが、複数の先行するノードのうちの他のノードの処理レイアウトが順次である場合に、特定のノードの初期処理レイアウトとして順方向パス中に選択され、又は最大数のレコードを処理するために使用される、複数の先行するノードのうちの1つのノードの処理レイアウトが、順方向パス中に、特定のノードの初期処理レイアウトとして選択される、決定することを含む。
【0026】
幾つかの実施形態では、データフローグラフ内の特定のノードに先行する複数のノードが、順次処理レイアウトのみを有するか、又は互いに同じ又は異なる度合いの並列性を有する複数の並列処理レイアウトのみを有する場合に、最大数のレコードを処理するために使用される、複数の先行するノードのうちの1つのノードの処理レイアウトが、初期処理レイアウトとして順方向パス中に選択される。
【0027】
幾つかの実施形態では、順方向パス中に特定のノードの初期処理レイアウトを選択する際に、少なくとも1つのノードに関連付けられた処理レイアウトが無視される。
【0028】
幾つかの実施形態では、ノードの第3のセット内のノードの処理レイアウトの決定は、ノードの第2のセット内のノードから開始して行われる逆方向パスにおいて、データフローグラフの構造、初期処理レイアウト、及び1つ又は複数のレイアウト決定ルールに従って、ノードの第3のセットの少なくとも幾つかのノードの各特定のノードの最終処理レイアウトを、各特定のノードごとに、少なくとも1つのルールによって示されるように、特定のノードの初期処理レイアウト又は特定のノードの後続のノードの処理レイアウトの一方に応じた並列処理レイアウトが、特定のノードの初期処理レイアウトの処理レイアウト及び特定のノードの後続のノードの処理レイアウトの他方が順次である場合に、逆方向パス中に特定のノードの最終処理レイアウトとして選択され、又は特定のノードの初期処理レイアウト、及び特定のノードの後続のノードの処理レイアウトのうち、最大数のレコードを処理するために使用される処理レイアウトが、逆方向パス中に特定のノードの最終処理レイアウトとして選択されるように、決定することをさらに含む。
【0029】
幾つかの実施形態では、特定のノードの初期処理レイアウト及び特定のノードの後続のノードの処理レイアウトの両方が順次処理レイアウトを有するか、又は両方が複数の並列処理レイアウトを有するが互いに同じ又は異なる度合いの並列性を有する場合に、特定のノードの初期処理レイアウト及び特定のノードに後続するノードの処理レイアウトのうち、最大数のレコードを処理するために使用される処理レイアウトが、逆方向パス中に特定のノードの最終処理レイアウトとして選択される。
【0030】
幾つかの実施形態では、逆方向パス中に特定のノードの最終処理レイアウトを選択する際に、少なくとも1つのノードに関連付けられた処理レイアウトが無視される。
【0031】
幾つかの実施形態では、方法は、順方向パス及び/又は逆方向パスを行った後に、異なる度合いの並列性を有する処理レイアウトを有する、データフローグラフ内の隣接ノードによって処理されるデータに対して再パーティショニング動作を行うようにデータフローグラフを構成することをさらに含む。
【0032】
幾つかの実施形態では、動作を表すノードの処理レイアウトが、指定された度合いの並列性に従って、動作を行うために使用される1つ又は複数のコンピューティングデバイスをさらに指定し、処理レイアウトが、動作を行うために使用されるコンピューティングデバイスの数も指定し、及び動作を行うために使用される1つ又は複数の特定のコンピューティングデバイスを識別する。
【0033】
幾つかの実施形態では、ノードの第3のセットが第1のノードを含み、第1のノードが、第1のデータ処理動作を表し、順方向パス及び/又は逆方向パスを行った後に、データフローグラフ内の各ノードに関して決定された処理レイアウトに従って、データフローグラフを実行し、実行が、異なる度合いの並列性を有する処理レイアウトを有するデータフローグラフ内の隣接ノードによって処理されるデータに対して再パーティショニング動作を行うことと、ノードの第3のセットの第1のノードに関して決定された初期処理レイアウト又は最終処理レイアウトに基づいて、1つ又は複数のコンピューティングデバイスのセットを識別することと、識別されたコンピューティングデバイスのセットを使用して、ノードの第3のセットの第1のノードに関して決定された初期処理レイアウト又は最終処理レイアウトによって指定された並列性の度合いに従って、第1のデータ処理動作を行うことと、を含む。
【0034】
幾つかの実施形態では、方法は、少なくとも1つのコンピュータハードウェアプロセッサを使用して、データフローグラフに対して、隣接ノード間に新しいノードを追加することをさらに含み、追加された新しいノードを有するデータフローグラフに従ってデータレコードが処理される際に、隣接ノードによるデータレコードの処理の間に、再パーティショニング動作に従ってデータレコードのパーティショニングが行われるように、新しいノードが、再パーティショニング動作を表す。
【0035】
幾つかの実施形態では、方法は、少なくとも1つのコンピュータハードウェアプロセッサを使用して、異なる度合いの並列性を有する処理レイアウトを有する、データフローグラフ内の隣接ノードのうちの1つを、再パーティショニング動作を行うように構成することにより、隣接ノードのうちの構成された1つを有するデータフローグラフに従ってデータレコードが処理される際に、隣接ノードによるデータレコードの処理の間に、再パーティショニング動作に従ってデータレコードのパーティショニングが行われることをさらに含む。
【0036】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、少なくとも1つのコンピュータハードウェアプロセッサに上述の実施形態の何れか1つに記載の方法を行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体を提供する。
【0037】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサと、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、少なくとも1つのコンピュータハードウェアプロセッサに上述の実施形態の何れか1つに記載の方法を行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体と、を含む、データ処理システムを提供する。
【0038】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサを使用して、データフローグラフを指定する情報を取得することであって、データフローグラフが、複数のノード、及び複数のノードを接続する複数のエッジを含み、複数のエッジが、複数のノード間のデータのフローを表し、複数のノードが、1つ又は複数のノードの第1のセットであって、ノードの第1のセットにおける各ノードが、1つ又は複数の入力データセットのセットにおけるそれぞれの入力データセットを表す、1つ又は複数のノードの第1のセットと、1つ又は複数のノードの第2のセットであって、ノードの第2のセットにおける各ノードが、少なくとも1つの、それぞれのデータ処理動作を表す、1つ又は複数のノードの第2のセットと、を含む、取得することと、入力データセットのセットに関する1つ又は複数の処理レイアウトの第1のセットを取得することであって、処理レイアウトの第1のセットが異なる度合いの並列性を有する処理レイアウトを含む、取得することと、処理レイアウトの第1のセットと、異なる度合いの並列性を有する処理レイアウトの中から選択するための少なくとも1つのルールを含む1つ又は複数のレイアウト決定ルールと、ノードの第2のセット内の少なくとも1つのノードによって生成されたデータが、少なくとも1つのノードから下流のデータフローグラフ内の何れのノードによっても使用されないことを示す情報とを使用して、ノードの第2のセット内のノードの処理レイアウトを決定することと、を行うことを含む方法を提供する。
【0039】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、データフローグラフを指定する情報を取得することであって、データフローグラフが、複数のノード、及び複数のノードを接続する複数のエッジを含み、複数のエッジが、複数のノード間のデータのフローを表し、複数のノードが、1つ又は複数のノードの第1のセットであって、ノードの第1のセットにおける各ノードが、1つ又は複数の入力データセットのセットにおけるそれぞれの入力データセットを表す、1つ又は複数のノードの第1のセットと、1つ又は複数のノードの第2のセットであって、ノードの第2のセットにおける各ノードが、少なくとも1つの、それぞれのデータ処理動作を表す、1つ又は複数のノードの第2のセットと、を含む、取得することと、入力データセットのセットに関する1つ又は複数の処理レイアウトの第1のセットを取得することであって、処理レイアウトの第1のセットが異なる度合いの並列性を有する処理レイアウトを含む、取得することと、処理レイアウトの第1のセットと、異なる度合いの並列性を有する処理レイアウトの中から選択するための少なくとも1つのルールを含む1つ又は複数のレイアウト決定ルールと、ノードの第2のセット内の少なくとも1つのノードによって生成されたデータが、少なくとも1つのノードから下流のデータフローグラフ内の何れのノードによっても使用されないことを示す情報とを使用して、ノードの第2のセット内のノードの処理レイアウトを決定することと、を含む方法を少なくとも1つのコンピュータハードウェアプロセッサに行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体を提供する。
【0040】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサと、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、データフローグラフを指定する情報を取得することであって、データフローグラフが、複数のノード、及び複数のノードを接続する複数のエッジを含み、複数のエッジが、複数のノード間のデータのフローを表し、複数のノードが、1つ又は複数のノードの第1のセットであって、ノードの第1のセットにおける各ノードが、1つ又は複数の入力データセットのセットにおけるそれぞれの入力データセットを表す、1つ又は複数のノードの第1のセットと、1つ又は複数のノードの第2のセットであって、ノードの第2のセットにおける各ノードが、少なくとも1つの、それぞれのデータ処理動作を表す、1つ又は複数のノードの第2のセットと、を含む、取得することと、入力データセットのセットに関する1つ又は複数の処理レイアウトの第1のセットを取得することであって、処理レイアウトの第1のセットが異なる度合いの並列性を有する処理レイアウトを含む、取得することと、処理レイアウトの第1のセットと、異なる度合いの並列性を有する処理レイアウトの中から選択するための少なくとも1つのルールを含む1つ又は複数のレイアウト決定ルールと、ノードの第2のセット内の少なくとも1つのノードによって生成されたデータが、少なくとも1つのノードから下流のデータフローグラフ内の何れのノードによっても使用されないことを示す情報とを使用して、ノードの第2のセット内のノードの処理レイアウトを決定することと、を含む方法を少なくとも1つのコンピュータハードウェアプロセッサに行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体と、を含むデータ処理システムを提供する。
【0041】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサを使用して、結果が、少なくとも1つのそれぞれのデータ処理動作を表すデータフローグラフ内の少なくとも1つのノードから下流のデータフローグラフ内のノードによって表されるデータ処理動作によって使用されない、少なくとも1つのノードを識別する情報を取得することと、取得した情報を使用して、データフローグラフ内の少なくとも幾つかのノードの処理レイアウトを決定することと、を行うことを含む方法を提供する。
【0042】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、結果が、少なくとも1つのそれぞれのデータ処理動作を表すデータフローグラフ内の少なくとも1つのノードから下流のデータフローグラフ内のノードによって表されるデータ処理動作によって使用されない、少なくとも1つのノードを識別する情報を取得することと、取得した情報を使用して、データフローグラフ内の少なくとも幾つかのノードの処理レイアウトを決定することと、を含む方法を少なくとも1つのコンピュータハードウェアプロセッサに行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体を提供する。
【0043】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサと、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、結果が、少なくとも1つのそれぞれのデータ処理動作を表すデータフローグラフ内の少なくとも1つのノードから下流のデータフローグラフ内のノードによって表されるデータ処理動作によって使用されない、少なくとも1つのノードを識別する情報を取得することと、取得した情報を使用して、データフローグラフ内の少なくとも幾つかのノードの処理レイアウトを決定することと、を含む方法を少なくとも1つのコンピュータハードウェアプロセッサに行わせるプロセッサ実行可能命令を保存する、少なくとも1つの非一時的コンピュータ可読ストレージ媒体と、を含むデータ処理システムを提供する。
【0044】
以下の図面を参照して、様々な態様及び実施形態を説明する。これらの図面は、必ずしも一定の縮尺で描かれていないことが理解されるものとする。複数の図面に現れるアイテムは、それらが現れる全ての図面において、同じ又は類似の参照番号で示される。
【図面の簡単な説明】
【0045】
図1A】各ノードが同じ処理レイアウトと関連付けられた、説明のためのデータフローグラフの図である。
図1B】本明細書に記載の技術の幾つかの実施形態による、ノードの第1のセットにおけるノードに関して異なる処理レイアウトを有し、及びノードの第2のセットにおけるノードに関して決定された処理レイアウトを持たない、説明のためのデータフローグラフの図である。
図1C】本明細書に記載の技術の幾つかの実施形態による、ノードの第2のセットにおけるノードに関して決定された処理レイアウト、及びそれぞれの再パーティショニング動作と関連付けられた挿入ノードを示す、図1Bの説明のためのデータフローグラフの図である。
図2】本明細書に記載の技術の幾つかの実施形態による、少なくとも部分的に、データフローグラフのノードの処理レイアウトを決定することによって、データフローグラフの処理構成を決定するための、説明のためのプロセスのフローチャートである。
図3A-3D】本明細書に記載の技術の幾つかの実施形態による、1つ又は複数の処理レイアウト決定ルールを使用した、説明のためのデータフローグラフのノードの処理レイアウトの決定を示す。
図4A-4C】本明細書に記載の技術の幾つかの実施形態による、1つ又は複数のレイアウト決定ルールを使用した、別の説明のためのデータフローグラフのノードの処理レイアウトの決定を示す。
図5A-5D】本明細書に記載の技術の幾つかの実施形態による、1つ又は複数のレイアウト決定ルールを使用した、さらに別の説明のためのデータフローグラフのノードの処理レイアウトの決定を示す。
図6】本明細書に記載の技術の幾つかの実施形態が動作し得る、説明のためのコンピューティング環境のブロック図である。
図7】本明細書に記載の技術の幾つかの実施形態による、説明のためのデータフローグラフ700の「使用されない」ノードの処理レイアウトを伝播しないことを示す。
図8A】本明細書に記載する技術の幾つかの実施形態による、データフローグラフとして処理される、説明のためのSQLクエリーを示す。
図8B】本明細書に記載する技術の幾つかの実施形態による、図8Aに示されるSQLクエリーから生成された、説明のためのデータフローグラフ800を示す。
図8C】本明細書に記載する技術の幾つかの実施形態による、順方向レイアウト伝播パス中に図8Bの説明のためのデータフローグラフ内のノードに関して決定された処理レイアウトを示す。
図8D】本明細書に記載する技術の幾つかの実施形態による、逆方向レイアウト伝播パス中に図8Bのデータフローグラフ内のノードに関して決定された処理レイアウトを示す。
図8E】本明細書に記載する技術の幾つかの実施形態による、部分的にSQLクエリー831を使用して生成された、説明のためのデータフローグラフ830を示す。
図8F】本明細書に記載する技術の幾つかの実施形態による、データフローグラフ830内のノードに関して決定された処理レイアウトを示す。
図8G】本明細書に記載する技術の幾つかの実施形態による、再パーティショニング動作を行うためのノードを挿入するための再パーティショニングステップの後に、図8Fに示されるデータフローグラフ835から生成されたデータフローグラフ840を示す。
図8H】本明細書に記載する技術の幾つかの実施形態による、部分的にSQLクエリー851を使用して生成された、説明のためのデータフローグラフ845を示す。
図8I】本明細書に記載する技術の幾つかの実施形態による、データフローグラフ845内のノードに関して決定された処理レイアウトを示す。
図8J】本明細書に記載する技術の幾つかの実施形態による、再パーティショニング動作を行うためのノードを挿入するための再パーティショニングステップの後に、図8Hに示されるデータフローグラフ845から生成されたデータフローグラフ855を示す。
図9A】本明細書に記載する技術の幾つかの実施形態による、データフローグラフとして処理される、説明のためのSQLクエリーを示す。
図9B】本明細書に記載する技術の幾つかの実施形態による、図9Aに示されるSQLクエリーから生成されたデータフローグラフ910を示す。
図9C】本明細書に記載する技術の幾つかの実施形態による、図9Bの説明のためのデータフローグラフ内のノードに関して決定された処理レイアウトを示す。
図9D】本明細書に記載する技術の幾つかの実施形態による、図9Cに示すデータフローグラフ920から生成されたデータフローグラフ930を示す。
図10】データフローグラフ855とデータフローグラフ830との間の比較を示し、本明細書に記載する技術の幾つかの実施形態に従って、データフローグラフ930がマイクログラフサーバを使用して実行され得ることを示す。
図11】本明細書に記載する技術の幾つかの実施形態を実施する際に使用され得る、説明のためのコンピューティングシステム環境のブロック図である。
【発明を実施するための形態】
【0046】
本明細書に記載する技術の局面は、データフローグラフを用いてデータ処理動作を行うための従来の技術を改良することによって、データ処理システムの速度及びスループットを向上させることに関係する。
【0047】
上述の通り、データフローグラフのノードは、1つ又は複数の入力データセットからアクセスされたデータに適用され得る各データ処理動作を表し得る。データ処理動作をデータに適用する前に、データ処理動作を行うための処理レイアウトが決定される必要がある。処理レイアウトは、データ処理動作を行うために何個のコンピューティングデバイスが使用されるかを指定し、及び使用される特定のコンピューティングデバイスを識別し得る。従って、データ処理システムが、データフローグラフを用いてデータを処理し得る前に、データフローグラフにおけるノードの処理レイアウトが決定される必要がある。
【0048】
データフローグラフにおけるノードの処理レイアウトを自動的に決定するための幾つかの従来の技術は、全ての処理レイアウトが同じ度合いの並列性を有するように、処理レイアウトをグラフの各ノードに割り当てることを伴う。例えば、グラフの各ノードは、データフローグラフのノードによって表されるデータ処理動作のそれぞれが、N個のコンピューティングデバイスを用いて行われることを指定するN元処理レイアウトが割り当てられ得る(Nは、1以上の整数である)。異なるコンピューティングデバイスグループによって、異なるデータ処理動作が行われ得るが、そのような各グループは、同数のコンピューティングデバイス(すなわち、N個のデバイス)を有していなければならない。結果として、従来の技術では、データフローグラフの1つのノードが、N元(N>1)処理レイアウトを有し、且つ別のノードが、M元(N≠M>1)処理レイアウトを有することは可能ではない。
【0049】
本発明者らは、異なる度合いの並列性を有する処理レイアウトをデータフローグラフの異なるノードに割り当てることができれば、データ処理システムは、データをより速く、且つより効率的に処理し得ることを認識した。データフローグラフによって表される異なるデータ処理動作に対して異なる度合いの並列性を与えることは、データフローグラフを用いたデータ処理システムの速度及びスループットを大幅に向上させ得る。一例として、データフローグラフによってアクセスされた異なるデータセットが、異なる度合いの並列性を用いて保存される状況を考える。例えば、ある入力データセット(「A」)は、1つの場所に保存されたファイルでもよく、別の入力データセット(「B」)は、分散ファイルシステム(例えば、Hadoop分散ファイルシステム)を用いて、4つの異なる場所に保存されてもよく、及び出力データセット(「C」)は、分散データベースシステムを用いて、3つの異なる場所に保存されてもよい。順次処理レイアウトを用いて入力データセットAからデータを読み取り、4元並列処理レイアウトを用いて入力データセットBからデータを読み取り、及び3元並列処理レイアウトを用いて出力データセットCにデータを書き込むことは、入力及び出力データセットの並列性の度合いにマッチした並列性の度合いを有する処理レイアウトの使用が、その中に含有されるデータにアクセスし、及び続いて処理する速度を向上させるので、同じ度合いの並列性を有する処理レイアウトを用いて、これらのデータ処理動作の全てを行うよりも、より効率的となり得る。加えて、幾つかのデータセットは、指定された度合いの並列性のみを用いてアクセスされ(例えば、読み取られ、及び/又は書き込まれ)得る。異なるデータセットは、異なる度合いの並列性を必要とし得る。このようなデータセットは、本明細書に記載の技術を用いなければ、同じデータフローグラフを用いてアクセスされ得ない。
【0050】
例えば、入力ノード102a、102b、102cと、各フィルタリング動作を表すノード104、110、及び111と、ソート動作を表すノード106と、各結合動作を表すノード108及び112と、出力ノード114a及び114bを包含する、図1Aに示す、説明のためのデータフローグラフ100を考える。図1Aに示すように、ノード102aによって表される入力データセットからのデータは、フィルタリングされ、ソートされ、及び出力ノード114aによって表される出力データセットに書き込まれる前に、ノード102bによって表される入力データセットからのデータのフィルタリングされたバージョンと結合される。ノード102bによって表される入力データセットからのデータも、フィルタリングされ、及びノード114bによって表される出力データセットに書き込まれる前に、ノード102cによって表される入力データセットからのデータと結合される。図1Aに示すように、処理レイアウトを自動的に決定するための従来の技術の適用は、同じ並列処理レイアウトPL1が、データフローグラフ100の各ノードに割り当てられることをもたらす。一方、図1Bに示すように、入力データセット及び出力データセットが、異なる度合いの並列性を用いて保存される場合には、異なる処理レイアウトをグラフ100の異なるノードに割り当てることが必要とされ得る。
【0051】
本明細書に記載の実施形態の幾つかは、データフローグラフを用いてデータ処理動作を行うための従来の技術に関して本発明者らが認識した上記の課題の全てに対処する。しかし、以下に記載の全ての実施形態が、これらの課題の1つ1つに対処するわけではなく、幾つかの実施形態は、これらの何れにも対処しない場合がある。そのため、本明細書に記載の技術の実施形態は、データフローグラフを用いてデータ処理動作を行うための従来の技術の上述の課題の全て又は何れかに対処することに限定されないことが理解されるものとする。
【0052】
本明細書に記載の技術の幾つかの実施形態は、データフローグラフの1つ又は複数のノードによって表されるデータ処理動作を行うための処理レイアウトを自動的に決定する技術に向けられる。データフローグラフを用いて計算を行う従来の技術とは異なり、異なるノードに対して決定される処理レイアウトは、同じである必要はなく、グラフの異なるノードによって表されるデータ処理動作は、異なる処理レイアウトを用いて、特に、異なる度合いの並列性を有する処理レイアウトを用いて、行われ得る。
【0053】
本明細書では、データフローグラフのノードの処理レイアウトは、そのノードによって表されるデータ処理動作を行うために使用される処理レイアウトを指す。例えば、データフローグラフの入力ノードの処理レイアウトは、その入力ノードによって表される入力データセットからのデータを読み取るために使用される処理レイアウトを指す。別の例として、データフローグラフの出力ノードの処理レイアウトは、その出力ノードによって表される出力データセットにデータを書き込むために使用される処理レイアウトを指す。さらに別の例として、データ処理動作(例えば、フィルタリング動作、結合動作、ロールアップ動作など)を表すノードの処理レイアウトは、そのデータ処理動作を行うための処理レイアウトを指す。
【0054】
幾つかの実施形態では、データ処理動作を表すノードの処理レイアウトは、動作を行うために使用される並列性の度合いを示すことができる。さらに、ノードの処理レイアウトは、指定された度合いの並列性に従って動作を行うために使用される1つ又は複数のコンピューティングデバイスを指定することもできる。例えば、ノードの処理レイアウトは、単一の度合いの並列性を有する順次処理レイアウトであってもよく(すなわち、並列ではなく順次処理)、任意選択的に、そのノードによって表されるデータ処理動作を行うために使用するコンピューティングデバイス(例えば、プロセッサ、サーバ、ラップトップなど)を指定し得る。別の例として、ノードの処理レイアウトは、N個の並列性の度合いを有するN元(N≧1)1より大きい)並列処理レイアウトでもよく、任意選択的に、そのノードによって表されるデータ処理動作を行うために使用するN個のコンピューティングデバイスを指定し得る。上記から理解され得るように、幾つかの実施形態では、ノードの並列性の度合いを指定することに加えて、ノードの処理レイアウトは、そのノードによって表されるデータ処理動作を行うために使用する1つ若しくは複数のコンピューティングデバイス及び/又は1つ若しくは複数のコンピューティングデバイス上で実行される1つ若しくは複数のプロセスを指定することができる。
【0055】
幾つかの実施形態では、データフローグラフにおけるノードの処理レイアウトの決定は、(A)データフローグラフを指定する情報を取得することと、(B)データフローグラフにおける入力ノードの処理レイアウトを取得することと、(C)データフローグラフにおける出力ノードの処理レイアウトを取得することと、(D)入力ノードの処理レイアウト、出力ノードの処理レイアウト、及び1つ又は複数のレイアウト決定ルールに基づいて、1つ又は複数の他のノード(すなわち、入力ノード又は出力ノードではないノード)の処理レイアウトを決定することとを包含し得る。入力ノード及び出力ノード以外のデータフローグラフノードは、本明細書では、「中間」ノードと呼ばれる場合がある。レイアウト決定ルールの例は、図2などを参照して、本明細書に記載される。
【0056】
幾つかの実施形態では、データフローグラフの入力ノード及び出力ノードに関して取得された処理レイアウトの少なくとも2つは、異なる度合いの並列性を有し得る。例えば、2つの異なる入力ノードに関して取得された処理レイアウトは、異なる度合いの並列性を有し得る。別の例として、2つの異なる出力ノードに関して取得された処理レイアウトは、異なる度合いの並列性を有し得る。さらに別の例として、入力ノードに関して取得された処理レイアウトは、出力ノードに関して取得された処理レイアウトとは異なる度合いの並列性を有し得る。それでも、入力ノード及び出力ノードに関して取得された処理レイアウトの少なくとも2つが、異なる度合いの並列性を有するグラフのノードの処理レイアウトを自動的に決定するために、本明細書に記載の技術を使用することができる。ある説明のための例として、本明細書に記載の技術は、図1Bに示すデータフローグラフ100の処理レイアウトの決定に適用され得る。データフローグラフ100の入力ノード及び出力ノードは、3つの異なる処理レイアウト(すなわち、順次レイアウトSL1、並列レイアウトPL1、及び並列レイアウトPL2)に関連付けられ、これらの処理レイアウトは、図1Cに示すように、ノード104、106、108、110、111、及び112の処理レイアウトを自動的に決定するために、本明細書に記載のレイアウト決定ルールと共に使用され得る。
【0057】
幾つかの実施形態では、データフローグラフの1つ又は複数の中間ノードの処理レイアウトは、(1)順方向パス(入力ノードから出力ノードに向けて)を行うことにより、中間ノードの少なくとも幾つか(例えば、全て)の初期処理レイアウトを決定することと、後に、(2)逆方向パス(出力ノードから入力ノードに向けて)を行うことにより、中間ノードの最終処理レイアウトを決定することとによって決定され得る。順方向パス中に、入力ノードに割り当てられた処理レイアウト、及び本明細書に記載の1つ又は複数のレイアウト決定ルールに基づいて、初期処理レイアウトが決定され得る。例えば、ノード104、106、108、110、111、及び112の初期処理レイアウトは、ノード102a、102b、及び102cに割り当てられた処理レイアウトに基づいて決定され得る。逆方向パス中は、出力ノードに割り当てられた処理レイアウト、中間ノードの少なくとも幾つかに割り当てられた初期処理レイアウト、及び1つ又は複数のレイアウト決定ルールに基づいて、中間ノードの最終処理レイアウトが決定され得る。例えば、ノード104、106、108、110、111、及び112の最終処理レイアウトは、順方向パス中にこれらのノードに関して決定された初期処理レイアウト、出力ノード114a及び114bに割り当てられた処理レイアウト、及び1つ又は複数のレイアウト決定ルールに基づいて決定され得る。中間ノード(入力ノードと出力ノードとの間のデータ処理ノード)の最終処理レイアウトの決定に順方向パス及び逆方向パスを使用することにより、特に迅速で、正確で、且つ信頼性の高い方法でレイアウト決定を自動化することが可能となる。このことは、データフローグラフ内の多数のデータフロー経路(エッジ)を考慮する場合に特に明確になる。例えば、順方向パス及び逆方向パスは、データフローグラフのノードの最終処理レイアウトを決定する際に、データフロー経路が忘れられることを確実に回避する。このような忘れられた経路には、特に多数のデータレコードの処理に使用される処理レイアウトを有するノードが含まれる場合があるため、グラフのノードのレイアウト決定のプロセスにおいてこれらの経路のこれらのノードを組み込む場合に、グラフの他のノードの最終処理レイアウトは、計算効率に有利なように異なり得る。
【0058】
幾つかの実施形態では、データフローグラフにおけるノードの処理レイアウトが決定された後に(例えば、順方向パス及び逆方向パスを行った後に)、データフローグラフは、ある特定の度合いの並列性を有する処理レイアウトを使用して処理された後に、異なる度合いの並列性を有する処理レイアウトを使用して処理されるデータに対して再パーティショニング動作を行うように構成され得る。幾つかの実施形態では、データフローグラフは、異なる度合いの並列性を持つ処理レイアウトを有するグラフにおける隣接ノード間を流れるデータに対して再パーティショニング動作を行うように構成され得る。このようにして、1つの処理レイアウトを使用して(N個のコンピューティングデバイスを使用して、N≧1で)処理されたデータは、別の処理レイアウトを使用した(M≠N個のコンピューティングデバイスを使用して、M≧1で)後続の処理に適応され得る。
【0059】
例えば、図1Cに図示されるように、隣接するノード102a及び104は、レイアウトの一方が、順次(1つのコンピューティングデバイスを用いて処理が行われる)であり、他方が並列(複数のコンピューティングデバイスを用いて処理が行われる)であるので、異なる度合いの並列性を持つ処理レイアウトを有する。この例では、データフローグラフは、ノード102aからノード104へと流れるデータが、ノード102aに関して決定された処理レイアウト(SL1)に従って、単一のコンピューティングデバイスを使用して処理された後に、ノード104に関して決定された処理レイアウト(PL1)に従って、複数のコンピューティングデバイスを使用して処理され得るように、データをパーティショニングするように構成され得る。このために、データフローグラフは、並列性の度合いを増加させる再パーティショニング動作(例えば、パーティション・バイ・キー(partition-by-key)動作)を行うように構成され得る。又、同じ例において、隣接するノード102b及び111は、異なる処理レイアウトを有し、及び隣接するノード112及び114は、異なる処理レイアウトを有し、及びデータフローグラフ100は、ノード102からノード111へと流れるデータに対する再パーティショニング動作、及びノード112からノード114へと流れるデータに対する再パーティショニング動作(例えば、集約動作)を行うように構成され得る。
【0060】
幾つかの実施形態では、データフローグラフは、再パーティショニング動作を表すノードでグラフを拡張することによって、再パーティショニング動作を行う(グラフの実行時に)ように構成され得る。グラフが実行されると、再パーティショニング動作を行うように構成されたソフトウェアが、実行され得る。例えば、図1Cに示すように、データフローグラフは、ノード130、132、及び134で拡張することができ、各ノードは、それぞれの再パーティショニング動作と関連付けられる。他の実施形態では、データフローグラフの1つ又は複数の既存のノードが、再パーティショニング動作を行うように構成されてもよく、及び新しいノードは、追加されない。
【0061】
幾つかの実施形態では、データフローグラフのノード(ノード「A」)が、グラフにおける後続の隣接ノード(ノード「B」)の並列性の度合いよりも高い並列性の度合いを有する処理レイアウトと関連付けられる場合、データフローグラフは、データが、ノード「A」によって表されるデータ処理動作に従って処理された後であって、且つデータが、ノード「B」によって表されるデータ処理動作に従って処理される前に、データに対して再パーティショニング動作を行うように構成され得る。この場合、再パーティショニング動作は、並列性の度合いを低下させることができ、及び例えば、集約動作又はマージ動作でもよい。例えば、図1Cに示すように、ノード112の並列処理レイアウト(PL2)は、後続の隣接ノード114bの順次処理レイアウト(SL1)よりも高い並列性の度合いを有する。この例では、集約動作に関連付けられたノード134は、ノード112と114bとの間に追加されている。
【0062】
幾つかの実施形態では、データフローグラフのノード(ノード「A」)が、グラフにおける後続の隣接ノード(ノード「B」)の並列性の度合いよりも低い並列性の度合いを有する処理レイアウトと関連付けられる場合、データフローグラフは、データが、ノード「A」によって表されるデータ処理動作に従って処理された後であって、且つデータが、ノード「B」によって表されるデータ処理動作に従って処理される前に、データに対して再パーティショニング動作を行うように構成され得る。この場合、再パーティショニング動作は、並列性の度合いを増加させることができ、及び例えば、パーティション・バイ・キー動作、ラウンドロビンパーティション動作、パーティション・バイ・レンジ(partition-by-range)動作、又はその他の適宜のタイプのパーティショニング動作でもよい。例えば、図1Cに示すように、ノード102aの順次処理レイアウト(SL1)は、後続の隣接ノード114bの並列処理レイアウト(PL1)よりも低い並列性の度合いを有する。同様に、この例では、ノード102bの並列処理レイアウト(PL1)は、ノード111の並列処理レイアウト(PL2)よりも低い並列性の度合いを有する。この例では、パーティション・バイ・キー動作を表すノード130が、ノード102aとノード104との間に追加されており、及びラウンドロビンパーティション動作を表すノード132は、並列性の度合いの所望の低下を達成する集約動作が、その後に続く。
データレコードの複数のセットに対して行われる集約動作は、データレコードの複数のセットをデータレコードの単一のセットに統合し得るが、必ずしも、単一のセットにおけるデータレコードのソート性を維持しない。
データレコードの複数のセットに対して行われるマージ動作は、単一のセットにおけるデータレコードのソート性を維持しながら、データレコードの複数のセットをデータレコードの単一のセットに統合し得る。
パーティション・バイ・キー動作では、1つ又は複数の同じフィールド(例えば、1つ又は複数の同じコラムにおける)に対して1つ又は複数の同じ値を有するデータレコードが、同じパーティションに割り当てられる。
パーティション・バイ・レンジ動作では、異なるパーティションが、値の異なる非重複範囲と関連付けられ、及びある範囲内にフィールド値を有するデータレコードが、その範囲と関連付けられたパーティションに割り当てられる。
【0063】
幾つかの実施形態では、データフローグラフのノード(ノード「A」)が、グラフにおける後続の隣接ノード(ノード「B」)の並列性の度合いと同じ並列性の度合いを有する処理レイアウトと関連付けられる場合、再パーティショニング動作は、必要とされない。
【0064】
幾つかの実施形態では、データフローグラフの中間ノードの処理レイアウトは、グラフの入力ノード及び出力ノードに割り当てられた処理レイアウトに基づいて決定され得るが、本明細書に記載の技術は、入力ノード及び出力ノードのレイアウトから中間ノードのレイアウトを決定することに限定されない。幾つかの実施形態では、例えば、処理レイアウトは、データフローグラフの1つ又は複数のノードの任意のサブセットに対して取得されてもよく、及びデータフローグラフの任意のその他のノードの処理レイアウトは、これらの取得された処理レイアウト、データフローグラフの構造、及び1つ又は複数のレイアウト決定ルールに基づいて決定され得る。
【0065】
本明細書に記載の技術の幾つかの実施形態は、データ処理システムによる、構造化照会言語(SQL)クエリーなどのデータベースクエリーの管理に適用され得る。幾つかの実施形態では、データ処理システムは、(1)データベースクエリー(例えば、SQLクエリー)を受信し、(2)SQLクエリーを実行するためのクエリープラン(例えば、データベースクエリーが実行されると行われ得るデータベース動作を示すプラン)を生成し、(3)クエリープランからデータフローグラフを生成し、及び(4)少なくとも部分的にデータフローグラフを実行することによって、受信したデータベースクエリーを実行し得る。このような実施形態は、本明細書に全体として援用される、2015年8月25日に発行された、「データクエリー管理(MANAGING DATA QUERIES)」というタイトルの米国特許第9,116,955号明細書にさらに詳細に記載されている。米国特許第9,116,955号明細書は、「データクエリー管理(MANAGING DATA QUERIES)」というタイトルの、2011年5月2日に出願された、出願内容が本明細書に全体として援用される、米国特許出願第13/098,823号明細書から完成したものである。
【0066】
幾つかの実施形態では、本明細書に記載の技術は、データベースクエリー(例えば、SQLクエリー)から自動的に生成されたデータフローグラフの1つ又は複数のノードの処理レイアウトを自動的に決定するために使用され得る。
【0067】
幾つかの実施形態では、データ処理システムは、(1)データベースクエリー(例えば、SQL)クエリーを受信し、(2)受信したデータベースクエリーを、実行されるとデータベースクエリーを実行するコンピュータコード部分を含むコンピュータコードに変換し、及び(3)各コンピュータコード部分を実行するための処理レイアウトを自動的に決定し得る。幾つかの実施形態では、コンピュータコード部分を実行するための処理レイアウトは、コンピュータコード部分の実行順序を示す情報を用いて決定され得る。例えば、幾つかの実施形態では、各コンピュータコード部分は、データフローグラフにおけるそれぞれのノードと関連付けられてもよく、及びグラフの構造(例えば、ノード間の接続で具現化されるような)を用いて、処理レイアウトをノードに、及び関連して、ノードに関連付けられたコンピュータコード部分に割り当て得る。ただし、幾つかの実施形態では、コンピュータコード部分の実行順序を示す情報が、データフローグラフでエンコードされることに限定されないので、コンピュータコード部分を実行するための処理レイアウトは、データフローグラフを用いることなく決定され得ることを認識されたい。
【0068】
本明細書に記載の実施形態は、多数のやり方の何れで実施されてもよいことが理解されるものとする。単なる説明目的で、具体的な実施の例を以下に提供する。これらの実施形態及び提供される特徴/機能は、個々に、全て一緒に、又は2つ以上の任意の組み合わせで使用されてもよいことが理解されるものとする(本明細書に記載される技術の態様は、この点において限定されない)。
【0069】
図2は、少なくとも部分的に、本明細書に記載の技術の幾つかの実施形態に従ってデータフローグラフのノードに処理レイアウトを割り当てることによって、データフローグラフの処理構成を決定するための、説明のためのプロセス200のフローチャートである。プロセス200は、任意の適宜のシステム及び/又はコンピューティングデバイスによって行われてもよく、及び例えば、図6などを参照して本明細書に記載するデータ処理システム602によって行われ得る。プロセス200を説明した後に、プロセス200の幾つかの局面を、図3A~3D、4A~4C、及び5A~5Dに示す例を参照して例示する。図3A~3Dの例は、プロセス200の説明後に、詳細に記載するが、この例は、説明を明確にするために、プロセス200の説明全体を通しても言及される。
【0070】
プロセス200は、データフローグラフを指定する情報がアクセスされ得るアクト202から始まる。本明細書に記載する通り、データフローグラフは、(a)1つ又は複数のそれぞれの入力データセットを表す1つ又は複数の入力ノード、(b)1つ又は複数のそれぞれの出力データセットを表す1つ又は複数の出力ノード、及び/又は(c)データに対して行われ得るデータ処理動作を表す1つ又は複数のノードを包含する複数のノードを包含し得る。データフローグラフのノード間の有向リンク又はエッジは、ノード間のデータフローを表す。従って、アクト202では、データフローグラフのノード(上記のタイプのノードの何れも包含する)及びリンクを指定する情報が、アクセスされ得る。この情報は、任意の適宜のソース、任意の適宜のデータ構造からアクセスされてもよく、及び任意の適宜のフォーマットのものでもよい(本明細書に記載の技術の局面は、この点において限定されない)。例えば、図3A~Dに示される例を参照して、アクト202では、データフローグラフ300を指定する情報が、アクセスされ得る。以下にさらに詳細に記載する幾つかの実施形態では、アクト202で情報がアクセスされるデータフローグラフは、自動的に生成されたものである場合があり、及び例えば、構造化照会言語(SQL)クエリーから自動的に生成されたものである場合がある。
【0071】
幾つかの実施形態では、データフローグラフは、多数のノードを有し得る。例えば、データフローグラフは、少なくとも50個のノード、少なくとも100個のノード、少なくとも1000個のノード、少なくとも5000個のノード、50~500個のノード、100~1000個のノード、100~5000個のノード、又はこれらの範囲内の任意の他の適切な範囲を含み得る。このような状況では、様々なノードに処理レイアウトを手作業で割り当てることは、単純に不可能ではないにせよ、実用的ではない。しかしながら、処理レイアウトは、図2の参照を含み、本明細書に記載される技術に従って、実用的に割り当てることができる。
【0072】
次いで、アクト204では、アクト202でアクセスされたデータフローグラフの各入力ノード(すなわち、入力データセットを表す各ノード)に関して、処理レイアウトが取得され得る。例えば、図3A~3Dの例を参照して、アクト204では、入力ノード302及び304の処理レイアウトが取得され得る。幾つかの実施形態では、入力ノードの処理レイアウトは、入力ノードによって表される入力データセットからデータを読み取るための並列性の度合い(例えば、順次、2元並列、3元並列、…、任意の適宜の整数NのN元並列)を指定する。幾つかの実施形態では、入力ノードの処理レイアウトは、入力データセットからデータを読み取るために使用する1つ又は複数のコンピューティングデバイスのセット(例えば、1つ又は複数のプロセッサ、サーバ、及び/又はその他の適宜のデバイスのセット)を識別する。
【0073】
入力ノードの処理レイアウトは、任意の適宜のやり方で取得され得る。幾つかの実施形態では、入力ノードの処理レイアウトは、プロセス200の実行の開始前に決定することができ、及びアクト204中に、以前に決定された処理レイアウトが、アクセスされ得る。他の実施形態では、入力ノードの処理レイアウトは、プロセス200の実行中に動的に決定され得る。幾つかの実施形態では、入力の処理レイアウトは、プロセス200の実行の開始前に部分的に決定されてもよく、未知の情報は、プロセス200の実行中に動的に決定される。例えば、プロセス200の実行の前に、入力ノードの処理レイアウトが、順次又は並列であることが分かっているかもしれないが、入力動作(例えば、1つ又は複数のソースからデータを読み取ること)を行うために使用される特定のコンピューティングデバイスは、プロセス200の実行中に決定され得る。別の例として、プロセス200の実行に先立って、並列処理レイアウトが、ある入力ノードに割り当てられることが分かっているかもしれないが、並列性の度合いは、ランタイム中に決定され得る。
【0074】
入力ノードの処理レイアウトが、プロセス200の実行前に、或いは実行中に決定されるかにかかわらず、その決定は、任意の適宜のやり方で行われ得る。例えば、幾つかの実施形態では、入力ノードの処理レイアウトは、ユーザインタフェース(例えば、グラフィカルユーザインタフェース、構成ファイルなど)を用いて、ユーザによって手作業で指定され得る。別の例として、幾つかの実施形態では、入力ノードの処理レイアウトは、データ処理システムによって自動的に決定され得る。例えば、データ処理システムは、入力ノードによって表される入力データセットがどのように保存されるかに基づいて、入力ノードの処理レイアウトを自動的に決定し得る。例えば、入力データセットが複数のデバイス(例えば、4つのサーバ、Hadoopクラスタを使用してなど)に保存される場合、プロセス200を実行するデータ処理システムは、並列処理レイアウト(例えば、4元並列処理レイアウト、Hadoopクラスタにおけるノードの数)が、入力データセットからデータレコードを読み取るために使用されることを決定し得る。
【0075】
次いで、アクト206において、アクト202でアクセスされたデータフローグラフの各出力ノード(すなわち、出力データセットを表す各ノード)に関して、処理レイアウトが取得され得る。例えば、図3A~3Dの例を参照して、アクト206では、出力ノード314の処理レイアウトが取得され得る。幾つかの実施形態では、出力ノードの処理レイアウトは、出力ノードによって表される出力データセットにデータを書き込むための並列性の度合い(例えば、順次、2元並列、3元並列、…、任意の適宜の整数NのN元並列)を指定する。幾つかの実施形態では、出力ノードの処理レイアウトは、データを出力データセットに書き込むために使用する1つ又は複数のコンピューティングデバイスのセット(例えば、1つ又は複数のプロセッサ、サーバ、及び/又はその他の適宜のデバイスのセット)を識別する。
【0076】
出力ノードの処理レイアウトは、任意の適宜のやり方で取得され得る。幾つかの実施形態では、出力ノードの処理レイアウトは、プロセス200の実行の開始前に決定することができ、及びアクト206中に、以前に決定された処理レイアウトが、アクセスされ得る。他の実施形態では、出力ノードの処理レイアウトは、プロセス200の実行中に動的に決定され得る。幾つかの実施形態では、出力ノードの処理レイアウトは、プロセス200の実行の開始前に部分的に決定されてもよく、未知の情報は、プロセス200の実行中に動的に決定される。例えば、プロセス200の実行の前に、出力ノードの処理レイアウトが、順次又は並列であることが分かっているかもしれないが、出力動作(例えば、データを1つ又は複数の出力データセットに書き込むこと)を行うために使用される特定のコンピューティングデバイスは、プロセス200の実行中に決定され得る。別の例として、プロセス200の実行に先立って、並列処理レイアウトが、ある出力ノードに割り当てられることが分かっているかもしれないが、並列性の度合いは、ランタイム中に決定され得る。
【0077】
出力ノードの処理レイアウトが、プロセス200の実行前に、或いは実行中に決定されるかにかかわらず、その決定は、入力ノードの処理レイアウトを決定するための上記のやり方の何れをも含む任意の適宜のやり方で行われ得る。例えば、出力ノードの処理レイアウトは、ユーザインタフェースを用いて、ユーザによって手作業で指定されてもよく、又はデータ処理システムによって(例えば、出力ノードによって表される出力データセットがどのように保存されるかに基づいて)自動的に決定されてもよい。
【0078】
次いで、プロセス200は、アクト204及び206で処理レイアウトが取得された入力及び出力ノード以外のデータフローグラフにおけるノードに関して、処理レイアウトが決定されるアクト208に進む。幾つかの実施形態では、中間ノードの処理レイアウトは、中間ノードによって表されるデータ処理動作を行うための並列性の度合い(例えば、順次、2元並列、3元並列、…、任意の適宜の整数NのN元並列)を指定する。幾つかの実施形態では、中間ノードの処理レイアウトは、データ処理動作を行うために使用する1つ又は複数のコンピューティングデバイスのセット(例えば、1つ又は複数のプロセッサ、サーバ、及び/又はその他の適宜のデバイスのセット)を識別する。
【0079】
幾つかの実施形態では、中間ノードの処理レイアウトは、少なくとも部分的に、入力ノード及び出力ノードの処理レイアウト(アクト204及び206で取得された)を使用することによって決定され得る。例えば、図3A~3Dの例を参照して、アクト208において、中間ノード306、308、310、及び312の処理レイアウトは、入力ノード302及び304、及び出力ノード314の処理レイアウトを使用して決定され得る。幾つかの実施形態では、中間ノードの処理レイアウトは、データフローグラフの構造、及び1つ又は複数のレイアウト決定ルールにさらに基づいて、決定され得る。
【0080】
幾つかの実施形態では、レイアウト決定ルールは、データフローグラフのあるノードの処理レイアウトが、データフローグラフの1つ又は複数の他のノードの処理レイアウトに基づいて、どのように決定され得るかを指定し得る。例えば、幾つかの実施形態では、レイアウト決定ルールは、何れの処理レイアウトにも関連付けられていない、ある特定のノードの処理レイアウトが、グラフにおける、その特定のノードに隣接する他のノードの1つ又は複数の処理レイアウトに基づいて、どのように決定され得るかを指定し得る。ある説明のための例として、図3Aの例を参照して、レイアウト処理ルールは、入力ノード302の処理レイアウトに基づいた、中間ノード306の処理レイアウトの決定方法を指定し得る。別の説明のための例として、ノード308及び310の処理レイアウトが決定されると、レイアウト処理ルールは、ノード308及び310に関して決定された処理レイアウトに基づいて、ノード312の処理レイアウトを決定する方法を指定し得る。
【0081】
別の例として、幾つかの実施形態では、レイアウト決定ルールは、ある特定の処理レイアウトと既に関連付けられた特定のノードの処理レイアウトを、上記特定の処理レイアウト、及びグラフにおいて、上記特定のノードに隣接する1つ又は複数の他のノードの処理レイアウトに基づいて決定する方法を指定し得る。ある説明のための例として、図3Cの例を参照して、ノード312の処理レイアウトは、ノード312に関して決定された初期処理レイアウト(レイアウトPL1)及び出力ノード314に関して決定された処理レイアウト(レイアウトSL2)に基づいて決定され得る。
【0082】
具体的なレイアウト決定ルールの非限定的な、説明のための例を以下に記載する。幾つかの実施形態では、本明細書に記載のレイアウト決定ルール例に加えて、又はそれらの代わりに、1つ又は複数の他のレイアウト決定ルールが使用され得ることを認識されたい。本明細書に記載のレイアウトルール例の1つ又は複数の任意の適宜の組み合わせが、幾つかの実施形態において使用され得ることも認識されたい。本明細書に記載のレイアウト決定ルールは、任意の適宜のやり方で(例えば、ソフトウェアコード、1つ又は複数の構成パラメータなどを使用して)実施され得る(本明細書に記載の技術の局面は、この点において限定されない)。
【0083】
幾つかの実施形態では、あるレイアウト決定ルール例によれば、処理レイアウトとまだ関連付けられていない、ある特定のノードの処理レイアウトを決定する際に、この特定のノードが、関連付けられた処理レイアウトを有する近隣ノード(例えば、データフローグラフにおける、上記特定のノードの直前のノード、又はデータフローグラフにおける、上記特定のノードの直後のノード)を有する場合には、近隣ノードのレイアウトは、上記特定のノードの処理レイアウトとして決定され得る。このようにして、近隣ノードの処理レイアウトが、上記特定のノードに「コピー」され得る。ある説明のための例として、図3Aの例では、ノード306の処理レイアウトは、それに先行する近隣ノード302の処理レイアウトであると決定され得る。次に、ノード308の処理レイアウトは、それに先行するノード306の処理レイアウトであると決定され得る。この例から認識され得るように、このレイアウト決定ルールは、ある入力ノード(例えば、ノード302)のレイアウトを1つ又は複数の他のノード(例えば、ノード306、308、及び312)へと伝播するように繰り返し適用され得る。
【0084】
幾つかの実施形態では、別のレイアウト決定ルール例によれば、ある特定の処理レイアウトとまだ関連付けられていない、ある特定のノードの処理レイアウトを決定する際に、この特定のノードが、関連付けられた処理レイアウトを有する複数の近隣ノード(例えば、複数の先行する近隣ノード、又は複数の後続の近隣ノード)を有する場合には、上記特定のノードの処理レイアウトは、それの近隣ノードのレイアウトの中から選択され得る。例えば、図3Aのデータフローグラフの場合、ノード308及び310のレイアウトは決定済みであるが、ノード312のレイアウトがまだ決定されていないと仮定すると、ノード312のレイアウトは、ノード308及び310に関して決定されたレイアウトの一方であると選択され得る。
【0085】
幾つかの実施形態では、別のレイアウト決定ルール例によれば、ある特定の処理レイアウトと既に関連付けられた、ある特定のノードの処理レイアウトを決定する際に、この特定のノードが、それぞれの処理レイアウトと関連付けられた1つ又は複数の近隣ノードを有する場合には、上記特定のノードのレイアウトは、このノードと既に関連付けられた上記特定の処理レイアウト、及びそれの近隣ノードの処理レイアウトの中から選択することによって決定され得る。例えば、図3Cに示されるように、ノード312は、初期処理レイアウト(PL1)と関連付けられ、及び別の処理レイアウト(SL2)と関連付けられた近隣ノード314を有する。この例では、これら2つのレイアウト(すなわち、PL1及びSL2)の一方が、ノード312の更新(例えば、最終)処理レイアウトとして選択され得る。
【0086】
上記から認識され得るように、幾つかの実施形態では、あるレイアウト決定ルールを適用することは、2つ以上の処理レイアウトの中から処理レイアウトを選択することを伴う。これは、多数のやり方の何れで行われてもよい。例えば、2つ以上の処理レイアウトから成るグループから、ノードの処理レイアウトを選択する場合、最大の並列性の度合いを有する処理レイアウトが選択され得る。例えば、ノードの処理レイアウトが、N元並列処理レイアウト(例えば、10元並列レイアウト)、或いはM元(M<N)並列処理レイアウト(例えば、5元並列レイアウト)であるかを選択する場合、N元並列処理レイアウトが選択され得る。別の例として、ノードの処理レイアウトを並列処理レイアウト及び順次処理レイアウトから選択する場合、並列処理レイアウトが選択され得る。ある説明のための例として、図3Bを参照して、ノード312は、初期順次処理レイアウト(SL1)を割り当てられ(例えば、入力ノード302からそのレイアウトを伝播した結果として)、及びノード310は、並列レイアウトPL1を割り当てられ得る(例えば、入力ノード304からそのレイアウトを伝播した結果として)。次いで、PL1とSL1との間で、レイアウトPL1が明らかにより大きな並列性の度合いを有するため、ノード312の処理レイアウトは、並列レイアウトPL1であると更新され得る。
【0087】
2つ以上の処理レイアウトの中から処理レイアウトを選択する方法の別の例として、同じ又は異なる度合いの並列性を有する並列処理レイアウトの中からノードの並列処理レイアウトを選択する際に、より多数のレコードを処理するために使用される処理レイアウトが選択され得る。例えば、データフローグラフにおけるノードの処理レイアウトを、当該ノードの第1の先行する近隣ノードに割り当てられ、1000万のデータレコードを処理するために使用される4元レイアウトPL1、及び当該ノードの第2の先行する近隣ノードに割り当てられ、1万のデータレコードを処理するために使用される4元レイアウトPL2から選択する場合、当該ノードに関して、レイアウトPL1が選択され得る。このようにして、当該ノードに関連付けられたデータ処理動作(例えば、結合動作)が、1000万のデータレコードを処理するために使用される処理レイアウトと同じもの(例えば、同じコンピューティングデバイス)を使用して行われ得る。その結果、レイアウトPL1及びPL2が、コンピューティングデバイスの非重複セットを使用して実施される場合、1000万のデータレコードを処理するために使用されるコンピューティングデバイスへと移動される必要があるデータレコードは多くても1万程度であり、それによって、その逆のケースで行う場合と比較して、コンピューティングリソースをより効率的に使用することにつながる。一方、具体的には、レイアウトPL2が選択された場合、場合によっては1000万のデータレコードの全てが、たった1万のデータレコードを処理するために使用されるコンピューティングデバイスへと移動される必要があり、これは明らかに非効率的である。従って、より多数のレコードを処理するために使用されるレイアウトを選択することが、データ処理システムの計算性能を向上させることに役立ち得る。図4A~4Cを参照して、これの一例を以下でさらに説明する。
【0088】
データフローグラフにおけるノードの処理レイアウトを、当該ノードの第1の先行する近隣ノードに割り当てられ、1000万のデータレコードを処理するために使用される3元レイアウトPL1、及び当該ノードの第2の先行する近隣ノードに割り当てられ、1万のデータレコードを処理するために使用される6元レイアウトPL2から選択する場合、当該ノードに関して、レイアウトPL1が選択され得る。並列性の度合いは低くなるが、この方法では、当該ノードに関連付けられたデータ処理動作(例えば、結合動作)が、1000万のデータレコードを処理するために使用される処理レイアウトと同じもの(例えば、同じコンピューティングデバイス)を使用して行われ得る。その結果、この例においても先と同様に、レイアウトPL1及びPL2が、コンピューティングデバイスの非重複セットを使用して実施される場合、1000万のデータレコードを処理するために使用されるコンピューティングデバイスへと移動される必要があるデータレコードは多くても1万程度であり、それによって、その逆のケースで行う場合と比較して、コンピューティングリソースをより効率的に使用することにつながる。一方、具体的には、レイアウトPL2が選択された場合、場合によっては1000万のデータレコードの全てが、たった1万のデータレコードを処理するために使用されるコンピューティングデバイスへと移動される必要があり、これは明らかに非効率的である。従って、より多数のレコードを処理するために使用されるレイアウトを選択することが、データ処理システムの計算性能を向上させることに役立ち得る。
【0089】
幾つかの実施形態では、別のレイアウト決定ルール例によれば、データフローグラフの入力ノード及び出力ノードに関して、処理レイアウトが決定された後に、これらの処理レイアウトは、後で変更されない。このルールが利用される実施形態においては、入力ノード及び出力ノードの処理レイアウトが、アクト204及び206で取得された後に、これらの処理レイアウトは、後で変更されない。
【0090】
幾つかの実施形態では、別のレイアウト決定ルール例によれば、順次処理レイアウトが、データレコードのグループに適用されると、一定の数のデータレコードを出力する(例えば、データレコードが、それぞれのスコアに基づいてソートされた後に、トップテンのスコアを有するデータレコードを出力する)動作である制限動作を表すノードに割り当てられ得る。
【0091】
幾つかの実施形態では、データフローグラフの1つ又は複数の内部ノードが、所定の処理レイアウトと関連付けられ得る。幾つかの実施形態では、ある特定のタイプのノードが、所定の処理レイアウトと関連付けられ得る。
【0092】
幾つかの実施形態では、別のレイアウト決定ルール例によれば、処理レイアウトが、データフローグラフにおける、ある特定のノードに割り当てられると、その特定のノードに割り当てられた処理レイアウトをその他のノードに伝播させないための指示が、提供され得る(例えば、グラフィカルユーザインタフェース又は構成ファイルなどのユーザインタフェースを用いて、ユーザによって)。例えば、幾つかの実施形態では、1つ又は複数の入力ノード、及び/又は1つ又は複数の出力ノードに割り当てられた処理レイアウトを伝播させないための指示は、アクト204及び/又は206における入力及び/又は出力処理レイアウトの取得の一部として提供され得る。
【0093】
図5A~5Dを参照して、これの一例を以下でさらに説明する。
【0094】
プロセス200のアクト208における中間ノードの処理レイアウトを決定するために、上記のレイアウト決定ルールの何れも使用することができる。上記のレイアウト決定ルールの幾つかは、ある特定のノードの処理レイアウトを、それの近隣ノードに既に割り当てられたレイアウトに基づいて決定する方法を指定するので、「ローカル」であるが、幾つかの実施形態では、これらのレイアウト決定ルールの1つ又は複数は、入力及び出力処理ノードに関して取得された処理レイアウトを中間ノードに伝播させるように繰り返し適用され得る。この伝播は、任意の適宜のやり方で行われ得る。
【0095】
幾つかの実施形態では、中間ノードの処理レイアウトは、アクト208において、(1)アクト208aにおいて、順方向パスを行うことにより、中間ノードの少なくとも幾つか(例えば、全て)の初期処理レイアウトを決定することと、(2)アクト208bにおいて、逆方向パスを行うことにより、中間ノードの少なくとも幾つか(例えば、全て)の最終処理レイアウトを決定することとによって決定され得る。
【0096】
順方向パス中に、1つ又は複数の入力ノードに関して取得された処理レイアウトが、本明細書に記載のレイアウト決定ルールの1つ又は複数を用いて、データフローグラフにおける中間ノードへと伝播され得る。データフローグラフの構造は、順方向パス中にノードに関して処理レイアウトが決定される順序をガイドし得る。例えば、最初に、入力ノードの近隣ノードに関する処理レイアウトが決定され、次に、入力ノードの近隣ノードの近隣ノードに関する処理レイアウトが決定され、入力ノードからの全てのフローが、出力ノードにおけるそれらの終端にたどり着くまで続き得る。ある説明のための例として、図3Bを参照して、入力ノード302及び304の処理レイアウトが、ノード306、308、310、及び312の初期処理レイアウトを取得するために、1つ又は複数のレイアウト決定ルールを用いて、順方向パス中に伝播され得る。
【0097】
逆方向パス中は、1つ又は複数の出力ノードに関して取得された処理レイアウトが、本明細書に記載のレイアウト決定ルールの1つ又は複数を用いて、データフローグラフにおける中間ノードへと伝播され得る。順方向パスの場合と同様に、データフローグラフの構造は、逆方向パス中にノードに関して処理レイアウトが決定される順序をガイドし得る。例えば、最初に、出力ノードの近隣ノードに関する処理レイアウトが決定され、次に、出力ノードの近隣ノードの近隣ノードに関する処理レイアウトが決定され、出力ノードからの全てのエッジが、出力ノードにおけるそれらの終端にたどり着くまで続き得る。たどられる経路は、逆方向パス中は逆であり、順方向パスでたどられる経路の逆となり得る。ある説明のための例として、図3Cを参照して、出力ノード314の処理レイアウト、及びノード306、308、310、及び312の初期処理レイアウトが、ノード306、308、310、及び312の最終処理レイアウトを取得するために、逆方向パス中に、1つ又は複数のレイアウト決定ルールと共に使用され得る。図3A~3Dを参照して、これを以下により詳細に述べる。
【0098】
アクト208において、中間ノードに関する処理レイアウトが決定された後に、プロセス200は、データフローグラフの隣接ノードがミスマッチレイアウトを有するか否かが決定される決定ブロック210に進む。隣接するノード「A」及び「B」は、ノードAに関して決定された処理レイアウトが、ノードBに関して決定された処理レイアウトとは異なる度合いの並列性を有する場合に、ミスマッチレイアウトを有する。例えば、ノードAに関して、N元(N>1)並列処理レイアウトが決定され、且つ後続のノードBに関して、順次処理レイアウトが決定される場合、これらのノードは、ミスマッチレイアウトを有する(Nから1への遷移が存在する)。別の例として、ノードAに関して、順次処理レイアウトが決定され、且つ後続のノードBに関して、M元(M>1)並列処理レイアウトが決定される場合、これらのノードは、ミスマッチレイアウトを有する(1からMへの遷移が存在する)。別の例として、ノードAに関して、N元並列処理レイアウトが決定され、且つ隣接するノードBに関して、M元並列処理レイアウトが決定される場合(M≠N)、これらのノードは、ミスマッチレイアウトを有する(NからMへの遷移が存在する)。
【0099】
決定ブロック210において、異なる度合いの並列性を備えた処理レイアウトを有する隣接ノードペアが存在すると決定されると、プロセス200は、データフローグラフが、1つ又は複数の再パーティショニング動作を行うように構成され得るアクト212に進む。再パーティショニング動作は、ある処理レイアウトを用いて、ある数のプロセッサを使用して処理されるデータレコードが、別の処理レイアウトを用いた、異なる数のプロセッサを使用した処理のために遷移されることを可能にする。再パーティショニング動作の例は、本明細書に記載され、及び例えば、データの処理において並列性の度合いを増加させるための再パーティショニング動作(例えば、パーティション・バイ・キー動作、ラウンドロビンパーティション動作、パーティション・バイ・レンジ動作、及び/又はその他の適宜のタイプのパーティション動作)、及びデータの処理において並列性の度合いを低下させるための再パーティショニング動作(例えば、マージ動作及び集約動作)を包含する。例えば、隣接するノードAとノードBとの間に、Nから1への遷移が存在する場合、データフローグラフは、ノードAによって表される動作に従って処理されるデータの並列性の度合いを低下させる(Nから1へ)ための再パーティショニング動作を、そのデータがノードBによって表される動作に従って処理される前に行うように構成され得る。別の例として、隣接するノードAとノードBとの間に、1からMへの遷移が存在する場合、データフローグラフは、ノードAによって表される動作に従って処理されるデータの並列性の度合いを増加させる(1からMへ)ための再パーティショニング動作を、そのデータがノードBによって表される動作に従って処理される前に行うように構成され得る。さらに別の例として、隣接するノードAとノードBとの間に、NからMへの遷移が存在する場合、データフローグラフは、ノードAによって表される動作に従って処理されるデータに対して並列性の度合いを変化させる(NからMへ)ために、複数の再パーティショニング動作を、そのデータがノードBによって表される動作によって処理される前に行うように構成され得る。複数の再パーティショニング動作は、並列性の度合いを低下させる(例えば、NからKへ)第1の再パーティショニング動作、及び並列性の度合いを増加させる(例えば、KからMへ、Kは、N及びMの公約数である)第2の再パーティショニング動作を包含し得る。
【0100】
幾つかの実施形態では、データフローグラフは、再パーティショニング動作を表す新しいノードを追加することによって、再パーティショニング動作を行うように構成され得る。以下に説明する図3D、4C、及び5Dにおいて、これの例を示す。このような実施形態では、再パーティショニング動作を表すノードに関して、処理レイアウトが決定され得る。再パーティショニング動作が、並列性の度合いを増加させる(例えば、パーティション・バイ・キー動作)場合には、再パーティショニング動作を表すノードに割り当てられた処理レイアウトは、先行するノードに割り当てられた処理レイアウトでもよい。再パーティショニング動作が、並列性の度合いを低下させる(例えば、マージ動作又は集約動作)場合には、再パーティショニング動作を表すノードに割り当てられた処理レイアウトは、グラフにおける後続のノードに割り当てられた処理レイアウトでもよい。他の実施形態では、データフローグラフの既存のノードが、再パーティショニング動作を行うように構成され得る。
【0101】
幾つかの実施形態では、プロセス200を行うデータ処理システムは、特定の状況において、特定のタイプの再パーティショニング動作を行うようにデータフローグラフを構成するようにプログラミングされ得る。例えば、幾つかの実施形態では、データフローグラフが、並列性の度合いを低下させるための再パーティショニング動作を行うように構成され、且つデータがソートされるとき、データのソート性が、再パーティショニングを通して維持される場合には、データフローグラフは、並列性の度合いを低下させるためにマージ動作を行うように構成され得る。そうでなければ、集約動作を使用して、並列性の度合いを低下させ得る。別の例として、幾つかの実施形態では、データフローグラフが、並列性の度合いを増加させるための再パーティショニング動作を行うように構成されるとき、データの特定のパーティショニングが望まれる場合には、データフローグラフは、ある特定の1つ又は複数のキーに関して、パーティション・バイ・キー動作を行うように構成され得る。そうでなければ、ラウンドロビンパーティション動作、又は別のタイプのパーティション動作が、使用され得る。別の例として、幾つかの実施形態では、ロールアップ動作を並列データに適用することは、ロールアップキーのサブセットに関して、このデータがまだパーティショニングされていない場合には、再パーティショニングを必要とし得る。この場合、ロールアップが、データ量を大幅に(例えば、少なくとも10分の1)減少させると推定される場合には、ダブルバブルロールアップが行われ得る(すなわち、まず、ソースレイアウト及びパーティショニングスキームにおけるロールアップ、次いで、デスティネーションレイアウト及びパーティショニングスキームにおいて第2のロールアップ)。
【0102】
一方、決定ブロック210において、異なる度合いの並列性を備えた処理レイアウトを有する隣接ノードが存在しない、又は異なる度合いの並列性を備えたレイアウトを有する隣接ノードに関して、適切な再パーティショニング論理が、データフローグラフに追加されていると決定されると、プロセス200は、完了する。
【0103】
幾つかの実施形態では、プロセス200を用いて処理レイアウトが割り当てられた後に、データフローグラフは、割り当てられたレイアウトに従って実行され得る。このようにして、データフローグラフにおける1つ又は複数のデータ処理動作のそれぞれが、そのデータ処理動作に割り当てられた処理レイアウトに従って実行される。
【0104】
幾つかの実施形態では、プロセス200は、自動生成されたデータフローグラフに適用され得る。例えば、幾つかの実施形態では、プロセス200は、SQLクエリーから、別のデータベースシステムによって提供されたクエリーを指定する情報から、及び/又は別のデータフローグラフから自動生成されたデータフローグラフに適用され得る。
【0105】
幾つかの実施形態では、データフローグラフは、(1)SQLクエリーを受信し、(2)受信したSQLクエリーからクエリープランを生成し、及び(3)クエリープランからデータフローグラフを生成することによって、SQLクエリーから生成され得る。次に、プロセス200は、そのように生成されたデータフローグラフに適用され得る。(プロセス200が適用され得るデータフローグラフを自動的に生成する)これら3つのアクトのそれぞれを、以下でより詳細に説明する。
【0106】
幾つかの実施形態では、SQLクエリーは、ユーザが、入力としてデータ処理システムにSQLクエリーを提供した結果、データ処理システム(例えば、例えばデータ処理システム602などのプロセス200を実行するデータ処理システム)によって受信され得る。ユーザは、グラフィカルユーザインタフェース、又はその他の適宜のタイプのインタフェースを用いて、SQLクエリーを入力し得る。他の実施形態では、SQLクエリーは、別のコンピュータプログラムによって、データ処理システムに提供され得る。例えば、SQLクエリーは、データ処理システムに1つ又は複数のSQLクエリー(各SQLクエリーは、ユーザによって指定されている場合、又は自動生成されている場合がある)を実行させるように構成されたコンピュータプログラムによって提供され得る。SQLクエリーは、任意の適宜のタイプのものでよく、及び任意の適宜のフォーマットで提供され得る(本明細書に記載の技術の局面は、この点において限定されない)。
【0107】
幾つかの実施形態では、受信したSQLクエリーを使用して、クエリープランを生成し得る。生成されたクエリープランは、SQLクエリーが実行された場合に行われる1つ又は複数のデータ処理動作を識別し得る。生成されたクエリープランはさらに、識別されたデータ処理動作が実行される順序を指定し得る。そのため、生成されたクエリープランは、受信したSQLクエリーを実行するために行うデータ処理動作のシーケンスを表し得る。生成されたクエリープランは、任意の適宜のタイプのクエリープランジェネレータを用いて生成され得る。クエリープランを生成するための幾つかの例示的技術が、本明細書に全体として援用される、「データクエリー管理」というタイトルの米国特許第9,116,955号明細書に記載されている。
【0108】
次に、幾つかの実施形態では、データフローグラフが、クエリープラン(これ自体は、受信したSQLクエリーを用いて生成されたものである)から生成され得る。幾つかの実施形態では、データフローグラフは、少なくとも部分的に、クエリープランにおいて識別されたデータ処理動作の少なくともサブセット(例えば、一部又は全て)のそれぞれのノードを包含するようにデータフローグラフを生成することによって、クエリープランから生成され得る。幾つかの実施形態では、クエリープランにおける単一のノードは、データフローグラフにおける複数のノードの包含をもたらし得る。続いて、クエリープランで指定されたデータ処理動作の順序を使用して、データフローグラフにおけるノードを結び付けるリンクを生成し得る。例えば、生成されたクエリープランが、第2のデータ処理動作の前に、第1のデータ処理動作が行われることを示す場合、生成されたデータフローグラフは、第1のノード(第1のデータ処理動作を表す)及び第2のノード(第2のデータ処理動作を表す)と、第1のノードから第2のノードへの経路を指定する1つ又は複数のリンクとを有し得る。
【0109】
幾つかの実施形態では、クエリープランからデータフローグラフを生成することは、入力及び/又は出力データソースを表すグラフに対して、1つ又は複数のノードを追加することを含む。例えば、データフローグラフの生成は、SQLクエリーの実行中にデータレコードが読み取られるデータソースのそれぞれに対して入力ノードを追加することを含み得る。各入力ノードは、それぞれのデータソースと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データソース中のデータレコードにアクセスする方法を示し得る。別の例として、データフローグラフの生成は、SQLクエリーの実行中にデータレコードが書き込まれるデータシンクのそれぞれに対して出力ノードを追加することを含み得る。各出力ノードは、それぞれのデータシンクと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データレコードをデータソースに書き込む方法を示し得る。
【0110】
クエリープランから生成されたデータフローグラフは、クエリープラン自体とは異なることを認識されたい。データフローグラフが、グラフ実行環境(例えば、共働システム610、又はその他の適宜の、データフローグラフを実行するための実行環境)を用いることによって実行され得る一方で、クエリープランは、グラフ実行エンジンによって実行することができない(それは、データフローグラフの生成に使用される中間表現であり、このデータフローグラフは、SQLクエリーを実行するために、グラフ実行エンジンによって実行される)。クエリープランは、実行可能ではなく、リレーショナルデータベース管理システムの状況下でさえ、実行戦略を生成するために、さらに処理される必要がある。これに対して、データフローグラフは、SQLクエリーを実行するために、グラフ実行エンジンによって実行可能である。加えて、リレーショナルデータベースシステムによるさらなる処理後でさえ、結果として生じる実行戦略は、他のタイプのデータソース及び/又はデータシンクに対する、データの読み取り及び/又は書き込みを可能にしないが、データフローグラフは、この点において限定されない。
【0111】
幾つかの実施形態では、クエリープランから生成されたデータフローグラフは、クエリープランに存在しないデータ処理動作を表すノードを含有し得る。逆に、幾つかの実施形態では、クエリープランから生成されたデータフローグラフは、クエリープランに存在するデータ処理動作を表すノードを含有しない場合がある。このような状況は、クエリープランからデータフローグラフを生成するプロセス中に行われ得る様々な最適化により生じ得る。幾つかの実施形態では、データフローグラフは、データベースコンピュータシステム(例えば、リレーショナルデータベース管理システム)に対して行われるデータベース動作以外のデータ処理動作を表すノードを含有し得る。
【0112】
幾つかの実施形態では、クエリープラン及びデータフローグラフは、異なるタイプのデータ構造で具現化され得る。例えば、幾つかの実施形態では、クエリープランは、各ノードが単一の親ノードを有する有向グラフ(例えば、例えば二分木などの木)で具現化されてもよく、一方、データフローグラフは、複数の親ノードを有する少なくとも1つのノードを有し得る有向非巡回グラフで具現化され得る。データフローグラフは、ノードを指定する情報と、グラフ内のノード間のリンクを表す他のノードへの参照(例えば、ポインタ又は任意の他の適切な参照)とを保存するフィールドを有する1つ又は複数のデータ構造を使用して具現化され得る。
【0113】
プロセス200は、説明のためのものであり、バリエーションが存在することを認識されたい。例えば、図2の図示した実施形態では、中間ノードの処理レイアウトは、順方向パスの後に、逆方向パスを使用して決定されるが、他の実施形態では、その代わりに、処理レイアウトは、逆方向パスの後に順方向パスを使用して決定され得る。別の例として、図示した実施形態では、中間ノードの処理レイアウトは、入力ノード及び出力ノードに割り当てられたレイアウトに基づいて決定されていたが、本明細書に記載の処理レイアウト決定技術は、より一般的に適用され得る。例えば、処理レイアウトは、データフローグラフにおける1つ又は複数のノードのセットに関して取得されてもよく、及び処理レイアウトは、(1)ノードのセットに関して取得された処理レイアウト、(2)データフローグラフのリンク構造、及び(3)1つ又は複数のレイアウト決定ルールに基づいて、データフローグラフにおける他のノードに関して取得され得る。ノードのセットは、入力ノード及び出力ノードを包含し得るが、そうである必要はない。従って、ノードのセットは、任意の適宜の数(例えば、ゼロ、少なくとも1つ、全て)の入力ノード、任意の適宜の数(例えば、ゼロ、少なくとも1つ、全て)の出力ノード、及び任意の適宜の数(例えば、ゼロ、少なくとも1つ、全て)の他のノードを包含し得る。唯一の要件は、ノードのセットが空ではないことである。
【0114】
幾つかの実施形態では、データ処理システムは、(1)データベースクエリー(例えば、SQL)クエリーを受信し、(2)受信したデータベースクエリーを、データ処理システムによって実行されると、受信したデータベースクエリーを実行するコンピュータコード部分を含むコンピュータコードに変換し、及び(3)各コンピュータコード部分を実行するための処理レイアウトを自動的に決定し得る。幾つかの実施形態では、コンピュータコード部分を実行するための処理レイアウトは、コンピュータコード部分の実行順序を示す情報を用いて決定され得る。例えば、幾つかの実施形態では、各コンピュータコード部分は、データフローグラフにおけるそれぞれのノードと関連付けられてもよく、及び本明細書に記載のレイアウト決定ルールと共に、グラフの構造(例えば、ノード間の接続で具現化されるような)を用いて、処理レイアウトをノードに、及び関連して、ノードに関連付けられたコンピュータコード部分に割り当て得る。ただし、幾つかの実施形態では、コンピュータコード部分の実行順序を示す情報が、データフローグラフでエンコードされることに限定されず、その他の適宜のやり方(例えば、別のタイプの1つ又は複数のデータ構造)でエンコードされ得るので(本明細書に記載の技術の局面は、この点において限定されない)、コンピュータコード部分を実行するための処理レイアウトは、データフローグラフを用いることなく決定され得ることを認識されたい。
【0115】
従って、幾つかの実施形態では、データ処理システムは、データ処理システムによって実行されると、データ処理にデータベースクエリーを実行させるコンピュータコードを取得(例えば、リモートソースから、及び/又はネットワーク接続上で受信、ローカルストレージからアクセスなど)することができ、コンピュータコードは、(A)それぞれの入力データセットを読み込むデータ処理動作をそれぞれが表す1つ又は複数のコンピュータコード部分の第1のセット、(B)それぞれの出力データセットを書き出すデータ処理動作をそれぞれが表す1つ又は複数のコンピュータコード部分の第2のセット、及び(C)それぞれのデータ処理動作をそれぞれが表す1つ又は複数のコンピュータコード部分の第3のセットを含む。次に、データ処理システムは、コンピュータコードの一部であるコンピュータコード部分のそれぞれを実行するための処理レイアウトを決定し得る。例えば、幾つかの実施形態では、データ処理システムは、(A)コード部分の第1のセットにおける1つ又は複数のコード部分に関する1つ又は複数の処理レイアウトの第1のセットを取得(例えば、受信、アクセスなど)し、(B)コード部分の第2のセットにおける1つ又は複数のコード部分に関する1つ又は複数の処理レイアウトの第2のセットを取得し、及び(C)処理レイアウトの第1のセット、処理レイアウトの第2のセット、及び異なる度合いの並列性を有する処理レイアウトの中から選択するための少なくとも1つのルールを包含する、本明細書に記載の1つ又は複数のレイアウト決定ルールに基づいて、コード部分の第3のセットにおける各コード部分に関する処理レイアウトを決定し得る。
【0116】
幾つかの実施形態では、コンピュータコードは、データベースクエリーから生成され得る。例えば、幾つかの実施形態では、受信したデータベースクエリー(例えば、SQLクエリー)は、クエリープランに変換され、及びクエリープランは、コンピュータコードを生成するために処理され得る。例えば、クエリープランは、複数のノード及びエッジ(上記のような)を含むデータフローグラフに変換されてもよく、及びコンピュータコードは、コンピュータコード部分を包含してもよく、各コード部分は、データフローグラフにおけるノードによって表されるデータ処理動作を行うためのコードを含む。このようにして、幾つかの実施形態では、コンピュータコード部分は、データフローグラフにおけるそれぞれのノードと関連付けられ得る。
【0117】
コンピュータコードがデータフローグラフと関連付けられる幾つかの実施形態では、データフローグラフのノードは、(A)1つ又は複数のノードの第1のセットであって、ノードの第1のセットにおける各ノードが、それぞれの入力データセットを表し、(上記の)コンピュータコード部分の第1のセットにおける各コンピュータコード部分が、ノードの第1のセットにおけるそれぞれのノードと関連付けられる、1つ又は複数のノードの第1のセットと、(B)1つ又は複数のノードの第2のセットであって、ノードの第2のセットにおける各ノードが、それぞれの出力データセットを表し、(上記の)コンピュータコード部分の第2のセットにおける各コンピュータコード部分が、ノードの第2のセットにおけるそれぞれのノードと関連付けられる、1つ又は複数のノードの第2のセットと、1つ又は複数のノードの第3のセットであって、ノードの第3のセットにおける各ノードが、それぞれのデータ処理動作を表す、1つ又は複数のノードの第3のセットとを包含し得る。データ処理システムは、(1)第1及び第2のセットのノードを用いた処理レイアウトと、(2)本明細書に記載のレイアウト決定ルールの1つ又は複数と、(3)1つ又は複数の処理レイアウトをノードの第3のセット中のノードに割り当てるためのグラフの構造(データ処理動作間の順序付けを示す)とを使用し得る。これらの処理レイアウトは、次に、ノードの第3のセット中のノードと関連付けられたコンピュータコード部分を実行するために、データ処理システムによって使用され得る。
【0118】
図3A~3Dは、図2を参照して記載された実施形態を包含する、本明細書に記載の技術の幾つかの実施形態による、1つ又は複数のレイアウト決定ルールを使用した、説明のためのデータフローグラフ300におけるノードの処理レイアウトの決定を示す。特に、図3A~3Dの例は、幾つかの実施形態において、異なる度合いの並列性を有する2つの異なる処理レイアウトからレイアウトを選択することによって、ノードの処理レイアウトを決定する際に、より大きな度合いの並列性を有する処理レイアウトが、ノードの処理レイアウトとして選択され得ることを示す。
【0119】
図3Aは、それぞれの入力データセットを表すノード302及び304と、それぞれのデータ処理動作を表すノード306、308、310、及び312と、出力データセットを表すノード314とを有するデータフローグラフ300を示す。データフローグラフ300の構造から認識され得るように、ノード302によって表される入力データセットは、フィルタリングされ、ソートされ、及びその後、ノード314によって表される出力データセットに書き込まれる前に、ノード304によって表される入力データセットのフィルタリングされたバージョンと結合される。この例では、入力データセット及び出力データセットの処理レイアウトが取得された後に、図3Aに示すように、順次処理レイアウトSL1が、ノード302によって表されるデータセットからデータを読み取るために使用され、並列レイアウトPL1が、ノード304によって表されるデータセットからデータを読み取るために使用され、及び順次処理レイアウトSL2が、ノード314によって表されるデータセットに書き込むために使用されることが決定され得る。なお、順次処理レイアウトSL1及びSL2のそれぞれは、データが順次処理される(すなわち、1つの並列性の度合いを備える)ことを示すが、順次処理は、異なるプロセッサによって(例えば、ノード302によって表される入力データセットを保存するデータベースのプロセッサによって、及びノード314によって表される出力データセットを保存する別のデータベースのプロセッサによって)行われ得るので、これらの順次レイアウトは、同じである必要はない。この段階で、ノード306、308、310、及び312によって表されるデータ処理動作の処理レイアウトは、まだ決定されていない。
【0120】
図3B及び3Cは、ノード302、304、及び314に関して取得された処理レイアウトに基づいた、ノード306、308、310、及び312によって表されるデータ処理動作の処理レイアウトの決定を示す。まず、図3Bに示すように、データフローグラフ300の構造及び本明細書に記載のレイアウト決定ルールに従って、ノード302及び304から始まる順方向パスで、ノード306、308、310、及び312に関して、初期処理レイアウトが決定される。例えば、ノード306の処理レイアウトは、データフローグラフにおける先行ノード(ノード302)のレイアウトに基づいて決定される。次いで、ノード308の処理レイアウトが、データフローグラフにおける、それに先行するノード(ノード306)のレイアウトに基づいて決定される。ノード310の処理レイアウトが、それの先行ノード(すなわち、ノード304)のレイアウトに基づいて決定され、且つノード308の処理レイアウトが決定された後に、ノード312の処理レイアウトが、ノード308及び310(それぞれが、データフローグラフ300においてノード312に先行し、及びノード312に接続される)のレイアウトに基づいて決定される。
【0121】
この例では、順方向パス中に、ノード306の直前に、ノード302以外のノードが存在せず、且つ既にノード306に関連付けられたレイアウトが存在しないため、ノード302の順次レイアウトSL1が、ノード306によって表されるデータ処理動作を行うために使用されることが決定される。次いで、ノード308に先行する、ノード306以外のノードが存在せず、且つ既にノード308に関連付けられたレイアウトが存在しないため、ノード306のレイアウトSL1が、ノード308によって表されるデータ処理動作を行うために使用されることが決定される。同様に、ノード310に先行する、ノード304以外のノードが存在せず、且つ既にノード310に関連付けられたレイアウトが存在しないため、ノード304の並列レイアウトPL1が、ノード310によって表されるデータ処理動作を行うために使用されることが決定される。このようにして、レイアウトSL1及びPL1が、入力ノード302及び304から、レイアウトがまだ決定されておらず、且つ単一の先行するノード(すなわち、この説明のための例では、ノード306、308、及び310)に接続されたノードへと、グラフ300を通して伝播される。
【0122】
順方向パス中に、結合動作を表すノード312の処理レイアウトが、先行ノード308の順次レイアウトSL1及び先行ノード310の並列レイアウトPL1から選択される。図3Bに示すように、順方向パス中に、例えば、常に順次レイアウトよりも並列レイアウトが選択されることを示す、又は異なる度合いの並列性を有する2つの異なる潜在的処理レイアウトから選択する際に、より大きな度合いの並列性を有する処理レイアウトが選択されるべきであることを示すレイアウト決定ルールを使用して、ノード312に関して、並列レイアウトPL1が選択される。PL1が並列である一方でSL1は順次であるため、又は並列処理レイアウトPL1が、処理レイアウトSL1よりも大きな度合いの並列性を有するので、順方向パス中に、ノード312に関して並列処理レイアウトPL1が選択される。
【0123】
次いで、図3Cに示すように、データフローグラフ300の構造、図3Bに示した初期処理レイアウト、及び本明細書に記載のレイアウト決定ルールに従って、ノード314から始まる逆方向パスで、ノード306、308、310、及び312に関して、最終処理レイアウトが決定される。例えば、ノード312の最終処理レイアウトは、ノード312に関して決定された初期処理レイアウト、及びノード314のレイアウトに基づいて決定される。図3Cに示すように、例えば、常に順次レイアウトよりも並列レイアウトが選択されることを示すレイアウト決定ルールを使用して、逆方向パス中に、ノード312に関して並列レイアウトPL1が最終的に選択される。ノード308の最終処理レイアウトは、ノード308に関して決定された初期処理レイアウト、及びノード312に関して決定された最終処理レイアウトに基づいて決定される。ノード306の最終処理レイアウトは、ノード306に関して決定された初期処理レイアウト、及びノード308に関して決定された最終処理レイアウトに基づいて決定される。ノード310の最終処理レイアウトは、ノード310に関して決定された初期処理レイアウト、及びノード312に関して決定された最終処理レイアウトに基づいて決定される。
【0124】
この例では、逆方向パス中に、ノード312の最終処理レイアウトが、順方向パス中にノード312に関して決定された初期処理レイアウトPL1、及びノード314に関連付けられた順次処理レイアウトSL2から選択される。図3Cに示すように、レイアウトPL1が、レイアウトSL2よりも大きな度合いの並列性を有するので、レイアウトPL1が、ノード312の最終処理レイアウトであると決定される。ノード308の最終処理レイアウトが、順方向パス中にノード308に関して決定された初期レイアウトSL1、及び逆方向パス中にノード312に関して決定された最終処理レイアウトPL1から選択される。図3Cに示すように、レイアウトPL1が、レイアウトSL1よりも大きな度合いの並列性を有するので、レイアウトPL1が、ノード308の最終処理レイアウトであると決定される。ノード306の最終処理レイアウトが、順方向パス中にノード306に関して決定された初期レイアウトSL1、及び逆方向パス中にノード308に関して決定された最終処理レイアウトPL1から選択される。図3Cに示すように、レイアウトPL1が、レイアウトSL1よりも大きな度合いの並列性を有するので、レイアウトPL1が、ノード304の最終処理レイアウトであると決定される。順方向パス中にノード310に関して決定された初期レイアウトがPL1であり、且つ逆方向パス中にノード312に関して決定された最終レイアウトもPL1であるので、ノード310の最終処理レイアウトは、PL1であると決定される。
【0125】
図3Cに示すように、データフローグラフ300の各ノードに関して処理レイアウトが決定された後に、データフローグラフ300は、1つ又は複数の再パーティショニング動作を行うように構成され得る。本明細書に記載するように、データフローグラフにおける隣接するノードが、異なる度合いの並列性を有する処理レイアウトを用いて、データレコードに対してデータ処理動作を行うように構成される場合に、データフローグラフは、データレコードに対して再パーティショニング動作を行うように構成され得る。例えば、図3Cに示すように、隣接するノード302(SL1)及びノード306(PL1)の処理レイアウトが、異なる度合いの並列性を有する。隣接するノード312(PL1)及びノード314(SL2)の処理レイアウトも、異なる度合いの並列性を有する。
【0126】
幾つかの実施形態では、データフローグラフは、再パーティショニング動作を表す新しいノードをグラフに追加することによって、再パーティショニング動作を行うように構成され得る。例えば、図3Dに示すように、パーティション動作(例えば、パーティション・バイ・キー動作)を表す新しいノード342が、ノード302とノード306との間で、データフローグラフに追加され得る。データレコードが、ノード342を有するデータフローグラフに従って処理される場合、データレコードは、ノード302の処理レイアウトSL1を用いて読み取られた後であるが、ノード306の処理レイアウトPL1を用いてフィルタリングされる前に、ノード342によって表されるパーティショニング動作に従って、パーティションが行われる。パーティショニング動作は、ノード308のレイアウトSL1に従って行われ得る。加えて、図3Dに示すように、マージ動作を表す新しいノード344が、ノード312とノード314との間で、データフローグラフに追加され得る。データレコードが、ノード344を有するデータフローグラフに従って処理される場合、データレコードは、ノード312の処理レイアウトPL1を用いて処理された後であるが、ノード314の処理レイアウトSL2を用いて出力される前に、マージされる。マージング動作は、ノード314のレイアウトSL2に従って行われ得る。
【0127】
図3Dの説明のための例では、データフローグラフ340を取得するために、2つの新しいノードが、データフローグラフ300に追加される。ただし、幾つかの実施形態では、データフローグラフは、グラフに新しいノードを追加することなく、1つ又は複数の再パーティショニング動作を行うように構成され得ることを認識されたい。幾つかの実施形態では、1つ又は複数の既存のノードのそれぞれが、それぞれの再パーティショニング動作を行うように構成され得る。例えば、図3Dの説明のための実施形態に示すように新しいノード342を追加するのではなく、ノード302又はノード306のどちらかが、パーティショニング動作を行うように構成され得る。別の例として、図3Dの説明のための実施形態に示すように新しいノード344を追加するのではなく、ノード312又はノード314のどちらかが、マージング動作を行うように構成され得る。
【0128】
図4A~4Cは、図2を参照して記載された実施形態を包含する、本明細書に記載の技術の幾つかの実施形態による、1つ又は複数のレイアウト決定ルールを使用した、説明のためのデータフローグラフ400におけるノードの処理レイアウトの決定を示す。特に、図4A~4Cの例は、幾つかの実施形態において、同じ又は異なる度合いの並列性を有する2つの並行処理レイアウトからレイアウトを選択することによって、ノードの処理レイアウトを決定する際に、より多数のレコードに適用される処理レイアウトが、ノードの処理レイアウトとして選択され得ることを示す。例えば、異なる度合いの並列性を有する複数の並列処理レイアウトのうち、並列性の度合いが最も高い処理レイアウトを選択する代わりに、複数の並列処理レイアウトのうち、最大のレコード数に適用される処理レイアウトが、当該ノードの処理レイアウトとして選択されてもよい。これにより、コンピューティングデバイス間を移動するデータレコードの数が可能な限り少なく抑えられるため、コンピューティングリソースをより効率的に使用することにつながる。
【0129】
図4Aは、それぞれの入力データセットを表すノード402及び404と、データ処理動作を表すノード406と、出力データセットを表すノード408とを有するデータフローグラフ400を示す。データフローグラフ400の構造から認識され得るように、N個のデータレコードを有し、及びノード402によって表される入力データセットが、M個のレコード(Mは、Nより小さい)を有し、及びノード404によって表される入力データセットと結合される。データセットが結合された後に、それらは、ノード408によって表される出力データセットに書き込まれる。この例では、入力データセット及び出力データセットの処理レイアウトが取得された後に、並列処理レイアウトPL1が、ノード402によって表されるデータセットからデータを読み取るために使用され、並列処理レイアウトPL2が、ノード404によって表されるデータセットからデータを読み取るために使用され、及び順次レイアウトSL1が、ノード408によって表される出力データセットにデータレコードを書き込むために使用されることが決定され得る。並行処理レイアウトPL1及びPL2のそれぞれは、同じ又は異なる度合いの並列性を有する。この段階で、ノード406によって表される結合動作の処理レイアウトは、まだ決定されていない。
【0130】
順方向パス中に、データフローグラフ400におけるノード406に先行するノード402及び404の処理レイアウトに基づいて、ノード406の初期処理レイアウトが決定される。図示した例では、ノード406の初期処理レイアウトは、ノード402に関連付けられた処理レイアウトPL1、及びノード404に関連付けられた処理レイアウトPL2の中から選択される。並列レイアウトPL1及びPL2の並列性の度合いに関係なく、レイアウトPL1は、M<N個のデータレコードを処理する(例えば、ノード404によって表される入力データセットからM個のデータレコードを読み取る)ために適用されるレイアウトPL2よりも、より多くのレコード数Nを処理する(例えば、ノード402によって表される入力データセットからN個のデータレコードを読み取る)ために適用されるので、PL1が、ノード406に関する初期処理レイアウトとして選択される。この選択は、レイアウトPL1に従ってノード406によって表される結合動作を処理する場合に、レイアウトPL2に従って結合動作が処理される場合に移動される必要があるレコードの数(例えば、N個のレコード)よりも、移動される必要があるデータレコードの数(例えば、M<N個のレコード)が少なくなり得るため、効率を目的として行われ得る。
【0131】
次に、逆方向パス中に、ノード406の最終処理レイアウトが、ノード406に関して決定された初期処理レイアウト(PL1)、及びノード408に関連付けられた処理レイアウト(SL1)に基づいて決定される。ルールに従って、順次レイアウトSL1よりも並列レイアウトPL1が選択されるため、PL1が、ノード406の最終処理レイアウトであると決定される。従って、順方向パス及び逆方向パスが完了した後に、図4Bに示すように、PL1が、ノード406の最終処理レイアウトであると決定される。順方向パス中にも、逆方向パス中にも、並列処理レイアウトは一般に、選択に関して順次処理レイアウトよりも優先される場合があり、順次処理レイアウトのみが考慮される場合、又は複数の並列処理レイアウトが考慮される場合には、考慮されるレイアウトのうち、最大数のデータレコードを処理するために使用される処理レイアウトが、当該特定のノードに関して選択される。
【0132】
図4Bに示すように、データフローグラフ400の各ノードに関して処理レイアウトが決定された後に、データフローグラフ400は、1つ又は複数の再パーティショニング動作を行うように構成され得る。本明細書に記載するように、データフローグラフにおける隣接するノードが、異なる度合いの並列性を有する処理レイアウトを用いて、データレコードに対してデータ処理動作を行うように構成される場合に、データフローグラフは、データレコードに対して再パーティショニング動作を行うように構成され得る。例えば、図4Bに示すように、隣接するノード406(PL1)及びノード408(SL1)の処理レイアウトが、異なる度合いの並列性を有する。
【0133】
本明細書に述べた通り、幾つかの実施形態では、データフローグラフは、再パーティショニング動作を表す新しいノードをグラフに追加することによって、再パーティショニング動作を行うように構成され得る。例えば、図4Cに示すように、データフローグラフ430を取得するために、マージ動作を表す新しいノード407が、データフローグラフ400に追加され得る。データレコードが、ノード407を有するデータフローグラフに従って処理される場合、データレコードは、ノード406の処理レイアウトPL1を用いて処理された後であるが、ノード408の処理レイアウトSL1を用いて出力される前に、マージされる。マージング動作は、ノード408のレイアウトSL1に従って行われ得る。他の実施形態では、マージ動作を行うために新しいノードをデータフローグラフ400に追加する代わりに、既存のノードの一方(例えば、406又は408)が、マージ動作を行うように構成され得る。
【0134】
図5A~5Dは、図2を参照して記載された実施形態を包含する、本明細書に記載の技術の幾つかの実施形態による、1つ又は複数のレイアウト決定ルールを使用した、説明のためのデータフローグラフ500におけるノードの処理レイアウトの決定を示す。特に、図5A~5Dの例は、幾つかの実施形態において、ある処理レイアウトが、特定のノードを越えて伝播されない特定の1つ又は複数のノードのレイアウトとして、他のノードの処理レイアウトを決定する際に、選定され得ることを示す。
【0135】
図5Aは、それぞれの入力データセットを表すノード502及び504と、それぞれのデータ処理動作を表すノード506、508、510、及び512と、出力データセットを表すノード514とを有するデータフローグラフ500を示す。データフローグラフ500の構造から認識され得るように、ノード502によって表される入力データセットは、まずフィルタリングされ、次に、フィルタリングされたデータに対して、ロールアップ動作が行われ、及びロールアップ動作の結果として取得されたデータレコードが、ノード514によって表される出力データセットに書き込まれる前に、ノード504によって表される入力データセットのフィルタリングされたバージョンと結合される。この例では、入力データセット及び出力データセットの処理レイアウトが取得された後に、図5Aに示すように、並列処理レイアウトPL1が、ノード502によって表される入力データセットからデータを読み取るために使用され、順次レイアウトSL1が、ノード504によって表される入力データセットからデータを読み取るために使用され、及び順次処理レイアウトSL2が、ノード514によって表される出力データセットに書き込むために使用されることが決定され得る。加えて、この例では、処理レイアウトPL1が、他のノードに伝播されないという指示が、取得され得る。この指示は、任意の適宜のやり方で取得することができ、例えば、グラフィカルユーザインタフェースを介してユーザから取得され得る。この段階で、ノード506、508、510、及び512によって表されるデータ処理動作の処理レイアウトは、まだ決定されていない。
【0136】
図5B及び5Cは、ノード502、504、及び514に関して取得された処理レイアウトに基づいた、ノード506、508、510、及び512によって表されるデータ処理動作の処理レイアウトの決定を示す。まず、図5Bに示すように、データフローグラフ500の構造及び本明細書に記載のレイアウト決定ルールに従って、ノード502及び504から始まる順方向パスで、ノード506、508、510、及び512に関して、初期処理レイアウトが決定される。この例では、ノード502の処理レイアウトPL1が伝播されないという指示が取得されているので、レイアウトPL1は、フィルタリング動作を表すノード506に対してのみコピーされ(フィルタリング動作は、ノード502によって表される入力データセットからデータレコードを読み取るために使用されるレイアウトと同じ処理レイアウト(実際には、同じコンピューティングデバイス)を使用して行われ得るタイプの動作であるので)、例えば、ロールアップ動作を表すノード508などの他のノードへはコピーされない。
【0137】
従って、順方向パス中に、ノード506の初期処理レイアウトが、PL1であると決定され、及びPL1がノード506を越えて伝播されないので、ノード508の初期処理レイアウトは決定されない。以下に述べるように、ノード508の処理レイアウトは、逆方向パスにおいて決定される。
【0138】
加えて、順方向パス中に、ノード510の直前に、ノード504以外のノードが存在せず、且つ既にノード510に関連付けられたレイアウトが存在しないため、ノード510の初期処理レイアウトが、ノード504の順次レイアウトSL1であると決定される。次いで、ノード510が、ある特定のレイアウトと関連付けられた、ノード512に先行する唯一のノードであるので(上述の通り、ノード508は、ノード512に先行するが、それは、どの初期処理レイアウトとも関連付けられていない)、ノード510の初期処理レイアウトSL1も、ノード512の初期処理レイアウトであると決定される。順方向パスの結果として決定された初期処理レイアウトを図5Bに示す。ノード508を除く全てのノードが、初期処理レイアウトを割り当てられている。
【0139】
次に、図5Cに示すように、データフローグラフ500の構造、図5Bに示した初期処理レイアウト、及び本明細書に記載のレイアウト決定ルールに従って、ノード514から始まる逆方向パスで、ノード506、508、510、及び512に関して、最終処理レイアウトが決定される。例えば、ノード512の最終処理レイアウトは、ノード512に関して決定された初期処理レイアウト、及びノード514に関連付けられた処理レイアウトに基づいて決定される。ノード508の最終処理レイアウトは、ノード512に関して決定された最終処理レイアウトに基づいて決定される(この例では、ノード508に関して、初期レイアウトは決定されていない)。ノード506の最終処理レイアウトは、ノード506に関して決定された初期処理レイアウト、及びノード508に関して決定された最終処理レイアウトに基づいて決定される。ノード510の最終処理レイアウトは、ノード510に関して決定された初期処理レイアウト、及びノード512に関して決定された最終処理レイアウトに基づいて決定される。
【0140】
この例では、逆方向パス中に、ノード512の最終処理レイアウトが、順方向パス中にノード512に関して決定された初期処理レイアウトSL1、及びノード514に関連付けられた順次処理レイアウトSL2から選択される。図5Cに示すように、レイアウトSL1が、ノード512の最終処理レイアウトであると決定される。ノード508の最終処理レイアウトは、レイアウトSL1が、ノード512の最終決定レイアウトであり、及びノード508が、順方向パス後に、どの初期処理レイアウトとも関連付けられていないので、レイアウトSL1であると決定される。ノード506の最終処理レイアウトは、PL1が、ノード508の最終処理レイアウトであると決定されたレイアウトSL1よりも大きな度合いの並列性を有するので、PL1(ノード506に関して決定された初期レイアウト)であると決定される。ノード510の最終処理レイアウトは、順方向パス中にノード510に関して決定された初期レイアウトがSL1であり、且つ逆方向パス中にノード512に関して決定された最終レイアウトもSL1であるので、SL1であると決定される。
【0141】
図5Cに示すように、データフローグラフ500の各ノードに関して処理レイアウトが決定された後に、データフローグラフ500は、1つ又は複数の再パーティショニング動作を行うように構成され得る。本明細書に記載するように、データフローグラフにおける隣接するノードが、異なる度合いの並列性を有する処理レイアウトを用いて、データレコードに対してデータ処理動作を行うように構成される場合に、データフローグラフは、データレコードに対して再パーティショニング動作を行うように構成され得る。例えば、図5Cに示すように、隣接するノード506(PL1)及びノード508(SL1)の処理レイアウトが、異なる度合いの並列性を有する。
【0142】
本明細書に述べた通り、幾つかの実施形態では、データフローグラフは、再パーティショニング動作を表す新しいノードをグラフに追加することによって、再パーティショニング動作を行うように構成され得る。例えば、図5Dに示すように、データフローグラフ530を取得するために、マージ動作を表す新しいノード532が、データフローグラフ500に追加され得る。データレコードが、ノード532を有するデータフローグラフに従って処理される場合、データレコードは、ノード506の処理レイアウトPL1を用いて処理された後であるが、ノード508の処理レイアウトSL1を用いて出力される前に、集約される。集約動作は、ノード508のレイアウトSL1に従って行われ得る。他の実施形態では、集約動作を行うために新しいノードをデータフローグラフ500に追加する代わりに、既存のノードの一方(例えば、506又は508)が、集約動作を行うように構成され得る。
【0143】
図6は、本明細書に記載する技術の幾つかの実施形態が動作し得る、説明のためのコンピューティング環境600のブロック図である。環境600は、データ記憶装置610、612、614、及び616にアクセスする(例えば、データを読み取る、及び/データを書き込む)ように構成されたデータ処理システム602を包含する。データ記憶装置610、612、614、及び616のそれぞれは、1つ又は複数のデータセットを保存し得る。データ記憶装置は、任意の適宜のタイプのデータを、任意の適宜のやり方で保存し得る。データ記憶装置は、フラットテキストファイルとして、スプレッドシートとして、データベースシステム(例えば、リレーショナルデータベースシステム)を使用して、又はその他の適宜のやり方で、データを保存し得る。場合によっては、データ記憶装置は、トランザクションデータを保存し得る。例えば、データ記憶装置は、クレジットカード決済、通話記録データ、又は銀行取引データを保存し得る。データ処理システム602は、任意の適宜のタイプの、任意の適宜の数のデータ記憶装置にアクセスするように構成され得ることを認識されたい(本明細書に記載する技術の局面は、この点において限定されない)。
【0144】
データ処理システムは、一人又は複数のユーザにデータフローグラフを作成するためのインタフェースを提供するグラフィカル開発環境(GDE)606を包含する。GDE606を使用して作成されたデータフローグラフは、共働システム610、又はその他の適宜の、データフローグラフを実行するための実行環境を用いて実行され得る。グラフィカル開発環境及びデータフローグラフを実行するための環境の局面は、それぞれ本明細書に全体として援用される、「グラフとして表現される計算の実行」というタイトルの米国特許第5,966,072号明細書、及び「グラフベース計算のパラメータ管理」というタイトルの米国特許第7,716,630号明細書に記載されている。GDE606を使用して作成された、又はその他の適宜のやり方で取得されたデータフローグラフは、データ処理システム602の一部であるデータフローグラフ記憶装置608に保存され得る。
【0145】
データ処理システム602は、データフローグラフのノードの処理レイアウトを、共働システム610による、そのデータフローグラフの実行前に決定するように構成された並列処理モジュール604も包含する。並列処理モジュール604は、例えば図2のプロセス200を参照して記載した技術を包含する、本明細書に記載の技術の何れかを使用して、データフローグラフのノードの処理レイアウトを決定し得る。
【0146】
剪定伝播(Pruned Propagation)
本発明者らは、状況によっては、上記のレイアウト伝播技術を使用して決定された処理レイアウトが、必要以上の計算を生じさせ得ることを認識した。特に、本発明者らは、データフローグラフ内のノードによって処理されるデータの少なくとも一部が下流の処理で使用されない状況において、追加の最適化が利用可能であり得ることを認識した。本発明者らは、このようなデータフローグラフが実行されたときに全体的な性能を向上させるやり方で、このような状況においてデータフローグラフのノードに処理レイアウトを割り当てるための技術を開発した。
【0147】
一例として、データフローグラフによってアクセスされる異なるデータセットが、異なる度合いの並列性を用いて保存されている状況を考える。例えば、1つの入力データセット(「A」)は、1つの場所に保存されたファイルであってもよく、別の入力データセット(「B」)は、分散ファイルシステム(例えば、Hadoop分散ファイルシステム)を使用して4つの異なる場所に保存されてもよい。この場合、本明細書に記載するレイアウト伝播技術は、順次処理レイアウト及び4元並列処理レイアウトをデータフローグラフ内の様々なノードに伝播することができる。そして、より高い度合いの並列性を有するレイアウトを優先するという上記のレイアウト伝播ルールを前提として、様々なデータフローグラフノードに関して(例えば、2つのデータソースからのデータに対する結合動作又はユニオンオール動作を表すノードに関して)、順次レイアウトよりも4元並列処理レイアウトが選択されることになる。これは良いことである。しかし、入力データセット「B」からのデータが実際にはデータフローグラフの出力の計算(例えば、データフローグラフが生成されたSQLクエリーの結果の計算)に全く使用されない場合は、データセット「B」に関連付けられた4元並列レイアウトをデータフローグラフの他の部分に伝播させることにより、実際に性能が悪化し得る。
【0148】
より一般的には、本発明者らは、幾つかの実施形態において、データフローグラフ内の特定のノード(又は複数のノード)によって生成されたデータは、データフローグラフ内の下流のノードによって使用されない場合があるが、それにもかかわらず、これらの特定のノードに割り当てられた処理レイアウトは、データフローグラフ内の他のノードに伝播される場合があり、これは、準最適性能をもたらし得ることを認識した。
【0149】
性能低下の理由の1つは、結果として生じるデータフローグラフが、実行中に使用されなかったノード(例えば、入力ノード及び/又は出力ノード)から伝播された処理レイアウトを含む、複数の異なる処理レイアウトに関連付けられた1つ又は複数のノードを有することである。このようなノードは、グラフから剪定される場合があるが、それにもかかわらず、これらのノードに関連付けられた処理レイアウトは、グラフの他の部分に伝播され得る。その結果、追加の再パーティショニング動作(例えば、パーティションバイキー、ラウンドロビンパーティション、集約、マージ)がデータフローグラフに導入される可能性があり、これにより、データフローグラフを実行するために必要な処理リソースの全体量が増加する。図8A~8Jを参照して、これの一例を説明する。
【0150】
性能低下の別の理由は、データフローグラフの実行方法に関連する。特定のより単純なタイプのデータフローグラフは、単一のコンピューティングデバイス(例えば、マイクログラフサーバ)上で単一のプロセスを使用して、マイクログラフとして実行することができる。これは、データフローグラフを実行するための起動時間を秒単位からマイクロ秒単位へと短縮するので有利であり、重要な実用上の考慮すべき事項である。マイクログラフの態様は、2014年10月22日に出願された「グラフベース計算の動的ローディング(Dynamically Loading Graph-Based Computations)」という名称の米国特許第9,753,751号明細書に記載されており、これは、参照によりその全体が組み込まれる。
【0151】
幾つかの実施形態では、データフローグラフの実行がプロセス間通信を伴わない場合、データフローグラフは、マイクログラフとして実行され得る。従って、幾つかの実施形態では、再パーティショニングコンポーネント及び/又は異なる度合いの並列性を有するノードを有するデータフローグラフは、マイクログラフとして実行することができない。一方、順次レイアウトのみを有するノードを有するデータフローグラフは、マイクログラフとして実行することができる。その結果、データ処理システム(例えば、データ処理システム602)は、データフローグラフ(例えば、その一部)のノードに割り当てられた処理レイアウトに基づいて、特定のデータフローグラフ(データフローグラフ全体又はデータフローグラフの一部)をマイクログラフとして実行することを決定することができる。データフローグラフから剪定されたノードに関連付けられた処理レイアウト(例えば、並列処理レイアウト)がグラフ内の他のノードに伝播される場合、これは、結果として生じるグラフがマイクログラフとして実行されることを阻止し得る。例えば、グラフの剪定された部分からの並列レイアウトの伝播を別にすれば、他の全てのデータフローグラフノードが順次処理レイアウトを有するような状況が存在し得る。このような状況では、グラフの剪定された部分から並列レイアウトを伝播させることにより、結果として生じるグラフがマイクログラフとして実行されることが阻止され、性能が悪化し得る。
【0152】
上記の問題に対処するために、本発明者らは、剪定されるべきノード(例えば、グラフ内の下流のノードによって使用されないデータを出力するノード)に関連付けられた処理レイアウトが処理レイアウト伝播中に伝播されない、改良された処理レイアウト伝播技術を開発した。そのため、開発された技術は、1つ又は複数のノードの特定のセットによって使用されないデータが、ノードの特定のセットから下流のデータフローグラフ内の何れのノードによっても使用されないことを示す情報を使用して、レイアウト伝播を行うことを含む。
【0153】
幾つかの実施形態では、処理レイアウトは、2つのレイアウト伝播パス(順方向伝播パス及び逆方向伝播パス)で決定される。幾つかの実施形態では、本発明者らによって開発された技術は、順方向パス中に、データフローグラフ内の何れの下流ノードによっても出力が使用されないノードである、「使用されない(unused)」ノード又は「剪定されるべき(to-be-pruned)」ノードを識別することと、そのような「使用されない」ノードに関連付けられた処理レイアウトが(順方向パス中に、及び任意選択的に逆方向パス中に)他のノードに伝播されることを阻止することと、を含む。
【0154】
例えば、図7の説明のためのデータフローグラフ700の状況で示されるように、データ処理システムは、ノード704の出力が、グラフ内の下流ノード(すなわち、ノード710、712、及び714)の何れによっても必要とされないと決定することができる。その意味で、データフローグラフ700のノード705(ノード702及びノード704を含む)は、使用されず、グラフの実行の前に行われるデータフローグラフ最適化の一部として剪定され得る。この状況において、本発明者らによって開発された技術は、(1)ノード704を「使用されない」ノードであると識別することと、(2)ノード704に関連付けられた処理レイアウトPL1が、順方向パス及び逆方向パス中にグラフ内の他のノード(例えば、ノード708、710、及び712)へと伝播されることを阻止することと、を含む。結果として、残りのノード(704、708、710、712、及び714)には全て順次レイアウトが割り当てられ、再パーティショニング動作は追加されず、結果として生じるグラフは、マイクログラフとして実行され得る。
【0155】
上記のように、幾つかの実施形態では、データ処理システムは、データフローグラフ内のノードに割り当てられた処理レイアウトに基づいて、データフローグラフがマイクログラフとして実行されるべきか否かを決定することができる。幾つかの実施形態では、この決定は、「使用されない」ノードに割り当てられた処理レイアウトを考慮せずに行われる。従って、順方向(又は逆方向)の処理レイアウト伝播パス中にノードが「使用されない」ノードとしてフラグを付けられた場合は、その特定のノードに関連付けられた処理レイアウトは、データフローグラフが全体としてマイクログラフとして実行され得るか否かを決定するために使用されない。
【0156】
ここで図面を参照して、前述の詳細な非限定例を説明する。図8A~8Jは、「使用されない」ノードからグラフの他の部分への処理レイアウトの伝播によって、必要以上の再パーティショニング動作の導入がもたらされ、それによって、データフローグラフを実行するために必要な処理リソースの全体量が増加し、それがマイクログラフとして実行されることが阻止される例を説明する。その後、この問題に対処するために本発明者らによって開発された技術を、図9A~9Dを参照して説明する。
【0157】
図8Aは、本明細書に記載する技術の幾つかの実施形態による、データフローグラフとして処理される、説明のためのSQLクエリー801を示す。図8Aに示すように、SQLクエリーは、(1)「アーカイブデータ」と呼ばれる第1のデータソースから、2015年1月1日より前の日付の全てのレコードを選択することと、(2)「新規データ」と呼ばれる第2のデータソースから、2015年1月1日以降の日付の全てのレコードを選択することと、(3)「ユニオンオール」動作を用いて、これら全てのレコードを統合することと、(4)統合されたレコードから、日付「D」を有するものを選択することと、を含む。このクエリーから容易に理解できるように、日付「D」が2015年1月1日より前の場合は、第2のデータソース(「新規データ」)からのレコードは何れも不要であり、クエリーの結果には含まれない。同様に、日付「D」が2015年1月1日以降である場合は、第1のデータソース(「アーカイブデータ」)からのレコードは何れも不要であり、クエリーの結果には含まれない。
【0158】
この例では、「アーカイブデータ」データソースは、並列レイアウト(「PL1」)と関連付けられており、このことは、このデータソースから読み取られたデータがこの並列レイアウトを使用して読み取られることを意味する。一方、この例では、「新規データ」データソースは、順次レイアウト(「SL1」)に関連付けられており、このことは、このデータソースから読み取られたデータが順次レイアウトを使用して読み取られることを意味する。クエリーの出力は、順次データレイアウトを使用して書き込まれる。以下により詳細に説明するが、この例では、クエリー結果を生成するために「アーカイブデータ」からのデータは不要であるが(例えば、日付「D」が2015年1月1日以降の場合)、「新規データ」データソースに関連付けられた並列レイアウト(「PL1」)が(例えば、本明細書に記載するレイアウト伝播ルールを使用して)伝播され、(順次である)「新規データ」ソースから読み込まれたデータを処理するために使用される場合があり、再パーティショニングコンポーネントの導入が必要となり、全体的な性能に影響を与える。
【0159】
図8Bは、本明細書に記載する技術の幾つかの実施形態による、図8Aに示されるSQLクエリー801から生成された、説明のためのデータフローグラフ800を示す。例えば、SQLクエリー801は、クエリープランを生成するために使用することができ、データフローグラフ800は、図2に示されるプロセス200を参照することを含めて本明細書に記載されるように、クエリープランから生成することができる。図8Bに示すように、データフローグラフ800は、並列処理レイアウト「PL1」を使用して「アーカイブデータ」データソースからデータを読み取るためのノード802と、順次処理レイアウト「SL1」を使用して「新規データ」データソースからデータを読み取るためのノード804と、順次処理レイアウト「SL1」を使用してデータフローグラフによって行われた処理の結果を出力するためのノード814と、を含む。データフローグラフはさらに、「アーカイブデータ」データソースから取得されたレコードに対して、2015年1月1日より前の日付のレコードのみを選択するために行われるフィルタリング動作を表すノード806と、「新規データ」データソースから取得されたレコードに対して、2015年1月1日以降の日付のレコードのみを選択するために行われるフィルタリング動作を表すノード808と、「ユニオンオール」動作を表すノード810と、(ユニオンオール動作の結果得られるレコードの中から)日付「D」を有するレコードを選択するためのフィルタリング動作を表すノード812と、を含む。
【0160】
図8Bに示すように、ノード806、808、810、及び812の処理レイアウトは、まだ設定されていない。これらの処理レイアウトは、図8C及び図8Dに示すように、本明細書に記載するレイアウト伝播技術に従って設定され得る。具体的には、図8Cは、順方向レイアウト伝播パス中にデータフローグラフ800内のノードに関して決定された処理レイアウトを示すデータフローグラフ815を示す。図から分かるように、並列レイアウトPL1は、ノード806に伝播され、順次処理レイアウトSL1は、ノード808に伝播されている。次に、並列レイアウトPL1は、ノードの処理レイアウトを(例えば、データフローグラフ内の当該ノードの直前のノードに割り当てられた)2つ以上の処理レイアウトのグループから選択する場合に、並列性の度合いが最も高い処理レイアウトが選択され得るという処理レイアウト決定ルールに基づいて、2つの選択肢(PL1及びSL1)の中からレイアウトPL1を選択することによって、ノード810に割り当てられている。PL1は最も高い度合いの並列性を有するので、このレイアウトがノード810に関して選択され、その後、ノード812にも伝播される。
【0161】
順方向処理レイアウト伝播パスの後に、逆方向処理レイアウト伝播パスが行われ、決定されたレイアウトが、図8Dのデータフローグラフ820に示されている。注目すべきことに、逆方向パス中に、ノード808の処理レイアウトは、PL1レイアウトが、ノード810から伝播され、順次レイアウト「SL1」よりも高い度合いの並列性を有するため、順次(この例では「SL1」)から並列(この例では「PL1」)に更新される。
【0162】
図8C~8Dは、図8Aに示すSQLクエリー801から生成された最適化されていないデータフローグラフに処理レイアウトがどのように割り当てられるかを示す。しかしながら、幾つかの実施形態において、図8Bに示されるデータフローグラフ800は、関心のある日付「D」についてより多くの情報が分かっている場合に最適化され得る。具体的には、SQLクエリー801が、2007年5月19日の日付を有するデータレコードが要求されるように、SQLクエリー831を(その最後の行の代わりに)含むと仮定する。この場合、「新規データ」データソースからのレコードが不要になるため、生成されたデータフローグラフは、ユニオンオール動作の後ろのブランチを剪定することによって最適化され得る。図8Eは、この状況で生成され得る、説明のためのグラフ830を示す。
【0163】
図8Eに示すように、データフローグラフ830は、フィルタリングノード816及び818を含む。ノード816は、「アーカイブデータ」データソースから2007年5月19日の日付を有するレコードを選択するためのフィルタリング動作を表す。ノード818は、このノードによって出力された結果が、データフローグラフ内のこのノードから下流の何れの動作によっても使用されないことを示すフラグに関連付けられたフィルタリング動作を表す。この例では、フラグは、「ワンタイムフィルタリング」フラグであり、「偽」に設定される(例えば、PostgreSQLの実装では、「0」に設定された「one_time_filter」フラグを有するPResultOperatorの後ろに最下部ブランチが配置され得る)。レイアウト伝播後、割り当てられた処理レイアウトが図8Fのデータフローグラフ835に示されている。
【0164】
図8Fのデータフローグラフ835は、その後、図8Gに示すように最適化される。ノード818によって生成された結果は、SQLクエリー831の結果を生成するために使用されないので、ノード804及び818が除去されるように、最下部ブランチが剪定される。グラフの最下部ブランチが剪定されたため、ユニオンオール動作の必要がないため、ノード810も除去される。処理レイアウトPL1がノード816に割り当てられ、処理レイアウトSL1がノード814に割り当てられるため、再パーティショニング動作(例えば、集約動作又はマージ動作)を行うためのノード817がグラフに追加される。この場合、処理は効率的に進行し、並列処理レイアウトPL1は、「アーカイブデータ」データソースからのデータにアクセスするために使用される。
【0165】
しかしながら、図8H~8Iを参照して次に説明するように、グラフの異なるブランチが剪定される場合は状況が異なる。具体的には、2018年6月10日のデータを有するデータレコードが要求されるように、SQLクエリー801が(その最後の行の代わりに)SQLクエリー851を含むと仮定する。この場合、「アーカイブデータ」データソースからのレコードが不要であるため、生成されたデータフローグラフは、ユニオンオール動作の後ろにあるグラフの他のブランチを剪定することによって最適化され得る。図8Hは、この状況で生成され得る、説明のためのグラフ845を示す。
【0166】
図8Hに示すように、データフローグラフ845は、フィルタリングノード822及び824を含む。ノード824は、「新規データ」データソースから2018年6月10日の日付を有するレコードを選択するためのフィルタリング動作を表す。ノード822は、このノードによって出力された結果が、データフローグラフ内のこのノードから下流の何れの動作によっても使用されないことを示すフラグに関連付けられたフィルタリング動作を表す。この例では、フラグは、「ワンタイムフィルタリング」フラグであり、「偽」に設定される(例えば、PostgreSQLの実装では、「0」に設定された「one_time_filter」フラグを有するPResultOperatorの後ろに最下部ブランチが配置され得る)。レイアウト伝播後、割り当てられた処理レイアウトが図8Iのデータフローグラフ850に示されている。
【0167】
図8Iのデータフローグラフ850は、その後、図8Jのデータフローグラフ855に示すように最適化される。ノード822によって生成された結果は、SQLクエリー851の結果を生成するために使用されないので、ノード802及び822が除去されるように、最上部ブランチが剪定される。グラフの最上部ブランチが剪定されたため、ユニオンオール動作の必要がないため、ノード810も除去される。並列処理レイアウトPL1がノード808に割り当てられ、順次処理レイアウトSL1がノード804 814に割り当てられるため、再パーティショニング動作(例えば、パーティション動作及び集約動作)を行うためのノード832及び834がグラフに追加される。
【0168】
データフローグラフ855から分かるように、順次データソースから読み取り、順次データシンクに書き込むグラフに並列処理が導入される。そのため、この例では、そうでなければ順次のデータフローグラフに、剪定されたブランチ(剪定されたブランチからの伝播)に由来する並列処理レイアウトで実行されるコンポーネント(ノード824)が含まれる。これは、2つの再パーティショニング動作の導入を必要とするという点で非効率的であり、どちらの動作も、ノード824が順次処理レイアウトに関連付けられている場合には不要である。しかしながら、これら2つの再パーティショニング動作の導入は、グラフの実行に悪影響を及ぼす。第一に、グラフは、もはや単一のプロセス(例えば、マイクロサーバ上で実行される単一のプロセス)によって実行することができない。これにより、グラフの起動時間がマイクロ秒単位から秒単位に増加する。第二に、再パーティショニング動作は、実行に時間がかかるため、コンピュータリソース(例えば、プロセッサ、メモリ、ネットワーキングなど)が消費され、全体的な実行時間及び計算資源の割り当てが準最適となる。
【0169】
図8A~8Jを参照した上記例はユニオンオール動作を含むが、同様の問題は、他の動作の状況でも生じ得る。例えば、同様の問題は、結合動作の状況でも生じ得る。例えば、データフローグラフは、2つのテーブルT1及びT2を結合するためのノードを有し得るが、T1からのデータは、結合に続く何らかの処理を行うために必要とされない場合がある。この例では、T1が並列処理レイアウトを使用して読み込まれ、T2が順次処理レイアウトを使用して読み込まれる場合、T1に関連付けられたノードは剪定され得るが、それにもかかわらず、並列処理レイアウトは伝播し、T2からのデータを処理するための他のノードに影響を及ぼし得る。
【0170】
本発明者らは、上記の例で生じる状況が望ましくないことを認識している。具体的には、本発明者らは、データフローグラフの剪定されたブランチからの並列レイアウトが、ブランチから出てグラフの残りの部分に伝播される状況を回避することが有益であることを認識している。これを防ぐことができれば、特定の状況(例えば、そうでなければ順次のグラフを並列コンポーネントで実行すること)を回避することができる。
【0171】
従って、本発明者らは、処理レイアウト伝播の一部として(例えば、順方向及び/又は逆方向処理レイアウト伝播パス中に)、データフローグラフから剪定されるべき1つ又は複数のノードを識別すること(例えば、データフローグラフ内の何れの他の下流ノードによっても出力が使用されない1つ又は複数のノードを識別することによって)と、そのようなノードに関連付けられた処理レイアウトを伝播しないこととを含む技術を開発した。さらに、そのようなノードに関連付けられた処理レイアウトは、グラフをマイクログラフとして実行できるか否かを決定するために使用されない。このようにして、図8A~8Jを参照することを含めて上記に記載した望ましくない効果を回避することができる。この問題を解決するために本発明者らによって開発された技術は、図9A~9Dに示されている。
【0172】
図9Aは、本明細書に記載する技術の幾つかの実施形態による、データフローグラフとして処理される、説明のためのSQLクエリー900を示す。このクエリーは、SQLクエリー801及び851と同様に、(1)「アーカイブデータ」と呼ばれる第1のデータソースから2015年1月1日より前の日付の全てのレコードを選択することと、(2)「新規データ」と呼ばれる第2のデータソースから2015年1月1日以降の日付の全てのレコードを選択することと、(3)「ユニオンオール」動作を使用してこれら全てのレコードを統合することと、(4)統合されたレコードから、「2018年6月10日」の日付を有するものを選択することと、を含む。「2018年6月10日」の日付は、2015年1月1日以降であるため、第1のデータソース(「アーカイブデータ」)からのレコードは何れも不要であり、クエリーの結果には含まれない。
【0173】
図9Bは、本明細書に記載する技術の幾つかの実施形態による、図9Aに示されるSQLクエリーから生成されたデータフローグラフ910を示す。例えば、SQLクエリー900は、クエリープランを生成するために使用されてもよく、データフローグラフ910は、図2に示されるプロセス200を参照することを含めて本明細書に記載するように、クエリープランから生成されてもよい。この例では、データフローグラフ910の構造は、図8Hに示すデータフローグラフ845の構造と同様である。
【0174】
データフローグラフ910が生成された後、順方向及び逆方向処理レイアウト伝播パスにおいて処理レイアウトが伝播される。この例では、順方向処理レイアウト伝播パス中に、出力が下流で使用されないノードが識別され、フラグを付けられる。この例では、ノード822が識別され、このノードによって処理されたデータが下流で使用されないことを示すフラグ901が設定される。実際には、ノード802及び822を有するブランチが剪定される。
【0175】
図9Cに示すように、順方向伝播パス後に、順次処理レイアウトがノード810に割り当てられる。ノード822にフラグが付けられなかった場合(すなわち、出力がデータフローグラフ920の下流で使用されないノードであると識別されなかった場合)、ノード810に割り当てられた処理レイアウトは、並列処理レイアウトPL1であったであろう(例えば、並列性の度合いが最も高い処理レイアウトが選択されるというレイアウト決定ルールに従う。これは、例えば、図8Cに示される)。この例では、逆方向伝播パスによって、処理レイアウトの割り当てが変更されることはない。
【0176】
図9Cのデータフローグラフ920は、その後、図9Dのデータフローグラフ930を取得するために最適化される。ノード822によって生成された結果はSQLクエリー900の結果を生成するために使用されないので、ノード802及び822が除去されるように、最上部ブランチが剪定される。グラフの最上部ブランチが剪定されたため、ユニオンオール動作の必要がないため、ノード810も除去される。重要なのは、図8Jのグラフとは異なり、3つのノード802、808、及び814が全て同じ処理レイアウト(順次処理レイアウトSL1)に関連付けられるため、再パーティショニング動作が追加されないことである。
【0177】
この例から理解できるように、図8Jに示すデータフローグラフ855及び図9Dに示すデータフローグラフ930は、同じ出力を生成する。しかしながら、剪定されたノードに割り当てられたレイアウトは、図9A~9Dの例では伝播することが許可されないが、図8A~8Jの例では伝播することが許可されるため、データフローグラフ930のノードに割り当てられた処理レイアウトは全て順次であるのに対し、データフローグラフ855は、並列レイアウト及び順次レイアウトの両方を有する。結果として、データフローグラフ930は、再パーティショニング動作が不要であるため、より効率的に実行することができる。
【0178】
加えて、図10に示すように、データフローグラフ930は、再パーティショニング動作が存在せず、プロセス間通信を必要としないため、データフローグラフ930は、(例えば、マイクログラフサーバ1010などのマイクログラフの実行専用のハードウェアを使用して)マイクログラフとして実行することができる。
【0179】
図9A~9Dを参照して記載した前述の例では、順方向レイアウト伝播パス中に、「使用されない」ノード(例えば、ノード822)が識別される。しかしながら、幾つかの実施形態では、本明細書に記載する技術の態様はこの点で限定されないので、そのようなノードは、逆方向パス中に識別されてもよい。例えば、逆方向レイアウト伝播パスが順方向伝播パスより前に行われる場合、「使用されない」ノードは、逆方向パス中に識別され得る。
【0180】
図11は、本明細書に記載する技術を実施することができる適宜のコンピューティングシステム環境1100の一例を図示する。コンピューティングシステム環境1100は、適宜のコンピューティング環境の一例にすぎず、本明細書に記載する技術の使用又は機能性の範囲に関して何ら制限を示唆することを意図したものではない。コンピューティング環境1100は、例示的動作環境700に図示されるコンポーネントの何れか1つ又は組み合わせに関する依存性又は要件を有すると解釈されるべきものでもない。
【0181】
本明細書に記載する技術は、多数の他の汎用又は専用コンピューティングシステムの環境又は構成と共に使用可能である。本明細書に記載する技術と共に使用するのに適し得る周知のコンピューティングシステム、環境、及び/又は構成の例には、限定されることはないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド又はラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル大衆消費電子製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステム又はデバイスの何れかを包含する分散コンピューティング環境などが包含される。
【0182】
コンピューティング環境は、プログラムモジュールなどのコンピュータ実行可能命令を実行することができる。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。本明細書に記載する技術は、通信ネットワークを通してリンクされるリモート処理デバイスによってタスクが行われる分散コンピューティング環境において実行されてもよい。分散コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを包含するローカル及びリモートコンピュータストレージ媒体の両方に位置していてもよい。
【0183】
図11を参照して、本明細書に記載する技術を実施する例示的システムは、コンピュータ1110の形態の汎用コンピューティングデバイスを包含する。コンピュータ1110のコンポーネントは、限定されないが、処理装置1120、システムメモリ1130、及びシステムメモリを包含する様々なシステムコンポーネントを処理装置1120に結合するシステムバス1121を包含してもよい。システムバス1121は、様々なバスアーキテクチャの何れかを使用した、メモリバス又はメモリコントローラ、周辺バス、及びローカルバスを包含する幾つかのタイプのバス構造の何れかであってもよい。例として、及び限定ではなく、このようなアーキテクチャには、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ電子装置規格化協会(Video Electronics Standards Association)(VESA)ローカルバス、及びメザニンバスとしても知られるペリフェラルコンポーネントインターコネクト(PCI)バスが包含される。
【0184】
コンピュータ1110は、一般的に、様々なコンピュータ可読媒体を包含する。コンピュータ可読媒体は、コンピュータ1110によってアクセスすることができる任意の入手可能な媒体でよく、及び揮発性及び不揮発性両方の媒体、リムーバブル及び非リムーバブル媒体を包含する。例として、及び限定ではなく、コンピュータ可読媒体は、コンピュータストレージ媒体及び通信媒体を含んでもよい。コンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報のストレージのための任意の方法又は技術で実施される、揮発性及び不揮発性、リムーバブル及び非リムーバブル媒体を包含する。コンピュータストレージ媒体には、限定されないが、RAM、ROM、EEPROM、フラッシュメモリ又は他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)又は他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又は他の磁気ストレージデバイス、又は所望の情報を保存するために使用することができ、且つコンピュータ1110によってアクセスすることができるその他の媒体が包含される。通信媒体は、一般的に、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータを搬送波又は他のトランスポート機構などの変調データ信号で具現化し、及びあらゆる情報配信媒体を包含する。「変調データ信号」という用語は、それの特性集合の1つ又は複数を有する、又は信号の情報をエンコードするように変更された信号を意味する。例として、及び限定ではなく、通信媒体には、有線ネットワーク又は直接有線接続などの有線媒体、及び音響、RF、赤外線、及び他の無線媒体などの無線媒体が包含される。上記の何れかの組み合わせも、コンピュータ可読媒体の範囲内に包含されるものとする。
【0185】
システムメモリ1130は、読み出し専用メモリ(ROM)1131及びランダムアクセスメモリ(RAM)1132などの揮発性及び/又は不揮発性メモリの形態のコンピュータストレージ媒体を包含する。起動時などに、コンピュータ1110内の素子間で情報を転送することを助ける基本ルーチンを含有した、基本入出力システム1133(BIOS)は、一般的に、ROM1131内に保存される。RAM1132は、一般的に、即座に利用できる、及び/又は処理装置1120によって現在操作されているデータ及び/又はプログラムモジュールを含有する。例として、及び限定ではなく、図11は、オペレーティングシステム1134、アプリケーションプログラム1135、他のプログラムモジュール1136、及びプログラムデータ1137を図示する。
【0186】
コンピュータ1110は、他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータストレージ媒体も包含することができる。単なる例として、図11は、非リムーバブル、不揮発性磁気媒体に対する読み取り又は書き込みを行うハードディスクドライブ1141、フラッシュメモリなどのリムーバブル、不揮発性メモリ1152に対する読み取り又は書き込みを行うフラッシュドライブ1151、及びCD-ROM又は他の光学媒体などのリムーバブル、不揮発性光ディスク1156に対する読み取り又は書き込みを行う光ディスクドライブ1155を図示する。例示的動作環境において使用することができる他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータストレージ媒体には、限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体RAM、固体ROMなどが包含される。ハードディスクドライブ1141は、一般的に、インタフェース1140などの非リムーバブルメモリインタフェースを通してシステムバス1121に接続され、及び磁気ディスクドライブ1151及び光ディスクドライブ1155は、一般的に、インタフェース1150などのリムーバブルメモリインタフェースによってシステムバス1121に接続される。
【0187】
上述した、及び図11に図示したドライブ及びそれらに関連付けられたコンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、及びコンピュータ1110の他のデータのストレージを提供する。図11においては、例えば、ハードディスクドライブ1141は、オペレーティングシステム1144、アプリケーションプログラム1145、他のプログラムモジュール1146、及びプログラムデータ1147を保存するものとして図示される。これらのコンポーネントは、オペレーティングシステム1134、アプリケーションプログラム1135、他のプログラムモジュール1136、及びプログラムデータ1137と同じであってもよいし、或いは異なっていてもよいことに留意されたい。オペレーティングシステム1144、アプリケーションプログラム1145、他のプログラムモジュール1146、及びプログラムデータ1147は、少なくとも、それらが異なるコピーであることを図示するために、ここでは、異なる番号が付与されている。ユーザは、キーボード1162及び一般にマウス、トラックボール、又はタッチパッドと呼ばれるポインティングデバイス1161などの入力デバイスによって、コンピュータ1110にコマンド及び情報を入力することができる。他の入力デバイス(不図示)には、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが包含され得る。これら及び他の入力デバイスは、システムバスに結合されたユーザ入力インタフェース1160によって、処理装置1120に接続されることが多いが、パラレルポート、ゲームポート、又はユニバーサルシリアルバス(USB)などの他のインタフェース及びバス構造によって接続されてもよい。モニタ1191又は他のタイプのディスプレイデバイスも、ビデオインタフェース1190などのインタフェースを介して、システムバス1121に接続される。モニタに加えて、コンピュータは、出力周辺インタフェース1195を通して接続することができる、スピーカ1197及びプリンタ1196などの他の周辺出力デバイスも包含することができる。
【0188】
コンピュータ1110は、リモートコンピュータ1180などの1つ又は複数のリモートコンピュータへの論理接続を用いたネットワーク化環境で動作することができる。リモートコンピュータ1180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、又は他の共通ネットワークノードでもよく、及び一般的に、図11ではメモリストレージデバイス1181のみが図示されているが、コンピュータ1110に関連して上記した素子の多く又は全てを包含する。図11に描かれる論理接続は、ローカルエリアネットワーク(LAN)1171及び広域ネットワーク(WAN)1173を包含するが、他のネットワークも包含してもよい。このようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、及びインターネットにおいて、ありふれたものである。
【0189】
LANネットワーキング環境で使用される場合、コンピュータ1110は、ネットワークインタフェース又はアダプタ1170を通してLAN1171に接続される。WANネットワーキング環境で使用される場合、コンピュータ1110は、一般的に、モデム1172、又はインターネットなどのWAN1173上で通信を確立するための他の手段を包含する。内部又は外部のものでもよいモデム1172は、ユーザ入力インタフェース1160又は他の適宜の機構を介して、システムバス1121に接続されてもよい。ネットワーク化環境において、コンピュータ1110に関連して描かれたプログラムモジュール、又はそれらの一部は、リモートメモリストレージデバイスに保存されてもよい。例として、及び限定ではなく、図11は、メモリデバイス1181に常駐しているとして、リモートアプリケーションプログラム1185を図示する。示されるネットワーク接続は、例示的なものであり、及びコンピュータ間で通信リンクを確立する他の手段が使用されてもよいことが理解されるだろう。
【0190】
本技術の少なくとも1つの実施形態の幾つかの態様を上記のように記載したが、様々な変更、修正、及び改良が、当業者には容易に思い付くことが理解されるものとする。
【0191】
このような変更、修正、及び改良は、本開示の一部であることが意図され、及び本明細書に記載の技術の精神及び範囲内であることが意図される。さらに、本明細書に記載の技術の利点が示されるが、本明細書に記載の技術の全ての実施形態が、全ての記載した利点を包含するわけではないことが理解されるものとする。幾つかの実施形態は、本明細書において有利であると記載された何れの特徴も実施しない場合があり、場合によっては、記載された特徴の1つ又は複数が、さらなる実施形態を得るために実施されてもよい。従って、上記の記載及び図面は、単なる例である。
【0192】
本明細書に記載の技術の上記実施形態は、多数のやり方の何れで実施されてもよい。例えば、これらの実施形態は、ハードウェア、ソフトウェア、又はそれらの組み合わせを用いて実施されてもよい。ソフトウェアで実施される場合には、ソフトウェアコードは、単一のコンピュータにおいて提供されていようと、複数のコンピュータ間で分散されていようと、任意の適宜のプロセッサ又は一群のプロセッサ上で実行することができる。このようなプロセッサは、集積回路として実施されてもよく、業界において、CPUチップ、GPUチップ、マイクロプロセッサ、マイクロコントローラ、又はコプロセッサなどの名称で知られている市販の集積回路コンポーネントを包含する集積回路コンポーネントにおいて、1つ又は複数のプロセッサを有する。代替的に、プロセッサは、ASICなどのカスタム回路、又はプログラマブル論理デバイスの構成に起因するセミカスタム回路において実施されてもよい。又さらなる代替手段として、プロセッサは、市販、セミカスタム、或いはカスタムであろうと、より大きな回路又は半導体デバイスの一部であってもよい。ある具体例として、幾つかの市販のマイクロプロセッサは、複数のコアの1つ又はサブセットがプロセッサを構成することができるように、複数のコアを有する。しかし、プロセッサは、任意の適宜のフォーマットの回路を使用して実施することができる。
【0193】
さらに、コンピュータは、ラックマウント式コンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータなどの多数の形態の何れかで具現化されてもよいことが理解されるものとする。追加的に、コンピュータは、携帯情報端末(PDA)、スマートフォン、又は任意のその他の適宜のポータブル又は固定電子デバイスを包含する、一般にコンピュータとは見なされないが、適宜の処理能力を備えたデバイスに組み込まれてもよい。
【0194】
又、コンピュータは、1つ又は複数の入力デバイス及び出力デバイスを有していてもよい。これらのデバイスは、特に、ユーザインタフェースを提示するために使用することができる。ユーザインタフェースを提供するために使用することができる出力デバイスの例には、出力の視覚的表現のためのプリンタ又はディスプレイスクリーン、及び出力の可聴表現のためのスピーカ又は他の音生成デバイスが包含される。ユーザインタフェースに使用することができる入力デバイスの例には、キーボード、並びにマウス、タッチパッド、及びデジタイザタブレットなどのポインティングデバイスが包含される。別の例として、コンピュータは、音声認識により、又は他の可聴フォーマットで入力情報を受信してもよい。
【0195】
このようなコンピュータは、企業ネットワーク又はインターネットなどのローカルエリアネットワーク又は広域ネットワークとして包含する、任意の適宜の形態の1つ又は複数のネットワークによって相互接続することができる。このようなネットワークは、任意の適宜の技術に基づいてもよく、及び任意の適宜のプロトコルに従って動作してもよく、及び無線ネットワーク、有線ネットワーク、又は光ファイバネットワークを包含してもよい。
【0196】
又、本明細書に概要が述べられる様々な方法又はプロセスは、様々なオペレーティングシステム又はプラットフォームの何れか1つを用いる1つ又は複数のプロセッサに対して実行可能なソフトウェアとして符号化されてもよい。追加的に、このようなソフトウェアは、多数の適宜のプログラミング言語及び/又はプログラミング又はスクリプト作成ツールの何れかを使用して書かれてもよく、及びフレームワーク又は仮想マシンに対して実行される実行可能マシン語コード又は中間コードとしてコンパイルされてもよい。
【0197】
この点において、本明細書に記載の技術は、1つ又は複数のコンピュータ又は他のプロセッサに対して実行されると、上述の本技術の様々な実施形態を実施する方法を行う1つ又は複数のプログラムでエンコードされたコンピュータ可読ストレージ媒体(又は複数のコンピュータ可読媒体)(例えば、コンピュータメモリ、1つ又は複数のフロッピーディスク、コンパクトディスク(CD)、光ディスク、デジタルビデオディスク(DVD)、磁気テープ、フラッシュメモリ、フィールドプログラマブルゲートアレイ又は他の半導体デバイスにおける回路構成、又は他の有形コンピュータストレージ媒体)として具現化されてもよい。上記の例から明らかなように、コンピュータ可読ストレージ媒体は、非一時的な形態でコンピュータ実行可能命令を提供するのに十分な時間の間、情報を保持することができる。このような1つ又は複数のコンピュータ可読ストレージ媒体は、それ(ら)に保存された1つ又は複数のプログラムを、上述のような本技術の様々な態様を実施するために、1つ又は複数の異なるコンピュータ又は他のプロセッサにロードすることができるように、可搬であってもよい。本明細書においては、「コンピュータ可読ストレージ媒体」という用語は、製品(すなわち、製造物)又はマシンであると見なすことができる非一時的コンピュータ可読媒体のみを網羅する。代替的又は追加的に、本明細書に記載の技術は、伝搬信号などの、コンピュータ可読ストレージ媒体以外のコンピュータ可読媒体として具現化されてもよい。
【0198】
「プログラム」又は「ソフトウェア」という用語は、本明細書では、本明細書に記載の技術の様々な態様を実施するようにコンピュータ又は他のプロセッサをプログラムするために使用することができる、あらゆるタイプのコンピュータコード又はコンピュータ実行可能命令のセットを指すために総称的に使用される。追加的に、本実施形態のある態様によれば、実行されると、本明細書に記載の技術の方法を行う1つ又は複数のコンピュータプログラムは、単一のコンピュータ又はプロセッサに常駐する必要はなく、本明細書に記載の技術の様々な態様を実施するために、多数の異なるコンピュータ又はプロセッサ間で、モジュラー方式で分散されてもよいことが理解されるものとする。
【0199】
コンピュータ実行可能命令は、1つ又は複数のコンピュータ又は他のデバイスによって実行される、プログラムモジュールなどの多くの形態のものでもよい。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。一般的に、プログラムモジュールの機能性は、様々な実施形態において、要望通りに組み合わせられてもよいし、或いは分散されてもよい。
【0200】
又、データ構造は、任意の適宜の形態でコンピュータ可読媒体に保存されてもよい。図示を簡単にするために、データ構造は、データ構造内の場所によって関連したフィールドを有して示される場合がある。このような関係は、同様に、フィールドのストレージにフィールド間の関係を伝達するコンピュータ可読媒体内の場所を割り当てることによって、達成することができる。但し、ポインタ、タグ、又はデータ要素間の関係を確立する他の機構の使用によることを包含する、任意の適宜の機構を使用して、データ構造のフィールドにおける情報間の関係を確立してもよい。
【0201】
本明細書に記載の技術の様々な態様は、単独で、組み合わせて、又は上記に記載した実施形態において具体的に述べられていない様々な配置で使用されてもよく、従って、その適用において、上記の説明に記載された、又は図面に図示されたコンポーネントの詳細及び配置に限定されない。例えば、ある実施形態に記載した態様は、任意の様式で、他の実施形態に記載した態様と組み合わせることができる。
【0202】
又、本明細書に記載の技術は、一例を提供した方法として具現化されてもよい。この方法の一部として行われるアクトは、任意の適宜のやり方で、順序付けが行われてもよい。従って、アクトが、図示されたものとは異なる順序で(これは、説明のための実施形態では、逐次的なアクトとして示されたとしても、幾つかのアクトを同時に行うことを包含してもよい)行われる実施形態が構築されてもよい。
【0203】
さらに、幾つかの行為は、「ユーザ」によって行われると記載される。「ユーザ」は、一人の個人である必要はなく、及び幾つかの実施形態では、「ユーザ」に帰する行為は、複数の個人から成るチーム及び/又はコンピュータ支援ツール又は他の機構と組み合わせた個人によって行われてもよいことが理解されるものとする。
【0204】
クレーム要素を修飾する、クレームにおける「第1の」、「第2の」、「第3の」などの序数用語の使用は、それ自体は、1つのクレーム要素の別のクレーム要素に対する優先、先行、又は順序、又は方法のアクトが行われる時間的順序を暗示せず、ある名称を有する1つのクレーム要素を、同じ名称(序数用語の使用を除き)を有する別の要素と区別するための単なるラベルとして使用することにより、これらのクレーム要素が区別される。
【0205】
又、本明細書において使用される表現及び用語は、説明目的のものであり、及び限定として見なされるものではない。本明細書における、「包含する(including)」、「含む(comprising)」、又は「有する(having)」、「含有する(containing)」、「関与する(involving)」、及びそれらのバリエーションの使用は、その後にリストされるアイテム及びそれらの均等物、並びに追加のアイテムを網羅することを意味する。
図1A
図1B
図1C
図2
図3A-3B】
図3C-3D】
図4A-4B】
図4C
図5A-5B】
図5C-5D】
図6
図7
図8A
図8B
図8C
図8D
図8E
図8F
図8G
図8H
図8I
図8J
図9A
図9B
図9C
図9D
図10
図11
【国際調査報告】