(57)【要約】  連続イベント処理とマップリデュース・アルゴリズミックツールとの組合せを使用して、大量のデータを比較的迅速に処理し、および／またはクエリすることができる。連続イベントプロセッサは、（ａ）現在実行中のマップリデュース・ジョブが開始されてから受信されたイベントからのＣＱＬクエリ結果を、（ｂ）最も最近完了したマップリデュース・ジョブによって生成された最も最近のクエリ結果とマージすることにより、リアルタイムの結果を連続的に生成できる。現在実行中のマップリデュース・ジョブが完了すると、そのクエリ結果は格納されて連続イベントプロセッサにアクセス可能となってもよく、最後のマップリデュース・ジョブの実行以降にサイズが大きくなったイベントデータに関して、新規のマップリデュース・ジョブが開始されてもよい。マップリデュース・アルゴリズミックツールは、大量のデータを分析して処理するための便利な機構を提供する。
2016504679.tif 000002
【特許請求の範囲】
【請求項１】
第１の時間の時点で永続的データストアにすでに格納されているイベントデータに関して第１のクエリを実行する第１のバッチ演算を開始することと、
前記第１のバッチ演算の実行中、データストリームから連続的に受信されているイベントデータに関して第２のクエリを連続的に実行することと、
前記第１のバッチ演算の実行中、前記第２のクエリの結果を、完了した第２のバッチ演算の結果と連続的にマージすることと、
マージの結果を連続的に出力することと、
前記第１のバッチ演算の完了に応答して、前記第２のバッチ演算の結果を前記第１のバッチ演算の結果と置換することとを含む、コンピュータによって実現される方法。
【請求項２】
前記第１のバッチ演算の実行中、前記永続的データストアに、前記データストリームから連続的に受信されている前記イベントデータを連続的に格納することと、
前記第１のバッチ演算の完了に応答して、前記第１の時間よりも遅い第２の時間の時点で前記永続的データストアにすでに格納されているイベントデータに関して前記第１のクエリを実行する第３のバッチ演算を開始することと、
前記第３のバッチ演算の実行中、データストリームから連続的に受信されているイベントデータに関して前記第２のクエリを連続的に実行することと、
前記第３のバッチ演算の実行中、前記第２のクエリの結果を、完了した前記第１のバッチ演算の結果と連続的にマージすることと、
前記第２のクエリと完了した前記第１のバッチ演算の結果とのマージの結果を連続的に出力することと、
前記第３のバッチ演算の完了に応答して、前記第１のバッチ演算の結果を前記第３のバッチ演算の結果と置換することとをさらに含む、請求項１に記載のコンピュータによって実現される方法。
【請求項３】
前記第１のバッチ演算はマップリデュース演算であり、前記第２のクエリは前記第１のクエリと同じ演算を行なう、請求項１または２に記載のコンピュータによって実現される方法。
【請求項４】
前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信することと、
前記ＣＱＬクエリに基づいて、前記ＣＱＬクエリの演算を行なうマップリデュース・プログラムを自動的に生成することとをさらに含む、請求項１〜３のいずれか１項に記載のコンピュータによって実現される方法。
【請求項５】
前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信することと、
前記ＣＱＬクエリを自動的に構文解析することと、
構文解析に基づいて、前記ＣＱＬクエリを第１の組の演算子へと自動的に分離することと、
ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成することと、
前記ピッグ・ラテン語演算子に基づいて、前記第１のバッチ演算を行なうマップリデュース・プログラムを自動的に生成することとをさらに含む、請求項１〜４のいずれか１項に記載のコンピュータによって実現される方法。
【請求項６】
前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信することと、
前記ＣＱＬクエリを自動的に構文解析することと、
構文解析に基づいて、前記ＣＱＬクエリを第１の組の演算子へと自動的に分離することと、
ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成することと、
前記第１の組からの演算子、前記第２の組からの演算子、前記第１の組からの演算子を表わすノードから前記第２の組からの演算子を表わすノードまでのエッジ、および前記第２の組からの演算子を表わすノードから前記第１の組からの演算子までのエッジを含む、ノードの有向グラフを自動的に生成することとをさらに含む、請求項１〜５のいずれか１項に記載のコンピュータによって実現される方法。
【請求項７】
前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信することと、
前記ＣＱＬクエリを自動的に構文解析することと、
構文解析に基づいて、前記ＣＱＬクエリを第１の組の演算子へと自動的に分離することと、
ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成することと、
前記第１の組からの演算子、および前記第２の組からの演算子を含む、ノードの有向グラフを自動的に生成することと、
前記有向グラフにおける２つ以上のノードを、前記２つ以上のノードによって行なわれる演算間の類似点に基づいて自動的にマージすることとをさらに含む、請求項１〜６のいずれか１項に記載のコンピュータによって実現される方法。
【請求項８】
１つ以上のプロセッサに演算子を行なわせる特定の命令を格納する、コンピュータ読取可能メモリであって、前記特定の命令は、
前記１つ以上のプロセッサに、第１の時間の時点で永続的データストアにすでに格納されているイベントデータに関して第１のクエリを実行する第１のバッチ演算を開始させる命令と、
前記１つ以上のプロセッサに、前記第１のバッチ演算の実行中、データストリームから連続的に受信されているイベントデータに関して第２のクエリを連続的に実行させる命令と、
前記１つ以上のプロセッサに、前記第１のバッチ演算の実行中、前記第２のクエリの結果を、完了した第２のバッチ演算の結果と連続的にマージさせる命令と、
前記１つ以上のプロセッサに、マージの結果を連続的に出力させる命令と、
前記１つ以上のプロセッサに、前記第１のバッチ演算の完了に応答して、前記第２のバッチ演算の結果を前記第１のバッチ演算の結果と置換させる命令とを含む、コンピュータ読取可能メモリ。
【請求項９】
前記特定の命令は、
前記１つ以上のプロセッサに、前記第１のバッチ演算の実行中、前記永続的データストアに、前記データストリームから連続的に受信されている前記イベントデータを連続的に格納させる命令と、
前記１つ以上のプロセッサに、前記第１のバッチ演算の完了に応答して、前記第１の時間よりも遅い第２の時間の時点で前記永続的データストアにすでに格納されているイベントデータに関して前記第１のクエリを実行する第３のバッチ演算を開始させる命令と、
前記１つ以上のプロセッサに、前記第３のバッチ演算の実行中、データストリームから連続的に受信されているイベントデータに関して前記第２のクエリを連続的に実行させる命令と、
前記１つ以上のプロセッサに、前記第３のバッチ演算の実行中、前記第２のクエリの結果を、完了した前記第１のバッチ演算の結果と連続的にマージさせる命令と、
前記１つ以上のプロセッサに、前記第２のクエリと完了した前記第１のバッチ演算の結果とのマージの結果を連続的に出力させる命令と、
前記１つ以上のプロセッサに、前記第３のバッチ演算の完了に応答して、前記第１のバッチ演算の結果を前記第３のバッチ演算の結果と置換させる命令とをさらに含む、請求項８に記載のコンピュータ読取可能メモリ。
【請求項１０】
前記第１のバッチ演算はマップリデュース演算であり、前記第２のクエリは前記第１のクエリと同じ演算を行なう、請求項８または９に記載のコンピュータ読取可能メモリ。
【請求項１１】
前記特定の命令は、
前記１つ以上のプロセッサに、前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信させる命令と、
前記１つ以上のプロセッサに、前記ＣＱＬクエリに基づいて、前記ＣＱＬクエリの演算を行なうマップリデュース・プログラムを自動的に生成させる命令とをさらに含む、請求項８〜１０のいずれか１項に記載のコンピュータ読取可能メモリ。
【請求項１２】
前記特定の命令は、
前記１つ以上のプロセッサに、前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信させる命令と、
前記１つ以上のプロセッサに、前記ＣＱＬクエリを自動的に構文解析させる命令と、
前記１つ以上のプロセッサに、構文解析に基づいて、前記ＣＱＬクエリを第１の組の演算子へと自動的に分離させる命令と、
前記１つ以上のプロセッサに、ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成させる命令と、
前記１つ以上のプロセッサに、前記ピッグ・ラテン語演算子に基づいて、前記第１のバッチ演算を行なうマップリデュース・プログラムを自動的に生成させる命令とをさらに含む、請求項８〜１１のいずれか１項に記載のコンピュータ読取可能メモリ。
【請求項１３】
前記特定の命令は、
前記１つ以上のプロセッサに、前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信させる命令と、
前記１つ以上のプロセッサに、前記ＣＱＬクエリを自動的に構文解析させる命令と、
前記１つ以上のプロセッサに、構文解析に基づいて、前記ＣＱＬクエリを第１の組の演算子へと自動的に分離させる命令と、
前記１つ以上のプロセッサに、ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成させる命令と、
前記１つ以上のプロセッサに、前記第１の組からの演算子、前記第２の組からの演算子、前記第１の組からの演算子を表わすノードから前記第２の組からの演算子を表わすノードまでのエッジ、および前記第２の組からの演算子を表わすノードから前記第１の組からの演算子までのエッジを含む、ノードの有向グラフを自動的に生成させる命令とをさらに含む、請求項８〜１２のいずれか１項に記載のコンピュータ読取可能メモリ。
【請求項１４】
前記特定の命令は、
前記１つ以上のプロセッサに、前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信させる命令と、
前記１つ以上のプロセッサに、前記ＣＱＬクエリを自動的に構文解析させる命令と、
前記１つ以上のプロセッサに、構文解析に基づいて、前記ＣＱＬクエリを第１の組の演算子へと自動的に分離させる命令と、
前記１つ以上のプロセッサに、ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成させる命令と、
前記１つ以上のプロセッサに、前記第１の組からの演算子、および前記第２の組からの演算子を含む、ノードの有向グラフを自動的に生成させる命令と、
前記１つ以上のプロセッサに、前記有向グラフにおける２つ以上のノードを、前記２つ以上のノードによって行なわれる演算間の類似点に基づいて自動的にマージさせる命令とをさらに含む、請求項８〜１３のいずれか１項に記載のコンピュータ読取可能メモリ。
【請求項１５】
システムであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサに演算子を行なわせる特定の命令を格納する、コンピュータ読取可能メモリとを含み、前記特定の命令は、
前記１つ以上のプロセッサに、第１の時間の時点で永続的データストアにすでに格納されているイベントデータに関して第１のクエリを実行する第１のバッチ演算を開始させる命令と、
前記１つ以上のプロセッサに、前記第１のバッチ演算の実行中、データストリームから連続的に受信されているイベントデータに関して第２のクエリを連続的に実行させる命令と、
前記１つ以上のプロセッサに、前記第１のバッチ演算の実行中、前記第２のクエリの結果を、完了した第２のバッチ演算の結果と連続的にマージさせる命令と、
前記１つ以上のプロセッサに、マージの結果を連続的に出力させる命令と、
前記１つ以上のプロセッサに、前記第１のバッチ演算の完了に応答して、前記第２のバッチ演算の結果を前記第１のバッチ演算の結果と置換させる命令とを含む、システム。
【請求項１６】
前記特定の命令は、
前記１つ以上のプロセッサに、前記第１のバッチ演算の実行中、前記永続的データストアに、前記データストリームから連続的に受信されている前記イベントデータを連続的に格納させる命令と、
前記１つ以上のプロセッサに、前記第１のバッチ演算の完了に応答して、前記第１の時間よりも遅い第２の時間の時点で前記永続的データストアにすでに格納されているイベントデータに関して前記第１のクエリを実行する第３のバッチ演算を開始させる命令と、
前記１つ以上のプロセッサに、前記第３のバッチ演算の実行中、データストリームから連続的に受信されているイベントデータに関して前記第２のクエリを連続的に実行させる命令と、
前記１つ以上のプロセッサに、前記第３のバッチ演算の実行中、前記第２のクエリの結果を、完了した前記第１のバッチ演算の結果と連続的にマージさせる命令と、
前記１つ以上のプロセッサに、前記第２のクエリと完了した前記第１のバッチ演算の結果とのマージの結果を連続的に出力させる命令と、
前記１つ以上のプロセッサに、前記第３のバッチ演算の完了に応答して、前記第１のバッチ演算の結果を前記第３のバッチ演算の結果と置換させる命令とをさらに含む、請求項１５に記載のシステム。
【請求項１７】
前記第１のバッチ演算はマップリデュース演算であり、前記第２のクエリは前記第１のクエリと同じ演算を行なう、請求項１５または１６に記載のシステム。
【請求項１８】
前記特定の命令は、
前記１つ以上のプロセッサに、前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信させる命令と、
前記１つ以上のプロセッサに、前記ＣＱＬクエリに基づいて、前記ＣＱＬクエリの演算を行なうマップリデュース・プログラムを自動的に生成させる命令とをさらに含む、請求項１５〜１７のいずれか１項に記載のシステム。
【請求項１９】
前記特定の命令は、
前記１つ以上のプロセッサに、前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信させる命令と、
前記１つ以上のプロセッサに、前記ＣＱＬクエリを自動的に構文解析させる命令と、
前記１つ以上のプロセッサに、構文解析に基づいて、前記ＣＱＬクエリを第１の組の演算子へと自動的に分離させる命令と、
前記１つ以上のプロセッサに、ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成させる命令と、
前記１つ以上のプロセッサに、前記ピッグ・ラテン語演算子に基づいて、前記第１のバッチ演算を行なうマップリデュース・プログラムを自動的に生成させる命令とをさらに含む、請求項１５〜１８のいずれか１項に記載のシステム。
【請求項２０】
前記特定の命令は、
前記１つ以上のプロセッサに、前記第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信させる命令と、
前記１つ以上のプロセッサに、前記ＣＱＬクエリを自動的に構文解析させる命令と、
前記１つ以上のプロセッサに、構文解析に基づいて、前記ＣＱＬクエリを第１の組の演算子へと自動的に分離させる命令と、
前記１つ以上のプロセッサに、ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成させる命令と、
前記１つ以上のプロセッサに、前記第１の組からの演算子、前記第２の組からの演算子、前記第１の組からの演算子を表わすノードから前記第２の組からの演算子を表わすノードまでのエッジ、および前記第２の組からの演算子を表わすノードから前記第１の組からの演算子までのエッジを含む、ノードの有向グラフを自動的に生成させる命令とをさらに含む、請求項１５〜１９のいずれか１項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願との相互参照
本願は、２０１２年１２月５日に出願された、「イベント処理をマップリデュースと統合するための方法」（A METHOD FOR INTEGRATING EVENT PROCESSING WITH MAP REDUCE）と題された米国仮出願第６１／７３３，８４４号の、米国特許法第１１９条（ｅ）による優先権を主張し、その内容全体はあらゆる目的のためにここに引用により援用される。本願はまた、２０１３年３月２９日に出願された、「イベント処理とマップリデュースとの統合」（INTEGRATING EVENT PROCESSING WITH MAP REDUCE）と題された米国仮出願第６１／８０６，７４４号の、米国特許法第１１９条（ｅ）による優先権を主張し、その内容全体はあらゆる目的のためにここに引用により援用される。本願はまた、２０１３年１１月１３日に出願された、「イベント処理とマップリデュースとの統合」（INTEGRATING EVENT PROCESSING WITH MAP-REDUCE）と題された米国非仮出願第１４／０７９，５３８号の、米国特許法第１１９条（ｅ）による優先権を主張し、その内容全体はあらゆる目的のためにここに引用により援用される。
【背景技術】
【０００２】
発明の背景
連続イベントプロセッサは、イベントの連続ストリームを受信し、そこに含まれる各イベントを、そのイベントに連続イベント処理（continuous event processing：ＣＥＰ）クエリを適用することによって処理することができる。そのようなＣＥＰクエリは、構造化クエリ言語（structured query language：ＳＱＬ）の延長である連続クエリ言語（continuous query language：ＣＱＬ）などのＣＥＰクエリ言語の構文に適合するようにフォーマット化され得る。ＳＱＬクエリは、リレーショナルデータベースのテーブルにすでに格納されたデータに（１つのユーザ要求につき）一度適用されることが多いが、ＣＱＬクエリは、入来するイベントストリームにおけるイベントが連続イベントプロセッサによって受信されると、それらのイベントに繰り返し適用される。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
たとえば、データストリームは、さまざまな会社についての株価を特定し得る。時間が経過するにつれて、それらの会社についての最も最近の株価が、データストリームに追加され得る。連続イベントプロセッサは、そのような株価の各々を受信し、その株価が到着するとその株価にＣＱＬクエリを適用し得る。ＣＱＬクエリは、フィルタリング演算および集約演算を潜在的に含むさまざまな演算を特定し得る。連続イベントプロセッサは次に、ＣＱＬクエリの適用の結果を、興味を有するさまざまなリスナに出力し得る。
【図面の簡単な説明】
【０００４】
【図１】この発明の一実施形態に従った、マップリデュース・アルゴリズミックツールとＣＥＰとの組合せを使用して、大量のデータに関するリアルタイムのクエリ結果を計算するための手法を示すフロー図である。
【図２】この発明の一実施形態に従った、マップリデュース・アルゴリズミックツールとＣＥＰとの組合せを使用して、大量のデータに関するリアルタイムのクエリ結果を計算するためのシステムを示すブロック図である。
【図３】この発明の一実施形態に従った、使用され得るシステム環境のコンポーネントを示す簡略化されたブロック図である。
【図４】この発明の実施形態に従った、使用され得るコンピュータシステムの簡略化されたブロック図である。
【図５】この発明の一実施形態に従った、単一のクエリに基づいて連続処理コンポーネントおよびバッチ処理コンポーネントを生成するための手法の一例を示すフロー図である。
【図６】この発明の一実施形態に従った、クエリに基づいて機能的に同等の演算子を生成するための手法の一例を示すフロー図である。
【図７】この発明の実施形態に従った電子装置７００の簡略化されたブロック図である。
【発明を実施するための形態】
【０００５】
詳細な説明
この発明の実施形態は、連続イベント処理の分野に関する。この発明の実施形態は、連続イベント処理とマップリデュース・アルゴリズミックツールとの組合せを使用して、大量のデータを比較的迅速に処理し、またはクエリするための手法を伴う。一実施形態では、連続イベントプロセッサは、（ａ）現在実行中のマップリデュース・ジョブが開始されてから受信されたイベントからのＣＱＬクエリ結果を、（ｂ）最も最近完了したマップリデュース・ジョブによって生成された最も最近のクエリ結果とマージすることにより、リアルタイムの結果を連続的に生成する。現在実行中のマップリデュース・ジョブが完了すると、そのクエリ結果は格納されて連続イベントプロセッサにアクセス可能となり、最後のマップリデュース・ジョブの実行以降にサイズが大きくなったイベントデータに関して、新規のマップリデュース・ジョブが開始される。マップリデュース・アルゴリズミックツールは、大量のデータを分析して処理するための便利な機構を提供する。そのような大量のデータは、「ビッグデータ」と呼ばれることもある。
【０００６】
ビッグデータとは、情報技術媒体およびベンダーらによって使用される用語である。ビジネスは、テラバイト、さらにはペタバイトのデータといった膨大な量のデータを蓄積しており、市場動向および企業業績をより理解したいという、競争心の強い要望を有している。会社は、ビッグデータを管理し、分析したいという要望に直面している。現代のアプリケーションは、非常に大量のデータを扱う。この量の多さは、従来の処理機構を使用してデータを迅速に処理することを困難にする。
【０００７】
ビッグデータの処理の一例として、営業部長が、先月といった長期間にわたって製品が購入され得る主要市場の各々における、会社のベストセラーの製品を識別したいという場合が考えられ得る。このタスクを遂行する上での課題は、そのような分析のために処理すべきデータの量である。データの量は、何千から何百万、または何十億もの売買トランザクション間で変わり得る。リレーショナルデータベースおよび視覚化ソフトウェアなどの一般的なツールは、典型的には、そのような量のデータに調整されていない。また、データは構造化されている場合と構造化されていない場合とがあり、それは、データ管理および分析ツールによって取扱われないかもしれない特質である。従来のリレーショナルデータベースシステムは、そのような大量のデータをタイムリーに処理することができない。
【０００８】
このため、ビッグデータを管理しようとして、いくつかの試みを行なうことができる。大量の異なるデータを扱うための１つの潜在的なやり方は、より扱いやすいデータセットを作成するために、異なるサーバ間でデータを分割し、複製することであろう。しかしながら、データの複数のコピーを作成することは、情報の一貫性を維持することをより困難にする。なぜなら、１つのデータセットへの更新が、他のデータセットにコピーされないかもしれないためである。
【０００９】
一貫性のそのような欠如は、たとえば、データを使用するアプリケーションが販売データのエントリを更新するものの、その更新が他の複製場所にコピーされない場合に、生じるかもしれない。データにアクセスする他のアプリケーションが、そのデータの一部を他のトランザクションですでに使用していた場合、状況は複雑になり得る。データが変わる場合、データの再分割が適切かもしれないが、そのような再分割を行なうべき態様が不明瞭であることが多い。
【００１０】
これらの複雑性に対処するための１つの可能なアプローチは、データを保護された不変データとして分散させることを伴い得る。たとえば、売買トランザクションが生じると、それらは何らかの持続性ストレージに格納され得る。アプリケーションは、その格納された生データを変えないように防止され得る。データを不変に保つことは一貫性の問題を回避し、分散は量の問題を緩和する。しかしながら、データを不変にすると、既存のデータ操作ツールが所望の態様で分散データを処理することができなくなるおそれがある。
【００１１】
ある特定の分散されたアルゴリズミックツールは、分散された不変の入力とともに機能することができ、分散されたシステムに関して、上述の販売例で説明されたものと同様のクエリを行なうことができる。この特定のアルゴリズミックツールは、マップリデュース・アルゴリズミックツールである。マップリデュース・アルゴリズミックツールのさまざまな異なる実現化例が存在する。たとえば、一実現化例は、オープンソースのApache Hadoop（アパッチ・ハドゥープ）に見られる。Apache Hadoopを使用すると、ビッグデータ売買トランザクションを入力として使用し、次にベストセラーの製品を結果として返す、マップリデュース・ジョブを作成することが可能である。
【００１２】
マップリデュース・アルゴリズミックツールは、分散データに関して機能する。データは別々のノードへと分割可能であり、各ノードは、別個のコンピューティングマシン上で別個のファイルとして維持可能である。そのようなマシンは各々、そのマシン上で維持されたデータに関して、他のマシンと並行してクエリを実行できる。このため、各マシンは、データのその特定の区画に関する別々のクエリ結果を生成できる。次に、これらの別々の結果は、単一の一体化された結果へと減少（リデュース）され得る。マップリデュース・アルゴリズミックツールは、この減少を遂行できる。データへのエントリごとに、マップリデュース・アルゴリズミックツールは、そのエントリを結果にマップすることができる。たとえば、データエントリが製品を表わす場合、マップリデュース・アルゴリズミックツールは、各製品を、他の製品に対するその製品の売上げランキングを示す結果にマップすることができる。マップリデュース・アルゴリズミックツールは次に、これらの結果のすべてを、単一の一体化された結果へとマージすることができる。そのようなマージは、減少と呼ばれる。
【００１３】
マップリデュース・アルゴリズミックツールがデータに対してどのように演算できるかの一例について、複数の別々のウェブページ内のある特定の単語の出現数量の計算に関わる一例が考えられ得る。第１のウェブページは、特定の単語への言及を１０個含むかもしれない。第２のウェブページも、特定の単語への言及を１０個含むかもしれない。第３のウェブページは、特定の単語への言及を１個だけ含むかもしれない。第４のウェブページは、特定の単語への言及を２個含むかもしれない。マップリデュース・アルゴリズミックツールによって行なわれるマッピングプロセスは、各ウェブページを、そのウェブページ内の特定の単語の出現数量にマップすることができる。この例では、マップリデュース・アルゴリズミックツールによって行なわれる減少（リデュース）プロセスは単に、この例では特定の単語が結局２３個出現したという最終結果を生成するために、各ウェブページにマップされた数量のすべてを合計することを伴う。
【００１４】
マップリデュース・アルゴリズミックツールが演算するデータの分散性質により、および入力データのサイズに依存して、マップリデュース・ジョブは、ｎ分ごとに、または、より高い可能性でｎ時間ごとに、バッチ結果におけるベストセラーの品目を返すかもしれない（上述の販売例を参照）。ある状況下では、数分または数時間は、クエリ結果を待つには長すぎる。たとえば、いくつかの不正検出アプリケーションは、トランザクションが進行中で、かつ何千もの不正トランザクションが完了してしまう前に、即時の結果を要求する。別の例については、小売業者は、売れ行きが悪い製品の最新の知識を得て、顧客が店に入るときに値引きカードを顧客に配ることにより、店がそれらの製品の売上げを伸ばせるようにしたいかもしれない。その知識を待つために費やされる時間量が増加するにつれて、その知識が的外れになる可能性も増加する。マップリデュース・アルゴリズムの典型的な実現化例は、リアルタイムのクエリ結果を生成しない。
【００１５】
この発明の一実施形態によれば、連続イベント処理（ＣＥＰ）手法は、大きい分散データセットに対して実行されたクエリについてのクエリ結果をより迅速に生成するために、マップリデュース・アルゴリズミックツールとともに使用可能である。ＣＥＰを使用して、連続イベントプロセッサは、データストリームからリアルタイムでイベントを受信し、それらのイベントが受信されるとそれらに関して分析処理を行なう。たとえば、会社の店内で売買トランザクションが生じると、それらのトランザクションの各々は、それらのトランザクションの時点で、イベントとしてデータストリームに追加されてもよい。データストリームに配置されたイベントは、それらのイベントの受信に興味を有する、アプリケーションプログラムなどのエンティティによって聴かれ（listen）得る。そのようなイベントを受信するために、そのようなエンティティは、連続イベントプロセッサに登録可能である。加えて、そのような売買トランザクションが会社の店内で生じると、それらのトランザクションの各々は、リレーショナルデータベースなどの永続的データストアに追加されてもよく、それは、何らかの分割スキームに従って複数の別々の場所にわたって分散され得る。
【００１６】
連続イベントプロセッサは、イベントストリームからのイベントがプロセッサに到着すると、それらのイベントにＣＥＰクエリを連続的に適用することができる。たとえば、プロセッサは、売買トランザクションを表わすイベントに、特定された持続時間を有する時間窓にわたって、ベストセラーの製品を判断するクエリを適用することができる。そうするために、プロセッサは、その持続時間を有する最も最近生じた時間窓内でプロセッサがデータストリームから受信したすべてのイベントに関するデータを、コンピューティングメモリに維持することができる。しかしながら、この時間窓のこの長さは、連続イベントプロセッサが利用可能なコンピューティングメモリの量によって制限され得る。典型的には、連続イベントプロセッサは、たとえば特に、非常に大量の売買トランザクションが生じた場合、これまで生じたすべての売買トランザクションを含むように時間窓を延長するのに十分なメモリを有していないであろう。連続イベントプロセッサは、再び量に依存して、去年生じたすべての売買トランザクションを含むように時間窓を延長するのに十分なメモリさえ有していないかもしれない。加えて、時間窓のサイズが増加するにつれて、その窓内に該当するイベントのすべてに関して連続イベントプロセッサがクエリを実行するのにかかる時間量も増加する。ＣＥＰ機構は従来、ほんの数時間または数分という大きさであることもある、比較的制限された持続時間を有する時間窓内で生じるイベントに関する結果を算出するために使用される。
【００１７】
上述の制限のうちのいくつかを克服するために、この発明の実施形態は、ＣＥＰおよびマップリデュース・アルゴリズミックツールのパワーをともにマージする。マップリデュース・アルゴリズミックツールは、イベントデータの最も最近蓄積されたバッチについてクエリ結果を計算するために使用可能である。たとえば、マップリデュース・ジョブは、分散されたリレーショナルデータベースに格納されたイベントデータに関するクエリの結果を計算するように予定されていてもよく、そのようなデータは、典型的にはハードディスクドライブなどの磁気媒体上に、永続的で不揮発性の態様で格納されたものであってもよい。そのようなジョブは、完了するのに比較的長い時間量がかかるかもしれない。たとえば、分散データストレージにすでに蓄積されたイベントデータの量に依存して、ジョブは、完了するのに一日かかるかもしれない。この発明の一実施形態では、マップ・マップリデュース・ジョブが予定時間に一旦実行開始されると、マップリデュース・アルゴリズミックツールは、予定時間までに分散データストレージに格納されたイベントデータのみを考慮する。マップリデュース・アルゴリズミックツールがジョブを処理している際、マップリデュース・ジョブは、データストリームに現在到着しているイベントを含まない。一実施形態によれば、マップリデュース・ジョブは、マップリデュース・ジョブが実行開始された時間の時点で、データストリームからすでに受信され、分散データストレージに格納されたイベントからなる。
【００１８】
各マップリデュース・ジョブは、バッチ技術の一例である。マップリデュース・ジョブが完了するのに特定の時間量がかかると仮定すると、その特定の時間量の間にデータストリームに到着して分散データストレージに格納されたイベントは、次に実行されるマップリデュース・ジョブ内で、すなわち次のバッチで考慮されるであろう。この発明の一実施形態によれば、連続イベントプロセッサは、現在実行中のマップリデュース・ジョブが処理され始めた後で（および、一実施形態では、後でのみ）データストリームに到着するイベントに関してＣＥＰを連続的に行なう。そのような実施形態では、連続イベントプロセッサは、マップリデュース・アルゴリズミックツールが、予定されたジョブの一環として、分散データストレージ内の以前格納されたイベントに関して実行しているのと同じまたは同様のクエリを、これらの新着イベントに関して実行する。連続イベントプロセッサは、新着イベントがデータストリームに到着すると、それらのイベントに関してこのクエリを実行でき、このため、ＣＥＰクエリはリアルタイムで実行可能である。この発明の一実施形態では、連続イベントプロセッサがクエリ結果を生成するたびに、プロセッサはそのクエリ結果を、最も最近完了したマップリデュース・ジョブが生成した最も最近の結果とマージして、一体化されたクエリ結果を生成する。一体化されたクエリ結果は、分散データストレージにすでに格納されたイベントデータ、およびそのストレージよりも最近到着したイベントデータに関して行われたクエリ処理を反映している。
【００１９】
図１は、この発明の一実施形態に従った、マップリデュース・アルゴリズミックツールとＣＥＰとの組合せを使用して、大量のデータに関するリアルタイムのクエリ結果を計算するための手法１００を示すフロー図である。手法１００は、ある演算がある順序で行なわれることを伴って示されているが、この発明の代替的な実施形態は、追加の演算、より少ない演算、または異なる演算が、潜在的には異なる順序で行なわれることを伴い得る。
【００２０】
ブロック１０２で、マップリデュース・アルゴリズミックツール（たとえば、Apache Hadoop）は、分散データストレージに格納されたイベントデータに関して、マップリデュース・ジョブを行ない始める。一実施形態では、マップリデュース・ジョブは、分散データストレージに格納されたすべてのイベントの特定されたサブセットに関する、特定されたクエリの実行を伴う。このサブセットは、以前のマップリデュース・ジョブがもしあれば、その実行開始以降に分散データストレージに格納されたあらゆるものを含む、分散データストレージに格納されたイベントの全体集合を含み得る。
【００２１】
ブロック１０４で、マップリデュース・アルゴリズミックツールが分散データストレージに格納されたイベントデータに関してマップリデュース・ジョブを実行している間、連続イベントプロセッサは、データストリームを介して連続的に到着しているイベントに対してＣＱＬクエリを連続的に実行する。ＣＱＬクエリは、現在の時刻で終了点を有する特定された時間窓内で受信されたすべてのイベントに作用できる。ＣＱＬクエリは、その実行において、そのようなイベントからデータを集約することができる。一実施形態では、ＣＱＬクエリは、現在実行中のマップリデュース・ジョブによって、しかしながら別々のイベントに関して実行されているクエリと同じであり、または同様であり、または同じ機能を行なう。一実施形態では、ＣＱＬクエリは、その処理から、（現在実行中のマップリデュース・ジョブによって処理されている）分散データストレージにすでに格納されたすべてのイベントを除外する。上述のように、一実施形態では、そのようなイベントも分散データストレージに格納されるが、現在実行中のマップリデュース・ジョブの実行内で考慮されない。
【００２２】
ブロック１０６で、連続イベントプロセッサは、特定された時間窓内にあるデータイベントに関するＣＱＬクエリの最も最近の実行に基づいて、予備クエリ結果を算出する。
【００２３】
ブロック１０８で、いずれかのマップリデュース・ジョブが完了した場合、連続イベントプロセッサは、予備クエリ結果を、最も最近完了したマップリデュース・ジョブの結果とマージする。このマージは、一体化されたクエリ結果を生成する。この発明の一実施形態では、マップリデュース・ジョブがまだ完了していない場合、予備クエリ結果が、一体化されたクエリ結果になる。
【００２４】
ブロック１１０で、連続イベントプロセッサは、一体化されたクエリ結果を、興味を有するリスニングエンティティに出力する。たとえば、連続イベントプロセッサは、一体化されたクエリ結果を、そのような一体化されたクエリ結果を受信するために連続イベントプロセッサに登録したアプリケーションプログラムに出力できる。
【００２５】
ブロック１１２で、最も最近開始されたマップリデュース・ジョブが完了したかどうかについて、判断が下される。最も最近開始されたマップリデュース・ジョブが完了した場合、制御はブロック１１４に進む。完了していない場合、制御はブロック１０４に進む。
【００２６】
ブロック１１４で、マップリデュース・ジョブの結果が永続的に格納される。たとえば、マップリデュース・ジョブの結果は、連続イベントプロセッサがアクセスを有するハードディスクドライブ上に格納され得る。ブロック１０８に関連して上述されたように、連続イベントプロセッサはこの結果をプロセッサ自体の予備結果とマージして、一体化されたクエリ結果を生成することができる。一実施形態では、マップリデュース・ジョブの結果は、以前に実行されたマップリデュース・ジョブの以前に格納された結果を上書きして置換する。
【００２７】
ブロック１１６で、マップリデュース・アルゴリズミックツール（たとえば、Apache Hadoop）は、分散データストレージに格納されたイベントデータに関して、新規のマップリデュース・ジョブを行ない始める。一実施形態では、マップリデュース・ジョブは、分散データストレージに格納されたすべてのイベントの特定されたサブセットに関する、特定されたクエリの実行を伴う。一実施形態では、このサブセットは、以前のマップリデュース・ジョブの実行開始以降に分散データストレージに格納されたイベントを含む。制御はブロック１０４に戻る。
【００２８】
たとえば、１組のウェブページにおけるある特定の単語の数量が２３個であることを、最も最近完了したマップリデュース・ジョブの結果が示す場合、および、新規のウェブページがイベントとしてデータストリームに到着する場合、および、その新規のウェブページにおける特定の単語の数量が５個であると連続イベントプロセッサが判断した場合、連続イベントプロセッサは、この結果を、最も最近完了したマップリデュース・ジョブの結果とマージして、２８個という一体化されたクエリ結果を生成することができる。（現在のではなく）次のマップリデュース・ジョブが、新規のウェブページを含むイベントデータに対して演算できるように、新規のウェブページは分散データストレージに追加され得る。
【００２９】
図２は、この発明の一実施形態に従った、マップリデュース・アルゴリズミックツールとＣＥＰとの組合せを使用して、大量のデータに関するリアルタイムのクエリ結果を計算するためのシステム２００を示すブロック図である。一実施形態では、システム２００は、イベントソース２０２と、イベントを含むデータストリーム２０４と、連続イベントプロセッサ２０６と、マップリデュース・アルゴリズミックツール２０８と、分散データストレージ２１０と、リスニングエンティティ２１２とを含む。一実施形態では、イベントソース２０２は、イベント（たとえば、売買トランザクション、株価など）が生じると、それらのイベントをデータストリーム２０４に連続的に追加できる。連続イベントプロセッサ２０６は、データストリーム２０４からイベントを連続的に読出し、それらのイベントに関してＣＱＬクエリを連続的に実行することができる。連続イベントプロセッサ２０６はまた、それが読出すイベントを分散データストレージ２１０に連続的に格納できる。連続イベントプロセッサ２０６はまた、ＣＱＬクエリの実行の結果を、マップリデュース・アルゴリズミックツール２０８によって実行された、完了したマップリデュース・ジョブの最も最近の結果と連続的にマージできる。マップリデュース・アルゴリズミックツール２０８は、マップリデュース・ジョブを次々に実行できる。そのようなマップリデュース・ジョブは各々、そのマップリデュース・ジョブの実行開始時間の時点で分散データストレージ２１０に格納されたイベントに関するＣＱＬクエリと同じである、または同様であるクエリを実行できる。そのようなマップリデュース・ジョブは各々、それが完了すると、そのクエリ実行の結果を、マージする目的のために、連続イベントプロセッサ２０６にアクセス可能である媒体（潜在的に、分散データストレージ２１０）上に永続的に格納できる。リスニングエンティティ２１２は、連続イベントプロセッサ２０６によって出力された、一体化されたクエリ結果を連続的に受信して、それらを使用することができ、そのような結果を人間のユーザに潜在的に表示する。
【００３０】
一実施形態では、ＣＱＬクエリおよび対応するマップリデュース（たとえば、Hadoop）ジョブは、ユーザによって別々に手動で作成され、実行され得る。しかしながら、代替的な一実施形態では、ＣＱＬクエリおよび対応するマップリデュース・ジョブの作成および実行は、マップリデュース・ジョブ（またはプログラム）が、既存の対応するＣＱＬクエリに基づいて自動的に生成され得るように、統合され得る。たとえば、一実施形態では、ユーザは、データストリームにおいて表わされた売買トランザクションイベントに基づいてベストセラーの製品を判断するＣＱＬクエリを作成するために、ＣＥＰシステムを利用できる。次に、ＣＱＬクエリを入力として使用して、マップリデュース・プログラムが、マップリデュース・プログラムジェネレータによって自動的に生成され得る。プログラム（同じプログラム、または別個のプログラム）はまた、実行された各マップリデュース・ジョブによって返された結果を、ＣＱＬクエリの実行によって返された結果と連続的にマージするために、自動的に生成され得る。
【００３１】
マップリデュース・ジョブは、ピッグ・ラテン語（Pig Latin）と呼ばれるある特定の言語で表わすことができる。ピッグ・ラテン語とは、高レベルの記述言語である。たとえば、ピッグ・ラテン語では、データをロードし、そのデータをフィルタリングし、そのデータを他のデータと結合するといったジョブまたはプログラムを表わすことができる。ピッグ・ラテン語プログラムは、演算子の観点から表わすことができる。これらの演算子は、データをロードする、データをフィルタリングする、データを結合するといった演算を行なってもよい。この発明の一実施形態では、ピッグ・ラテン語プログラムジェネレータは、ＣＱＬクエリを入力として受信し、そのクエリを、そのコンポーネント演算子へと自動的に分解する。そのようなＣＱＬ演算子は、フィルター演算子、結合演算子、射影演算子などを含んでいてもよい。この発明の一実施形態では、ピッグ・ラテン語プログラムジェネレータは、ＣＱＬ演算子とピッグ・ラテン語演算子との間のマッピングを利用して、１組の演算子から他のものに自動的に変換する。そのようなマッピングは、１つの演算子対１つの演算子のマッピング、１つの演算子対多くの演算子のマッピング、多くの演算子対１つの演算子のマッピング、および多くの演算子対多くの演算子のマッピングを含み得る。
【００３２】
一実施形態では、１組のピッグ・ラテン語演算子が、対応するＣＱＬ演算子に基づいて自動的に生成された後で、ピッグ・ラテン語プログラムジェネレータは、ＣＱＬ演算子およびピッグ・ラテン語演算子の双方を含み得るフローを自動的に生成して格納する。このフローは、ＣＱＬ演算子の出力がピッグ・ラテン語演算子への入力となること、および／または、ピッグ・ラテン語演算子の出力がＣＱＬ演算子への入力となることを示し得る。このため、ピッグ・ラテン語演算子およびＣＱＬ演算子の双方を含む、演算子の有向グラフを生成することができる。この有向グラフでは、演算子ノード間のエッジは、演算子から演算子までのデータのフローを示し得る。潜在的に、１つの演算子が複数の演算子にデータを出力でき、複数の演算子が単一の演算子にデータを出力できる。グラフにおけるリーフノード演算子は、ＣＱＬ演算結果とマップリデュース演算結果との最終マージを行なうことができる。有向グラフがこのように自動的に生成された後で、それらの演算子が行なう演算子のタイプに基づいた、グラフにおけるいくつかの演算子ノードのマージを潜在的に伴う、グラフの何らかの最適化を自動的に行なうことができる。たとえば、双方ともフィルタリング演算を行なうＣＱＬ演算子およびピッグ・ラテン語演算子を、単一の演算子へとともにマージすることができる。
【００３３】
実行時、有向グラフは解釈され得る。ピッグ・ラテン語演算子、または１つ以上のエッジによってリンクされた１組のピッグ・ラテン語演算子がグラフに生じると、それらの演算子の演算を行なう対応するマップリデュース・プログラムが、自動的に実行され得る。マップリデュース・プログラムの結果は、入力イベントとして、有向グラフにおけるＣＱＬ演算子に対応するＣＱＬクエリに送信され得る。
【００３４】
単一の言語を使用した連続処理およびバッチ処理の結果の結合
上述のように、一実施形態では、連続クエリプロセッサは、イベントストリームに現在到着しているイベントに対してＣＱＬクエリを連続的に処理することができ、一方、マップリデュース・プログラムは、以前にストリームから受信され、格納されたイベントを同時に処理する。大きいデータセットについて比較的新鮮な結果を生成するために、連続クエリプロセッサによって行なわれた処理の結果を、マップリデュース・プログラムによって行なわれた処理の結果と周期的にマージすることができる。
【００３５】
一実施形態によれば、連続クエリプロセッサは、ＣＱＬなどの単一の高レベル言語で構成されるクエリを実行する。そのようなクエリのコンパイルの結果、２つの局面をランタイムで生成することができる。一方の局面は、イベントストリーム処理を行なう。同じコンパイル中、他方の局面として、追加の演算子を生成することができる。これらの追加の演算子は、Hadoopまたは何らかの他のマップリデュース・ツールへと統合され得る。マップリデュース・ツールは、バッチ系の処理を行なうことができる。ストリーム処理の結果は、バッチ処理の結果とマージされ得る。したがって、結果がリアルタイムで得られることも可能にしつつ、大きいデータ量が操作可能である。
【００３６】
オラクル・イベント・プロセッシング（Oracle Event Processing：ＯＥＰ）などのイベント処理アプリケーションは、イベントをリアルタイムで処理するように設計されている。しかしながら、そのようなアプリケーションは従来、比較的短命なイベントを処理するように設計されたものである。そのような処理は従来、あまり深くなかった。イベント処理アプリケーションは従来、処理が発生すると、発生しているイベントを処理してきた。それらのイベント処理アプリケーションは従来、何年も前にデータベースに格納されたかもしれないデータを検査していなかった。
【００３７】
Hadoopなどのマップリデュース・ツールは、ハードディスクドライブ上に物理的に含まれ得るデータベースなどのリポジトリに格納された大量のデータに対して演算できる。そのようなデータベースに格納されたデータは、比較的古い場合があり、何年も前のものである場合もある。そのようなデータベースに格納されたデータは、数年前に生成され、格納されたものかもしれない。それはそのような長期間蓄積していたかもしれないため、そのようなデータベースに格納されたデータの量は比較的大きい場合がある。マップリデュース・ツールは、データベースに格納された大きいデータセットを、分散された態様で処理できる。マップリデュース・ツールは、マップタスクおよびリデュースタスクを作成できる。これらのタスクは、分散された態様で実行可能である。大きいデータセットの処理は別々の局面へと分解可能であり、各局面についての処理は別々の処理要素間で分散可能である。マップリデュース・ツールはその処理を、それが大きいデータセットに関して行なうバッチジョブが開始および完了の双方を有するように、バッチ系の態様で行なうことができる。
【００３８】
マップリデュース・ツールはその処理を、連続イベントプロセッサによって同時に行なわれている処理から隔離されたやり方で行なうことができる。マップリデュース・ツールはその処理を、明確なタスク開始および終了を有するバッチ系の態様で行なうが、連続イベントプロセッサはその処理を、終了なしで連続的に行なう。イベントストリームにおけるイベントは、連続イベントプロセッサに連続的に到着する。この発明の実施形態は、連続イベントプロセッサの連続タイプの処理の結果と、マップリデュース・ツールのバッチタイプの処理の結果とを、ともに結合できる。さらに、この発明の実施形態は、ＣＱＬなどの単一の高レベル言語を使用して、この結合を遂行できる。
【００３９】
代替的な一アプローチは、ストリーム処理を行なう１つのアプリケーションと、バッチ処理を行なうもう１つの別のアプリケーションとを伴い得る。異なるタイプの処理の結果をまとめようとして、第３のカスタムアプリケーションを書くことが可能である。そのようなアプローチは、１つはストリーム処理用、１つはバッチ処理用、１つは各タイプの処理の結果の結合用、といった３つの異なるプログラミング言語の使用を伴うかもしれない。
【００４０】
複数の異なる言語の使用を回避するために、この発明の一実施形態は、高レベルのＣＱＬクエリを機能的に同等のマップリデュース・プログラムにコンパイルすることを伴う。ＣＱＬクエリの実行の結果は次に、マップリデュース・プログラムの結果とマージされる。ＣＱＬクエリは、結果をリアルタイムで生成でき、一方、マップリデュース・プログラムは、より大きいデータセットに対するより深い分析を行なうことができる。マージの結果はしたがって、リアルタイムであり、かつ深い。そのようなマージは、システムのリアルタイムコンポーネントおよび深い分析コンポーネントの双方を生成するためにコンパイルされる単一のユーザ指定クエリに基づいて達成可能である。異なる言語での別々のアプリケーションを構築する必要はない。
【００４１】
図５は、この発明の一実施形態に従った、単一のクエリに基づいて連続処理コンポーネントおよびバッチ処理コンポーネントを生成するための手法５００の一例を示すフロー図である。ブロック５０２で、ＣＱＬで特定されたクエリが受信される。ブロック５０４で、コンパイラが、ＣＱＬクエリを、連続イベントプロセッサによって実行可能な連続イベント処理実行プランへとコンパイルする。ブロック５０６で、コンパイラは、ＣＱＬクエリを、連続イベント処理実行プランと機能的に同等であり、かつマップリデュース・プログラムによって分散された態様でバッチジョブとして実行可能な、マップタスクおよびリデュースタスクへとコンパイルする。ブロック５０８で、コンパイラは、連続イベントプロセッサによって生成された結果をマップリデュース・プログラムによって生成された結果と結合し得るマージコンポーネントを生成する。ブロック５１０で、連続イベントプロセッサは、イベントストリームからの現在到着しているイベントに関してプランを実行し、一方、マップリデュース・プログラムは、以前にデータベースに格納されたデータに関してマップタスクおよびリデュースタスクを実行する。ブロック５１２で、マージコンポーネントは、連続イベントプロセッサおよびマップリデュース・プログラムによって生成された結果を結合する。制御はブロック５１０に戻る。
【００４２】
対応するリアルタイム演算子およびバッチ演算子の生成
例示的なシナリオでは、ユーザは、１組のテキスト内のある特定の単語への言及の数量をカウントしたいかもしれない。Hadoopなどのマップリデュース・ツールは、特定の単語への言及の数量をカウントするために、１組のファイルにおける各ファイルを処理することができる。マップリデュース・ツールによって処理された１組のファイルは、数年前にイベントストリームから格納された短いテキストを含むかもしれない。たとえば、１組のファイルは、比較的最近の過去（たとえば、直近の１分）を除き、１０年にわたってストリームから受信された短いテキストを含むかもしれない。これが生じている間、連続イベントプロセッサは、同様の短いリアルタイムテキストを、フェイスブック（Facebook：登録商標）またはツイッター（Twitter：登録商標）などのオンラインアプリケーションから受信できる。連続イベントプロセッサは、それらのリアルタイムテキストが生成された直後に（たとえば、ユーザがフェイスブックまたはツイッターを使用してそのようなテキストを投稿した直後に）、これらのリアルタイムテキスト内の特定の単語への言及の数量をカウントすることができる。マップリデュース・ツールによって計算されたカウントは、連続イベントプロセッサによって計算されたカウントと結合され得る。
【００４３】
行なうべき単語カウントタスクを特定するために、ユーザは、ＣＱＬを使用してクエリを特定できる。構文的には、ＣＱＬは構造化クエリ言語（ＳＱＬ）に似ている。クエリは、大まかには、FROM location GROUP BY word SELECT countといった形をとるかもしれない。そのようなクエリは、特定された場所からすべての文を集め、それらの文からの特有の単語を異なるグループへとグループ分けし、次に各グループにおける単語の数量をカウントすることができる。このため、クエリは、比較的単純なフォーマットを使用して特定され得る。
【００４４】
ユーザ指定ＣＱＬクエリを受信したコンパイラは、クエリを別々の演算子へと分解できる。これらはたとえば、グループ分け演算子、カウントを行なうための集約演算子、ソース演算子としても作用する出力演算子、などを含み得る。この組の演算子に基づいて、コンパイラは、（ａ）リアルタイムイベント処理用のクエリ実行プラン、および（ｂ）大きいデータセットの処理用のバッチジョブ、の双方を生成できる。上述の特定の例示的な単語カウントシナリオを参照すると、バッチジョブの生成は、さまざまな文を別々の特有の単語へとマップするマップ演算子の生成を伴い得る。バッチジョブの生成はさらに、各組の特有の単語を、それらの単語の数量を表わす対応する数へと減少させるリデュース演算子の生成を伴い得る。クエリ実行プランを生成する一環として、コンパイラは、バッチリデュース演算子の結果を連続集約演算子の結果とマージするマージ演算子を生成できる。バッチジョブは次に、リアルタイムの連続クエリと同時に実行され得る。マージ演算子は、マップリデュース・コンポーネントからバッチビューを、連続イベントプロセッサからリアルタイムビューを得る。
【００４５】
図６は、この発明の一実施形態に従った、クエリに基づいて機能的に同等の演算子を生成するための手法６００の一例を示すフロー図である。ブロック６０２で、クエリの現在の要素が、クエリの第１の要素に設定される。ブロック６０４で、現在の要素のタイプ（たとえば、グループ分け、集約、選択など）が判断される。ブロック６０６で、現在の要素のタイプに基づいて、連続イベント処理演算子タイプが選択される。ブロック６０８で、現在の要素のタイプに基づいて、バッチ処理演算子タイプ（たとえば、マップ、リデュースなど）が選択される。ブロック６１０で、選択された連続イベント処理演算子タイプの演算子が生成され、連続イベント処理プランに追加される。ブロック６１２で、選択されたバッチ処理演算子タイプの演算子が生成され、バッチ処理プランに追加される。ブロック６１４で、クエリが現在の要素の後に要素を含むかどうかについて、判断が下される。要素を含む場合、制御はブロック６１６に進む。その他の場合、制御はブロック６１８に進む。
【００４６】
ブロック６１６で、クエリの現在の要素が、クエリの次の要素に設定される。
制御はブロック６０４に戻る。
【００４７】
また、これに代えて、ブロック６１８で、マージ演算子が生成され、連続イベント処理プランに追加される。図６で示す手法は次に終了する。
【００４８】
ステートレス演算子およびステートフル演算子
一般に、ＣＱＬには２つの異なる組の演算子がある。そのような１組の演算子はステートレスである。そのようなステートレス演算子では、典型的には、相互接続された演算子のグラフにおいて、１つの入力が１つ以上の出力にマップされる。この発明の一実施形態によれば、ステートレスＣＱＬ演算子は、バッチ処理ドメインにおけるマップ演算子に対応している。もう１つの組のＣＱＬ演算子はステートフルである。そのようなステートレス演算子では、典型的には、相互接続された演算子のグラフにおいて、複数の入力が１つの出力にマップされる。この発明の一実施形態によれば、ステートフルＣＱＬ演算子は、バッチ処理ドメインにおけるリデュース演算子に対応している。
【００４９】
このため、この発明の一実施形態では、コンパイラは、ＣＱＬクエリ要素が１つの入力を１つ以上の出力へとマップするかどうか判断する。マップする場合、コンパイラは、要素がステートレスイベント処理演算子に対応していると判断する。フィルター演算子は、ステートレスイベント処理演算子の一例である。イベント処理演算子がステートレス演算子であるという判断に応答して、コンパイラは、（選択されたマップリデュース言語で）バッチ処理ジョブに含むための機能的に同等のマップ演算子を生成する。また、これに代えて、コンパイラは、ＣＱＬクエリ要素が複数の入力を単一の出力へとマップするかどうか判断できる。マップする場合、コンパイラは、要素がステートフルイベント処理演算子に対応していると判断する。窓演算子は、ステートフルイベント処理演算子の一例である。イベント処理演算子がステートフル演算子であるという判断に応答して、コンパイラは、（選択されたマップリデュース言語で）バッチ処理ジョブに含むための機能的に同等のリデュース演算子を生成する。
【００５０】
ＣＱＬクエリの要素は、ある特定のタイプの集約機能（たとえば、合計、平均、カウントなど）を行なってもよい。この発明の一実施形態では、コンパイラは、特定の集約タイプのＣＱＬクエリ集約演算子を判断し、それに応答して、同じタイプの集約機能を行なうリデュース演算子を生成する。このため、たとえば、連続イベント演算子が合計演算を行なう場合、コンパイラはそれに応答して、合計演算を行なうリデュース演算子を生成するが、連続イベント演算子がカウント演算を行なう場合、コンパイラはそれに応答して、カウント演算を行なう集約演算子を生成する。
【００５１】
マージされた結果における重複イベント処理の回避
この発明の一実施形態によれば、マージ演算子は、リアルタイムの連続処理結果と非リアルタイムのバッチ処理結果との間で重複が生成されないような態様で設計されている。マージ演算子は、リアルタイムの局面および非リアルタイムの局面双方による処理に起因してデータのあらゆる項目がそれ自体とマージされるのを防止する安全機能を含み得る。その結果、結合された結果の任意の特定の反復中、どの単一イベントも２回以上考慮されないであろう。この発明の一実施形態では、任意の特定の反復中、マージ演算子は、特定された時点（たとえば、１分前）よりも古い、非リアルタイムの（たとえば、マップリデュース）コンポーネントからの結果のみを受入れ、また、その特定された時点よりも古くない、リアルタイムの（たとえば、連続イベントプロセッサ）コンポーネントからの結果のみを受入れる。処理は繰り返し行なわれ得るため、時点は、反復が起こるたびに進み得る。
【００５２】
たとえば、第１の反復において、マージ演算子は、現在の日付での１２時５０分４５秒までに生じたイベントのみを含むように、大きいデータセットの境界を規定できる。マージ演算子は、その第１の反復において、現在の日付での１２時５０分４５秒よりも最近に生じたイベントのみを含むように、連続イベントプロセッサによって取扱われるデータセットの境界を規定する。連続イベントプロセッサ用の時間窓が１０秒であると仮定すると、第２の反復については、この境界は、１２時５０分４５秒から１２時５０分５５秒へと１０秒進み得る。第１の反復中に受信されたイベントは、１２時５０分４５秒から１２時５０分５５秒にわたる１０秒の間隔において、それらが到着すると大きいデータセットに追加され、イベントストリームからのそれらの到着時間を示すためにタイムスタンプされている。各反復の終わりで、境界は、リアルタイムイベント処理の１単位に必要な時間量だけ進められ得る。この量は、連続イベントプロセッサが利用可能なメモリのサイズに基づいていてもよい。この発明の一実施形態では、この時間量は静的ではなく、異なる反復の後に境界が異なる量だけ進むことができるように、反復ごとに変わってもよい。そのような一実施形態では、各反復の境界は、一定時間の持続時間ではなく、連続イベントプロセッサによって処理すべき特定された量のイベントに基づいていてもよい。
【００５３】
その結果、任意の特定の反復中、マージ演算子は、その特定の反復中に連続イベントプロセッサによって処理されたどの組のイベントも、その同じ特定の反復中にバッチプロセッサによって処理されたイベントを含むことができない、ということを確実にする。ただし、そのようなイベントは後に、次の反復中にバッチプロセッサによって処理されるであろう一組のイベント内に含まれ得る。本質的に、マージ演算子は、一体化された組におけるイベントのタイムスタンプの重複は許されないことを除き、連続イベントプロセッサおよびバッチプロセッサによって生成された結果の組の和集合を計算することができる。
【００５４】
なお、ある状況下では、マージ演算子は、リアルタイム結果とバッチ結果とをただ連結するかまたは合計する以上のことをしてもよい。たとえば、平均演算子が処理に関与している場合、マージ演算子は、より複雑なマージを行なってもよい。より具体的な一例について、４個の数字の平均が４であると連続イベントプロセッサが判断した場合、かつ８個の数字の平均が１０であるとバッチプロセッサが判断した場合、マージ演算子は、全部で１２個の数字の平均は（４＊４＋８＊１０）／１２＝８であると判断するであろう。行なわれるマージの種類は、クエリで行なわれていた集約演算のタイプに依存していてもよい。
【００５５】
ピッグ・ラテン語プログラムへのＣＱＬクエリのコンパイル
ピッグ・ラテン語は、マップリデュースによって使用され得る言語である。この発明の一実施形態では、ＣＱＬクエリのコンパイルは、ピッグ・ラテン語での類似演算子の生成を伴い得る。これらの類似演算子に基づいて、機能的に同等のピッグ・ラテン語プログラムが、連続クエリプロセッサによる使用のためのＣＱＬクエリのコンパイルと同時に、コンパイラによって自動的に生成され得る。マップリデュース・ツールは、連続クエリプロセッサのＣＱＬクエリの実行と同時に、ピッグ・ラテン語プログラムを実行できる。
【００５６】
しかしながら、この発明の代替的な一実施形態では、ピッグ・ラテン語演算子は生成されない。代わりに、マップリデュース・ツールによって使用可能なネイティブ演算子が生成され得る。この発明の実施形態は、ピッグ・ラテン語プログラムが生成される実施形態に限定されない。
【００５７】
ハードウェア概要
図３は、この発明の一実施形態に従った、使用され得るシステム環境３００のコンポーネントを示す簡略化されたブロック図である。図示されているように、システム環境３００は１つ以上のクライアントコンピューティング装置３０２、３０４、３０６、３０８を含み、それらは、ウェブブラウザ、専用クライアント（オラクル・フォームズ（Oracle Forms））などのクライアントアプリケーションを動作させるように構成されている。さまざまな実施形態では、クライアントコンピューティング装置３０２、３０４、３０６および３０８は、サーバ３１２とやり取りしてもよい。
【００５８】
クライアントコンピューティング装置３０２、３０４、３０６、３０８は、汎用パーソナルコンピュータ（たとえば、マイクロソフトウィンドウズ（登録商標）および／またはアップルマッキントッシュ（登録商標）オペレーティングシステムのさまざまなバージョンを作動させるパーソナルコンピュータおよび／またはラップトップコンピュータを含む）、携帯電話またはＰＤＡ（マイクロソフトウィンドウズモバイルなどのソフトウェアを作動させ、インターネット、ｅメール、ＳＭＳ、ブラックベリー（登録商標）、または他の通信プロトコルに対応）、および／または、商業的に入手可能なさまざまなＵＮＩＸ（登録商標）またはＵＮＩＸ系オペレーティングシステムのうちのいずれかを作動させるワークステーションコンピュータ（さまざまなＧＮＵ／Ｌｉｎｕｘ（登録商標）オペレーティングシステムを限定なしで含む）であってもよい。また、これに代えて、クライアントコンピューティング装置３０２、３０４、３０６および３０８は、ネットワーク（たとえば、以下に説明するネットワーク３１０）を通して通信可能な、シンクライアントコンピュータ、インターネット対応ゲームシステム、および／または個人用メッセージング装置といった任意の他の電子装置であってもよい。例示的なシステム環境３００は４つのクライアントコンピューティング装置を有して図示されているが、任意の数のクライアントコンピューティング装置がサポートされてもよい。センサ付き装置などの他の装置が、サーバ３１２とやり取りしてもよい。
【００５９】
システム環境３００は、ネットワーク３１０を含んでいてもよい。ネットワーク３１０は、ＴＣＰ／ＩＰ、ＳＮＡ、ＩＰＸ、AppleTalkなどを限定なしで含む商業的に入手可能なさまざまなプロトコルのうちのいずれかを使用してデータ通信をサポート可能な、当業者によく知られているあらゆるタイプのネットワークであってもよい。ほんの一例として、ネットワーク３１０は、イーサネット（登録商標）ネットワーク、トークンリングネットワークなどのローカルエリアネットワーク（local area network：ＬＡＮ）；ワイドエリアネットワーク；仮想プライベートネットワーク（virtual private network：ＶＰＮ）を限定なしで含む仮想ネットワーク；インターネット；イントラネット；エクストラネット；公衆交換電話網（public switched telephone network：ＰＳＴＮ）；赤外線ネットワーク；無線ネットワーク（たとえば、プロトコルのＩＥＥＥ８０２．１１スイートのいずれか、当該技術分野で公知のBluetooth（登録商標）プロトコル、および／または任意の他の無線プロトコルの下で動作するネットワーク）；および／または、これらのおよび／または他のネットワークの組合せであってもよい。
【００６０】
システム環境３００はまた、１つ以上のサーバコンピュータ３１２を含み、それは、汎用コンピュータ、特化サーバコンピュータ（たとえば、ＰＣサーバ、ＵＮＩＸサーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラック搭載サーバなどを含む）、サーバファーム、サーバクラスタ、もしくは任意の他の適切な構成および／または組合せであってもよい。さまざまな実施形態では、サーバ３１２は、前述の開示に記載された１つ以上のサービスまたはソフトウェアアプリケーションを作動させるように適合されてもよい。たとえば、サーバ３１２は、図２の連続イベントプロセッサ２０６またはマップリデュース・アルゴリズミックツール２０８に対応していてもよい。
【００６１】
サーバ３１２は、上述のいずれかを含むオペレーティングシステム、および商業的に入手可能なあらゆるサーバオペレーティングシステムを作動させてもよい。サーバ３１２はまた、ＨＴＴＰサーバ、ＦＴＰサーバ、ＣＧＩサーバ、ＪＡＶＡ（登録商標）サーバ、データベースサーバなどを含む、さまざまな追加のサーバアプリケーションおよび／または中間層アプリケーションのうちのいずれかを作動させてもよい。例示的なデータベースサーバは、オラクル、マイクロソフト、サイベース（Sybase）、ＩＢＭなどから商業的に入手可能なものを限定なしで含む。
【００６２】
システム環境３００はまた、１つ以上のデータベース３１４、３１６を含んでいてもよい。データベース３１４、３１６は、さまざまな場所に存在していてもよい。たとえば、データベース３１４、３１６のうちの１つ以上は、サーバ３１２にとってローカルな（および／またはサーバ３１２に常駐する）記憶媒体上に存在していてもよい。また、これに代えて、データベース３１４、３１６は、サーバ３１２からリモートであってもよく、ネットワークベースのまたは専用の接続を介してサーバ３１２と通信していてもよい。一組の実施形態では、データベース３１４、３１６は、当業者にはよく知られているストレージエリアネットワーク（storage area network：ＳＡＮ）に存在していてもよい。同様に、サーバ３１２に起因する機能を行なうためのあらゆる必要なファイルが、サーバ３１２上にローカルにおよび／またはリモートで、適宜格納されてもよい。一組の実施形態では、データベース３１４、３１６は、ＳＱＬフォーマットのコマンドに応答してデータを格納し、更新し、検索するように適合された、オラクル１０ｇなどのリレーショナルデータベースを含んでいてもよい。
【００６３】
図４は、この発明の実施形態に従った、使用され得るコンピュータシステム４００の簡略化されたブロック図である。たとえば、図２の連続イベントプロセッサ２０６またはマップリデュース・アルゴリズミックツール２０８は、システム４００などのシステムを用いて実現されてもよい。コンピュータシステム４００は、バス４２４を介して電気的に連結され得るハードウェア要素を含んで図示されている。ハードウェア要素は、１つ以上の中央処理装置（ＣＰＵ）４０２と、１つ以上の入力装置４０４（たとえば、マウス、キーボードなど）と、１つ以上の出力装置４０６（たとえば、表示装置、プリンタなど）とを含んでいてもよい。コンピュータシステム４００はまた、１つ以上の記憶装置４０８を含んでいてもよい。たとえば、記憶装置４０８は、ディスクドライブ、光学記憶装置、ならびに、ランダムアクセスメモリ（random access memory：ＲＡＭ）および／または読出し専用メモリ（read only memory：ＲＯＭ）などのソリッドステート記憶装置などの装置を含んでいてもよく、それらはプログラム可能、フラッシュ更新可能なものなどであってもよい。
【００６４】
コンピュータシステム４００は加えて、コンピュータ読取可能記憶媒体リーダ４１２と、通信サブシステム４１４（たとえば、モデム、ネットワークカード（無線または有線）、赤外線通信装置など）と、上述のようなＲＡＭ装置およびＲＯＭ装置を含み得る作業メモリ４１８とを含んでいてもよい。いくつかの実施形態では、コンピュータシステム４００はまた、処理加速ユニット４１６を含んでいてもよく、それは、デジタル信号プロセッサ（digital signal processor：ＤＳＰ）、専用プロセッサなどを含んでいてもよい。
【００６５】
コンピュータ読取可能記憶媒体リーダ４１２はさらにコンピュータ読取可能記憶媒体４１０に接続可能であり、コンピュータ読取可能な情報を一時的におよび／またはより永続的に含むためのリモートの、ローカルの、固定された、および／またはリムーバブルの記憶装置プラス記憶媒体を、ともに（および、オプションで記憶装置４０８と組合されて）包括的に表わす。通信システム４１４は、データが、ネットワークおよび／または上述した任意の他のコンピュータと交換されることを許可してもよい。
【００６６】
コンピュータシステム４００はまた、オペレーティングシステム４２０および／またはアプリケーションプログラム（クライアントアプリケーション、ウェブブラウザ、中間層アプリケーション、ＲＤＢＭＳなどであってもよい）などの他のコード４２２を含む、作業メモリ４１８内に現在位置するものとして図示されたソフトウェア要素を含んでいてもよい。例示的な一実施形態では、作業メモリ４１８は、上述の手法のために使用される（キャッシュなどの）実行可能コードおよび関連付けられたデータ構造を含んでいてもよい。コンピュータシステム４００の代替的な実施形態は、上述のものからの多数の変形を有していてもよい、ということが理解されるべきである。たとえば、カスタマイズされたハードウェアも使用されてもよく、および／または、特定の要素がハードウェア、ソフトウェア（アプレットなどのポータブルソフトウェアを含む）、またはそれら双方で実現されてもよい。また、ネットワーク入力／出力装置などの他のコンピューティング装置への接続が採用されてもよい。
【００６７】
コードまたはコードの一部を含むための記憶媒体およびコンピュータ読取可能媒体は、当該技術分野で公知のまたは使用されるあらゆる適切な媒体を含んでいてもよく、コンピュータ読取可能な命令、データ構造、プログラムモジュール、もしくは他のデータといった情報の格納および／または送信のための任意の方法あるいは技術で実現される、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体を含むもののそれらに限定されない記憶媒体および通信媒体を含み、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（digital versatile disk：ＤＶＤ）または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、データ信号、データ伝送、もしくは所望の情報を格納または送信するために使用可能であり、コンピュータによってアクセス可能な任意の他の媒体を含む。
【００６８】
図７は、この発明の実施形態に従った電子装置７００の簡略化されたブロック図である。電子装置７００は、第１の時間の時点で永続的データストアにすでに格納されているイベントデータに関して第１のクエリを実行する第１のバッチ演算を開始するように構成された開始ユニット７０２と、第１のバッチ演算の実行中、データストリームから連続的に受信されているイベントデータに関して第２のクエリを連続的に実行するように構成された実行ユニット７０４と、第１のバッチ演算の実行中、第２のクエリの結果を、完了した第２のバッチ演算の結果と連続的にマージするように構成されたマージユニット７０６と、マージの結果を連続的に出力するように構成された出力ユニット７０８と、第１のバッチ演算の完了に応答して、第２のバッチ演算の結果を第１のバッチ演算の結果と置換するように構成された置換ユニット７１０とを含んでいてもよい。
【００６９】
一例では、電子装置７００は、第１のバッチ演算の実行中、永続的データストアに、データストリームから連続的に受信されているイベントデータを連続的に格納するように構成された格納ユニットと、第１のバッチ演算の完了に応答して、第１の時間よりも遅い第２の時間の時点で永続的データストアにすでに格納されているイベントデータに関して第１のクエリを実行する第３のバッチ演算を開始するように構成された第２の開始ユニットと、第３のバッチ演算の実行中、データストリームから連続的に受信されているイベントデータに関して第２のクエリを連続的に実行するように構成された第２の実行ユニットと、第３のバッチ演算の実行中、第２のクエリの結果を、完了した第１のバッチ演算の結果と連続的にマージするように構成された第２のマージユニットと、第２のクエリと完了した第１のバッチ演算の結果とのマージの結果を連続的に出力するように構成された第２の出力ユニットと、第３のバッチ演算の完了に応答して、第１のバッチ演算の結果を第３のバッチ演算の結果と置換するように構成された第２の置換ユニットとをさらに含む。
【００７０】
一例では、第１のバッチ演算はマップリデュース演算であり、第２のクエリは第１のクエリと同じ演算を行なう。
【００７１】
一例では、電子装置７００は、第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信するように構成された受信ユニットと、ＣＱＬクエリに基づいて、ＣＱＬクエリの演算を行なうマップリデュース・プログラムを自動的に生成するように構成された生成ユニットとをさらに含む。
【００７２】
一例では、電子装置７００は、第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信するように構成された第２の受信ユニットと、ＣＱＬクエリを自動的に構文解析するように構成された構文解析ユニットと、構文解析に基づいて、ＣＱＬクエリを第１の組の演算子へと自動的に分離するように構成された分離ユニットと、ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成するように構成された第２の生成ユニットと、ピッグ・ラテン語演算子に基づいて、第１のバッチ演算を行なうマップリデュース・プログラムを自動的に生成するように構成された第３の生成ユニットとをさらに含む。
【００７３】
一例では、電子装置７００は、第２のクエリとして連続クエリ言語（ＣＱＬ）クエリを受信するように構成された第３の受信ユニットと、ＣＱＬクエリを自動的に構文解析するように構成された第２の構文解析ユニットと、構文解析に基づいて、ＣＱＬクエリを第１の組の演算子へと自動的に分離するように構成された第２の分離ユニットと、ＣＱＬ演算子とピッグ・ラテン語演算子との間の特定されたマッピングに基づいて、第１の組のＣＱＬ演算子によって行なわれる演算子を行なう第２の組のピッグ・ラテン語演算子を自動的に生成するように構成された第４の生成ユニットと、第１の組からの演算子、第２の組からの演算子、第１の組からの演算子を表わすノードから第２の組からの演算子を表わすノードまでのエッジ、および第２の組からの演算子を表わすノードから第１の組からの演算子までのエッジを含む、ノードの有向グラフを自動的に生成するように構成された第５の生成ユニットとをさらに含む。
【００７４】
ここに開示されたさまざまなユニットは、ハードウェア、ソフトウェア、またはそれらの組合せで実現または実行されてもよい。それらは、ここに説明された機能を行なうように設計された、汎用シングルまたはマルチチッププロセッサ、デジタル信号プロセッサ（digital signal processor：ＤＳＰ）、特定用途向け集積回路（application specific integrated circuit：ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ）または他のプログラマブルロジックデバイス、ディスクリートゲートまたはトランジスタロジック、ディスクリートハードウェアコンポーネント、またはそれらの任意の組合せで実現または実行されてもよい。汎用プロセッサは、マイクロプロセッサ、もしくは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであってもよい。プロセッサはまた、コンピューティング装置の組合せとして、たとえば、ＤＳＰとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと併用される１つ以上のマイクロプロセッサ、または他のそのような構成として実現されてもよい。いくつかの実現化例では、ユニットは、所与の機能に特有の回路によって実現されてもよい。
【００７５】
この発明の特定の実施形態を説明してきたが、さまざまな修正、変更、代替的構成、および同等物もこの発明の範囲内に包含される。これらの修正、変更、代替的構成、および同等物は、開示された特徴のあらゆる関連する組合せを含む。この発明の実施形態は、ある特定のデータ処理環境内での演算に制限されず、複数のデータ処理環境内で自由に演算できる。加えて、この発明の実施形態は、ある特定の一連のトランザクションおよびステップを使用して説明されてきたが、この発明の範囲が上述の一連のトランザクションおよびステップに限定されないことは、当業者には明らかなはずである。
【００７６】
また、この発明の実施形態はハードウェアとソフトウェアとのある特定の組合せを用いて説明されてきたが、ハードウェアとソフトウェアとの他の組合せもこの発明の範囲内にあることが認識されるべきである。この発明の実施形態は、ハードウェアのみで、またはソフトウェアのみで、またはそれらの組合せを用いて実現されてもよい。
【００７７】
したがって、明細書および図面は、限定的ではなく例示的な意味であると考えられるべきである。しかしながら、請求項で述べられているようなより広い精神および範囲から逸脱することなく、追加、削減、削除、ならびに他の修正および変更がそれに行なわれてもよいことは、明らかであろう。
【図１】
2016504679.tif 000003
【図２】
2016504679.tif 000004
【図３】
2016504679.tif 000005
【図４】
2016504679.tif 000006
【図５】
2016504679.tif 000007
【図６】
2016504679.tif 000008
【図７】
2016504679.tif 000009
【国際調査報告】
2016504679.tif 000010
2016504679.tif 000011
2016504679.tif 000012