JP2017527024A - イベントストリーム変換 - Google Patents
イベントストリーム変換 Download PDFInfo
- Publication number
- JP2017527024A JP2017527024A JP2017505163A JP2017505163A JP2017527024A JP 2017527024 A JP2017527024 A JP 2017527024A JP 2017505163 A JP2017505163 A JP 2017505163A JP 2017505163 A JP2017505163 A JP 2017505163A JP 2017527024 A JP2017527024 A JP 2017527024A
- Authority
- JP
- Japan
- Prior art keywords
- event
- event stream
- computer
- stream
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/254—Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/12—Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
Abstract
1つまたは複数の入力イベントストリームに対する変換を形成して1つまたは複数の出力イベントストリームを生成する。よって、変換は、元の入力イベントストリームに対するクエリと考えられ得る。イベントクエリは、特定の実行コンテキストで使用可能な入力イベントストリームを表すイベントストリームソース表現を含む。イベントクエリは、実行コンテキストで入力イベントストリームに対して実行される変換セットを特定する変換モジュールをさらに含む。クエリが適切に形成されると、実行モジュールが、指定された入力イベントストリームに対して変換を実行させて出力イベントストリームを生成させ得る。
Description
[0001] イベントとは、1つまたは複数のタイムスタンプと関連付けられたデータ片である。イベントストリームとは、イベントのストリームである。イベントソースは、イベントを受け取り、それらのイベントをタイムスタンプで並べ替え、順序付きのイベントストリームを提供することができる。イベントストリームを処理するためのさまざまな機構が従来より存在する。各機構は、イベントストリームに対する変換の表現および実行を含む。しかし、イベントおよび並行処理の非同期的な性質に起因して、ストリーミングドメインは必然的に複雑である。結果として、新たなユーザにとってイベントストリームに対するクエリの学習曲線は、従来きわめて急峻である。
[0002] 現在、イベント処理でデータ変換を表現する主要なアプローチは2つある。すなわち、ドメイン固有言語(DSL)と、汎用プログラミング言語(GPPL)である。DSLは通常、SQLに似た言語の形式をとり、時間次元を処理する追加機能を備える。DSLは、クエリを高度な抽象化で記述するための宣言的な方法を提供する。さらに、DSLは、SQLと同様に、学習曲線を緩和するのに役立ち、開発者以外の人でもクエリを記述できるようにする。DSLの大きな問題は、ユーザ定義の拡張や、通常はGPPLで記述されるアプリケーションとの統合が、困難であるということである。クエリをGPPLで直接記述するほうが、データを使用するアプリケーションとの統合は円滑になるが、それには作成者がGPPLを知っている必要がある。
[0003] 本明細書で特許請求されている主題は、上述した欠点を解決する実施形態または上述したものなどの環境のみで動作する実施形態に限定されない。むしろ本背景は、本明細書に記載された一部の実施形態が実践され得る1つの例示的な技術領域を示すためにのみ提供されている。
[0004] 本明細書に記載された少なくとも一部の実施形態は、1つまたは複数の入力イベントストリームに対する変換を形成して1つまたは複数の出力イベントストリームを生成することに関する。よって、変換は、元の入力イベントストリームに対するクエリと考えることができる。イベントクエリは、特定の実行コンテキストで使用可能な入力イベントストリームを表すイベントストリームソース表現を含む。イベントクエリは、実行コンテキストで入力イベントストリームに対して実行される変換セットを特定する変換モジュールをさらに含む。クエリが適切に形成されると、実行モジュールは、指定された入力イベントストリームに対して変換を実行して、出力イベントストリームを生成することができる。
[0005] 一部の実施形態では、入力イベントストリームを表現するために使用できるプログラミング抽象化は、入力イベントストリームに関係なく、同じである。たとえば、最新イベントストリームならびに履歴イベントストリームを指定するために、同じプログラミング抽象化を使用することができる。プログラミング抽象化により、最新イベントストリームを、同じイベントストリームの履歴バージョンと組み合わせることが可能になり得る。
[0006] 本概要は、以下の「発明を実施するための形態」でさらに詳しく説明する概念の一部を、簡単な形式で紹介するために設けられている。本「発明の概要」は、特許請求されている主題の主要な特徴または必須の特徴を特定することを意図しておらず、特許請求されている主題の範囲を判断しやすくするものとして使用されることも意図していない。
[0007] 本発明の上記引用した利点および特徴ならびに他の利点および特徴を得ることができる態様を記述するために、上記概説した本発明のさらに詳細な記述を、添付の図面に示された本発明の具体的な実施形態を参照しながら以下に示す。これらの図面が本発明の典型的な実施形態のみを示すものであり、よって本発明の範囲を限定するものと考えられるべきものではないという理解に基づき、添付の図面を使用して追加の特異性および詳細を示しながら本発明について記述および説明する。
[0015] 包括的でありながらも使いやすいイベント処理プログラミングモデルについて、本明細書で記述する。このイベント処理プログラミングモデルでは、1つまたは複数のイベントストリームに対してクエリを表現および実行して、1つまたは複数の結果のイベントストリームを得ることができる。イベントとは、1つまたは複数のタイムスタンプと関連付けられたデータ片である。本明細書で記述される少なくとも一部の実施形態は、1つまたは複数の入力イベントストリームに対する変換を形成して1つまたは複数の出力イベントストリームを生成することに関する。よって、変換は、元の入力イベントストリームに対するクエリと考えることができる。イベントクエリは、特定の実行コンテキストで使用可能な入力イベントストリームを表すイベントストリームソース表現を含む。イベントクエリは、実行コンテキストで入力イベントストリームに対して実行される変換セットを特定する変換モジュールをさらに含む。クエリが適切に形成されると、実行モジュールは、指定された入力イベントストリームに対して変換を実行して、出力イベントストリームを生成することができる。
[0016] 一部の実施形態では、入力イベントストリームを表現するために利用できるプログラミング抽象化は、入力イベントストリームに関係なく、同じである。たとえば、現代(たとえば、ライブ)イベントストリームならびに履歴イベントストリームを指定するために、同じプログラミング抽象化をおそらく同じクエリでも使用することができる。「1日の時間枠での平均エネルギー消費量が1年前の同じ日に消費されたエネルギーよりも50%高い場合にアラームをトリガする」という自然言語で表現された以下のクエリを考えてみる。従来、そのようなシナリオには、ユーザが複雑なカスタムロジックを記述することで対処していた。プログラミング抽象化により、最新イベントストリームを、同じイベントストリームの履歴バージョンと組み合わせることが可能になり得る。よって、(イベントストリームが実行コンテキストにおいて使用可能である限り)イベントストリームの種類に依存しない、一元化されたイベントクエリモデルが記述される。
[0017] イベントストリームのクエリ変換セットをプログラミングする体験は、実行コンテキストに関係なく(たとえば、実行コンテキストがローカルコンピューティングシステム上であるか、リモートサーバ上であるか、クラウド内であるかに関係なく)、実質的に同じであり得る。実行コンテキストは、コンテキスト特定を使用して、実行コンテキストを特定し、クエリ変換セットを指定された実行コンテキストで実行させるために必要な情報を取得する。イベントクエリ処理の実行における、このような柔軟性により、入力イベントストリームが生成される場所および/または出力イベントストリームが消費される場所の近くで、計算を発生させることができる。よって、イベント処理プログラミングモデルの実施形態は、(実行モジュールがクエリを特定して実行コンテキストで展開するための十分な情報を持っている限り)実行コンテキストに依存しない。
[0018] 本明細書で記述されるイベント処理モデルの実施形態は、ユーザにとって学習曲線が緩やかである一方、表現力と拡張性も備えている。イベントおよび並列処理の非同期的な性質に起因して、ストリーミングドメインは必然的に複雑である。結果として、新たなユーザにとってイベントストリームに対するクエリの学習曲線は、従来きわめて急峻である。使いやすくするため、イベント処理プログラミングモデルは、ユーザに公開されるアプリケーションプログラミングインターフェイス(API)での概念/抽象化の数を制限し、そのような抽象化のセマンティクスを明確に定義している。同時に、表現力を実現するため、これらの抽象化は組み立て可能であり、ユーザは原始的な組み込みイベント処理計算からより高水準なクエリロジックを構築することができる。記述されるイベント処理プログラミングモデルは、ドメイン固有言語(DSL)および汎用プログラミング言語(GPPL)の両方で表現することができる抽象化を定義する。
[0019] イベント処理プログラミングモデルは、イベントストリームの時間的モデルを実装するものとして記述される。以下で記述するアプリケーションプログラミングインターフェイス(API)では、各イベントに、そのイベントが生成された時刻を表す単一のタイムスタンプが関連付けられている。しかし、本明細書で記述される、より一般的な原理は、シーケンスモデル、インターバル/スナップショットモデル、または他の任意のイベント処理時間モデルをサポートすることもできる。また、本明細書で記述される原理は、イベント処理時間モデル間の明確に定義されたユーザ体験分離により、複数のイベント処理時間モデル(時間的モデル、インターバル/スナップショットモデル等)との対話を可能にするイベント処理プログラミングモデルに適用することもできる。
[0020] また、イベント処理プログラミングモデルは、時間の概念を明示的に定義し、仮想時間(すなわち、アプリケーション時間)で稼働する。多くの監視および遠隔測定シナリオは、実時間(すなわち、システム時間)と異なる独自の時間軸を有するログ記録の分析を含む。そのようなクエリの自然言語形式の例として、「1時間の時間枠内に応答がない場合、すべてのケースにアラートする」がある。そのようなクエリは、システム時間の評価を含まない。
[0021] イベント処理プログラミングモデルは、クエリを実行する基盤サービスにより自動的に並列化される態様でイベント処理計算を定義することにより、表現力を提供する。よって、イベント処理プログラミングモデルは、便利なグループ化抽象化を提供することにより、計算を弾力的にスケールアウトすることができる。
[0022] 最初に、時間的データ処理モデルの概念を紹介する。以下のシナリオを考えてみる。データセンターの異なるマシンから取得された、パフォーマンスカウンタ値のセットがあると仮定する。このシナリオでは、システムは、パフォーマンスカウンタ値の異常を経時的に発見する。パフォーマンスカウンタ値の時刻は、その値が読み取られた時刻であり、対応するイベントが処理される時刻ではない。よって、イベント処理プログラミングモデルは、時間的モデルを導入する。
[0023] この時間的モデルは、仮想時間に基づいており、複合イベント検知および応答(Complex Event Detection and Response)(CEDR)代数のサブセット上に構築され、仮想時間に基づく。時間的モデルにおけるすべての演算子は、各イベント内の仮想時間タイムスタンプを参照する。一実施形態では、ユーザにとってセマンティクスを簡素化するために、時間的モデル内のイベントはポイントイベントであり、イベントが各々厳密に1つのタイムスタンプを有し、時間内の1つのポイントのペイロードを運ぶ。ポイントイベントの例として、メーター読み取り、電子メールの到達、ユーザのウェブクリック、ストックティック(stock tick)またはログへのエントリなどがある。
[0024] この時間的モデルのすべての演算子は決定性であり得、演算子の出力は反復可能であり得る。一例では、クエリは、ソースと呼ばれるイベントストリームをその入力として受け取り、そのイベントストリーム入力を使用して変換(たとえば、フィルタ処理、選択等)を実行し(すなわち、その入力イベントストリームに対してクエリを実行し)、シンク(sink)と呼ばれる結果のデータストリームを生成する。ソースは、さまざまな場所からさまざまなイベントを受け取り、結果のイベントストリームを提供する。一部の実施形態では、ソースは、時刻によるイベントの並べ替え等の何らかの追加処理をイベントに対して実行してイベントストリームを作り出すこともある。
[0025] 図1は、イベント処理プログラミングモデルのオーサリング環境100の態様を示す。オーサリングモジュール141は、作成者がイベントストリームソース表現110、イベントストリームシンク表現120、変換モジュール130、およびコンテキスト特定モジュール150をオーサリングすることを可能にする。
[0026] オーサリング後、開始コマンド160が開始され得、このコマンドにより変換モジュール130がコンテキスト特定モジュール150で特定された実行コンテキストで自動的に実行される。たとえば、図2は、実行環境200で実行される実行可能変換コンポーネント230を示している。
[0027] クエリ変換モジュール130は、入力イベントストリームに対して実行され、それによって出力(または結果の)イベントストリームを生成する、具体的なクエリを表す。具体的には、クエリ変換モジュール130は、1つまたは複数の入力イベントストリームに対して実行され、それによって1つまたは複数の出力イベントストリームを生成する、1つまたは複数の変換の変換セットを表し得る。変換操作の例として、1つまたは複数のイベントストリームソースのそれぞれをフィルタ処理して、一部のイベントのみが通過を許可されるようにすることがあり得る。その他の変換として、イベントストリームソースのイベントを使用して実行され、それによって1つまたは複数の結果のイベントを生成するロジックがあり得る。そのようなロジックは、イベントストリームソースに対して直接実行されるか、または1つもしくは複数のフィルタを通じてフィルタ処理されたイベントのみに対して実行され得る。
[0028] 実行環境では、対応するクエリ変換コンポーネント230がイベントストリームソース210を入力として受け取る。イベントストリームソース210は、イベント201(イベント201A、201B、201C、および省略記号201Dにより表される他の多数のものを含み得る)を受け取り、結果を入力イベントストリーム211として提供する。クエリ変換コンポーネント230は、入力イベントストリームを処理し、それによってクエリ変換モジュール130で表されたクエリを実行する。処理の結果として、クエリ変換コンポーネント230は、イベントストリームシンク220に提供される出力(結果の)イベントストリーム221を生成する。出力イベントストリーム221は、クエリ変換コンポーネントと関連付けられたクエリが入力イベントストリーム211に適用されたときのクエリ結果を表す。イベントストリームソース210およびイベントストリームシンク220は、それら自体がイベントストリームと考えられ得る。よって、イベントストリームシンクは、後で異なるクエリ処理のイベントストリームソースとして機能し得る。
[0029] オーサリング時には、作成者はオーサリングモジュール141を使用して、実行コンテキスト200で使用可能なイベントストリームソース210を表すイベントストリームソース表現110を形成する。オーサリングモジュール141は、変換モジュールにより表される(または変換モジュールと関連付けられる)1つまたは複数の入力イベントストリームに対して実行される、1つまたは複数の変換の変換セットを特定するクエリ変換モジュール130を形成するためにも使用される。変換モジュール130は、イベントストリームソース表現110を参照するか、またはイベントストリームソース表現110と関連付けられ得る。オーサリングモジュール141は、実行コンテキスト200で使用可能なイベントストリームシンク220を表すイベントストリームシンク表現120を形成するためにも使用される。変換モジュール130は、イベントストリームシンク表現120を参照するか、またはイベントストリームシンク表現120と関連付けられ得る。オーサリングモジュール141は、実行コンテキストを特定するコンテキスト特定モジュール150を形成するためにも使用される。
[0030] 実行コンテキスト150は、コンテキストで使用可能なイベントストリームソースおよびイベントストリームシンクの定義を含む。拡張により、使用可能な操作のセットを、使用可能なソース定義およびシンク定義から推測することもできる。たとえば、図2に示すように、実行コンテキスト200は、イベントストリームソース110のインスタンス210と、イベントストリームシンク120のインスタンス220とを含む。コンテキスト特定モジュール150は、コンテキストを暗黙的に(たとえば、表現されたコンテキスト特定がない場合のデフォルトコンテキストとして)特定するか、または明示的に特定し得る。たとえば、デフォルトコンテキストは、クエリを開始したのと同じシステムでクエリ変換コンポーネント130のインスタンスを単純に実行するだけである可能性がある。単なる例として、実行コンテキストは、ローカルコンピューティングシステム、クラウドコンピューティング環境、または他の任意の実行環境である可能性がある。
[0031] オーサリング環境100は、1つまたは複数の条件および/またはイベントの検知時に変換モジュール130を解釈して、実行コンテキスト200で実行中の対応するクエリ変換コンポーネント230を実行する実行モジュール161をさらに含む。たとえば、実行モジュール161は、ユーザ入力の検知時に実行モジュール161を開始するように構成された開始コマンドまたはコントロール160(または「管理API」)を含み得る。開始コマンド160は、イベント処理プログラミングモデルを実行コンテキスト200で自動的に実行させる。たとえば、コンテンツ特定コンポーネント150で特定されるコンテキストが、クエリをローカルに実行することを示している場合、クエリ変換コンポーネント230はローカルコンピューティングシステムでローカルに実行され得る。コンテキスト特定コンポーネント150で特定される実行コンテキストが、クラウドコンピューティング環境または何らかの種類のリモートサーバである場合、クエリ変換モジュール130がそのクラウドコンピューティング環境または他の種類のリモートサーバにアップロードされ、クエリ変換コンポーネント230がインスタンス化され、そのリモート環境で実行される。クエリ変換コンポーネント130のインスタンス230が実行されるコンテキストは、クエリ変換コンポーネント130自体のクエリロジックを一切変更することなく、コンテキスト特定コンポーネント150内で特定され得ることに留意されたい。
[0032] 図3は、変換コンポーネント230を実行環境200での操作のために準備する方法300のフローチャートを示す。方法300は、作成者が図1の開始コマンド160を開始したことに応じて実行され得る。
[0033] イベントストリームソース表現へのアクセスが行われる(行為301A)。たとえば、図1では、イベントストリームソース表現110へのアクセスが行われる。イベントストリームソース表現は1つだけに限定されるわけではない。よって、別のイベントストリームソース表現へのアクセスが行われることもある(行為301B)。他のイベントストリームソース表現も、実行コンテキスト200で使用可能な特定のイベントストリームを表す(ただし、図2には示されていない)。例として、イベントストリームソース110が最新イベントストリームであり、追加のイベントストリームソース(図示せず)が履歴イベントストリームである可能性がある。変換は、入力の最新イベントストリームの履歴タイムシフトバージョンを実行することを含む可能性がある。
[0034] 変換モジュールへのアクセスも行われる(行為302)。たとえば、図1では、変換モジュール130へのアクセスが行われ得る。また、イベントストリームシンク表現へのアクセス(行為303)も、コンテキスト特定コンポーネントへのアクセス(行為304)と共に行われ得る。たとえば、実行モジュール161は、変換モジュール130、イベントストリームシンク表現120、およびコンテキスト特定コンポーネント150にアクセスする可能性がある。
[0035] 次に、実行モジュールは、変換モジュールを解釈し(行為310)、変換セットを実行コンテキスト200で1つまたは複数の特定された入力イベントストリームに対して実行して、結果のイベントストリームを生成する。そうするために、実行モジュール161は、コンテキスト特定モジュール150内のコンテキスト特定を使用する。たとえば、実行モジュールは、変換コンポーネント230等の変換コンポーネントのインスタンスを取得する(行為311)。また実行モジュールは、イベントストリームソース表現(イベントストリームソース表現110等)により特定された任意のイベントストリームソース(イベントストリームソース210等)に変換コンポーネントを結合する(行為312)。また実行モジュールは、イベントストリームシンク表現(イベントストリームシンク表現120等)により特定された任意のイベントストリームシンク(イベントストリームシンク220等)に変換コンポーネントを結合する(行為313)。次に、変換コンポーネント230が実行され得る(行為314)。
[0036] 図1に戻り、オーサリングモジュール141は、イベントストリームソース表現110、イベントストリームシンク表現120、クエリ変換モジュール130、およびコンテキスト特定コンポーネント150を形成するために作成者により使用され得るプログラミング抽象化のセット140を含む。たとえば、抽象化140は、抽象化141〜144を含むものとして示されている。ただし、省略記号145は、イベントストリーム表現110および120ならびにモジュール130および150をオーサリングするためにプログラマにより使用される任意の数の抽象化が存在し得ることを表している。
[0037] 本明細書で記載される実施形態では、イベントストリームソース110およびイベントストリームシンク120の身元および種類が、おそらくはイベントストリームソース110自体の特定および/またはイベントストリームシンク120自体の特定の変更を除いて、クエリ変換モジュール130に何らかの根本的な変更を加えることなく、変更され得る。
[0038] たとえば、図1の例では、抽象化140の1つが、イベントストリームソース(イベントストリームソース110等)を特定するために使用され得る。以下は、ITemporalSourceDefinitionインターフェイスと呼ばれる抽象化の例である。もちろん、本明細書で記載される特定の抽象化の名前は、いずれも任意のものである。より重要なのは、抽象化の機能である。以下は、ITemporalSourceDefinitionインターフェイスを使用する例示的なHTTPソース定義である。
[0039] 時間的ソース(上記定義されたHTTPソース等)は、仮想時間で順序付けられたイベントを作り出す。時間的ソースは、ソースの種類に応じて、何らかの具体的なパラメータを持つことができる。たとえば、一部の種類の時間的イベントストリームソースでは、クエリ名が関連性を有する可能性がある。他の種類の時間的イベントストリームソースは、タイムスタンプ選択またはグループ化キーセレクタを有する可能性がある。
[0040] 分散シナリオでは、イベントストリームソース(たとえばイベントストリームソース210)がイベント(たとえばイベント201等)を順序違いで受け取る可能性がある。イベントストリームソースは、仮想時間を追跡する。イベントが受け取られると、イベントストリームソースは、そのイベントと関連付けられた時点を判断し、アプリケーション時間を適切に進める。しかし、イベントは順序違いで到着することがあるため、一部のイベントは、現在のアプリケーション時間よりも前のタイムスタンプでイベントストリームソースに到着する可能性がある。言い換えると、イベントは、仮想時間に反して、過去にタイムスタンプが設定される。
[0041] タイムスタンプT1、T2、およびT3を有する3つのイベントがある状況を考える。アプリケーション時間に従うと、タイムスタンプT1は、タイムスタンプT2よりも前であり、タイムスタンプT2は、タイムスタンプT3よりも前である。これらのイベントが異なるルートをとってイベントストリームソースに届いた場合、タイムスタンプT1およびT3のイベントが先に到着し、その後でタイムスタンプT2のイベントが到着する可能性がある。タイムスタンプT3のイベントが到着したときにイベントストリームソースが仮想時間をT3に動かすと、タイムスタンプT2のイベントに対して何をすればよいかわからなくなる。
[0042] 時間的イベントストリームソースには、ユーザが順序違いで到着するイベントの問題に対処するのを支援するパラメータが2つある。パラメータの1つは、「調整」または「破棄」のいずれかとなり得る順序違いポリシーである。調整ポリシーを適用すると、現在の仮想時間を下回るタイムスタンプを有するすべてのイベントに、現在の仮想時間でタイムスタンプが再設定される。破棄ポリシーを適用すると、それらのイベントがすべて破棄される。ただし、他の種類の順序違いポリシーがイベントストリームソースにより強要される可能性がある。別の順序違いポリシーの例として、イベントが順序違いで到着することにより、結果のイベントストリームに対するクエリを中止させる「中止」ポリシーがある。
[0043] 順序違いイベントの許容を実現するもう1つのパラメータは、句読点(punctuation)生成設定である。句読点生成設定は、サービスが入力の仮想時間をどのように進めるべきかを定義する。イベントが順序違いで届いたが、ユーザが順序違いポリシーによりそれらのイベントにタイムスタンプを再設定するのを望まない場合、ユーザは、仮想時間前進関数を使用して、ソースに対して句読点をどのように生成するかを明示的に設定することができる。仮想時間前進関数は、現在の仮想時間と、バッファされたすべてのイベントのリストとを入力として受け取り、新しい仮想時間を返す。たとえば、仮想時間の10秒の遅延を許容するために、ユーザは以下の関数を提供することができる。
[0044] 抽象化140のもう1つの例は、結果のイベントストリームが向かうイベントストリームシンク220を特定し、潜在的に定義するための抽象化である。本明細書の例では、そのような抽象化はITemporalSinkDefinitionインターフェイスと呼ばれる。以下は、ITemporalSinkDefinitionインターフェイスを使用するイベントストリームシンク定義のサンプルである。
[0045] クエリ変換モジュール130自体と関連付けられたクエリは、クエリ変換モジュール130にイベントストリームソース110を関連付ける抽象化を使用して、クエリ変換コンポーネント130のインスタンス230が実行されたときにインスタンスが入力イベントストリーム211を対応するイベントストリームソース210から受け取る態様で定義され得る。これを行うために使用され得る抽象化140の例は、本明細書では「From」メソッドと呼ばれる。
[0046] また、クエリ変換モジュール130と関連付けられたクエリは、クエリ変換コンポーネント130にイベントストリームシンク120を関連付ける抽象化を使用して、クエリ変換コンポーネント130のインスタンス230が実行されたときにインスタンスが出力イベントストリーム221を対応するイベントストリームシンク220に提供する態様で定義され得る。これを行うために使用され得る抽象化140の例は、本明細書では「To」メソッドと呼ばれる。
[0047] 以下は、さまざまな抽象化140を使用してイベントソースを定義し、イベントストリームシンクを定義し、クエリロジックを定義し、クエリロジックを定義されたイベントソースおよびイベントシンクに接続する、例示的なエンドツーエンドクエリである。
[0048] 本明細書で記述されるイベント処理プログラミングモデルは、そのユーザが、低遅延で、インクリメンタルで、スケールアウトされた、信頼性のある、データの計算を表現することを可能にする。データの取り扱いおよびデータの計算について、以下に説明する。上述したように、データはイベントストリームに編成される。各イベントストリームは、経時的に添付されるデータの潜在的に無限のコレクションを記述する。たとえば、各イベントは、データと、関連するタイムスタンプとからなる。データの計算はクエリによって表され、クエリはグラフとして表すことができる。よって、クエリを定義するとき、ユーザは基本的な構成単位(たとえば、イベントソースおよびイベントシンクの定義)を使用してデータ変換のグラフ構造を定義し、さらに関連する変換自体を定義する。そのようなクエリ定義は、宣言的に実行され得る。
[0049] たとえば、図4は、変換プロセスを示すフローグラフを示している。図4で、ユーザはパフォーマンスカウンタソース定義を取得し、フィルタ(「where」)変換および選択変換を適用し、すべてをキューに出力している。このグラフを(たとえば、開始コマンド160の実行による)実行のために(コンテキスト特定コンポーネント150により特定されるような)適切なコンテキストに送ると、グラフが計算のサービス内で実行される。サービスは、実行時にグラフを解釈してグラフを実行する。サービスは、パフォーマンスカウンタから実行時データを取得し、それをフィルタ処理して投影(project)し、キューに出力する。このグラフの実行時インスタンス化はクエリである。よって、イベント処理プログラミングモデルは、実行時エンティティにマップする定義エンティティからなる。
[0050] 定義エンティティは、データフローおよびそれらの計算を宣言的に記述するために使用される。これらの概念は、挙動を定義するだけであり、いかなる実行時成分も持たない。たとえば、「フィルタ」の定義は、着信するデータが何らかの述語に応じてフィルタ処理されることを指定する。プログラミング言語と比較して言うと、定義は、クラスに類似する。クエリの組み立てはクライアント側でイベント処理プログラミングモデルを使用して行われるが、クエリの実際のインスタンス化および実行はイベント処理エンジン(任意の場所の任意のデバイスに存在し得る)で行われる。
[0051] よって、実行時エンティティは、定義を実現する実行インスタンスである。実行時エンティティは、イベント処理エンジンまたはサービスによりホストおよび実行され、データの実際の処理を行う。実行時エンティティは、プログラミング言語におけるオブジェクトに類似する。たとえば、実行時には、イベントストリームソース110のインスタンスが動作し、クエリ変換チェーン130のインスタンスが動作し、イベントストリームシンク130のインスタンスが動作している。
[0052] 次に、C#プログラミング言語を使用して例示的クエリを実行するためにイベント処理プログラミングモデルを実装する方法の例を示す。この例では、HTTPエンドポイントが存在し、部屋のすべてのセンサが現在の温度を送ると仮定する。このシナリオでは、いずれかのセンサからの1分間のウィンドウにわたる平均温度がセ氏90度を超えた場合に、アプリケーションがアラームを生成する必要がある。さらに、アラームをAzureキューに書き込む必要がある。以下は、対応するC#のクエリ例であり、クエリロジック、使用するイベントストリームソース、使用するイベントストリームシンク、クエリが実行されるコンテキスト、および対応する開始コマンドを表している。後ほど参照および整理するために、行番号と適切なスペースが設けられている。
[0053] この例では、クエリは5つの論理ステップで実装されている。1行目で、クエリが実行されるコンテキストが特定される。これは、図1のコンテキスト特定コンポーネント150の例である。この例では、図1の抽象化140の例を表すServiceContextメソッドを使用して、コンテキストが取得される。
[0054] 2行目で、イベントストリームソースが定義される。この例では、イベントストリームソースはHTTPイベントストリームソースである。ただし、イベント処理エンジンは、幅広い種類のイベントストリームソースを処理することが可能であり得る。よって、抽象化140は、異なる種類のイベントストリームソースのための組み込みサポートを含み得る。ソースを定義するとき、ユーザはイベントの種類(この場合はTemperature)を選択することができる。特定の種類のソースに固有の何らかの他のパラメータ(この例ではingressUriのような)が存在する可能性がある。2行目の呼び出しの最後のパラメータは、図1の抽象化140の別の例であるグループ化条件である。クエリでは、クエリで定義されるすべての操作がグループの各メンバに個別に適用されるようにするために、何らかのキーで特定されるそのようなグループ化条件を使用することがある。上記の例では、クエリはSensorIdによりグループ化される。つまり、Average/Where/Select操作(5〜10行目)は、各センサからのデータに独立して適用されることになる。2行目は、図1のイベントストリームソース110の例である。
[0055] 3〜4行目で、イベントストリームシンクが定義される。イベントストリームシンクは、出力データ(たとえば、出力イベントストリーム)がどこに行き着くかを定義する。上記の例では、3〜4行目は、データをAzureキューに書き込むシンクを指定している。3〜4行目は、図1のイベントストリームシンク120の例である。
[0056] 5〜10行目には、データをソースからシンクに変換するクエリロジック自体がある。クエリは、相互に組み合わされた異なるソース/シンク定義からなる。この例では、まず1分間のウィンドウの平均が計算される。その後、温度が90度を超えるすべてのイベントがフィルタ処理される。それらすべてのイベントについて、「select」変換を使用してアラームが作成される。5〜10行目は、図1のクエリ変換コンポーネント130の例である。
[0057] 11行目で、クエリがイベント処理サービス内で実行される(11行目)。最後の操作により、クエリの実行インスタンスが、イベント処理サービスで指定された名前により作成される。クエリをサービスに送るために、ユーザは1行目で取得されたサービスコンテキストを使用する。よって、11行目は、図1の開始コマンド160の例である。
[0058] この例はC#で与えられているが、イベント処理プログラミングモデルは言語非依存であり得る。たとえば、イベント処理プログラミングモデルは、C#、Java(登録商標)Script等を含むさまざまな言語でSDKを提供し得る。
[0059] 前の節で紹介したイベントソース定義の概念は、イベント処理プログラミングモデルでライブデータと履歴データとの間、ならびにデバイスから生じたデータとクラウドから生じたデータとの間で体験を一元化することを可能にする。プログラミングモデルの観点から見ると、データがその場で生成されているか(HttpSourceの場合のように)、またはテーブルから取得されているか(AzureTableSourceの場合のように)は問題ではなく、特定のソース定義の詳細に過ぎない。デバイスから生じたソース定義と、クラウドから生じたソース定義についても同様である。異なる種類のデータソースを一元化することで、プログラミングモデルは、ユーザがクエリのビジネスロジックに専念することを可能にする。ビジネスロジックは、将来的にデータソースが変更されても変化しない。たとえば、図1では、ユーザはクエリ変換コンポーネント130のオーサリングに専念することができ、一方で基本的な抽象化140を使用して適切なソース、シンク、およびコンテキスト特定を定義することができる。
[0060] 前のシナリオに戻り、ユーザは、HTTPソース(上述した例の2行目)を生成する代わりに、およびすべてのデータをクラウドにプッシュしてそこで解析する(上述した例の1行目および11行目)代わりに、デバイスでインスタンス化される組み込みのデバイスソース定義(たとえば、後述する例の1行目のservice.GetDeviceSource)を使用することができる。コードの例は以下のようになる。
[0061] データ変換ロジック(〜10行目)は、まったく変わっていない。主な違いは2つだけである。第1に、1行目のソース定義が(前の例の2行目と比べて)わずかに変更されて、ソースをデバイスで使用可能なものとして特定している。第2に、前の例の1行目が削除され、10行目の開始コマンドがデフォルトコンテキスト(たとえば、デバイスで使用可能なイベント処理サービス)で実行されるようになっている。これで、サービス自体が、クエリをより良く分散および実行する方法を決定することができる。上記の例の場合、平均の計算、温度のフィルタ処理、およびアラームの生成をデバイスで発生させつつ、アラームイベントを必要なときにのみクラウドに伝搬させることが考えられる。同じ方法で、リレーショナルデータベースを表すソース定義にクエリ計算の一部をプッシュしたり、実行エンジンをマップ/低減したりすることができる。
[0062] (イベント処理プログラミングモデルの原理とAPI)
[0063] この節では、イベント処理プログラミングモデルの背後にある主な原理について論じ、例示的なアプリケーションプログラミングインターフェイスの要素をより詳しく紹介する。
[0063] この節では、イベント処理プログラミングモデルの背後にある主な原理について論じ、例示的なアプリケーションプログラミングインターフェイスの要素をより詳しく紹介する。
[0064] 仮想時間で動作するイベント計算の場合、アプリケーション時間を進める方法が必要である。典型的に、イベント処理エンジンでは、仮想時間の前進は句読点と呼ばれる特別なイベントにより伝えられる。クエリ処理時に、仮想時間は句読点イベントにより駆動される。句読点イベントは、この具体的な入力に対してタイムラインの特定部分がそれ以上変化しないことをサービスに伝えることにより、イベントをコミットし、計算結果をクエリ出力にリリースするために使用される。句読点を時間Tでキューに入れることにより、入力は、Tより前の期間に影響を与えるであろう後続イベントを作り出さないことを約束する。これは、入力で句読点がキューに入れられた後、他のすべてのイベントの仮想時間はキューに入れられた句読点を下回らないことを暗示する。このルールの違反は、「句読点違反」と呼ばれる。句読点違反に対処するためのポリシーにはさまざまなものがあり得る(すなわち、イベントの破棄、クエリの中断、またはイベント時間の調整)。
[0065] イベント処理プログラミングモデルでは、すべてのイベントを句読点と考えることもできる。よってユーザは、データフローに句読点を明示的に挿入する義務はない。ただし、ユーザがステートフルな演算子の現在の状態をフラッシュするときなど、句読点が依然として使用されるケースもある。たとえば、以下に示す図5の例を考えてみる。この例では、10分間のタンブリングウィンドウの平均が考慮される。
[0066] 図5では、演算子は、期間T2に属する仮想時間を持つ次のイベントを確認するまで、期間T1の出力を生成することができない。これは、イベントが均等に分散しておらず、新しいイベントが期間T2の最後にくる場合に、長い遅延につながる可能性がある。これに対処するため、ユーザは、時間を前に動かす句読点を発行し、演算子に現在のウィンドウを閉じさせることができる(右側の絵)。
[0067] 仮想時間を動かすことに加えて、「on error」句読点や「on complete」句読点などの他の種類の句読点も存在し得る。「on error」句読点は、イベント処理中にエラーが発生した場合に、下流の演算子に伝えられる。「on complete」は、この入力のイベントがそれ以上見込まれないときに発行される。
[0068] イベント処理プログラミングモデルは、演算子に再現性を提供する。演算子は、同じ初期状態および同じ入力で同じ出力を決定的に作り出すときに、再現性を有する。再現性欠如の主な原因は2つある。すなわち、演算子が非決定性であることと、(タイマなどの物理的な時間に依存する演算子の場合のような)等価の入力を提供できないことである。非決定性の演算子は、内部的に非決定性な演算子(状態が何らかの形式のランダム関数/外的変化状態に依存する)と、入力が非決定性な演算子、すなわち出力が異なる入力間のイベントの順序に依存する演算子とにさらに細分化することができる。
[0069] (グループ化)
[0070] イベント処理プログラミングモデルは、グループ化の概念を使用したイベント処理計算の柔軟なスケールアウトを提供する。たとえば、以下のクエリはグループ化を使用する。
[0070] イベント処理プログラミングモデルは、グループ化の概念を使用したイベント処理計算の柔軟なスケールアウトを提供する。たとえば、以下のクエリはグループ化を使用する。
[0071] イベント処理プログラミングモデルのイベントストリームは、ユーザが指定したグループ化キーを使用して、非結合のグループに細分化され得る。よって、イベントの各ストリームは、キーの一意の値にそれぞれ対応したサブストリームのセットである。クエリのすべての演算子は、各サブストリームに独立して適用され、状態を共有しない。上記のクエリでは、ユーザは各サブストリームの独立した結果を受け取る。たとえば、マシンごと、5分間の時間ウィンドウごとに、1つの平均CPU使用率を受け取る。
[0072] この例では、グループ化の概念は、本明細書でRegroupBy演算子と呼ばれる、キーセレクタをパラメータとして受け取る抽象化140の1つの例により公開される。グループ条件が指定されていない場合、データフローを、すべてのイベントを含む単一の論理グループとして見ることができる。
[0073] 一部のイベントストリームソースは、便宜上、グループ関数をパラメータとして受け取ることもできる。そのようなイベントストリームソース定義の例として、var table = service. GetAzureTableSource<int,CpuReading> (..., e => e.Machineld);がある。
[0074] すべてのイベントに対して動作するために、ユーザは定数を返すキーセレクタでデータフローを再グループ化することができる。
[0075] (例示的なAPI)
[0076] この節では、主なAPIコンストラクト要素(それぞれが図1の抽象化140の例である)の例について詳述する。ただし、これは単なる例である。
[0076] この節では、主なAPIコンストラクト要素(それぞれが図1の抽象化140の例である)の例について詳述する。ただし、これは単なる例である。
[0077] (定義エンティティの要約)
[0078] ソース:イベントストリームを作り出す機構または計算を定義する。たとえば、HTTPSourceDefinitionは、特定のHTTP URLに送信されたすべての要求からイベントのストリームを作成する機構を定義する。
[0078] ソース:イベントストリームを作り出す機構または計算を定義する。たとえば、HTTPSourceDefinitionは、特定のHTTP URLに送信されたすべての要求からイベントのストリームを作成する機構を定義する。
[0079] シンク:イベントストリームを消費する機構または計算を定義する。たとえば、AzureBLOBSinkDefinitionの例は、イベントのストリームをAzure BLOBに格納する機構を定義する。
[0080] QueryDefinition:ソースからすべてのイベントを受け取ってシンクに入れる計算を定義する。たとえば、HTTPSource(ingressUri)からすべてのイベントを受け取り、AzureBLOBSink(blobUri, storageAccountConnectionString)に入れる。
[0081] (実行時エンティティの要約)
[0082] ただしこれは、クエリを消費する基盤のイベント処理サービスに大きく依存する。
[0082] ただしこれは、クエリを消費する基盤のイベント処理サービスに大きく依存する。
[0083] クエリ:QueryDefinitionから作成されるクエリは、ソース(SourceDefinitionからインスタンス化される)からすべてのイベントを受け取ってシンク(SinkDefinitionからインスタンス化される)に入れる実行時計算を表す。
[0084] ストリーム:サービスの施設(facility)であるストリームは、イベント処理サービスによりホストおよび制御されるストリームからインスタンス化されるイベントストリームである。サービスは、イベントを消費または作り出すソースおよびシンクを、ストリームに提供する。
[0085] (イベントとストリーム)
[0086] イベントはレコードであり、キー・値/連想コレクションである。値は、プリミティブ型(.net/JSON)、配列、または連想コレクション(maps/dictionaries)のいずれかになり得る。
[0086] イベントはレコードであり、キー・値/連想コレクションである。値は、プリミティブ型(.net/JSON)、配列、または連想コレクション(maps/dictionaries)のいずれかになり得る。
[0087] ストリームは、順序付きの時間的イベントに対する決定性を提供する。同じ順序付きの入力と、同じクエリとを与えられた場合、ストリームは常に同じ順序付きの出力を生成する。
[0088] イベントストリームは、その時間的および順序付きの性質により特徴付けられる。ストリームのソースはISourceを実装する。ソースは、グループ化のためのセレクタ表現を使用して構成することができる。これらの要素のいずれかが欠落している場合、基盤のソースは、その特定の要素に対してデフォルトの挙動を使用することになる。以下は、例示的なISource定義である。
[0089] イベントストリームのシンク(ISinkを実装)は、イベントストリームの時間的および順序付きの属性を維持する。
[0090] イベントストリームは、グループに細分化され得る。グループは、グループ化キーにより指定される。実際上、この場合、イベントストリームは、キーの一意の値にそれぞれ対応したサブストリームのセットである。計算は、各サブストリームに独立して適用される。再グループ化コンストラクトを使用して、グループ化を変更することができる。グループにまたがるすべてのイベントに対して動作するために、ユーザはすべてのグループを1つのグループに再グループ化することができる。
[0091] (サービスコンテキスト)
[0092] クエリは、サービスの内部で展開される。サービスは、クエリ定義を処理し、Start/Stopクエリなどのクエリで管理操作を実行することができる。サービスコンテキストを初期化する簡単なジェスチャは、以下のようになり得る。
[0092] クエリは、サービスの内部で展開される。サービスは、クエリ定義を処理し、Start/Stopクエリなどのクエリで管理操作を実行することができる。サービスコンテキストを初期化する簡単なジェスチャは、以下のようになり得る。
[0093] (From/To)
[0094] クエリは、ISourceをパラメータとして受け取り、イベントストリームに対して使用可能な演算子のセットを定義するIGroupedStreamインターフェイスを返す、Temporallnput.From(source)ジェスチャから始まるかたちで定義される。IGroupedStreamは、分割されたイベントストリームを表す。クエリ定義は、ISinkをパラメータとして、IGroupeStreamに関してToジェスチャが呼び出されたときに返される。
[0094] クエリは、ISourceをパラメータとして受け取り、イベントストリームに対して使用可能な演算子のセットを定義するIGroupedStreamインターフェイスを返す、Temporallnput.From(source)ジェスチャから始まるかたちで定義される。IGroupedStreamは、分割されたイベントストリームを表す。クエリ定義は、ISinkをパラメータとして、IGroupeStreamに関してToジェスチャが呼び出されたときに返される。
[0095] (SteamR演算子)
[0096] (フィルタ(where))
[0097] 各個別イベントに適用されるユーザ定義の述語表現に基づき、どのイベントをグループ化ストリームで維持または削除するかを決定する。
[0096] (フィルタ(where))
[0097] 各個別イベントに適用されるユーザ定義の述語表現に基づき、どのイベントをグループ化ストリームで維持または削除するかを決定する。
[0098] (投影(select))
[0099] 各個別イベントにユーザ表現を適用し、潜在的に異なる種類の新しいイベントを作り出す。以下のコード例は、フィルタ処理および投影の使用方法を示している。
[0099] 各個別イベントにユーザ表現を適用し、潜在的に異なる種類の新しいイベントを作り出す。以下のコード例は、フィルタ処理および投影の使用方法を示している。
[00100] (マルチキャスト/ユニオン(multicast/union))
[00101] マルチキャスト演算子は、各グループ化ストリームの複数のコピーを作成する(グループメンバシップ/キーはマルチキャストにより変更されない)。ユニオン演算子は、複数のグループ化ストリームを単一のグループ化ストリームに組み合わせる(グループメンバシップ/キーは変更されず、同じキーを持つイベントは同じグループになる)。順序はユニオンにより維持される。
[00101] マルチキャスト演算子は、各グループ化ストリームの複数のコピーを作成する(グループメンバシップ/キーはマルチキャストにより変更されない)。ユニオン演算子は、複数のグループ化ストリームを単一のグループ化ストリームに組み合わせる(グループメンバシップ/キーは変更されず、同じキーを持つイベントは同じグループになる)。順序はユニオンにより維持される。
[00102] (アグリゲート(aggregate))
[00103] アグリゲート演算子は、アグリゲート関数をグループ化ストリームのサブセットに適用する。このウィンドウを、時間的属性(ウィンドウ期間等)、各グループの個別のイベントの数(カウントウィンドウ)、またはサブセットの開始および終了を定義する述語(フレームまたは条件ベースのウィンドウ)により定義することができる。アグリゲート関数は、Average、Min、Max、Count、SumおよびStdDevである。
[00103] アグリゲート演算子は、アグリゲート関数をグループ化ストリームのサブセットに適用する。このウィンドウを、時間的属性(ウィンドウ期間等)、各グループの個別のイベントの数(カウントウィンドウ)、またはサブセットの開始および終了を定義する述語(フレームまたは条件ベースのウィンドウ)により定義することができる。アグリゲート関数は、Average、Min、Max、Count、SumおよびStdDevである。
[00104] アグリゲートは以下のように設定され得る。
[00105] マルチアグリゲート計算もサポートされる。APIは、いくつかのアグリゲート関数をペイロードに適用することを可能にする。以下の例は、イベントペイロードへの3つのアグリゲート関数の適用を示している。
[00106] (トップK(topK))
[00107] トップKは、グループ化ストリームのサブセットを形成するイベントをランク付けし、グループ化ストリーム内のグループごとに上位K個の値を出力として作り出すアグリゲート関数である。このサブセット(またはウィンドウ)を、時間的属性(ウィンドウ期間等)、各グループの個別のイベントの数(カウントウィンドウ)、またはサブセットの開始および終了を定義する述語(フレームまたは条件)により定義することができる。トップKは、上記コードスニペットにおける関数の適用と同じ方法で適用される。
[00107] トップKは、グループ化ストリームのサブセットを形成するイベントをランク付けし、グループ化ストリーム内のグループごとに上位K個の値を出力として作り出すアグリゲート関数である。このサブセット(またはウィンドウ)を、時間的属性(ウィンドウ期間等)、各グループの個別のイベントの数(カウントウィンドウ)、またはサブセットの開始および終了を定義する述語(フレームまたは条件)により定義することができる。トップKは、上記コードスニペットにおける関数の適用と同じ方法で適用される。
[00108] (ウィンドウ定義(*window))
[00109] ウィンドウは、カウント(カウントウィンドウ)、条件、または時間的属性(ウィンドウ期間等)に基づいて、イベントのサブセットをバッファする。このサブセットに、演算子の任意のセットを適用することができる。タンブリングウィンドウ演算子のコード例を以下に示す。
[00109] ウィンドウは、カウント(カウントウィンドウ)、条件、または時間的属性(ウィンドウ期間等)に基づいて、イベントのサブセットをバッファする。このサブセットに、演算子の任意のセットを適用することができる。タンブリングウィンドウ演算子のコード例を以下に示す。
[00110] イベント処理プログラミングモデルは、いずれもウィンドウ演算子から継承される4つの具体的なウィンドウを定義する。これらは、CountWindow、ConditionalWindow、TumblingWindow、およびHoppingWindowである。
[00111] (再グループ化/マージ(regroupBy/merge))
[00112] 再グループ化演算子は、各個別イベントに新しいキーイング関数を適用することにより、イベントグループのメンバシップを再定義する。出力として、再グループ化演算子は、新しいキーに基づくグループ化ストリームの新しいセットを作り出す。マージ演算子は、単に再グループ化に基づくマクロであり、キーは一定の値である(結果として、すべてのイベントが同じグループメンバシップを有し、すなわち、1つだけのグループによるグループ化ストリームのセットとなる)。
[00112] 再グループ化演算子は、各個別イベントに新しいキーイング関数を適用することにより、イベントグループのメンバシップを再定義する。出力として、再グループ化演算子は、新しいキーに基づくグループ化ストリームの新しいセットを作り出す。マージ演算子は、単に再グループ化に基づくマクロであり、キーは一定の値である(結果として、すべてのイベントが同じグループメンバシップを有し、すなわち、1つだけのグループによるグループ化ストリームのセットとなる)。
[00113] (結合(join))
[00114] 結合は、その最も簡単な形式では、カウントウィンドウ上で2つのグループ化ストリームを相関させる。
[00114] 結合は、その最も簡単な形式では、カウントウィンドウ上で2つのグループ化ストリームを相関させる。
[00115] (時間的結合(temporalJoin))
[00116] 一対のイベントに適用されるユーザ定義の述語表現およびユーザ定義の投射表現に基づき、所与の時間的ウィンドウ(期間)内で2つのグループ化ストリームを相関させる。
[00116] 一対のイベントに適用されるユーザ定義の述語表現およびユーザ定義の投射表現に基づき、所与の時間的ウィンドウ(期間)内で2つのグループ化ストリームを相関させる。
[00117] (タイムトラベル結合)
[00118] 2つのグループ化ストリームを相関させるという点で時間的結合に類似するが、さらに、一群のグループ化ストリームのいずれかの履歴を回顧することができる(タイムトラベルとも言う)。以下は、履歴ストリームとライブストリームによるクエリの例である。
[00118] 2つのグループ化ストリームを相関させるという点で時間的結合に類似するが、さらに、一群のグループ化ストリームのいずれかの履歴を回顧することができる(タイムトラベルとも言う)。以下は、履歴ストリームとライブストリームによるクエリの例である。
[00119] タイムトラベル結合は、もう少し詳しく説明するに値する特別な演算子である。ライブデータおよび履歴データの高度な分析を可能にするために、イベント処理プログラミングモデルは、タイムトラベルを備える時間的結合を導入することができる。上述した例は、典型的なシナリオを表している。
[00120] この演算子を使用すると、履歴データを時間的に遡り(rightTimeTravelShiftパラメータに応じてイベントを再生し、そのタイムスタンプを変更する)、それをCEDR時間的結合によりライブストリームと相関させることができる。rightDurationパラメータは、履歴イベントの期間をどのように変更してライブストリームのポイントイベントと結合できるようにするかを指定する。タイムトラベル結合の非常に興味深いところは、ライブストリームのタイムラインにより駆動されるという点である。
[00121] 最も簡単な実装では、完全な履歴ストリームが時間の開始から読み取られ、ライブストリームと結合される。ただし、これは多くの場合に望ましくない。なぜなら、履歴ストリームは不要なデータを多く含む可能性があり、ライブストリームと履歴ストリームを時間で揃えるまでにかなりの時間がかかる可能性があるからである。たとえば、履歴ストリームが過去10年間のデータを含む場合、実際に結合できる部分に到達するまでに、9年分のデータを事前処理する必要がある。
[00122] 図6は、最新イベントストリームと履歴イベントストリームの2つのイベントストリームの結合と関連付けられたイベントフローを示す。開始時点からのすべてのイベントを繰り返す代わりに、興味があるのは過去1年間のデータだけであることを履歴ストリームのソースに伝えるほうが効率的である。興味がある時間位置を、クエリのコンパイル段階で判断することはできない。開始時間位置は、結合がライブストリームから最初のイベントを受け取ったときに初めて検出される。
[00123] (マッピング)
[00124] これまで説明してきたユーザサーフェス層は、簡単な標準データ変換(「where」、「select」等)を定義して、煩雑性をユーザから隠す役割を果たす。この層は、クライアント側のSDKまたはDSLにより表される。この層は、特定のプログラミング言語のサービスエンティティのクライアント側プロキシを含み、組み立てのための手段を提供する。この層で、ユーザは組み込みの定義を取得し、それらをクエリに組み立てることができる。
[00124] これまで説明してきたユーザサーフェス層は、簡単な標準データ変換(「where」、「select」等)を定義して、煩雑性をユーザから隠す役割を果たす。この層は、クライアント側のSDKまたはDSLにより表される。この層は、特定のプログラミング言語のサービスエンティティのクライアント側プロキシを含み、組み立てのための手段を提供する。この層で、ユーザは組み込みの定義を取得し、それらをクエリに組み立てることができる。
[00125] この層のもう1つの役割は、言語依存のSDKエンティティを、言語に依存せず、エンティティ組立層により理解することが可能な内部表現に変換することである。このプロセスは、正規化と呼ばれる。このプロセスでは、後でクラウドまたはエッジで実行されるエンジンでマップすることが可能な何らかの規準的な形式で、クエリをマップする。実際のイベント処理エンジンは異なる種類のものが存在し得るが、ユーザにとってはどれも同じである。
[00126] 本文書では、イベントプログラミングモデルの概念について記述した。イベント処理プログラミングモデルは、ストリーム処理の異なる次元を一元化し、オフラインの分析とオンラインの分析の便利な統合と、クラウド内のデータとデバイス上のデータの収集とを、拡張可能かつ直観的な態様で実現する。
[00127] さまざまな定義のオーサリングはコンピューティングシステムを使用して実行される可能性があり、対応するクエリはコンピューティングシステムを使用して実行されるため、次に、例示的なコンピューティングシステムについて説明する。
[00128] コンピューティングシステムは、今日、ますます多様な形式をとりつつある。コンピューティングシステムは、たとえば、ハンドヘルドデバイス、アプライアンス、ラップトップコンピュータ、デスクトップコンピュータ、メインフレーム、分散コンピューティングシステム、さらには従来コンピューティングシステムとは考えられていなかったデバイス等であり得る。本明細書および特許請求の範囲において、「コンピューティングシステム」という用語は、少なくとも1つの物理的かつ有形のプロセッサと、当該プロセッサにより実行され得るコンピュータ実行可能命令を保持することができる物理的かつ有形のメモリとを含む任意のデバイスまたはシステム(またはそれらの組み合わせ)を含むものとして幅広く定義される。メモリは、任意の形式をとり得、コンピューティングシステムの性質および形式に依存し得る。コンピューティングシステムは、ネットワーク環境に分散され得、複数の構成コンピューティングシステムを含み得る。
[00129] 図7に示すように、コンピューティングシステム700は、その最も基本的な構成において、少なくとも1つのハードウェア処理ユニット702と、メモリ704とを典型的に含む。メモリ704は、物理システムメモリであり得、揮発性、不揮発性、またはそれら2つの何らかの組み合わせであり得る。「メモリ」という用語は、本明細書で、物理ストレージ媒体等の不揮発性大容量ストレージを指すためにも使用され得る。コンピューティングシステムが分散されている場合、処理機能、メモリ機能、および/またはストレージ機能も分散され得る。本明細書で使用される場合、「実行可能モジュール」または「実行可能コンポーネント」という用語は、コンピューティングシステムで実行され得るソフトウェアオブジェクト、ルーチン、またはメソッドを指し得る。本明細書で記述されるさまざまなコンポーネント、モジュール、エンジン、およびサービスは、コンピューティングシステムで(たとえば、独立したスレッドとして)実行されるオブジェクトまたはプロセスとして実装され得る。
[00130] 以下の記述では、実施形態について、1つまたは複数のコンピューティングシステムにより実行される行為を参照しながら記述する。そのような行為がソフトウェアで実装されている場合、行為を実行する関連コンピューティングシステムの1つまたは複数のプロセッサは、コンピュータ実行可能命令を実行したことに応じて、コンピューティングシステムの操作を指揮する。たとえば、そのようなコンピュータ実行可能命令は、コンピュータプログラム製品を形成する1つまたは複数のコンピュータ可読媒体で具現化され得る。そのような操作の例として、データの操作がある。コンピュータ実行可能命令(および操作対象データ)は、コンピューティングシステム700のメモリ704に格納され得る。コンピューティングシステム700は、コンピューティングシステム700がたとえばネットワーク710を通じて他のメッセージプロセッサと通信することを可能にする通信チャネル708をさらに含み得る。コンピューティングシステム700は、視覚的表現をユーザに表示するために使用することができるディスプレイをさらに含む。
[00131] 本明細書で記載される実施形態は、以下でさらに詳細に論じるように、たとえば1つまたは複数のプロセッサやシステムメモリのコンピュータハードウェアを含む専用コンピュータまたは汎用コンピュータを備えるか、または利用し得る。本明細書で記載される実施形態は、コンピュータ実行可能命令および/またはデータ構造を運搬または格納するために、物理媒体および他のコンピュータ可読媒体をさらに含む。そのようなコンピュータ可読媒体は、汎用コンピュータシステムまたは専用コンピュータシステムからアクセスすることができる任意の使用可能な媒体であり得る。コンピュータ実行可能命令を格納するコンピュータ可読媒体は、物理ストレージ媒体である。コンピュータ実行可能命令を運搬するコンピュータ可読媒体は、伝送媒体である。よって、限定ではなく例として、本発明の実施形態は、コンピュータストレージ媒体と送信媒体という、2つの明確に異なる種類のコンピュータ可読媒体を少なくとも備えることができる。
[00132] コンピュータストレージ媒体は、RAM、ROM、EEPROM、CD−ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、またはコンピュータ実行可能命令もしくはデータ構造の形式をした所望のプログラムコード手段を格納するために使用でき汎用コンピュータもしくは専用コンピュータからアクセスすることが可能な他の任意の物理的かつ有形のストレージ媒体を含む。
[00133] 「ネットワーク」は、コンピュータシステムおよび/またはモジュールおよび/または他の電子デバイス間での電子データの移送を実現する1つまたは複数のデータリンクとして定義される。情報がネットワークまたは別の通信接続(有線、無線、または有線と無線の組み合わせのいずれか)でコンピュータに移送または提供されるとき、コンピュータはその接続を送信媒体として正しく認識する。送信媒体は、コンピュータ実行可能命令またはデータ構造の形式をした所望のプログラムコード手段を運ぶために使用でき、かつ汎用コンピュータまたは専用コンピュータからアクセスすることが可能な、ネットワークおよび/またはデータリンクを含み得る。上記事項の組み合わせも、コンピュータ可読媒体の範囲に含まれる。
[00134] さらに、コンピュータ実行可能命令またはデータ構造の形式をしたプログラムコード手段は、さまざまなコンピュータシステムコンポーネントに到達すると、送信媒体からコンピュータストレージ媒体へ(またはその逆に)自動的に移送され得る。たとえば、ネットワークまたはデータリンクを介して受け取られるコンピュータ実行可能命令またはデータ構造は、ネットワークインターフェイスモジュール(たとえば、「NIC」)内のRAMにバッファされ、次いで最終的にコンピュータシステムのRAMおよび/またはコンピュータシステムのより揮発性の低いコンピュータストレージ媒体に移送され得る。よって、コンピュータストレージ媒体は送信媒体をさらに(または主として)利用するコンピュータシステムコンポーネントに含まれ得ることを理解する必要がある。
[00135] コンピュータ実行可能命令は、たとえば、プロセッサで実行されたときに汎用コンピュータ、専用コンピュータ、または専用処理デバイスに特定の機能または機能のグループを実行させる命令およびデータを備える。コンピュータ実行可能命令は、たとえば、バイナリ、プロセッサにより直接実行される前に何らかの翻訳(コンパイル等)を経るアセンブリ言語等の中間形式の命令、またはソースコードであり得る。主題について構造的特徴および/または方法論的行為に固有の言語で記述してきたが、添付の特許請求の範囲で定義される主題は、上記記述された特徴または行為に必ずしも限定されないことを理解する必要がある。むしろ、記述された特徴および行為は、特許請求の範囲を実装する例示的な形式として開示されている。
[00136] 当業者は、本発明がパーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な家庭用電化製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話、PDA、ポケットベル、ルータ、スイッチ等の多数の種類のコンピュータシステム構成を有するネットワークコンピューティング環境で実践され得ることを理解する。本発明は、ネットワークを通じて(有線データリンク、無線データリンク、または有線データリンクと無線データリンクの組み合わせにより)リンクされたローカルコンピュータシステムとリモートコンピュータシステムの両方がタスクを実行する分散システム環境でも実践され得る。分散システム環境では、プログラムモジュールは、ローカルのメモリストレージ装置とリモートのメモリストレージ装置の両方に存在する可能性がある。
[00137] 本発明は、その精神または必須の特性から逸脱することなく、他の特定の形式で具現化され得る。記述された実施形態は、あらゆる点において、限定的なものではなく、単なる例示であると考えられる。よって本発明の範囲は、上記記述によってではなく、添付の特許請求の範囲によって示される。特許請求の範囲の均等の意味および範囲内に該当するすべての変更は、特許請求の範囲に含まれる。
Claims (10)
- 1つまたは複数のプロセッサで実行されたときに、前記1つまたは複数のプロセッサに、
実行コンテキストで使用可能なイベントストリームを表すイベントストリームソース表現と、
変換モジュールにより表される1つまたは複数の入力イベントストリームに対して実行される1つまたは複数の変換の変換セットを特定し、前記イベントストリームソース表現を参照することにより前記イベントストリームを前記イベントストリームの1つとして特定し、前記イベントストリームソース表現を参照することにより前記イベントストリームを前記入力イベントストリームの1つとして特定する変換モジュールと、
前記変換モジュールを解釈して、前記特定された入力ストリームに対して前記変換セットを前記実行コンテキストで実行させて結果のイベントストリームを生成する実行モジュールと
をインスタンス化および実行するためのシステムアーキテクチャを実装させるコンピュータ実行可能命令を有する1つまたは複数のコンピュータ可読媒体を備えるコンピュータプログラム製品。 - 前記コンピュータ可読媒体の前記コンピュータ実行可能命令が、
作成者が前記イベントストリームソース表現および前記変換モジュールをオーサリングできるように構成されたオーサリングモジュール
をさらに備える、請求項1に記載のコンピュータプログラム製品。 - 前記コンピュータ可読媒体の前記コンピュータ実行可能命令が、
前記実行コンテキストを前記実行モジュールに対して特定して、前記実行モジュールが前記変換セットを前記実行コンテキストで実行させることができるようにするコンテキスト特定モジュール
をさらに備える、請求項1に記載のコンピュータプログラム製品。 - 前記コンピュータ可読媒体の前記コンピュータ実行可能命令が、
ユーザ入力が検知されたときに前記実行モジュールを開始するように構成された開始コントロール
をさらに備える、請求項1に記載のコンピュータプログラム製品。 - 1つまたは複数の入力イベントストリームに対して変換セットを実行することにより結果のイベントストリームを生成させるコンピュータ実装方法であって、前記コンピュータ実装方法のためのコンピュータ実行可能命令を実行する1つまたは複数のプロセッサにより実行され、
実行コンテキストで使用可能な特定のイベントストリームを表すイベントストリームソース表現にアクセスすることと、
変換モジュールが、前記変換モジュールにより表される1つまたは複数の入力イベントストリームに対して実行される1つまたは複数の変換の変換セットを特定し、前記変換モジュールが、前記イベントストリームソース表現を参照することにより前記特定のイベントストリームを前記1つまたは複数の入力イベントストリームの1つとして特定することと、
実行モジュールが、前記変換モジュールを解釈して、前記特定された1つまたは複数の入力ストリームに対して前記変換セットを前記実行コンテキストで実行させて結果のイベントストリームを生成することと
を含む、コンピュータ実装方法。 - 前記特定のイベントストリームが最新イベントストリームであり、前記イベントストリームソース表現が最新イベントストリームソース表現である、請求項5に記載のコンピュータ実装方法。
- 実行コンテキストで使用可能な履歴イベントストリームを表す履歴イベントストリームソース表現にアクセスすること
をさらに含む、請求項6に記載のコンピュータ実装方法。 - 前記1つまたは複数の変換が、前記特定のイベントストリームに適用されるフィルタ処理操作を含む、請求項5に記載のコンピュータ実装方法。
- 前記1つまたは複数の変換が、前記結果のイベントストリームのイベントを生成するイベント生成ロジックを含み、前記イベント生成ロジックが、フィルタ処理された前記特定のイベントストリームを入力として使用する、請求項8に記載のコンピュータ実装方法。
- 前記1つまたは複数の変換が、前記結果のイベントストリームのイベントを生成するイベント生成ロジックを含み、前記イベント生成ロジックが、前記イベント生成ロジックが、前記特定のイベントストリームを入力として使用する、請求項5に記載のコンピュータ実装方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462044090P | 2014-08-29 | 2014-08-29 | |
US62/044,090 | 2014-08-29 | ||
US14/515,382 | 2014-10-15 | ||
US14/515,382 US10235436B2 (en) | 2014-08-29 | 2014-10-15 | Event stream transformations |
PCT/US2015/046622 WO2016032986A1 (en) | 2014-08-29 | 2015-08-25 | Event stream transformations |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2017527024A true JP2017527024A (ja) | 2017-09-14 |
Family
ID=54072990
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017505163A Pending JP2017527024A (ja) | 2014-08-29 | 2015-08-25 | イベントストリーム変換 |
Country Status (11)
Country | Link |
---|---|
US (1) | US10235436B2 (ja) |
EP (1) | EP3186946B1 (ja) |
JP (1) | JP2017527024A (ja) |
KR (1) | KR102454201B1 (ja) |
CN (1) | CN106664322B (ja) |
AU (1) | AU2015306852A1 (ja) |
BR (1) | BR112017002834A2 (ja) |
CA (1) | CA2955838A1 (ja) |
MX (1) | MX2017002593A (ja) |
RU (1) | RU2017106150A (ja) |
WO (1) | WO2016032986A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2022522464A (ja) * | 2019-03-01 | 2022-04-19 | アイオー タホ エルエルシー | 分散データソースに存在するデータストリームの連続処理のためのコンピュータ実装方法 |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10956422B2 (en) | 2012-12-05 | 2021-03-23 | Oracle International Corporation | Integrating event processing with map-reduce |
US10127903B2 (en) * | 2014-12-02 | 2018-11-13 | International Business Machines Corporation | Discovering windows in temporal predicates |
US10592500B2 (en) | 2015-01-27 | 2020-03-17 | International Business Machines Corporation | Eviction stream for data joins |
US10331693B1 (en) * | 2016-09-12 | 2019-06-25 | Amazon Technologies, Inc. | Filters and event schema for categorizing and processing streaming event data |
JP7018435B2 (ja) | 2016-09-15 | 2022-02-10 | オラクル・インターナショナル・コーポレイション | スナップショットおよび状態のマイクロバッチ方式による管理 |
US11657056B2 (en) | 2016-09-15 | 2023-05-23 | Oracle International Corporation | Data serialization in a distributed event processing system |
US10496467B1 (en) | 2017-01-18 | 2019-12-03 | Amazon Technologies, Inc. | Monitoring software computations of arbitrary length and duration |
WO2018169429A1 (en) | 2017-03-17 | 2018-09-20 | Oracle International Corporation | Framework for the deployment of event-based applications |
WO2018169430A1 (en) | 2017-03-17 | 2018-09-20 | Oracle International Corporation | Integrating logic in micro batch based event processing systems |
WO2018215062A1 (en) * | 2017-05-24 | 2018-11-29 | Huawei Technologies Co., Ltd. | System and method for stream processing |
CN109542444B (zh) * | 2017-07-31 | 2022-03-25 | 华为技术有限公司 | Java应用的监控方法、装置、服务器和存储介质 |
WO2019057288A1 (en) | 2017-09-21 | 2019-03-28 | Huawei Technologies Co., Ltd. | SYSTEM AND METHOD FOR PROCESSING FLOW |
CN109614413B (zh) * | 2018-12-12 | 2023-03-24 | 上海金融期货信息技术有限公司 | 一种内存流式计算平台系统 |
US11113270B2 (en) | 2019-01-24 | 2021-09-07 | EMC IP Holding Company LLC | Storing a non-ordered associative array of pairs using an append-only storage medium |
US11461345B2 (en) * | 2019-05-31 | 2022-10-04 | Microsoft Technology Licensing, Llc | Providing access to state information associated with operators in a data processing system |
US11599546B2 (en) | 2020-05-01 | 2023-03-07 | EMC IP Holding Company LLC | Stream browser for data streams |
US11604759B2 (en) | 2020-05-01 | 2023-03-14 | EMC IP Holding Company LLC | Retention management for data streams |
US11340834B2 (en) | 2020-05-22 | 2022-05-24 | EMC IP Holding Company LLC | Scaling of an ordered event stream |
US11360992B2 (en) | 2020-06-29 | 2022-06-14 | EMC IP Holding Company LLC | Watermarking of events of an ordered event stream |
US11599420B2 (en) | 2020-07-30 | 2023-03-07 | EMC IP Holding Company LLC | Ordered event stream event retention |
US11340792B2 (en) | 2020-07-30 | 2022-05-24 | EMC IP Holding Company LLC | Ordered event stream merging |
US11354444B2 (en) * | 2020-09-30 | 2022-06-07 | EMC IP Holding Company LLC | Access control for an ordered event stream storage system |
US11513871B2 (en) | 2020-09-30 | 2022-11-29 | EMC IP Holding Company LLC | Employing triggered retention in an ordered event stream storage system |
US11755555B2 (en) | 2020-10-06 | 2023-09-12 | EMC IP Holding Company LLC | Storing an ordered associative array of pairs using an append-only storage medium |
US11323497B2 (en) | 2020-10-07 | 2022-05-03 | EMC IP Holding Company LLC | Expiration of data streams for application programs in a streaming data storage platform |
US11599293B2 (en) | 2020-10-14 | 2023-03-07 | EMC IP Holding Company LLC | Consistent data stream replication and reconstruction in a streaming data storage platform |
US11354054B2 (en) | 2020-10-28 | 2022-06-07 | EMC IP Holding Company LLC | Compaction via an event reference in an ordered event stream storage system |
US11347568B1 (en) | 2020-12-18 | 2022-05-31 | EMC IP Holding Company LLC | Conditional appends in an ordered event stream storage system |
US11816065B2 (en) | 2021-01-11 | 2023-11-14 | EMC IP Holding Company LLC | Event level retention management for data streams |
US11526297B2 (en) | 2021-01-19 | 2022-12-13 | EMC IP Holding Company LLC | Framed event access in an ordered event stream storage system |
US11740828B2 (en) | 2021-04-06 | 2023-08-29 | EMC IP Holding Company LLC | Data expiration for stream storages |
US11513714B2 (en) | 2021-04-22 | 2022-11-29 | EMC IP Holding Company LLC | Migration of legacy data into an ordered event stream |
US11954537B2 (en) | 2021-04-22 | 2024-04-09 | EMC IP Holding Company LLC | Information-unit based scaling of an ordered event stream |
US11681460B2 (en) | 2021-06-03 | 2023-06-20 | EMC IP Holding Company LLC | Scaling of an ordered event stream based on a writer group characteristic |
US11681722B2 (en) * | 2021-06-08 | 2023-06-20 | Jpmorgan Chase Bank, N.A. | System and method for configurable and automated data extraction, formatting and distribution |
US11735282B2 (en) | 2021-07-22 | 2023-08-22 | EMC IP Holding Company LLC | Test data verification for an ordered event stream storage system |
US20230418800A1 (en) * | 2022-06-02 | 2023-12-28 | Barcelona Supercomputing Center-Centro Nacional De Supercomputación | Method for optimizing the management of a flow of data |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6567813B1 (en) * | 2000-12-29 | 2003-05-20 | Webex Communications, Inc. | Quality of service maintenance for distributed collaborative computing |
US20070150585A1 (en) * | 2005-12-28 | 2007-06-28 | Microsoft Corporation | Multi-dimensional aggregation on event streams |
CN1959724B (zh) * | 2006-11-24 | 2010-08-11 | 清华大学 | 泛在计算环境中工作流上下文信息的获取方法和系统 |
US8069190B2 (en) | 2007-12-27 | 2011-11-29 | Cloudscale, Inc. | System and methodology for parallel stream processing |
US20100131556A1 (en) | 2008-11-25 | 2010-05-27 | Microsoft Corporation | Unified event programming and queries |
US8612983B2 (en) * | 2009-09-07 | 2013-12-17 | International Business Machines Corporation | Scheduling event streams depending on content information data |
US9158816B2 (en) | 2009-10-21 | 2015-10-13 | Microsoft Technology Licensing, Llc | Event processing with XML query based on reusable XML query template |
CN102096848B (zh) * | 2009-12-09 | 2015-11-25 | Sap欧洲公司 | 用于在对流事件的查询模式匹配期间进行快速响应的调度 |
EP2348416A1 (en) * | 2010-01-21 | 2011-07-27 | Software AG | Analysis system and method for analyzing continuous queries for data streams |
US20110314019A1 (en) | 2010-06-18 | 2011-12-22 | Universidad Politecnica De Madrid | Parallel processing of continuous queries on data streams |
CN102340495B (zh) | 2010-07-26 | 2014-09-03 | 中国移动通信集团广东有限公司 | 一种支撑跨系统业务联动的事件中心及其事件处理方法 |
US9166892B1 (en) * | 2012-01-20 | 2015-10-20 | Google Inc. | Systems and methods for event stream management |
-
2014
- 2014-10-15 US US14/515,382 patent/US10235436B2/en active Active
-
2015
- 2015-08-25 BR BR112017002834A patent/BR112017002834A2/pt not_active Application Discontinuation
- 2015-08-25 KR KR1020177005572A patent/KR102454201B1/ko active IP Right Grant
- 2015-08-25 MX MX2017002593A patent/MX2017002593A/es unknown
- 2015-08-25 JP JP2017505163A patent/JP2017527024A/ja active Pending
- 2015-08-25 AU AU2015306852A patent/AU2015306852A1/en not_active Abandoned
- 2015-08-25 RU RU2017106150A patent/RU2017106150A/ru not_active Application Discontinuation
- 2015-08-25 CN CN201580046306.3A patent/CN106664322B/zh active Active
- 2015-08-25 EP EP15762846.2A patent/EP3186946B1/en active Active
- 2015-08-25 WO PCT/US2015/046622 patent/WO2016032986A1/en active Application Filing
- 2015-08-25 CA CA2955838A patent/CA2955838A1/en not_active Abandoned
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2022522464A (ja) * | 2019-03-01 | 2022-04-19 | アイオー タホ エルエルシー | 分散データソースに存在するデータストリームの連続処理のためのコンピュータ実装方法 |
Also Published As
Publication number | Publication date |
---|---|
AU2015306852A1 (en) | 2017-02-16 |
EP3186946A1 (en) | 2017-07-05 |
MX2017002593A (es) | 2017-05-30 |
CN106664322A (zh) | 2017-05-10 |
US10235436B2 (en) | 2019-03-19 |
BR112017002834A2 (pt) | 2017-12-19 |
CA2955838A1 (en) | 2016-03-03 |
CN106664322B (zh) | 2020-05-15 |
KR102454201B1 (ko) | 2022-10-12 |
EP3186946B1 (en) | 2020-08-05 |
WO2016032986A1 (en) | 2016-03-03 |
KR20170048373A (ko) | 2017-05-08 |
RU2017106150A (ru) | 2018-08-28 |
US20160063080A1 (en) | 2016-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2017527024A (ja) | イベントストリーム変換 | |
Shukla et al. | Riotbench: An iot benchmark for distributed stream processing systems | |
Li et al. | Performance modeling and predictive scheduling for distributed stream data processing | |
Cugola et al. | Complex event processing with T-REX | |
Shukla et al. | Benchmarking distributed stream processing platforms for iot applications | |
Namiot et al. | On iot programming | |
Hummer et al. | Elastic stream processing in the cloud | |
D'silva et al. | Real-time processing of IoT events with historic data using Apache Kafka and Apache Spark with dashing framework | |
US20220014555A1 (en) | Distributed automated planning and execution platform for designing and running complex processes | |
US9990403B2 (en) | System and a method for reasoning and running continuous queries over data streams | |
Pontisso et al. | Analysis of distributed multiperiodic systems to achieve consistent data matching | |
Costan | From big data to fast data: Efficient stream data management | |
Shahverdi et al. | Comparative evaluation for the performance of big stream processing systems | |
US20220006837A1 (en) | Enhanced cybersecurity using an automated planning service | |
US11900084B2 (en) | Distributed application development platform | |
Kampars et al. | An Approach to Parallelization of Remote Data Integration Tasks. | |
De Matteis | Parallel Patterns for Adaptive Data Stream Processing. | |
Åkesson et al. | ComPOS: A DSL for Composing IoT Systems with Weak Connectivity | |
Li et al. | Just enough, just in time, just for" me" fundamental principles for engineering IoT-native software systems | |
de Oliveira et al. | Background Knowledge | |
Kalim | Satisfying service level objectives in stream processing systems | |
Sakr et al. | Parallel Graph Processing | |
Nadeshkumar | CEP ENGINE FOR EMBEDDED DEVICES: A POC USING SIDDHI | |
Kamburugamuve | Towards HPC and Big Data Convergence in a Component Based Approach | |
Lohrmann | Massively parallel stream processing with latency guarantees |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A529 | Written submission of copy of amendment under article 34 pct |
Free format text: JAPANESE INTERMEDIATE CODE: A529 Effective date: 20170329 |