詳細な説明
本開示によるシステムはデータ項目、例えばパケット化ネットワークのネットワーク接続経由で入ってくるデータ項目(例えば、パケット化データを含む)のストリーム内で互いに時間において隔てられるキー付きデータ項目を処理する。概して、キー付きデータ項目は、キー(例えば、識別子)に関連するデータ項目を含む。キーは、値を有し得る。キー付きデータ項目は、実行可能ロジックを表し、且つ過去のデータ項目に対して実行可能ロジックを実行することによって達する状態に基づいて実行可能ロジックの様々な状態を指定する仕様に従って処理される。概して、実行可能ロジックは、ソースコード及び他のコンピュータ命令を含む。
仕様は、キーも指定する。そのキーに関連するデータ項目が仕様に従って処理される。即ち、システムは、キーに基づいてキーベースの処理を行い、かかる処理では、キーのそれぞれの値に基づいてデータ項目がマッチされ評価される。キーの固有値ごとに、システムは、そのキーの値に関する仕様のインスタンスを開始する。そうすることにより、ストリーム内で互いに時間において隔てられ且つそのキーの値をそれぞれ含むデータ項目が、別のキーの値を含むデータ項目の処理と独立に処理される。例えば、データ項目に関連するキーと同じ値のキーに関連する仕様の実行可能ロジックが、結果データを得るためにデータ項目に対して実行可能ロジックを実行することによってデータ項目に適用される。概して、仕様のインスタンスは、例えば、仕様内で表される実行可能ロジックを実行しキーの固有値ごとに実行可能ロジックの状態を保つことによる、キーの固有値に関する仕様の具体的実現を含む。以下でより詳細に説明するように、システムは、例えば、メモリ内データグリッド(又は他のデータ構造)によってインスタンスごとに状態を保ち、かかるデータ構造では、キーの各値がそのキーの値に関するチャートの実行状態を示す関連データである。概して、メモリ内データグリッドは、ランダムアクセスメモリ(RAM)内にあるデータ構造を含むことができ、複数のサーバ又はシステムに分散される。
例えば、イベントやレコード等を含む様々な種類のキー付きデータ項目がある。概して、イベントは、イベントの特定の発生又は欠如を表す(例えば、既定の形式の)データレコードを含む。本明細書に記載の技法は、データレコードを処理することに関するが、本技法は、イベントを処理することにも等しく適用することができる。データレコードは、複数のフィールドも含む。一例では、フィールドの1つが仕様に関するキーに対応し得る。この例では、仕様は、フィールドの何れがキー付きフィールド、例えば仕様のキーの値を含むフィールドかを指定する。別の例では、例えばデータレコード内の様々なフィールドの値やデータリポジトリ内に記憶され、且つデータレコードのフィールド内に含まれる特定の識別子に関連するデータ等を含む様々な異なるデータにキーが基づく。
一例では、時間において隔てられる複数のデータレコード(例えば、イベント)を入力として必要とする規則を含むことにより、仕様が複合イベント処理(CEP)のための実行可能ロジックを表す。概して、複合イベント処理は、異なる時点において生じる複数のデータレコードを受信し、その複数のデータレコードからパターン、データレコード、又は状態を推論することを含む。この例では、仕様が複数のノードを有するチャート(例えば、フローチャートやデータフローグラフ)を含む。チャート内の各ノードは、仕様の1つ又は複数の部分に対応する実行可能ロジックの1つ又は複数の部分を表す。例えば、ノードは、実行可能ロジックの生成元である1つ又は複数の論理表現(以下「ロジック」)を含む。別の例では、実行可能ロジックが特定の状態にあるとき、ノードが実行可能ロジックの1つ又は複数の特定の部分に対応する。
概して、本明細書に記載の「チャート」は、データフローグラフとして実装することができ、本明細書に記載の方法又は処理は、計算システムによって実行することができ、計算システムは、データ記憶域に結合される開発環境であって、1つ又は複数の入力データセットから処理グラフコンポーネントのグラフを介して1つ又は複数の出力データセットに流れるデータ項目に対して実行されるグラフベースの計算を実装するデータフローグラフに関連するデータ処理アプリケーションを構築するように開発環境は構成され、データ記憶域内のデータ構造によってデータフローグラフは指定され、データ構造によって指定され且つデータ構造によって指定されグラフコンポーネント間のデータフローを表す1つ又は複数のリンクによって接続されるグラフコンポーネントを表す複数のノードをデータフローグラフは有する、開発環境と、データ記憶域に結合され1つ又は複数のコンピュータ上にホストされているランタイム環境であって、データフローグラフを指定する記憶済みのデータ構造を読み取り、実行時前モジュールによってデータフローグラフに割り当てられるグラフコンポーネントの計算を実行するために計算資源(プロセス等)を割り当て構成するように構成される実行時前モジュールを含み、本方法又は処理による以下に記載の操作の1つ又は複数が実行されるように割り当てられたプロセスの実行をスケジュールし制御するための実行モジュールを含む、ランタイム環境とを含む。
図1Aを参照し、仕様1は、ノード2a〜2gを有するフローチャート2を含む。概して、チャートは、データレコードを処理するためのテンプレートを含む。このテンプレートは、入力データレコードに反応し、出力データレコード、例えば仕様内に含まれるロジックに基づいて生成されるデータレコードを作成するためのロジックのグラフィック単位を含む。概して、ロジックのグラフィック単位は、例えば、チャートを構築するためのウィンドウにテンプレート(不図示)から様々なノードをドラッグアンドドロップすることによって少なくとも部分的にグラフィカルに生成されるロジックを含む。一例ではノードが、例えばロジックによって指定された条件を満たしたとき、入力データレコードをどのように処理するか、実行可能ロジックによって使用される変数の値をどのように設定するか、何れの出力データレコードを生成するのか等を指定するロジック(不図示)を含む。一例では、ノードは、ノードのロジック内で使用されるパラメータ及び/又は変数の値を利用者が入力することによってプログラム可能である。
ノード内のロジックが実行可能ロジックへとコンパイルされ、各ノードがその実行可能ロジックの1つ又は複数の部分に対応するため、チャート自体が実行可能である。例えばシステムは、ノード内のロジックを実行可能ロジックへとコンパイルすることによって仕様(及び/又は仕様内のチャート)を変換する。チャート自体が実行可能であるため、チャート自体がデータレコードを処理することができ、停止され、開始され、休止され得る。システムは、例えばノード2a〜2gの何れが現在実行されているのかを追跡することによってフローチャート2の状態も保つ。フローチャート2の状態は、フローチャート2によって表される実行ファイルの状態に対応する。例えばフローチャート2内の各ノードは(実行可能ロジックの1つ又は複数の部分がその状態において実行可能である)実行可能ロジックの特定の状態を表す。フローチャート2がキーの様々な値について実行される場合、システムは以下でより詳細に説明するように例えばインスタンスごとの状態を保つことによってキーの値ごとにフローチャート2の状態を保つ。この例ではフローチャート2が状態移行図を含み、その状態移行図では各入力データレコードがノード間の移行を駆動し、過去のデータレコードを処理することによって達する状態に基づいてデータレコードが評価される。フローチャート2内のノード間のリンクはロジックの時間的なフローを表す。
ノード2aは実行可能ロジックの開始を表す。ノード2aの完了後、フローチャート2の状態は実行可能ロジックの1つ又は複数の他の部分を表すノード2bに移行する。ノード2bは待機ノード(以下、待機ノード2b)を含む。待機ノード2bは、(待機ノード2bに対応する)実行可能ロジックの一部が1つ又は複数の状態を満たす入力データレコードを待機する待機状態を表す。一例では、待機状態がフローチャート2の別の状態の一部、例えばシステムが(待機状態を実装するために)待機ノードを実行し、次いで1つ又は複数の他のノードを実行する状態であり得る。待機ノード2bによって表される実行可能ロジックの一部の完了後、システムは待機状態を終えて、決定を実施するための実行可能ロジックを表すノード2cを実行する。この例ではノード2cが決定ノードを含む。概して、決定ノードは決定を実行するためのロジック(例えば、ブール値について評価するロジック)を含むノードを含む。
決定の結果に基づき、フローチャート2の状態は(再びノード2aに状態を移行させる)ノード2g又は別の待機ノードであるノード2dに移行する。待機ノード2dによって表される実行可能ロジックの一部の完了後、フローチャート2の状態は送信ノードを含むノード2eに移行する。概して、送信ノードは別のシステムへのデータ伝送を引き起こすための実行可能ロジックを表すノードを含む。ノード2eによって表される実行可能ロジックの一部の実行を完了した後、フローチャート2の状態は終了ノードを含むノード2fに移行する。概して、終了ノードは実行可能ロジックの実行が完了したことを表す。
一例では待機ノードは、その始まりが待機ノードである状態間の移行、例えばある状態から別の状態への移行を表す。フローチャート2内の全てのノードが状態移行を表す待機ノードを表す訳ではないため、この例ではフローチャート2が状態移行図と異なる。むしろ一部のノードは、例えばフローチャート2が既に特定の状態にあるとき実行されるアクションを表す。一部の例では、システムがフローチャート2を処理して状態機械図又は状態機械命令を生成する。
この例ではフローチャート2が2つの状態、即ちノード2b、2c、2gによって表される第1の状態とノード2d、2e、2fによって表される第2の状態とを含む。この第1の状態では、システムが(ノード2bによって表すように)特定のデータレコードを待機し、次いで(その始まりをノード2dによって表す)第2の状態への(仕様1の及び/又はチャート2の)移行又はノード2gの実行を引き起こすノード2cを実行する。第2の状態になると、システムは(ノード2dによって表すように)特定のデータレコードを再び待機し、次いでノード2e、2fを実行する。待機ノード以外のノードを含めることにより、フローチャート2はデータレコードの時間的処理のロジックグラフを含む。この例ではチャート2がリンク2iを含み、リンク2iは第1の状態から第2の状態へのチャート2の移行を表し、ノード2cからノード2dへのデータのフローも表す。
ノード2a、2b、2cに対応する第1の状態における実行可能ロジックの一部に関する利用者によって指定された実行順序を表すために、チャート2はノード2aとノード2bとの間のリンク2j及びノード2bとノード2cとの間のリンク2kも含む。この例では、第1の状態における実行可能ロジックの一部(以下「第1の状態の実行可能ロジック」)がステートメント(例えば、ロジカルステートメントや命令等(本明細書では限定なしにまとめて「ステートメント」と呼ぶ))を含む。概して、実行順序は実行可能ロジック及び/又はステートメントが実行される順序を含む。ノード2a、2b、2cのそれぞれが、それらのステートメントの1つ又は複数に(例えば、第1の状態の実行可能ロジックの1つ又は複数の部分に)対応する。そのためリンク2jは、ノード2aによって表される第1の状態の実行可能ロジック内のステートメントが、ノード2bによって表される第1の状態の実行可能ロジック内の他のステートメントを実行する前にシステムによって実行されることを表すことにより、第1の状態の実行可能ロジックの実行順序を表す。リンク2kも、ノード2bによって表される第1の状態の実行可能ロジック内のステートメントが、ノード2cによって表される第1の状態の実行可能ロジック内の他のステートメントを実行する前にシステムによって実行されることを表すことにより、第1の状態の実行可能ロジックの実行順序を表す。
仕様1はキー2hも含み、キー2hはフローチャート2がキー2hを含む又はキー2hに関連するデータレコードを処理することを識別する。この例ではキーとしてカスタム識別子(ID)が使用される。キー2hは、例えばsubscriber_IDフィールド、customer_IDフィールド、session_IDフィールド等のデータレコードのフィールドの1つに対応し得る。この例ではcustomer_IDフィールドがキーフィールドである。特定のデータレコードについて、システムはそのデータレコードに関するキーフィールドの値を識別することによってそのデータレコードに関するキーの値を決定する。
この例では、フローチャート2が(例えば、フローチャート2の構成時に指定される)指定の種類のデータレコードを受け入れる。この例では、フローチャート2がキー2hを含むデータレコードを受け入れる。この例では、フローチャート2及びデータレコードがキーを共有する。概してフローチャートは、フローチャートのキーを含むデータレコードを処理するためのロジックを含むことによってそれらのデータレコードの種類を受け入れる。データレコードの処理が始まると、システムは例えばキーの新たな値ごとに(フローチャート内で表される)実行可能ロジックの状態を保つことにより、そのフローチャートに関するキーの新たな値ごとに新たなフローチャートインスタンスを開始する。システムは、特定のキー値に関してデータレコードに応答するようにフローチャートインスタンス(従って基礎を成す実行可能ロジック)を構成することによってデータレコードの処理を行う。一例では、フローチャートが顧客のショートメッセージサービス(SMS)データレコードを受け入れる。特定の顧客IDに関するフローチャートインスタンスがその顧客に関するデータレコードを管理する。入力データレコード内で遭遇する顧客IDと同数のフローチャートインスタンスがあり得る。
図1Bを参照し、略図7は例えばフローチャート2(図1A)からシステムによって生成されるフローチャートインスタンス3、4、5、及びデータレコード6a、6b、6cを含む。即ち、データレコード6a、6b、及び6c内で検出される新たなキーごとにフローチャート2の新たなコピー又はインスタンスが作成される。
フローチャートインスタンス3、4、5のそれぞれは「customer_id」キーに関連する。フローチャートインスタンス3は、この例ではキーフィールドであるその「customer_id」フィールド内に「VBN3419」の値を含むデータレコードを処理する。フローチャートインスタンス4は、その「customer_id」フィールド内に「CND8954」の値を含むデータレコードを処理する。フローチャートインスタンス5は、その「customer_id」フィールド内に「MGY6203」の値を含むデータレコードを処理する。この例では、システムがフローチャートインスタンスごとに実行可能ロジックを再実行しない。むしろシステムは実行可能ロジックを実行し、次いでキーの個々の値に関する状態を保つことによってフローチャートインスタンスを実装する。従って、「フローチャートインスタンスがデータレコードを処理する」一例は、システムが(フローチャートによって表される)実行可能ロジックを実行し、キーの値ごとに状態を保ち、キーの特定の値に関連するデータレコードを(そのキーの特定の値に関する状態機械の状態に基づいて)処理することである。
この例では、フローチャートインスタンス3が図1Aのノード2a〜2gにそれぞれ対応するノード3a〜3gを含む。フローチャートインスタンス4は、図1Aのノード2a〜2gにそれぞれ対応するノード4a〜4gを含む。フローチャートインスタンス5は、図1Aのノード2a〜2gにそれぞれ対応するノード5a〜5gを含む。
フローチャートインスタンスはそれ自体が実行可能である。キーの特定の値に関連する入力データレコードをシステムが受信した後、そのキーの特定の値に関するフローチャートインスタンスが、例えばフローチャートインスタンス(又はフローチャートインスタンスの1つ又は複数のノード)に対応する実行可能ロジックの1つ又は複数の部分を実行するシステムによって入力データレコードを処理する。フローチャートインスタンスは、入力データレコードが終了ノード又は待機ノードに達するまで入力データレコードを処理し続ける。この例では、フローチャートインスタンスが、例えば終了ノード又は待機ノードに対応する実行可能ロジックの一部に達するまで入力データレコードを処理し続けるシステムによって入力データレコードを処理し続ける。入力データレコードが待機ノードに達する場合、フローチャートインスタンスは一定の時間が経過するまで又は適切な新たな入力データレコードが到着するまで一時停止する。概して、適切なデータレコードは(例えば、ノードのロジック内に含まれる)1つ又は複数の指定の条件又は基準を満たすデータレコードを含む。入力データレコードが終了ノードに達する場合、フローチャートインスタンスの実行が完了する。
フローチャートインスタンスは独自のライフサイクルを有する。データレコードが到着すると、フローチャートインスタンスの現在の状態又はステータスが変化し、即ちデータレコードが決定をトリガし、又はフローチャートインスタンスの始まりに戻り、又は顧客にメッセージが送信される。データレコードが終了ノードに達するとき、顧客のためのフローチャートインスタンスが終了する。
この例では、システムがキーフィールドの「VBN3419」の値(例えば、customer_id=VBN3419)についてフローチャートインスタンス3を開始する。フローチャートインスタンス3は、VBN3419のcustomer_idを含むデータレコード6a、6b、6cのサブセットを処理する。この例では、フローチャートインスタンス3がcustomer_idキーフィールド内で「VBN3419」の値を有するデータレコード6aを処理する。フローチャートインスタンス3のノード3a、3b、3cはデータレコード6aを処理する。フローチャートインスタンス3の現在の状態は、ノード3dの破線によって表されるようにデータレコードを待機する状態である。ノード3dに達すると、フローチャートインスタンス3はフローチャートインスタンス3のノード3d、3e、3fを通して処理するために顧客ID=VBN3419を有する別のデータレコードを待機する。
システムは、キーの「CND8954」の値(例えば、customer_id=CND8954)についてフローチャートインスタンス4を開始する。フローチャートインスタンス4は、CND8954のcustomer_idを含むデータレコード6a、6b、6cのサブセットを処理する。この例では、フローチャートインスタンス4が待機ノード4b及び4dを含む。各データレコードは、フローチャートインスタンスごとに1つの待機ノードの条件のみを満たすことができる。従って、フローチャートインスタンス4はノード4bからノード4dまでcustomer_id=CND8954を有するデータレコード6bを処理し、次いでノード4fに進む前に同じキーを有する第2のデータレコードを待機する。システムは、キーの「MGY6203」の値(例えば、顧客ID=MGY6203)についてフローチャートインスタンス5を開始する。フローチャートインスタンス5は、MGY6203のcustomer_idを含むデータレコード6a、6b、6cのサブセットを処理する。この例では、フローチャートインスタンス5がノード5b〜5dまでcustomer_id=MGY6203を有するデータレコード6cを処理し、次いでメッセージが送信されるノード5eに進む前に同じキーを有する第2のデータレコードを待機する。この例ではシステムが非待機ノードにおいて停止せず、従ってノード5eで停止しないが、むしろメッセージを送信してノード5fに進む。
図1Bの改変形態では、システムが単一のキー値について複数のフローチャートインスタンスを生成する。例えば、異なる開始日及び終了日を有する同じ顧客のための幾つかのフローチャートインスタンス又は様々なマーケティングキャンペーンについて同じ顧客のための幾つかのフローチャートインスタンスがあり得る。
この例では、システムが状態データ、例えばインスタンスごとに何れのノードが現在実行されているのかを示すデータをデータリポジトリ又はメモリ内データグリッド内に記憶することによってインスタンスの状態を保つ。概して、状態データは状態を示すデータを含む。この例では、インスタンスがキーの値に関連する。データリポジトリ又はメモリ内データグリッドがキーの値を記憶する。システムは、キーの値ごとに状態データを記憶することによってインスタンスの状態を保つ。キーの特定の値に関するデータレコードの処理を完了すると、システムは(フローチャート2内の)次のノードがそのキーの値に関する現在の状態を表すことを指定するためにデータリポジトリ内の状態データを更新する。次いで別のデータレコードが到着すると、システムはそのキーの値に関する現在の状態をデータリポジトリ内で探索し、そのキーの値に関する実行可能ロジックの現在の状態を表すノードに対応する実行可能ロジックの一部を実行する。
図2を参照し、ネットワーク化された環境10は、過去のキー付きデータレコードを処理することによって達する状態に基づいてキー付きデータレコードを処理するための環境を含む。ネットワーク化された環境10は、データレコードを処理するためのシステム11、及びデータレコードがそこから受信されるデータソース20を含む。データレコードの1つ又は複数がデータ項目の一部である場合があり、そのため受信される1つ又は複数のデータレコードは1つ又は複数のデータ項目の形式で受信される。この例では、データソース20がリアルタイムデータストリーム12のデータレコード14、16、18を(1つ又は複数のネットワーク(不図示)上で)システム11に伝送する。そのため、システム11はデータレコード14、16、18の1つ若しくは複数又は他のデータレコード(不図示)を断続的に受信する。例えばデータレコード14がシステム11に最初に到着し、データレコード16が(例えば、リアルタイムデータストリーム12内でデータレコード14の後に配置されることにより)システム11に次に到着し、データレコード18が(例えば、リアルタイムデータストリーム12内において、リアルタイムデータストリーム12内でデータレコード18の前且つデータレコード14の後に配置されるデータレコード16の後に配置されることにより)システム11に次に到着するように、データレコード14、16、18のそれぞれは互いに時間において隔てることができる。データレコード14、16、18のそれぞれは1つ又は複数のフィールド(例えば、顧客ID用のフィールドやアカウントID用のフィールド等)を含む。この例では、データレコード18が値24を有するキーフィールド22を含む。
システム11は、データレコード及びデータレコードを検出するための検出エンジン26、1つ又は複数のデータレコード及びデータレコードに対して実行可能ロジック48を実行するための実行エンジン44、データレコード及びデータレコードに対して実行可能ロジック48を実行した結果に基づいて1つ又は複数のアクションを開始するためのアクションエンジン53、並びに実行時のモニタリング及び制御のための制御エンジン54を含む。実行可能ロジック48は、例えばシステム11等のデータ記憶システム内に記憶される。この例ではデータリポジトリ28が、実行可能ロジック48、実行可能ロジック48の1つ又は複数の状態、及び実行可能ロジック48の状態間の移行を表す仕様45を含む。
仕様45は、実行可能ロジック48の表示可能グラフィカル表現を含む。例えばチャートやフローチャート等を含む様々な種類の表示可能グラフィカル表現がある。この例では、仕様45がノード47、49、51、55を有するチャート43を含む。ノードは、実行可能ロジック48のその部分が仕様45によって指定される特定の状態にあるとき実行可能である、実行可能ロジック48の特定の部分を表す。従って、チャート43は実行可能ロジック48を実行するためのテンプレートを提供する。この例では、システム11が仕様45のチャート43内のロジックを実行可能ロジック48へとコンパイルし、実行可能ロジック48を実行することはシステム11が入力データレコードに反応し出力データレコードを作成することを引き起こす。
仕様45は、チャート43のためのキー(不図示)も指定する。この例では、キーフィールド22がチャート43のためのキーに対応する。キーフィールドの値ごとに、実行エンジン44はキーフィールドの他の値に関するデータレコードと独立にそのキーフィールドの値に関するデータレコード又はデータ項目を処理する。それを行うために、実行エンジン44はリアルタイムデータストリーム12のデータレコード内に含まれる(キーフィールド22の)固有値ごとにチャート43のインスタンスを開始する。この例では、実行エンジン44がデータレコード14、16、18それぞれに含まれるキーの値についてインスタンス23、25、46を開始する。チャート43のインスタンスごとに、システム11は実行されているそのインスタンス内のノードの現在位置を追跡することにより、そのインスタンスに関する実行可能ロジックの状態を保つ。現在位置は、チャート内の何れのノードが現在実行されているのかを指定する。システム11は、ノードによって表される実行可能ロジックの1つ又は複数の部分を実行することによってそのノードを実行する。概して、現在位置は実行可能ロジックの現在の状態を表す。一例では、システムが待機ノードにおいてのみ停止し非待機ノードでは停止しないため、データレコード間の現在位置は待機ノードのみである。この例では、他の現在位置が過渡であり、それはデータレコードが入ってくるときシステムは次の待機ノード(又は終了ノード)まで全てのノードをチャート内で順に実行し、次いでその現在位置を示すデータを記憶することによってその現在位置を覚えておくからである。
システム11は、値24、32、36のそれぞれに関連するノードデータ項目30、38、40をデータリポジトリ28内に記憶することにより、チャート43のインスタンス23、25、46ごとに現在位置を追跡する。ノードデータ項目は(仕様45のインスタンス内の)何れのノードが現在実行されているのかを指定し、例えばそれによりチャートのインスタンスの状態及び実行可能ロジックの状態を指定する。値24、32、36のそれぞれはキーフィールド22の固有値に対応する。従って値とノードデータ項目との間の関連付けは、その値について開始されるチャート43のインスタンスの現在位置を指定する。この例では、データレコード18内に含まれる値24についてインスタンス46が開始される。
データレコード16はキーフィールド22の値32を含む。値32についてインスタンス23が開始される。値24は、インスタンス46の現在位置がノード47であることを指定するためにデータリポジトリ28内でノードデータ項目30に関連付けられる。値32は、インスタンス23の現在位置がノード49であることを指定するためにデータリポジトリ28内でノードデータ項目38に関連付けられる。この例では、データレコード14がキーフィールド22の値36を含む。値36についてインスタンス25が開始される。値36は、インスタンス25の現在位置がノード47であることを指定するためにデータリポジトリ28内でノードデータ項目40に関連付けられる。
この例では、システム11がデータソース20の1つ又は複数からデータレコード18を入力装置又はポート(不図示)上で受信する。システム11の検出エンジン26はデータレコード18を分析して、データレコード18がキーフィールド22の値24に関連すると判定する。検出エンジン26は、キーフィールド22の値24に関する仕様の状態をデータリポジトリ28内(又はメモリ内データグリッド(不図示)内)で探索する。この例では、ノード47が仕様45のインスタンス46に関する現在位置であることを指定するために、値24がノードデータ項目30に関連する。従って、キーフィールド22の値24に関する仕様45の状態はノード47である。検出エンジン26は、データレコード18及びノードデータ項目30を実行エンジン44に伝送する。ノードデータ項目30に基づいて、実行エンジン44は仕様45のインスタンス46に関する現在位置がノード47であることを識別する。この例では、実行可能ロジック48の特定の部分がノード47に対応する。実行エンジン44は、データレコード18に対して(又は関して)実行可能ロジック48の特定の部分を実行する(例えば、実行可能ロジック48の特定の部分をデータレコード18に適用する)ことによってデータレコード18を処理する。
データレコード18に対して実行可能ロジック48の1つ又は複数の部分を実行することに基づいて実行エンジン44がトリガ52を生成する。概して、トリガは出力データレコードを含む。例えばトリガは、顧客に向けてSMSメッセージを送信させるデータレコードを含む。それを行うために、実行エンジン44は送信されるメッセージの詳細と共に出力データレコードを生成し、アクションエンジン53がその出力データレコードをSMSメッセージへと変化させる。この例では、アクションエンジン53による処理及び実行のためにトリガ52が待ち行列50に発行される。
データレコード18を処理することに基づき、実行エンジン44は更にチャート43のインスタンス46に関する現在位置をノード49に更新する。実行エンジン44は、インスタンス46の現在位置を指定する更新済みノードデータ56を生成することによってそれを行う。更新済みノードデータ56に基づき、実行エンジン44はインスタンス46内の現在位置がノード49であることを指定するコンテンツでノードデータ項目30を更新するためにデータリポジトリ28に命令を伝送する。実行エンジン44は、ノード47によって表される実行可能ロジック48の1つ又は複数の部分をデータレコード18に対して実行した結果を示す結果データ58も生成する。実行エンジン44は、(値24に関連する)更新済みノードデータ56及び(同じく値24に関連する)結果データ58を制御エンジン54に伝送する。
この例では、制御エンジン54がキーフィールド22の値24を含むデータレコードを検査し、リアルタイムでモニタリングするためのチャート43のインスタンス46を表示するためのデータを生成する。この例では、ノード49がインスタンス46の現在位置を表すことを示すためにノード49が視覚的に強調表示されている。制御エンジン54は、インスタンス46と共に結果データ58を表示するためのデータも生成する。結果データ58はインスタンス46の1つ又は複数の部分上にオーバレイすることができる。別の例では、制御エンジン54によって生成されるデータが、ノード47と共に(例えば、ノード47と並べて又はそのすぐ近くに)結果データ58を表示するためのものである。この例では、制御エンジン54がフローチャート43のノードごとに(及び/又はフローチャート43のインスタンスごとに)結果データを生成し、フローチャート43(及び/又はフローチャート43の各インスタンス)が表示されるとき、フローチャート43内(及び/又はフローチャート43の各インスタンス内)のそのノードと並べて結果データを表示する。この例では、結果データが各ノードを通して処理される幾つかのデータレコードを示す。別の例では、例えばキーフィールドの特定の値についてデータレコードが処理されるとき、結果データは何れの個々のデータレコードが特定のノードによって処理されるのかを示す。
データレコード18の処理後、実行エンジン44は同じくキーフィールド22の値24を含む1つ又は複数のその後のデータレコードを待機することができる。実行エンジン44が値24に関する各データレコードを処理するとき、実行可能ロジック48は仕様45によって定められるように状態間を移行する。これらのその後のデータレコードは、仕様45によって定められるように実行可能ロジック48の1つ又は複数の部分に従って処理される。
改変形態では、システム11が、例えば特定のデータレコードフィールド(キーフィールド)の値に対応するキーの値ではなく、受信データレコードの1つ又は複数のデータレコードフィールド内の1つ又は複数の値に基づいてチャート43に関するキーの値を決定する。この例では、1つ又は複数のデータレコードフィールドの何れがキーの値に使用されるのかを指定する命令をシステム11が受信する(又はかかる命令でシステム11が構成される)。別の例では、システム11がデータレコードを受信し、それらの指定されたフィールドの値についてデータレコードを構文解析する。それらの指定されたフィールドの値に基づき、システム11は例えばそれらの指定されたフィールドの値を増大することによって、それらの指定されたフィールドの値を修正することによって、それらの指定されたフィールドの値の1つ又は複数に関連する別の値についてデータリポジトリを照会すること等によってキーの値を決定し又は生成する。
一例では、チャートに関するキーが顧客アカウントIDである。この例では、データリポジトリ28が顧客ID等の他のデータに関連して顧客の顧客アカウントIDを記憶する。この例では、データレコードが顧客アカウントIDのためのデータレコードフィールドを含まない。むしろデータレコードは、顧客IDのためのデータレコードフィールド(「顧客IDデータレコードフィールド」)を含む。この例では、システム11が顧客IDデータレコードフィールドに基づいて顧客アカウントIDを決定するための命令を実行する。システム11は、顧客IDデータレコードフィールドの値についてデータレコードを構文解析する。システム11はその構文解析した値を使用して、その構文解析した値に関連する顧客アカウントIDについてデータリポジトリ28を照会する。それに応答し、データリポジトリ28が(構文解析された値に関連する)顧客アカウントIDに関する値を返す。システム11は、顧客アカウントIDの値になるようにキーの値を設定する。
別の例では、チャートに関するキーが複数のデータレコードフィールドからの値を含む。この例では、システム11がそれらの値を連結してキーの値を作成する。更に別の例では、チャートに関するキーが、例えば顧客アカウントデータ、顧客プロファイルデータ、顧客購入データ等のデータリポジトリ内に記憶される他のデータと連結される1つ又は複数のデータレコードフィールドからの値を含む。更に別の例では、(例えば、データリポジトリ28内に記憶される)キーの値が既定のビット数を含む。この例では、キーの値が指定のデータレコードフィールドの値に基づく。データレコードフィールドは、キーに必要なビット数と異なる幾つかのビットを保持する。この例では、システム11が指定のデータレコードフィールドの値の前又は後に既定のビット数を挿入する(又は削除する)ことによってキーの値を生成する。このキーの生成値を使用し、システム11は生成されたキーの値に対応する(キーの)値に関連する状態データ(例えば、ノードデータ項目)をデータリポジトリ28内で識別する。
図3を参照し、環境59はCEP規則環境(CRE)を実装するためのシステム60を含む。一例では、システム60がシステム11(図2)を含み又はシステム11に含まれる。一例では、システム60がシステム11と同じシステムである。別の例では、システム60がシステム11と異なる。この例では、システム60がCREシステムを含む。
環境59は、例えば外部資源から1つ又は複数のデータレコード(不図示)を収集するための収集エンジン61を含む。環境59は、システム60の1つ又は複数の出力データレコードによって指定される1つ又は複数のアクションを開始し又は実行するための作動エンジン72も含む。一例では、システム60、収集エンジン61、及び作動エンジン72が別のシステム、例えば親システム内に含まれる。別の例では、収集エンジン61及び作動エンジン72がそれぞれシステム60と異なるシステム内に含まれ、かかるシステムによって実装される。更に別の例では、収集エンジン61及び作動エンジン72の1つ又は複数がシステム60内に含まれる。
この例では、収集エンジン61が1つ又は複数のデータレコード(不図示)を入力データレコード待ち行列62に伝送する。概して、入力データレコード待ち行列は入力データレコードを受信するための待ち行列である。概して、入力データレコードはシステム60、収集エンジン61、及び作動エンジン72の外部で起こった特定の発生を表すデータレコードである。一例では、顧客が電話をかけたこと又は取引を送信したことを指定するデータを入力データレコードが含む。別の例では、入力データレコードが金銭取引の発生を指定するデータを含む。この例では、収集エンジン61によって受信されるデータレコードごとに、実行エンジン78による処理のために収集エンジン61がそのデータレコードを入力データレコード待ち行列62に発行する。そうすることにより、システム60はデータレコード自体に関するデータベースの照会及び探索と独立にデータレコードを処理する。データレコードがデータリポジトリ内に記憶され、システム60がデータベースの照会又は探索を行ってデータレコードを取り出すデータレコードの処理に関連するレイテンシと比較し、このようにデータレコードを待ち行列に発行することはデータレコードの処理に関連するレイテンシを減らす。
入力データレコード待ち行列62は、1つ又は複数のデータレコードを実行エンジン78に伝送する。この例では、実行エンジン78が入力データレコード待ち行列62から受信されるデータレコード63を選択する。この例では、実行エンジン78がチャート(不図示)のインスタンス64、65、66を実行する。以下、インスタンス64、65、66を限定なしに及び便宜上チャートインスタンス64、65、66と呼ぶ。チャートインスタンス64、65、66のそれぞれは、入力データレコード待ち行列62内に含まれるデータレコードの(キーの)固有値に対応する。
この例では、実行エンジン78がデータレコード63内に含まれるキーの値について開始されるチャートインスタンス64、65、66の1つを選択する。実行エンジン78は、本明細書に記載の技法を使用してチャートインスタンス64、65、66の選択されたものに従ってデータレコード63を処理する。実行エンジン78は内部データレコード及びアラーム67を含む。概して、内部データレコードはあるチャートから別のチャートに送信されるデータレコードを含む。例えばチャート(又はチャートインスタンス)は、作動エンジン72に送信されないが代わりに別のチャート(又はチャートインスタンス)に送信される内部データレコードを生成し得る。一例では、各チャートがスレッドプロセス内のスレッドを表す。この例では、内部データレコードがスレッド間でデータを送信する方法を表す。概して、アラームは将来の予め計算された時点において到着する(例えば、チャートが自らに送信する)既定の種類のデータレコードを含む。システムは待機状態を実行するためのアラームを生成する。例えばチャート(又はチャートインスタンス)は、内部データ構造内に保存され、且つ後の時点においてチャートに提示されるアラームとして実装される期間にわたって待機するように構成され得る。
チャートインスタンス64、65、66の1つ又は複数を実行することに基づいて実行エンジン78が1つ又は複数の出力データレコードを生成し、それらの出力データレコードを出力データレコード待ち行列71、例えば出力データレコードを保持するための待ち行列に発行する。システム60は、出力データレコード待ち行列71内に含まれる出力データレコードを作動エンジン72に伝送する。作動エンジン72が出力データレコードを受信すると、作動エンジン72は1つ又は複数のアクションを実行し、又は出力データレコードのコンテンツに従って実行するための1つ又は複数のアクションを生成する。
実行エンジン78はグローバルチャート69を含む。概して、グローバルチャートはインスタンスが1つあるチャートを含む。グローバルチャートは、グローバル変数(例えば、リアルタイムデータストリーム内で受信されるデータレコード内で見られる幾つかの異なるアカウントを示す変数)を操作するために使用される。概してチャートはキーの脈絡で実行され得るが、厳密に1つのインスタンスを実行する幾らかのチャート、即ちグローバルチャートがある。グローバルチャートは、例えば要求/応答同期サービスとして実行エンジン78内で内部的に使用される。概して、要求/応答同期サービスは要求に対する即座の応答を提供するサービスを含む。
実行エンジン78は、例えば以下でより詳細に説明するように利用者から受信される1つ又は複数の命令に基づいて及び/又は手動状態操作データ74に基づいてチャート(及び/又はチャートインスタンス)を開始し、停止し、又は調節するためのチャートサブエンジン68を含む。一例では、実行エンジン78が1つ又は複数のデータリポジトリ、例えば環境59の外部の又は環境59に含まれるデータリポジトリから参照データ70も取り出す。概して、参照データは特定のキー又は特定のキーの値に関連するデータを含む。例えば顧客アカウントはキーである。この例では、参照データが顧客アカウントに関するアカウント詳細を含む。
システム60は、チャートインスタンス及びチャートの実行時のモニタリング(及び/又は検査)及び制御のための制御エンジン79も含む。この例では、制御エンジン79がシステム60の実行時環境を表す。実行時のモニタリング及び/又は検査のために、実行エンジン78内の活動を示すデータがトレースされ制御エンジン79に送信される。このトレースデータはデータベース(不図示)内に又は例えば(データベース内に記憶される)メトリク記憶データ75等のデータセット内に記憶される。制御エンジン79は、チャートインスタンスの実行の実時間の視覚化をディスプレイ装置上にレンダリングし、且つ実行エンジン78を実行することの現在の統計を表示するための動作表示データ80を生成する。制御エンジン79はこのトレースデータを使用して、例えばチャートインスタンス64、65、66の挙動を要約する様々な表形式のレポートを含むレポートデータ76を生成する。
制御エンジン79は、例えばチャート及びチャートのインスタンスを停止し、開始し、又は休止するコントロール(又はコントロール用のデータ)を利用者に提供することによってチャート及び/又はチャートインスタンス64、65、66の1つ若しくは複数の実行も制御する。これらのコントロールの1つ又は複数を選択することは、制御エンジン79に手動状態操作データ74を生成させる。概して、手動状態操作データ74はチャートインスタンスの状態を手動で操作する(例えば、変更する)ためのデータを含む。例えばチャートインスタンスの状態は、チャートを再開し、チャートを一時停止し、又はチャートを停止することによって手動で変更することができる。別の例では、利用者が(例えば、チャートの現在の状態を指定することによって)キーのサブセットについてチャートを選択し、それらのキーについてチャートの状態を変更することができる。この例では、手動状態操作データ74に従ってチャートを制御するために、制御エンジン79が手動状態操作データ74をチャートサブエンジン68に伝送する。実行中のチャートインスタンスの状態をどのように操作するのかを指定する命令としてチャートサブエンジン68が手動状態操作データ74を処理する。
制御エンジン79は制御点73も含む。概して、制御点は(チャートを生成する)利用者によって定められる実行時パラメータを含み、実行時における1つ又は複数のチャート(又はチャートインスタンス)の挙動を変更するために使用される。実行エンジン78は、制御点を読取専用変数として更にはグローバル変数として読み取る。一例では、制御点73がチャートを定め構成するためのユーザインタフェース内で定められ、(例えば、動作表示データ80から生成される)実行時インタフェースによって明らかにされる。実行エンジン78は制御点73をグローバル変数として読み取るため、チャートの挙動を変えるために制御点73の1つ又は複数をチャートの実行中に変更することができる。例えば制御点を使用し、個々のチャートを開始し又は停止することができ、閾値を変更することができ、任意選択的なロジックを有効又は無効にすること等ができる。制御点に基づき、チャートを停止することなしにこの実時間の構成が実行される。
この例では、例えば実行可能ロジックの状態の回復性を得るために、実行されている実行可能ロジックの一部の状態を保存する1つ又は複数の操作を実行することによってシステム60が回復性を得るためにも構成される。例えばチャートのノードの少なくとも一部は、実行可能ロジックの状態の回復性を有効にするために(例えば、フローチャート内の現在位置を示すデータを保存することによって)実行可能ロジックの状態を(例えば、システム60の)バッファ内に保存するチェックポイント操作をシステム60に実行させるロジックを含む。
図4を参照し、仕様100はチャート102を含む。概して、チャート102は以下のシナリオのためのロジックを表す:顧客がテキストメッセージを送信するとき、その顧客が「ペイパーテキスト」プランを引き続き使用しているが、無制限テキストプランを魅力的なものにするのにその顧客のその月のテキストメッセージの送信量が十分である場合、システムはその顧客が無制限プランにアップグレードすることを提案するSMSメッセージをその顧客に送信する。加えて、システムがオファーを送信する場合、顧客が1時間以内にSMSメッセージに返信することによってアップグレードする場合はその顧客に$10のボーナスクレジットも与えられる。さもなければ、その顧客はウェブ上でアップグレードするように指示される。
この例では、チャート102が上記のロジックを実装するためのノード104〜136を含む。システムはチャート102に関する現在位置を保つ。先に説明したように、現在位置は何れのノードが現在実行されているのかを示す。この例では、システムはノードによって表される実行可能ロジックの1つ又は複数の部分を実行することによってそのノードを実行する。システムは、チャート102に関する現在位置データを保つことによって実行可能ロジック及びチャート102の状態を保つ。
開始ノード104は、チャート102内への入口及びロジックの開始位置を指定する。開始ノード104によって表される実行可能ロジックの1つ又は複数の部分の完了後、システムはチャート102の現在位置を待機ノード106になるように更新する。この例では、待機ノード106が部分106a、106b、106c、及び106dを含む。待機ノード106によって使用される様々なロジックを利用者が入力又は修正するために部分106a、106b、106cのそれぞれが編集可能である。部分106、106b、106c内に含まれるロジックは、システムによって実行可能ロジックへとコンパイルされる。部分106aは、(待機ノード106によって表される)実行可能ロジックの一部が待機するデータレコードの名称又は種類を指定する。この例では、「AS」がアカウント活動ストリームデータレコードを表す。部分106bは、適切な種類のデータレコードが受信されるときに満たされる必要がある条件を指定する。部分106cはタイムアウト、例えばシステムが指定の種類のデータレコードを待機する時間を指定し得る。この例では、待機ノード106がタイムアウトを含まない。
チャート102によれば、待機ノード106の一番下のデータレコードの略記106dによって指定されるように、ASデータレコードは受信されると次のノード(即ち決定ノード108)のロジックに従って処理される。
チャート102は、決定ノード108のロジックに従ってASデータレコードを処理した結果に基づいて、実行可能ロジックが、終了ノード110によって表されるデータレコードの処理を終了した状態に移行すること、又は決定ノード112によって表されるASデータレコードの更なる評価が行われる別の状態に移行することを指定する。決定ノード112のロジックに従ってASデータレコードを処理することに基づき、実行可能ロジックは、ノード114によって指定される実行可能ロジックの開始状態に戻る状態に移行し、又はノード116によって指定されるチャートインスタンス変数の値が設定される状態に移行する。概して、チャートインスタンス変数はチャートのインスタンスごとに1つの値を有する変数を含む。
チャートインスタンスの値の設定後、システムはチャート102の現在位置をトリガノード118になるように更新し、トリガノード118は、出力データレコードに作用するために出力データレコードがシステムの一部に送信される実行可能ロジックの状態を表す。出力データレコードを送信するためのロジックでチャート102をプログラミングする場合、利用者は何れの出力データレコードの種類が送信されているのかを識別し、その種類のデータレコードについてトリガノード118のフィールド118a、118b、118cにデータ投入する必要がある。この例では、利用者はSMSタイプの出力データレコードを送信したい。それを行うために、利用者はフィールド118aについて「SMS」の値を選択する。フィールド118b、118cの値も利用者によって与えられる。この例では、フィールド118bがSMSメッセージを送信するときに使用する電話番号を指定し、フィールド118cが送信するメッセージのコンテンツを指定する。
トリガノード118の完了後、システムがチャート102の現在位置を待機ノード120になるように更新し、待機ノード120は実行可能ロジックが(例えば、待機ノード106に従って過去に待機された1つ又は複数のデータレコードから時間において隔てられた)1つ又は複数の追加のデータレコードを待機する状態を表す。
この例では、待機ノード120が部分120a、120b、120cを含む。部分120aは、待機ノード120によって表される実行ファイルの一部が待機するデータレコードの名称又は種類を指定する。この例では、待機ノード120がASデータレコードの待機を表す。部分120bはASデータレコードが受信されるときに満たされる必要がある条件を指定し、1つ又は複数の論理表現(又は論理表現に基づく視覚化)を表示する。部分120cはタイムアウト、例えばシステムが指定の種類のデータレコードを待機する時間を指定する。部分120cによって指定される時間中に適切なデータレコードが受信されない場合は待機がタイムアウトになり、チャート102の現在位置が待機ブロック120を離れるタイムアウト矢印129に接続される待機ノード128に移る。この例では、待機ノード128は1日待機して、その後決定ノード130によって表される状態に移行するための実行可能ロジックを表す。決定ノード130のロジックによるアカウント詳細の評価結果に基づき、チャート102の現在位置は実行が完了した状態を表す終了ノード134又はSMSメッセージを送信するトリガを実行する状態を表すトリガノード132に更新される。トリガノード132によって指定されるトリガの完了後、システムは実行が完了した状態を表す終了ノード136になるように現在位置を更新する。
部分120cによって指定される時間内に別のASデータレコードが受信される場合、チャート102の現在位置をトリガノード122になるように更新し、実行可能ロジックは利用者のアカウントにクレジットが適用されるトリガノード122によって表される状態に移行する。トリガノード122によって指定されるトリガの完了後、チャート102の現在位置をトリガノード124になるように更新し、実行可能ロジックが顧客にありがとうのSMSを送信するためのトリガノード124によって表される状態に移行する。トリガノード124によって指定されるトリガの完了後、チャート102の現在位置を実行が完了する実行可能ロジックの状態を表すノード126になるように更新する。
仕様100はキャプション部分140も含む。この例では、キャプション部分140が仕様100及びチャート102に関するキーを指定するキー部分142を含む。この例では顧客アカウントIDがキーである。キーの固有値(例えば、顧客アカウントIDの固有値)ごとにシステムはチャート102のインスタンスを生成し、それにより顧客ごとにチャート102の1つのインスタンスを生成する。この例では、システムが全ての実行中のチャートインスタンスについて現在位置を保つ。そのため、システムは各顧客をチャート102のインスタンスに関連付け、例えばインスタンスごとに現在位置を追跡することによってそれらのインスタンスのそれぞれについて状態を保つ。
キャプション部分140は外部入力データレコード部分144も含み、この部分はチャート102のロジックによって処理される入力データレコードであるデータレコードの種類を指定する。概して、外部入力データレコードとは、チャートによって表される実行可能ロジックへの入力である外部ソースから受信されるデータレコードである。この例では、アカウント活動ストリームデータレコードが外部入力データレコードであることを外部入力データレコード部分144が指定する。キャプション部分は、何れの種類のデータレコードがチャート102のロジックから生成され、かかるロジックによって出力されるのかを指定する外部出力データレコード部分146、148も含む。この例では、SMS及びアカウント修正出力データレコードがそれぞれあることを外部出力データレコード部分146、148が指定する。
キャプション部分140は、制御点を示す制御点部分150を含む。制御点に関する新たな値を読み込むために、チャート102によって表される実行可能ロジックの実行を停止する必要はない。この例では、決定ノード112が制御点部分150によって表される制御点に基づくロジックを含む。制御点部分150によって表される制御点は、決定ノード112のロジック内に含まれるテキストオファー閾値と呼ばれる数値を含む。この制御点は、オファーが与えられるまでに顧客が送信しなければならないテキストメッセージ数を含む。オファーが与えられるまでに顧客が送信しなければならないテキストメッセージ数は、チャート102を変更し又は再開することなしに閾値(例えば、テキストオファー閾値)を変更できるようにするために制御点内に記憶される。
キャプション部分140は集約を示す集約部分152を含む。集約は、ある期間にわたる複数のデータレコードからの値を結合することによって計算される値を含む。集約はキーに関連する。一部の例では、チャートのためのキーが集約のキーとマッチする。集約部分152によって参照される特定の集約は今月の合計テキストと呼ばれる。アカウント(即ちキーの値)ごとにこの集約の異なる値があり、対応するアカウントについてテキストメッセージが送信される度に集約が自動でインクリメントされる。集約については以下でより詳細に論じる。
キャプション部分140は、参照データを表す参照部分154も含む。概して、参照データはチャート102及び/又はチャート102によって表される実行可能ロジックの外部のデータを含み、探索操作によってアクセスされる。参照データは、チャートと同じキーであり得るキーに関連する。一部の参照データはグローバルであり、キーを必要としないかキー(例えば、状態探索のためのジップコード)を明示的に供給することによって参照される。
図5を参照し、略図500は時点T1、T2、T3にわたる実行可能ロジックの状態508、510、512を示す。実行可能ロジックはチャート102(図4)によって表される。この例では、実行可能ロジックの状態がチャート102のキーの値ごとに保たれる。実行可能ロジックは状態508、510、512を含み、その始まりは(図4内の)待機ノード106、120、128によってそれぞれ表される。この例では、状態508、510、512のそれぞれが待機状態を含む。システムは、例えばキーの固有値ごとに状態を保つことによってチャート102のインスタンスごとに実行可能ロジックの状態を保つ。
この例では、第1の時点T1においてシステムがデータレコード502を受信する。データレコード502は、キーの「423−e5f」の値に関連する。システムは、そのキーの値に関するチャートインスタンスに従ってデータレコード502を処理する。待機ノード106(図4)に達すると、システムは「423−e5f」の値に関連するチャートインスタンスの現在の状態を状態508になるように更新する。この例では、システムが状態508を示すデータと423−e5fに等しいキーの値を表すデータ514との間の関連付けを(例えば、データリポジトリ内で)生成する。この関連付けにより、システムは時点T1において値=423−e5fに関するチャートインスタンスの現在の状態が状態508だと指定する。この例では、データレコード502が状態508に関連することをリンク516が視覚的に示す。この例では、仕様は実行可能ロジックが状態508にあるとき実行可能である実行可能ロジックの1つ又は複数の部分を指定する。例えば仕様は、実行可能ロジックが状態508にあるとき実行可能である実行可能ロジックの1つ又は複数の部分に対応するノードを含む。
システムは第2の時点T2においてデータレコード504を受信する。データレコード504は、データレコード502の後で且つデータレコード506の前にシステムによって受信される介在データレコードである。データレコード504は、キーの「453−0rf」の値に関連する。システムは、そのキーの値に関するチャートインスタンスに従ってデータレコード504を処理する。待機ノード106(図4)に達すると、システムは「453−0rf」の値に関連するチャートインスタンスの現在の状態を状態508になるように更新する。この例では、システムが状態508を示すデータと423−e5fに等しいキーの値及び453−0rfに等しい別のキーの値を表すデータ518との間の関連付けを(例えば、データリポジトリ内で)生成する。この関連付けにより、システムは時点T2において値=423−e5f及び値=453−0rfに関するチャートインスタンスのそれぞれの現在の状態が状態508だと指定する。この例では、データレコード504が状態508に関連することをリンク520が視覚的に示す。
システムは第3の時点T3においてデータレコード506を受信する。データレコード506は、キーの「423−e5f」の値に関連する。システムは、そのキーの値に関するチャートインスタンスに従ってデータレコード506を処理する。待機ノード120(図4)に達すると、システムは「423−e5f」の値に関連するチャートインスタンスの現在の状態を状態510になるように更新する。この例では、システムが状態510を示すデータと423−e5fに等しいキーの値を表すデータ522との間の関連付けを(例えば、データリポジトリ内で)生成する。この関連付けにより、システムは時点T3において値=423−e5fに関するチャートインスタンスの現在の状態が状態510だと指定する。この例では、データレコード506が状態510に関連することをリンク524が視覚的に示す。システムは、時点T3において値=453−0rfを有するチャートインスタンスのみが状態508にあることを表す、状態508を表すデータとデータ526との間の関連付けも生成する。
図6を参照し、グラフィカルユーザインタフェース600はタブ602、604、606を含む。概して、タブはグラフィカルユーザインタフェースの選択可能部分を含み、タブを選択することで選択されるタブに関連するデータが表示される。この例ではタブ602が選択されており、グラフィカルユーザインタフェース600が特定のラッフル、即ち「ラッフル」に関するデータを表示している。この例では、グラフィカルユーザインタフェース600がチャート622に関するデータを表示するための部分608を含む。部分608は、チャート622の名称を示すデータを入力し表示するための名称フィールド610を含む。部分608は、チャート622に関するチャートの種類を示すデータを入力し表示するための種類フィールド612も含む。例えばグローバルチャートを含む様々な種類のチャートがある。概して、グローバルチャートは顧客のプロセス、例えば単一のマーケティングキャンペーンを記述するチャートを含み、利用者のCEPプロセスを論理的に表す最上位チャートである。部分608は、チャート622を非公開にするか公開するか、チャート622が非待機かどうか(例えば、チャート622が待機ノードを含むかどうか)、及びチャート622がグローバルチャートかどうかを指定するためのコントロールを有する制御部分614も含む。部分608は、何れの種類のキーがチャート622に使用されるのかを入力し表示するためのキーの種類フィールド616も含む。この例では、キーがアカウント識別子(例えば、アカウント番号やアカウント番号等)である。部分608は、例えば(キーの特定の値に関する)個々のデータレコードがステップ実行される(例えば、処理される)検査モードでチャートが実行されているとき、キーの何れの特定の値(_keyValue)が現在処理されているデータレコードに関連するのかを示すデータを表示するための組込値コントロール618も含む。概して、データレコードをステップ実行することは、例えば各データレコードを処理した結果がシーケンス内の次のデータレコードを処理する前に表示されるように、順に配置されるデータレコードを逐次的に処理することを含む。概して、検査モードはチャートを検査データ、例えば1組の既定のデータを用いて実行する動作モードを含む。チャートを検査モードで実行することにより、システムは例えばチャートとして表される規則又は決定表を検査する時系列の検査を実行し、検査は、時間において隔てられたデータレコードを用いてある期間にわたって行われる。組込値コントロール618は、例えばチャートが検査モードで実行されているときキーの特定の値について現在実行されているチャートのインスタンスに関するID(_ChartID)を示すデータも表示する。この例では、例えば(キーの特定の値に関する)個々のデータレコードがステップ実行される(例えば、処理される)検査モードではなく、チャートがリアルタイムで実行されていることを示すために組込値コントロール618が「実行中」のステータスを表示している。チャートに関する引数がある場合、部分608はチャートに関する引数を表示するための引数部分620も含む。概して引数はパラメータを含む。例えばチャートは、その値が別個のファイル内で指定されチャート内に読み込まれるパラメータを含み得る。例えばチャート内の論理表現は1つ又は複数のパラメータを含み得る。実行時にシステムはそれらのパラメータの値を指定するファイルにアクセスし、その値を論理表現に含める。そうすることによりシステムはチャート及び論理表現の再利用を促し、それはこれらのチャート及び論理表現が指定の値を含まないからである。むしろこれらのチャート及び論理表現は、チャート及び論理表現とは独立にその値を指定することができるパラメータを含む。
チャート622は、規則の視覚的表現及び規則の部分間の時間的な関係を含む。この例では、チャート622がノード624、626、628、630、632、634を含む。各ノードは規則の1つ又は複数の部分を表す。システムは、例えばデータ項目又はデータレコードに対する規則の実行の精度を検査するためにチャート622を実行する。例えばチャート622を実行することにより、システムは(もしある場合)何れのノードがデータレコードの処理に失敗するのかを突き止める。かかる失敗は規則の部分間の競合を示す可能性があり、又は満たされる可能性が低い条件を指定する規則の一部を示し得る。そのため、この失敗はデータレコードを正確に処理することができない、又は標的とする処理様式や目標と異なる方法でデータレコードを処理する規則を示し得る。
ノード624、626はサブチャートノードである。概して、サブチャートノードはサブチャートを呼び出し実行するための実行可能ロジックを表すノードを含む。サブチャートは、例えばチャートのセクションをコピーアンドペーストする必要性を回避するために他のチャートとの間でロジックを共有するためのチャートを含む。サブチャートは、複雑さの抽象化及び曖昧化を可能にする。例えばサブチャートは専門的な利用者によって作成され、その後、実装のより複雑な詳細に触れさせる必要のない非専門的な利用者によって使用され(呼び出され)得る。サブチャートは呼出チャートから呼び出され、呼出チャートはサブチャートを呼び出す(例えば、サブチャートに制御を移す)チャートを含む。呼出チャートは、例えばゴールチャートや別のサブチャートを含む様々な種類のチャートを含む。
この例では、ノード628が待機ノード(以下、待機ノード628)であり、ノード632、634が終了ノードである。待機ノード628は、3つの条件628a、628b、628cの少なくとも1つを満たす任意の種類のデータレコードを待機するように構成される。条件628aは、データレコードが$2500を上回る取引を示す金銭取引(MT)外部入力データレコードであることを要求する。条件628bは、データレコードが電子明細書式の内部(intr)データレコードであることを要求する。条件628cは、データレコードが請求書の支払式の内部データレコードであることを要求する。
チャート622は、リンク645、647、649、659、及び関連するラベル651、653、655、657のそれぞれを含む。概して、ラベルは満たされる条件の視覚的表現を含む。この例では、条件628aを満たすデータレコードが待機ノード628からノード630にラベル651を有するリンク645を介して横断する。システムは、(例えば、実行可能ロジックの待機状態を表す)待機ノード628から(例えば、実行可能ロジックの別の状態又は実行可能ロジックの1つ若しくは複数の部分を表す)ノード630への移行の視覚的表現をグラフィカルユーザインタフェース600内に表示させる。システムは、リンク645を視覚的に強調表示することによって移行の視覚的表現を表示する(又は表示させる)ことができる。
この例では、条件628bを満たすデータレコードが待機ノード628からノード630にラベル653を有するリンク647を介して横断する。この例では、条件628cを満たすデータレコードが待機ノード628からノード630にラベル655を有するリンク649を介して横断する。待機ノード628がタイムアウトを理由に終了する場合、システムはチャート622の現在位置を、ラベル657を有する経路(即ちリンク659)によって待機ノード628に接続される終了ノード632に更新する。
チャート622は、チャート622の何れのノードがデータレコードを現在処理しているのかを明示するためのステータスインジケータ629を含む。この例では、待機ノード628と並べて(例えば、その隣に)表示されているステータスインジケータ629によって明示されているように、待機ノード628がシステムによって現在実行されている。チャート622は、モニタリング点636、638、640、642、644、646、648、650、652、654を含む。概してモニタリング点は、例えば実行時やシミュレーション中及び検査中に自動で収集される特定のメトリクを計算するための命令を表す。モニタリング点は利用者によって定められ、利用者によってチャート内に挿入される。モニタリング点は名称を有し、名称はチャート内で固有である。一例では、例えば何個のデータレコードが特定のノードを通過するのかをモニタすることによって規則の精度を検査するために、システムがモニタリング点を使用する。データレコードがノードを通過しない場合、システムはそのノードに含まれるロジックの潜在的問題を識別し、そのロジックを精査しことによると調節するように利用者を促すことができる。この例では、例えばモニタリングされているノードを検査した結果の視覚的指示を与えるために、そのノードと並べてモニタリング点がチャート622内に表示されている。
一例では、モニタリング点は実行時に入手可能なデータに対して利用者が計算を行うことを可能にし、そのため実行時データをメトリク内に含めることができる。例えば利用者は、(全ての顧客ではなく)重要度の高い顧客が何人特定の決定ノードの決まった分岐に進んだのかを知りたい場合がある。このメトリクを計算するために、警告点(monitory point)はチャートの実行時に顧客の重要度が高いかどうかを計算し、顧客の重要度が高いかどうかを示すモニタリング点のデータを返信するようにシステムに命令する。モニタリング点がサブチャート内で定められる場合、そのモニタリング点は呼出チャートに関連付けられる。
モニタリング点は、チャート622内の2つのノードをつなぐ矢印に付加され又は待機ノードに付加される。例えば以下で説明するように、例えばリンク645を横断するデータレコードの数を追跡することにより条件628aを満たすデータレコードの数を追跡するためにモニタリング点646がリンク645に関連付けられる。リンク647、649を横断するデータレコードの数を追跡するためにモニタリング点648、650がリンク647、649にそれぞれ関連付けられる。
グラフィカルユーザインタフェース600は、タブ662、664、666を有する部分660も含む。タブ662は、以下でより詳細に説明するようにチャート622の制御に関するデータを表示させる。タブ664は、以下でより詳細に説明するようにチャート622内の様々なオブジェクトの使用に関するデータを表示させる。タブ666は、モニタリング点に関するデータを表示させる。タブ666は、表現式の情報を表示するための部分668、矢印に関連する(例えば、付加される)モニタリング点に関するデータを表示するための部分670、待機ノードに関連するモニタリング点に関するデータを表示するための部分674、並びにチャート及び/又はチャートインスタンスの1つ又は複数の実行結果を示すメトリクデータを表示するための部分674を含む。
部分668は、利用者によって定められる表現式668a、668bを表示する。表現式は、名称(例えば、「Total Qual」)、表現式の値がどのようにシステムによって計算されるのかを指定する定義、及び計算され出力される値に関連する。一例では、表現式が1組のパラメータ、1つ若しくは複数のローカル変数、及び/又はモニタリング点をどのように集約し報告するのかを規定するための定義を指定する。
部分670、674は、利用者が例えば表現式668a、668bに基づいてモニタリング点を定義することを可能にする。この例では、部分670が矢印に関連するモニタリング点の定義を指定することを可能にする。部分670は、モニタリング点646の定義を指定するためのモニタリング点定義672を含む。従って、(モニタリング点定義672から生成される)モニタリング点646は、モニタリング点646が矢印(「A」)に関連するモニタリング点であり、且つこの種類の8番目のモニタリング点であることを明示するためのテキスト「A8」を含む。モニタリング点定義672は、モニタリング点646の名称(即ち「Qual by Pchs」)を指定し、モニタリング点646によって追跡される様々な値672i〜672l及び関連する定義672e〜672hのそれぞれ、並びにそれらの値672i〜672lの名称672a〜672dもそれぞれ指定する。値672iは、待機ノード628とノード630との間の矢印645を何個のデータレコードが横断したのかを明示する。この例では、例えばモニタリング点646内に何れの値を表示するのかについての部分670内の利用者の指定に基づき、値672iがモニタリング点646内に表示されている。この例では、部分670が新たなモニタリング点を定義するための1つ又は複数のフィールドを含む。
部分674は、モニタリング点642内の「W」によって明示されているように待機ノード628に関連するモニタリング点642の定義を指定するためのモニタリング点定義を含む。この例では、部分674内のモニタリング点定義が保留の待機ブロックカウント674a、待機ブロックのレイテンシカウント674b、及び待機ブロックのレイテンシ平均674cを明示する。この例では、保留の待機ブロックカウント674aはその現在位置が待機ノード628に対応するチャートの数を明示する。概して、ノードはブロックを含む。この例では、待機ブロックのレイテンシカウント674bが、指定の時間又は報告間隔中に待機ノード628が満たされる(タイムアウトしない)インスタンスの数を明示する。この例では、待機ブロックのレイテンシ平均674cは待機ノード628に関する平均データレコード処理レイテンシを明示する。概して、待機ノードに関する平均データレコード処理レイテンシは、待機ノード628が条件628a、628b、628cの1つ又は複数を満たすデータレコードを待機し、条件628a、628b、628cの1つ又は複数を満たすデータレコードを処理する平均時間を示す値を含む。この例では、例えば部分674内のモニタリング点642のユーザ構成に基づき、モニタリング点642が保留の待機ブロック674aの値(即ち3173)を表示する。具体的には、部分674はモニタリング点642内に何れの値を表示させるのかを利用者が指定するための1つ又は複数のコントロール又は入力フィールド(不図示)を含む。
部分676は、アクティブチャートメトリクや終了チャートメトリク等のメトリクを表示する。概して、アクティブチャートメトリクは特定のチャートの現在アクティブな(例えば、実行中の)インスタンスの数を明示する。概して、終了チャートメトリクは過去にアクティブだったがもはやアクティブではないチャートのインスタンスの数を明示する。
改変形態では、部分676は、データレコードが入力待ち行列内に入れられるときとそれらが処理されるときとの間の処理レイテンシを示す他のメトリクも表示する。それを行うために、システムは入力データレコードに採集時間、例えば入力待ち行列にデータレコードが(例えば、処理のために)追加される時間を割り当てる。システムが入力待ち行列からデータレコードを読み取るとき、システムは現在時間から採集時間を引くことによって処理レイテンシを計算する。システムは、処理レイテンシを示すメトリクの平均値を計算することによって平均データレコード処理レイテンシも追跡する。一例では、上記のメトリクが(1組の又は複数のチャートによって処理されるデータレコードに関する)グローバルメトリク及びチャートごとのメトリクを含む。
一部の例では、システムが例えばデータリポジトリ内に記憶される検査データの項目の組に対してチャート622を実行する。この例では、システムが組の1つを選択し、選択した組を使用してほぼリアルタイムの検査データのストリームをシミュレートする。システムは、シミュレートされるストリーム内の検査データの項目に対してチャート662等のチャートを適用する。別の例では検査データの項目が、例えば1つ又は複数の外部ソースからシステムによって受信されるデータの項目である。
図7を参照し、グラフィカルユーザインタフェース700は(例えば、タブ662に対応し得る)タブ701のコンテンツを表示する。この例では、グラフィカルユーザインタフェース700がチャート、例えば図6のチャート622の実行を制御するためのリセットコントロール702、停止コントロール703、ステップコントロール704、解放コントロール706、次のノードコントロール708、及び実行コントロール710を表示する。リセットコントロール702は、例えばリセットコントロール702の選択時にチャートをリセットさせる。概して、チャートは現在実行されているチャートのインスタンスを終了し、初期値(例えば、ゼロ値)を有するようにチャートによって使用される全ての変数を設定することによってリセットされる。停止コントロール703は、例えば少なくとも利用者がチャートの再実行を指定するまでチャートの実行を停止させる。
ステップ704は、(例えば、キーの特定の値に関する)データレコードがチャートによってどのように処理されるのかを見るために利用者がそれらのデータレコードをステップ実行することを可能にすることにより、時間的に焦点を絞った検査を可能にする。システムがデータレコードをステップ実行するとき、システムは何れのノードが何れのデータレコードを処理するのか及びそのデータレコードの値(又はコンテンツ)についての視覚的指示によってチャートを更新する。例えば、(例えば、規則を具体化する)チャートのロジックは多数のデータレコードを処理する。検査中、利用者はキーの所与の値に関する決定(例えば、チャート内で横断される経路)に関連するレコードを見る必要がある。ステップコントロール704を使用することによってシステムは(キーの特定の値に関する)各データレコードをステップ実行し、以下でより詳細に説明するように、チャートの何れのノードが1つ又は複数のデータレコードを現在処理しているのか並びに処理されているデータレコード(並びに過去に処理されたデータレコード)の値及びコンテンツを視覚的に強調表示する。解放コントロール706はシステムにデータレコードを解放させる。概して、データレコードを解放することはデータレコードを処理すること及び/又は評価することを含み、そのため例えばチャートは新たなデータレコード又は入力データレコードを処理し続けることができる。次のノードコントロール708は、チャート内の次のノードに状態が進むようにチャートの状態をシステムに変更させる。この次のノードコントロール708を選択することは、以下で説明するように例えば検査中にチャートの現在の状態をオーバライドしチャートを次のノードに強制的に進めるための命令をシステムに送信する。実行コントロール710は、チャートを開始させ又は実行を再開させる。
グラフィカルユーザインタフェース700は、停止中インジケータ716、ステップ検査インジケータ714、実行中インジケータ712等のステータスインジケータも表示する。この例では、例えばグラフィカルユーザインタフェース700内で停止中インジケータ716が視覚的に強調表示されている場合、停止中インジケータ716はチャートの実行が現在停止していることを明示する。グラフィカルユーザインタフェース700内で視覚的に強調表示されている場合、ステップ検査インジケータ714はチャートが例えばステップコントロール704の選択に基づいて検査のために現在ステップ実行されていることを明示する。例えばグラフィカルユーザインタフェース700内で実行中インジケータ712が視覚的に強調表示されている場合、実行中インジケータ712はチャートが現在実行されていることを明示する。
グラフィカルユーザインタフェース700は、チャートの実行中に経過した時間を視覚的に明示するための時間バー718aを含む経過時間部分718も含む。グラフィカルユーザインタフェース700は、システムによって何れのチャートが現在実行されているのかを明示する実行中チャート部分720も含む。この例では、実行中チャート部分720はチャート720aが実行中であることを明示する。チャート720aについて、実行中チャート部分720はコントロール720bを含み、その選択はチャート720aの何れのノードが現在実行されているのかを明示するステータスインジケータをシステムに識別させ表示させる。グラフィカルユーザインタフェース700は、様々な入力データレコードに関するラベルをそれらのデータレコードの処理時間(例えば、実行中のチャート内のノードがデータレコードを処理するのにかかる時間)と共に表示し、且つ関連する入力データレコードに関する出力トリガを表示する部分722も含む。
図8を参照し、グラフィカルユーザインタフェース800は(例えば、図6のタブ664に対応し得る)タブ802のコンテンツを表示する。グラフィカルユーザインタフェース800は、1つ又は複数のチャート(例えば、図6のチャート622)によって使用される制御点(及び関連する値)を明示するための部分804を含む。グラフィカルユーザインタフェース800は、チャートによって使用される変数(及び関連する値)を明示する部分806を含む。変数は、表現式、規則、サブチャート等を使用して計算され得る割当値である。
グラフィカルユーザインタフェース800は、例えば特定のチャートと共に使用される共同チャートを表示するための部分808も含む。概して共同チャートは、別のチャートによって開始されその後その独自の現在位置と共に独立に実行されるチャートを含む。例えば単一のチャートが単一の現在位置を有することを許可されるという制約に基づき、システムは共同チャートを使用することができる。例えば独自の現在位置を有し且つゴールチャートと並列に実行される追加のチャートを開始するようにゴールチャートを構成することができる。この例では追加のチャートが共同チャートであり、共同チャートは内部データレコードを使用して他のチャート(そのチャートを開始したゴールチャート等)と通信する。グラフィカルユーザインタフェース800は、チャートによって使用される内部データレコードを指定するための部分810、チャートによって使用されるグローバル変数を指定するための部分812、チャートによって使用される参照データを指定するための部分814、及びチャートによって使用される外部入力データレコードを指定するための部分816も含む。
本明細書に記載のチャートは窓集約を行うように構成可能である。概して、窓集約とは指定の期間又は窓にわたるデータ(例えば、特定の種類のデータ)の集約である。例えば窓集約は、データレコードのサブセットについて計算される集約を含む。サブセットは最近のデータレコード(例えば、昨日のデータレコード)を含み、時間が進むにつれて集約されるデータレコードの組も変化する。多くのCEP規則が様々な種類の窓集約を使用する(例えば、過去24時間のATMの引出し回数)。従って、システムは窓集約を生成し、集約を行うための規則を生成し、それらの集約を定め且つ検査中にその挙動を観察するためのコントロールを利用者に提供する。一例では、実行可能ロジックが集約を含み又は表す。この例では、システムが実行可能ロジックを表す規則を実行することによって集約を計算する。集約の計算を完了すると、システムは同じく集約を含む1つ又は複数の他の規則によって後で取り出されるようにその集約を記憶し、それにより過去に計算された集約の共有を促す。
一例では、チャートを生成する際に利用者が選択し使用することができる予め指定された様々な集約(例えば、今月使用されたテキスト数)をシステムが提供する。この例では、例えばチャートを定めるためのインタフェースの部分内に様々なノード、アイコン、及びリンクを「ドラッグアンドドロップ」することによって利用者がチャートを定めることができるインタフェース(又はインタフェース用のデータ)をシステムが提供する。ノードは編集可能なロジックを含み表示する。利用者は、ノードによって表される実行可能ロジックによって使用される集約を指定するために又は(実行可能ロジックをコンパイルする際に使用される)他のロジックを指定するためにロジックを編集することができる。利用者は、例えば集約を指定するロジックを入力することによって、(例えば、複数の既定の集約の中から)既定の集約を選択することによって、既定の集約を示すアイコン又はノードを選択し、それをチャートに追加する又はチャート内のノードに関連付けること等によって集約を指定することができる。システムは(例えば、キーの特定の値に関する)データレコードをステップ実行することによってこれらの集約の挙動を検査して、何れのノードが何れのデータレコードを処理するのか及びデータレコードが処理されるときのデータレコードの値(及び/又はデータレコード内のコンテンツ)を識別する。この検査に基づき、データレコードが集約を含むノードを通過しないことをシステムは識別し得る。そのため、システムはそのノード内のロジックを誤り(例えば、決して満たされることがない条件)に関して分析することができ、及び/又はより容易に若しくは頻繁に満たされる条件にノードのロジックを変えるように利用者を促すことができる。
再び図2を参照し、収集エンジン61は窓集約を計算し、それらを参照データとして記憶し又は補強としてデータレコードに追加する。概して、補強はデータレコードがシステムによって受信された後でデータレコードに追加されるデータを含む。システムはこのデータを使ってデータレコードを「補強」する。別の例では、システム60が例えばチャート(又はチャートによって具体化される規則)の作者によって指定される定義に基づいて集約を生成し、それらの集約をチャート実行プロセスの一部として実装する。
システム60は、例えばチャート内やプロジェクト内の変数として集約を定める。概して、プロジェクトはチャートの集まり、例えばキャンペーンを実行するためのチャートの集まりを含む。チャート間で集約の共有を可能にするために、システム60はプロジェクトのための集約を定める。そうすることにより、例えばシステム60がチャートごとの集約を互いに独立に計算する場合に集約を計算する際に実行しなければならない計算数と比較して、システム60が集約を計算する際に実行する計算数が減ることによってシステムの性能及び個々のチャートの性能が改善する。
一例では、システム60が(例えば、キーの特定の値や特定のキーに関連することによって)キー付きである集約を計算する。システム60はキーにわたる集約にアクセスするための規則を生成し、それによりチャートはチャートのキーと同じであるキーの集約にアクセスすることができる。この例では、システム60が窓集約、移動窓集約(例えば、過去15分間にわたる集約)、期間集約(例えば、一連の定義済時間間隔にわたる集約)、相関集約(例えば、別のフィールドの最小値又は最大値に基づいて1つのフィールドの値を返す集約)等を計算する。
一例では、移動窓集約に関する集約の定義(以下、集約定義)が以下のようにテキストで表される:
各顧客について、trade.action=「buy」である場合は取引の種類のデータレコードごとに、過去15分間にわたるtrade.amountの平均を計算する。
上記のテキスト表現の下線部はシステム60によって生成される集約定義内のパラメータに対応する。この例では、システム60が以下の表1内に示すパラメータを有する集約を生成する。
上記の表1では、集約を生成する際にシステム60によって使用される様々なパラメータを集約定義が含む。パラメータ及び/又はパラメータの値の1つ又は複数は、例えばチャートの生成中に利用者によって構成され得る。例えばシステム60は、上記の表1内に示すパラメータの1つ又は複数の値を利用者が指定するユーザインタフェースを提供する。指定の値及びパラメータの種類に基づき、システム60は集約定義を生成し、その集約定義に関する集約を計算する際にその集約定義を使用する。
システム60は、例えば一連の定義済時間間隔にわたる集約を含む期間集約も計算する。期間集約のテキスト表現を以下に示す:
各顧客について、trade.action=「buy」である場合は取引の種類のデータレコードごとに、過去10分間のうちの30秒の期間ごとにtrade.amountの和を計算する。
上記のテキスト表現の下線部はシステム60によって生成されるこの期間集約に関する集約定義内のパラメータに対応する。期間集約について、システム60は表1に関して先に説明したように集約名パラメータ、データレコードの種類パラメータ、キーパラメータ、フィルタ表現パラメータ、集約関数パラメータ、フィールド又は表現パラメータを有する集約定義を生成する。加えて、この集約定義は以下の表2内に示す下記のパラメータも含む:
上記の表2内に示したパラメータは、例えばシステム60のユーザインタフェースを介して利用者によって構成され得る。加えて、システム60は返される値と集約値との間に相関が存在する相関集約を計算する。相関集約の一例を以下に示す:
各顧客について、trade.action=「buy」である場合は取引の種類のデータレコードごとに、過去20分間のうちで認められた最大trade.amountのシンボルを計算する。
この例では、システム60が指定の時間窓(即ち20分間)の中の適切なデータレコードを選択し、集約によって指定される基準(例えば、最大trade.amount)を満たすシンボル(例えば、^GSPC)を返す。システム60は多期間集約も計算し、多期間集約ではシステム60が期間集約、次いでその期間集約の結果の集約を計算する。期間集約の一例は以下の集約を含む:各顧客について、trade.action=「buy」である場合は取引の種類のデータレコードごとに、1日ごとのtrade.amountの和をまず計算し、次いで過去7日間にわたる最大の和を計算する。
システム60は、データレコードが受信されるとき、例えばデータレコードが到着するとき全てのデータレコードについて集約を計算する。これらの集約は、データレコードが受信されるときにほぼリアルタイムで計算されるため、ほぼリアルタイムの集約である。一例では、集約に関する値をチャートが検査するかどうか又は使用するかどうかに関係なくシステム60が集約を計算する。別の例では、システム60がオンデマンドで、例えばシステム60がデータレコードのストリームをアーカイブするとき集約を計算する。概して、オンデマンドの集約は要求に応じて行われる集約を含む。この例では、システム60が例えばデータレコード又はデータレコードを示すデータをデータリポジトリ内に記憶することによってデータレコードのストリームをアーカイブする。集約をオンデマンドで計算する際、システム60は適切なデータレコードの種類を求めてデータリポジトリを照会し、適切なデータレコードを読み出し、適切なデータレコードの何れが所要のデータ範囲にマッチするのかを識別し、データレコードがあたかも生で到着しているかのように集約を計算する。概して、適切なデータレコードは1つ又は複数の基準又は条件を満たすデータレコードを含む。一例では、一定の集約が稀にのみ使用される。この例では、それらの一定の集約を全ての入力データレコードについて計算するのではなく、システム60はそれらの特定の集約についてオンデマンドの集約を計算してシステム資源を節約し、データレコードの受信時にそれらの集約をリアルタイムで計算するための処理速度と比較して処理速度を高める。加えて、システム60は短い時間尺度で実行される(例えば、数日間にわたって実行される)チャートについてオンデマンドの集約を実装するが、ロジックの一部は長い時間尺度(例えば、過去数カ月)の集約を使用する。そうすることにより、システム60は(データレコードの到着時のリアルタイムでのそれらの集約の計算量と比較して)長い時間尺度にわたる高コストの継続的な集約の計算量を減らす。集約がオンデマンドの集約かほぼリアルタイムの集約かを集約定義が指定する。一部の例では、集約がほぼリアルタイムの集約かオンデマンドの集約かを利用者が(例えば、集約を定義するときにユーザインタフェース内で)指定する。
一例では、システム60が共有された規則及び集約を可能にする(例えば、ロジックがCEPシステム内の複数の規則にわたって共有される)。規則及び集約を共有することにより、システム60は、規則及び集約を共有することと独立に入力データレコードを処理する速度と比較し、自らが入力データレコードを処理することができる速度を例えば同じ集約を複数回計算することの消費がないことによって高める。例えば、システム60は複数の規則によって必要とされる集約を1回計算し、それらの集約の値をデータリポジトリ又はメモリキャッシュ内に記憶する。別の例では、システム60がノードのロジック(例えば、ノード内の決定ロジック)をデータリポジトリ内に記憶する。このロジックは、例えば他のノードによって指定される別々に保たれる他の複数の決定を計算する際に再利用することができる。
図9を参照し、グラフィカルユーザインタフェース900(例えば、編集インタフェース)はチャートを作成するための「ドラッグアンドドロップ」インタフェースを提供する。この例ではシステムが、検査又は規則(例えば、時間において隔てられたデータレコードを処理するための規則)の時系列を記述し、且つ規則又は検査の何れの部分が何れのデータレコードを処理するのかを視覚的に示すチャートを生成するためのグラフィカルプログラミングモデルを提供するためのグラフィカルユーザインタフェース900を生成する(又はグラフィカルユーザインタフェース900用のデータを提供する)。グラフィカルユーザインタフェース900を使用して利用者はフローチャート式の規則を定めることができる。
グラフィカルユーザインタフェース900は、作成されているチャートに関するデータを表示する部分902を含む。部分902は、チャートの名称を指定するための名称フィールド938、チャートの種類を指定するための種類フィールド940、並びにチャートを公に見ることができるのか私的に見ることができるのか、チャートが非待機かどうか、及びチャートがグローバルチャートかどうかを指定するための可視性コントロール942を含む。部分902は、チャートに関するキーの種類を指定するためのキーの種類フィールド944も含む。部分902は、チャートの生成又は構築対象であるキーのサンプル値を指定するための_keyValueフィールド946を含む。例えば利用者は_keyValueフィールド946を使用してキーの特定の値を選択し、そのキーの値についてチャートを(その構築時に)例えばステップコントロール(図7のステップコントロール704等)を使用することによって検査することができる。部分902は、_keyValueフィールド946内で指定されているそのキーの特定の値について実行されているチャートのインスタンスのIDを指定するためのchartIDフィールド948も含む。引数がある場合、部分902は引数フィールド950も含む。
グラフィカルユーザインタフェース900は、選択可能ノード906、908、910、912、914、916、918、920、921、922、924を含む部分904、及びフローチャートを作成するための編集ペイン952も含む。この例では、編集ペインが1つ又は複数の論理表現をノードに関連付けるための、又はノード若しくは仕様に関連する1つ又は複数の論理表現を編集するための仕様の編集可能な表示を含む。この例では、システムがグラフィカルユーザインタフェース900用のデータを生成する。
これらの選択可能ノードのそれぞれは、フローチャートにノードを追加するための編集ペイン952内に「ドラッグアンドドロップ」されるように構成される。この例では、編集ペイン952がノード926、928、930、932、934、936を含み、そのそれぞれは適切な選択可能ノードを選択し、その選択可能ノードを編集ペイン952内にドラッグアンドドロップすることによって編集ペイン952に追加される。一例では、ノードが1つ又は複数の論理表現を入力するための1つ又は複数の編集可能な部分を含む。別の例では、ノードの1つ又は複数の部分を選択することが、1つ又は複数の論理表現を入力したり1つ又は複数の論理表現を編集したりするためのグラフィカルユーザインタフェース(例えば、プロンプトボックス)を表示させる。この例では、(ノードの1つ又は複数の部分を選択することに基づいて表示される)グラフィカルユーザインタフェースがグラフィカルユーザインタフェース900に対するオーバレイとして表示される。(ノードの1つ又は複数の部分を選択することに基づいて表示される)グラフィカルユーザインタフェース内で指定される1つ又は複数の論理表現に基づき、ノードが1つ若しくは複数の論理表現及び/又はそれらの1つ若しくは複数の論理表現の視覚化を含む。別の例では、例えば1つ又は複数の論理表現を説明する文を表示することにより、ノードがもう1つの論理表現に基づく他のデータを表示する。
例えば、選択可能ノード906を選択し、矢印954によって明示するドラッグアンドドロップの横断に従って選択可能ノード906を編集ペイン952内にドラッグアンドドロップすることによってノード936が編集ペイン952に追加される。選択可能ノード906が編集ペイン952内にあると、利用者はチャートによって使用されるノード、例えばノード936へと変換するために選択可能ノード906を構成することができる。この例では、選択可能ノード906が選択可能部分906a、906b、906cを含み、そのそれぞれは実装される待機の種類を指定する。選択可能部分906aは、特定のデータレコードを待機する待機の種類を指定する。選択可能部分906bは、(複数の異なる基準の中から)少なくとも1つの基準を満たす任意のデータレコードを待機する待機の種類を指定する。選択可能部分906cは、指定の基準を共に満たす複数のデータレコードを待機する待機の種類を指定する。
この例では利用者が選択可能部分906aを選択して、ノード936が1つ又は複数の指定の基準を満たす任意のデータレコードを待機することを指定する。選択可能ノード906は、待機ノードが待機するように構成されるデータレコードの種類を示す1つ又は複数の基準を指定するデータを利用者が入力するための他の編集可能フィールド(不図示)も含む。この例では、(選択可能ノード906内に入力される)利用者によって指定される基準がノード936の部分936a、936b、936c内に表示される。(この例では部分929dが部分936a、936b、936cを含む)。この例では、利用者がノード926、928、930、932、934、936を編集ペイン952に追加して実行のためのチャートを定める。ノード926、928、930、932、934、936は、例えばノード内のロジックを編集することによって編集ペイン952内で編集することができる。一例では、システムがノード926、928、930、932、934、936の1つ又は複数の1つ又は複数の論理表現に対する1つ又は複数の編集を示すデータと、受信される1つ又は複数の論理表現にノード926、928、930、932、934、936の何れが関連するのかを指定するデータとを受信する。
この例では、エディタインタフェース900が、ノード926、928、930、932、934、936及びリンク927a〜927eを有するチャート951を表示する。エディタインタフェース900は、ノード926、928、930、932、934、936の1つ又は複数に関して1つ又は複数の論理表現を入力又は編集するための部分929a〜929dを含む。例えばエディタインタフェース900は、ノード928に関して1つ又は複数の論理表現を入力又は編集するための部分929aを含む。改変形態では、論理表現を入力又は編集するための1つ又は複数の部分がノードの外側に位置し、ノードのすぐ近くに位置し、ノードと並べられ、ノードの隣にあり、(例えば、ノードの選択及び/又はクリック後に)別のユーザインタフェース内に表示等される。この例では、ノード926、928、930、932、934、936の1つ又は複数が状態機械の特定の状態に対応する。状態機械が特定の状態にある場合のデータレコードの少なくとも部分的な処理を論理表現(例えば、「共同チャートを開始する:電子明細書の確認」及び「SendSMS_DailyLimitを呼び出す、電話:Account Details.Phone、メッセージ:「新しい電話を当てよう!YourBank.com/raffleで基準を満たした最初の1000人が特別なラッフルにエントリーされます」)が表す。特に、論理表現は、状態機械が特定の状態にある場合にデータレコードがどのように処理されるか(例えば、どのような操作が実施されるか)を表す。
この例では、ノードの1つとノードの別のものとの間のリンク(例えば、リンク927a〜927dの1つ)がある状態から別の状態への状態機械の移行を表す。この例では、データレコードが断続的に受信されるときデータレコード内の1つ又は複数のフィールドを評価してキーの値を識別するための状態機械を実装するための実行可能ロジックへと、システム11(図2)が1つ又は複数の論理表現及びチャート951を変換する。例えばシステム11はフィールドの値を連結してキーの値を作成し、フィールドの値の形式を修正してキーの値を作成し、フィールドの値にデータを付加してキーの値を作成し、フィールドの値を選択等してキーの値を作成する。キーの値ごとに、システム11はそのキーの値が基づく1つ又は複数のフィールドを含む1つ又は複数の第1のデータレコードを処理するための状態機械を実装し、その処理はそのキーの値に関する状態機械の現在の状態に対応する1つ又は複数のノードに関連する1つ又は複数の論理表現に従う。例えば状態機械がノード928に対応する状態にある場合、システムはノード928に関連する論理表現(即ち「SendSMS_DailyLimitを呼び出す、電話:Account Details.Phone、メッセージ:「新しい電話を当てよう!YourBank.com/raffleで基準を満たした最初の1000人が特別なラッフルにエントリーされます」)に対応する(又は基づく)実行可能ロジックの1つ又は複数の部分を受信したレコードに適用する。ノード926、928、930、932、934、936、リンク927a〜927e、及び論理表現から生成される状態機械も、断続的に受信されるデータレコードの1つ又は複数の第2のデータレコードを処理するための別の状態へとチャート951のリンクに従って移行する。この例では、1つ又は複数の第2のデータレコードはそのキーの値が基づく1つ又は複数のフィールドを含み且つ1つ又は複数の第1のデータレコードの後に受信される。
図10を参照し、グラフィカルユーザインタフェース1000は、チャート1034を表示するための部分1032と、例えばキーの特定の値に関する1組のレコードを用いてチャート1034を検査することの詳細を表示するための、及びチャート1034を検査するためのコントロールを表示するための部分1002とを含む。部分1002は、検査に使用されるチャートの名称を選択するための選択コントロール1004を含む。部分1002は、チャート1034を検査する際に使用される1組の検査データを選択するための選択コントロール1006も含む。この例では、1組の検査データがキーの特定の値に関連し、且つ検査に使用される一連のデータレコード(例えば、「キャンペーンサンドボックスデータレコード」)を含む。本明細書ではこの一連のデータレコード内のデータレコードを検査データレコードと呼ぶ。一例では検査データレコードが、システムによって過去に受信されたデータレコードを含む。別の例では、例えば検査データレコードを生成するために受信データレコードのコンテンツを曖昧化し又は修正することにより、検査データレコードがシステムによって受信されるデータレコードに基づく。この例では、チャート1034のキーがアカウントIDである。選択コントロール1006によって指定されるデータレコードは、部分1028内に示されている「1000000117」のアカウントIDに関連するデータレコードである。
部分1002は戻るコントロール1008も含み、その選択は例えば前のノードに戻って検査することによって検査を「戻す」ようにシステムに命令する。例えば、戻るコントロール1008を選択することは、検査されている現在のノードの直前のノードに戻って検査するようにシステムに命令する。部分1002は後退コントロール1010も含み、その選択は過去に検査されたデータレコードを用いてチャート1034を戻って検査するようにシステムに命令する。部分1002は実行コントロール1012も含み、その選択は選択コントロール1006によって指定されたデータレコードを用いて、例えばそれらのデータレコードにチャート1034を適用することによってチャート1034を検査し始めるようにシステムに命令する。部分1002は前進コントロール1014を含み、その選択は検査されているデータレコード内に含まれる次のデータレコードを用いてチャート1034を検査するようにシステムに命令する。この例ではデータレコードが一連のデータレコードを含む。そのため、前進コントロール1014を選択することは、検査のためにシーケンス内の次のデータレコードにチャート1034を適用させる。部分1002はノード先送りコントロール1016を含み、その選択はチャート1034内の次のノードの検査に進むようにシステムに命令する。部分1002は、チャート1034の検査の進捗状況を表すための時間尺度1018も含む。
部分1002は、部分1020、1022、1024、1026、1028、1030も含む。この例では部分1020が、チャート1034によって現在処理されている外部データレコードを示す現在の外部データレコードのデータを表示する。以下、部分1020を現在の外部データレコード部分1020と呼ぶ。この例では、現在処理されている外部データレコードが活動ストリーム(「AS」)待ち行列(例えば、チャート1034による処理のためにAS外部データレコードを受け入れる待ち行列)内で受信され、1000000117のアカウントIDに関連する。加えて、外部データレコードはテキストメッセージを含む、テキストによって送信されるデータレコードである。部分1022は、もしある場合は何れの出力データレコードが実行され又は処理されているのかを表示する。部分1024は、チャート1034によって何れの変数(例えば、検査されるデータレコード又はデータ項目の第1のものに関連する変数)が使用されるのか、及び関連する変数の値を表示する。部分1026は、システムが計算しチャート1034内で使用される集約を指定する。この例では、システムが「今月の合計テキスト」の集約を計算する。部分1028はチャート1034によって使用される参照データを表示する。チャート1034を実行することによって出力される結果データと参照データを比較して、それらの間の任意の潜在的なずれを識別することができる。部分1030はチャート1034によって使用される制御点を表示する。
チャート1034は、ノード1036、1038、1040、1042、1044、1048、1050、1052、及びチャート1034の何れのノードが(又は実行可能ロジックの何れの部分が)現在検査されているのかを明示するためのステータスインジケータ1046を含む。この例では、ノード1044のすぐ近くにあるステータスインジケータ1046によって明示されているように、システムがノード1044を現在検査している。システムは、現在の外部データレコード部分1020内で表されるデータレコードを用いてノード1044を検査している。この例では、ノード1044が決定ノードを含み、部分1026内で表される集約及び部分1030内で表される制御点に基づく論理表現を含む(又は表示する)。戻るコントロール1008を選択することは、1つ又は複数の過去に処理されたデータレコードを用いてノード1040を検査することにシステムを戻す。ノード先送りコントロール1016を選択することは、システムにノード1050又はノード1048及び関係するデータレコードを検査させる。コントロール1008、1016により、利用者はチャート1034の何れのノードが検査されるのかを指定することができる。
後退コントロール1010を選択することは、システムに(キーの特定の値に関連する)データレコードを後退してステップ実行させ、(検査されている一連のデータレコード内の)過去のデータレコードを検査させる。前進コントロール1014を選択することは、システムにデータレコードを前進してステップ実行させ、(例えば、1つ又は複数の適切なノードを用いて次のデータレコードを処理することによって)シーケンス内の次のデータレコードを検査させる。コントロール1008及び1014を使用し、利用者はデータレコードをステップ実行して何れのノードが何れのデータレコードに適用されるのかを識別する。利用者がデータレコードをステップ実行するとき、チャート1034を用いて特定のデータレコードを処理した結果がチャート1034と共に例えば部分1002内で表示される。例えば結果は、(部分1022内にデータが表示される)出力データレコードを生成すること、(その結果が部分1026内に表示される)集約を計算すること、(部分1024内に表示されている)変数(例えば、検査されるデータレコード又はデータ項目の第1のものに関連する変数)の値を設定すること等を含み得る。例えばデータレコードを処理することが現在のノードの変更をもたらすのかどうかを表すステータスインジケータ1046を表示することにより、部分1032はデータレコードを処理した結果も表示する。
この例では、ステータスインジケータ1046は、何れのノード(又は何れの実行可能ロジック)が実行されているのか及びデータレコードがどのように(例えば、どのような順序で、何れの実行可能ロジックと共に、及び/又は何れの結果データをレンダリングして)処理されているのかについての視覚的指示を提供することにより利用者がチャート1034を検査することを可能にする。グラフィカルユーザインタフェース1000は、現在処理されているデータ項目又はデータレコード、データ項目又はデータレコードに現在適用されている実行可能ロジック、及び/又はデータ項目若しくはデータレコードに実行可能ロジックを適用することによってレンダリングされる結果データについてのインジケータを提供する。それにより結果データは、適用される実行可能ロジック内で指定されるプログラム命令に従ってデータ項目又はデータレコードを処理することの出力としてレンダリングされ得る。本明細書に記載の1つ又は複数のフィードバック手段は、基礎を成すシステムを適切に動作させる際に又は基礎を成すシステムが適切に動作しているかどうかを評価する際に利用者を直接サポートする。
例えば、ストリームのデータ項目の第1のもののユーザ選択(1006)を受信することができ、データ処理システムによって現在処理されているストリームのデータ項目の第1のものの指示を表示させることができ、結果データを得るためにデータ項目の第1のものに現在適用されている実行可能ロジックの1つ又は複数の部分の指示を表示させることができる。
例えば、結果データの一部を所定の参照データ(1022又は1028)と比較することができる。結果データの一部と所定の参照データとの間にずれが存在するかどうか又はかかるずれが存在しないかどうかを判定することができ、結果データの一部と所定の参照データとの間にずれが存在するかどうか又はかかるずれが存在しないかどうかを判定することに基づいて結果データの一部が所定の参照データと合致するかどうかの指示を出力することができる。
例えば、データ処理システムによって現在処理されているストリームのデータ項目の第1のものを所定の参照データ項目(1006又は1028)と比較することができ、現在処理されているストリームのデータ項目の第1のものと所定の参照データ項目との間にずれが存在するかどうか又はかかるずれが存在しないかどうかを判定することができ、現在処理されているストリームのデータ項目の第1のものと所定の参照データ項目との間にずれが存在するかどうか又はかかるずれが存在しないかどうかを判定することに基づいて現在処理されているストリームのデータ項目の第1のものが所定の参照データ項目と合致するかどうかの指示を出力することができる。
例えば、結果データを得るためにデータ項目の第1のものに現在適用されている実行可能ロジックの1つ又は複数の部分を所定の参照実行可能ロジックと比較することができ、データ項目の第1のものに現在適用されている実行可能ロジックの1つ又は複数の部分と所定の参照実行可能ロジックとの間にずれが存在するかどうか又はかかるずれが存在しないかどうかを判定することができ、データ項目の第1のものに現在適用されている実行可能ロジックの1つ又は複数の部分と所定の参照実行可能ロジックとの間にずれが存在するかどうか又はかかるずれが存在しないかどうかを判定することに基づき、結果データを得るためにデータ項目の第1のものに現在適用されている実行可能ロジックのその又は複数の部分が所定の参照実行可能ロジックと合致するかどうかの指示を出力することができる。
本明細書で「ずれ」という表現を使用する場合、それぞれの参照に対する準拠又は合致を判定するために一定の許容差の範囲内にあるずれを認めることができる。或いは、それぞれの参照に対する準拠又は合致を判定するために、それぞれの参照に対する厳密な一致が要求される場合がある。
例えばステータスインジケータ1046が特定のノードに全く関連しない場合、そのノードが論理的に矛盾した表現を含み得るか、又はノードが実行されることを妨げる基準に関連することを利用者が警告される。加えて、ステータスインジケータ1046はデータレコードがどのようにフローチャート1034の全体を通して処理されるのかを明示する。この例では、データレコードがある方法で(例えば、グラフを通る特定の経路を横断することによって)処理されることを利用者が期待するが、データレコードが異なる方法で処理されることをステータスインジケータ1046が明示する場合、利用者はチャート1034の全体を通してデータレコードを処理する所望の方法を実現するために、チャート1034内の1つ又は複数のノードを修正することができ又は(例えば、実行可能ロジック内の)ノードに関連する論理表現を修正することができる。要約すれば、基礎を成すシステムを適切に動作させる際に利用者を支援するために、(i)正しい実行可能ロジックが(ii)正しいデータ項目又はデータレコードに(iii)正しく適用されたかどうかのフィードバックが例えば部分1022、1024、1026、1028、1030、及びインジケータ1046によって提供される。
図11を参照し、システムはキーに関連する仕様に従ってデータ項目のストリームのデータ項目(例えば、データレコード)を処理するためのプロセス1100を実行する。データ項目は、例えばデータ項目に含まれるコンテンツがデータリポジトリ内でキーの値に関連することによってキーの値に関連する。この例では、システムがキーのそれぞれの値について仕様の状態を保つ。仕様は実行可能ロジックを表し、システムによってデータ記憶システム内に記憶される。
動作面では、システムが実行可能ロジックを表す仕様にアクセスする(1102)。この例では、キーの特定の値に関する仕様の状態がその状態において実行可能な実行可能ロジックの1つ又は複数の部分を指定する。システムは、データのストリームのデータ項目、例えばネットワーク接続経由のデータ項目を入力装置又はポート上で受信する(1104)。ストリームのデータ項目の第1のものについて、システムはそのデータ項目の第1のものに関連するキーの値に関する仕様の第1の状態を識別する(1106)。システムは、第1の状態に関連するものとして仕様内で表される実行可能ロジックの1つ又は複数の部分に従ってデータ項目の第1のものを処理する(1108)。システムは、仕様の1つ又は複数の部分を例えばグラフィカルユーザインタフェース内に表示させる(1110)。システムは、実行可能ロジックの1つ又は複数の部分をデータ項目の第1のものに適用して結果データを取得し(1112)、例えば結果データを得るために実行可能ロジックの入力としてデータ項目の第1のものを使用して実行される実行可能ロジックの1つ又は複数の部分は、実行後の実行可能ロジックの出力である。システムは、例えば仕様内のノードと並べて結果データを表示することによって、グラフィカルユーザインタフェースの結果を表示するための部分内に結果データを(グラフィカルユーザインタフェースの別の部分が仕様の1つ又は複数の部分を表示した状態で)表示することによって等、仕様の1つ又は複数の部分の少なくとも1つを表示した状態で結果データの少なくとも一部を表示させる(1114)。システムは、データ項目の第1のものに関するキーの値に関して(例えば、このキーの値に関してのみ)、例えば(そのキーの値に関する状態を記憶するための)メモリ内データグリッドの一部、例えば揮発性メモリ内に記憶されるデータ構造をそのキーの値に関するチャートの現在位置を示すデータで更新することにより、仕様を第1の状態から第2の状態に移行させることも行う。データがハードディスク等の電気機械的大容量記憶媒体に記憶される場合のシステムの処理速度と比較し、メモリ内データグリッドを使用することによってシステムの処理速度が高まる。メモリ内データグリッドを使用することにより、システムはハードディスクとの間でデータを読み書きするよりも迅速にメモリとの間でデータを読み書きする。加えて、メモリ内データグリッドのキー/値データ構造は、例えば関係データ構造(例えば、ストリングや有向グラフ等)に関する取り出し時間と比較して一層速いデータ取り出し時間を可能にする。概して、キー−値構造はアレイを有するデータ構造を含み、アレイはキー及びそのキーの値(又はキーのハッシュ値)を含む。
図12を参照し、システムはキーに関連する仕様に従ってデータ項目のストリームのデータ項目を処理する際にプロセス1200を実装する。この例では、データ項目は、キーの値に関連する。システムはキーのそれぞれの値について仕様の状態を保つ。加えて、仕様はデータ記憶システム内に記憶されている実行可能ロジックを表す。
動作面では、システムが実行可能ロジックを表す仕様にアクセスする(1202)。この例では、キーの特定の値に関する仕様の状態がその状態において実行可能な実行可能ロジックの1つ又は複数の部分を指定する。システムがデータのストリームのデータ項目を入力装置又はポート上で受信する(1204)。ストリームのデータ項目の第1のものについて、システムはそのデータ項目の第1のものに関連するキーの値を例えば先に説明したようにデータレコードのコンテンツに基づいて又はデータレコード内に含まれる値に基づいて識別する(1206)。システムは、仕様がそのキーの値に関する待機状態に関連することも識別する(1208)。待機状態では、実行可能ロジックはそのキーの値に関連し、且つストリーム内の1つ又は複数のデータ項目の前に位置する1つ又は複数の他のデータ項目から時間において隔てられる1つ又は複数のデータ項目を待機する。この例では、システムはキーの値に関連する状態データを(例えば、メモリ内データグリッド内で)探索することによって仕様が待機状態にあることを識別する。この例では、状態データは現在のノードが待機ノードであることを指定し、或いは現在の状態が待機状態であることを指定する。
システムは、待機状態に関連するものとして仕様内で表される実行可能ロジックの1つ又は複数の部分に従ってデータ項目の第1のものを処理する(1210)。システムは、待機状態に関連する実行可能ロジックの1つ又は複数の部分に従ってデータ項目の第1のものを処理した結果を示すデータの少なくとも一部(例えば、ステータスインジケータや出力データレコードを示すデータ等)を表示させる(1212)。
図13を参照し、システムは、キーに関連し、且つ実行可能ロジックを表す仕様に従ってデータのストリームのデータ項目を処理するためのプロセス1300を実装する。この例では、データ項目は、キーの値に関連する。システムはキーのそれぞれの値について仕様の状態を保つ。
動作面では、システムが実行可能ロジックを表す仕様にアクセスする(1302)。この例では、キーの特定の値に関する仕様の状態がその状態において実行可能な実行可能ロジックの1つ又は複数の部分を指定する。この例では、仕様が論理表現、ノード、及び1つ又は複数のリンクを含む。第1のノード(例えば、図1Aのノード2a、2b、2c)はキーの値に関する仕様(又は実行可能ロジック)の第1の状態を表し、第1の状態では実行可能ロジックの第1の部分がそのキーの値に関連するデータ項目の第1のものに対して実行可能である。第1のノードの少なくとも1つは、実行可能ロジックの第1の部分に少なくとも部分的に対応する1つ又は複数の第1の論理表現(例えば、図4の部分120b内の論理表現)に基づく第1の視覚化を含む。
1つ又は複数の第2のノード(例えば、ノード2d、2e、2f)はキーの値に関する仕様(又は実行可能ロジック)の第2の状態を表し、第2の状態では実行可能ロジックの第2の部分がそのキーの値に関連し、且つストリーム内のデータ項目の第1のものの後に配置されるデータ項目の第2のものに対して実行可能である。この例では、第1のノードの1つと1つ又は複数の第2のノードの1つとの間のリンク(例えば、図1Aのリンク2i)が、そのキーの値に関する第1の状態から第2の状態への仕様(又は実行可能ロジック)の移行を表す。
システムは、仕様内の論理表現を実行可能ロジックに変換する(1304)。例えばデータフローグラフ又はチャートは、頂点間の有向リンク(作業要素、即ちデータのフローを表す)によってつながれる頂点(データ処理コンポーネント又はデータセットを表す)を含む。かかるデータフローグラフを実行するためのシステムは、参照によりその全内容を本明細書に援用する「グラフとして表現される計算の実行(Executing Computations Expressed as Graphs)」と題された米国特許第5,966,072号に記載されている。このシステムに従って作成されるデータフローグラフは、グラフコンポーネントによって表される個々のプロセスの内外にデータを出し入れするための、プロセス間でデータを移動するための、及びプロセスの実行順序を定めるための方法を提供する。このシステムは、プロセス間の通信方法を利用可能な任意の方法から選択するアルゴリズムを含む(例えば、グラフのリンクによる通信経路はTCP/IP若しくはUNIXドメインソケットを使用することができ又はプロセス間でデータを移すために共用メモリを使用することができる)。
キーの値ごとに、そのキーの値に関する状態が第1の状態を含む場合、第1の状態に関連する第1のノード(例えば、図1Aのノード2a、2b、2c)によって表される実行可能ロジックの第1の部分をそのキーの値を有する第1のデータ項目に対して実行可能である。実行可能ロジックは、第1の部分の実行後に第1の状態から第2の状態へのリンク(例えば、図1Aのリンク2i)によって表される移行を行うように構成される。そのキーの値に関する状態が第2の状態を含む場合、1つ又は複数の第2のノード(例えば、図1Aのノード2d、2e、2f)によって表される実行可能ロジックの第2の部分をそのキーの値を有する第2のデータ項目に対して実行可能である。この例では、システムがデータのストリームのデータ項目を受信する(1306)。キーの特定の値について、システムはそのキーに関連する状態を識別する。この例では、キーがノード2a、2b、2cを含む第1の状態に関連する。システムは現在位置を更に探索し、ノード2a、2b、2cの何れが現在のノードなのかを識別する。この例ではノード2cが現在のノードである。
システムは、そのキーの値に関する状態が(例えば、メモリ内データグリッド内のそのキーの値に関するデータ構造において表されたように)実行可能ロジックの第1の部分に関連する第1の状態を含む場合、そのキーの値を有する第1のデータ項目に対して第1の部分を実行する(1308)。この例では、そのキーの値に関する状態が(ノード2cによって表される実行可能ロジックの1つ又は複数の部分に関連する)第1の状態であり、現在位置がノード2cであるため、システムはノード2cによって表される実行可能ロジックの一部を実行する。
一例では、第2のノードの1つが、そのキーの値を有するデータ項目の第2のものを待機するように構成される実行可能ロジックの一部を表す待機ノードを含む。この例では、第2のノードの別のもの(例えば、図1Aの送信ノード2e)が、例えばメッセージの送信等の1つ又は複数のアクションの実行を引き起こすように構成される実行可能ロジックの別の部分を表す。この例でリンク2iは、第1の部分が実行可能である第1の状態から、データ項目の第2のものを待機するように実行可能ロジックが構成される第2の状態へのそのキーの値に関する仕様の状態移行を表す。
図14を参照し、システムは、キーに関連し、且つデータ項目を処理するための実行可能ロジックを表す仕様に従ってデータのストリームのデータ項目を処理する際にプロセス1400を実装する。この例では、データ項目は、キーの値に関連する。システムはキーの複数の値について状態を(例えば、メモリ内データグリッド内に)保つ。
動作面では、システムが仕様にアクセスする(1402)。仕様の状態は、その状態において実行可能な実行可能ロジックの1つ又は複数の部分を表す。システムは、データ項目の第1のデータ項目を受信する(1404)。データ項目は入力データストリームの一部、例えばネットワーク接続経由で受信されるデータ項目であり得る。この第1のデータ項目はキーの特定の値に関連する。システムは、キーの特定の値に関する第1の状態を識別する(1406)。システムは、第1の状態において実行可能であるものとして仕様によって指定される実行可能ロジックの1つ又は複数の部分に従って(例えば、それを実行することによって)第1のデータ項目を処理する(1408)。システムは、仕様の第1の状態から実行可能ロジックの1つ又は複数の他の部分が実行可能である第2の状態へのキーの特定の値に関する移行を識別する(1410)。システムは、キーの特定の値と異なり且つキーの特定の値に関連しないキーの別の値に関連する介在データ項目を受信する(1412)。システムは、介在データ項目に関するキーの他の値に関連する仕様の所与の状態を識別する(1414)。システムは、所与の状態において実行可能であるものとして仕様によって指定される実行可能ロジックの1つ又は複数の部分に従って介在データ項目を処理する(1416)。システムは、第1のデータ項目及び介在データ項目よりもストリーム内で後の且つキーの特定の値にも関連するデータ項目の第2のデータ項目を受信する(1418)。キーの特定の値に関する仕様の移行に基づき、システムは第2の状態において実行可能であるものとして仕様によって指定される実行可能ロジックの1つ又は複数の部分に従って第2のデータ項目を処理する(1420)。第2の状態において実行可能な実行可能ロジックの1つ又は複数の部分は、第1の状態において実行可能な実行可能ロジックの1つ又は複数の部分と異なる。例えば、ノード2d、2e、2f(図1A)によって表される第2の状態において実行可能な実行可能ロジックの1つ又は複数の部分は、ノード2a、2b、2c(図1A)によって表される第1の状態において実行可能な実行可能ロジックの1つ又は複数の部分と異なる。
図15を参照し、システムは、キーの値ごとにその値に関連するデータレコードを処理するように構成される状態機械を実装するためのプロセス1500を実装する。動作面では、システムは(i)ノードと1つ又は複数のリンクとを有するチャート、及び(ii)ノードの1つ又は複数に関して1つ又は複数の論理表現を入力又は編集するための1つ又は複数の部分を1つ又は複数のエディタインタフェース内に表示する(1502)。この例では、ノードの1つ又は複数が状態機械の特定の状態に対応する。例えば決定ノードは、実行可能ロジックが決定を実施する特定の状態を表す。別の例では、待機ノード及び待機後に行うための1つ又は複数のアクションを指定する別のノードが状態機械の別の状態を表す。この例では、状態機械が特定の状態にある場合のデータレコードの少なくとも部分的な処理を論理表現が表す。例えばシステムが待機すべきデータレコードの種類及びシステムが待機しているデータレコードの検出時に実行すべき1つ又は複数のアクションを指定する表現を含め、様々な種類の論理表現がある。この例では、ノードの1つとノードの別のものとの間のリンクがある状態から別の状態への状態機械の移行を表す。
システムは、状態機械を実装するための実行可能ロジックへと1つ又は複数の論理表現及びチャートを変換する(1504)。状態機械を実装するための実行可能ロジックを実行することに基づいて及びデータレコードが断続的に受信されるとき、システムはデータレコード内の1つ又は複数のフィールドを評価してキーの値を識別する(1506)。キーの値ごとに、システムはそのキーの値が基づく1つ又は複数のフィールドを含む1つ又は複数の第1のデータレコードを処理し(1508)、その処理はそのキーの値に関する状態機械の現在の状態に対応する1つ又は複数のノードに関連する1つ又は複数の論理表現に従う。一部の例では、システムはデータレコードが断続的に受信されるときこの処理を実行する。キーの値ごとに、システムは断続的に受信されるデータレコードの1つ又は複数の第2のデータレコードを処理するための別の状態にチャートのリンクに従って更に移行し(1510)、1つ又は複数の第2のデータレコードはそのキーの値が基づく1つ又は複数のフィールドを含み且つ1つ又は複数の第1のデータレコードの後に受信される。一部の例では、システムはデータレコードが断続的に受信されるときこの移行を実行する。
一部の例では、システムが実行可能ロジックの状態を示すデータをキーの値ごとにデータリポジトリ内に保存し記憶する。次いで、システムが同じキーの値に関連する追加のデータレコードを検出すると、システムはデータベースの探索を行ってそのキーの値に関する実行可能ロジックの状態を識別する。そのキーの値に関する実行可能ロジックの状態に基づき、システムはその状態においてデータレコードに対して実行すべき更なる処理があるかどうか、又は新たな次の状態に移行するかどうかを決定する。キーの値ごとに実行可能ロジックを実行するのではなくキーの値ごとに状態を保つことにより、システムはシステム資源(例えば、メモリや処理能力等)を節約する。加えて、実行可能ロジックがキーの特定の値に関する新たな状態に移行すると、システムは古い状態の値をメモリから削除し、それにより状態機械の実行及び実装に必要なメモリの総量を減らす。
加えて、ノードの1つ又は複数に関して1つ又は複数の論理表現を入力又は編集するための1つ又は複数の部分は、入力又は編集するための部分とは独立に又はかかる部分なしに状態機械を編集する柔軟性と比較し、例えばキー付き状態機械等の状態機械を構成し編集する際の柔軟性を一層高めることを可能にする。状態機械を起動する前に様々な状態及び状態間の関係を広範にモデリングし構成するのではなく、本明細書に記載の編集インタフェースはそのような事前の作業なしに起動することができ、且つ代わりにその場で構成することができる状態機械の実装を可能にする。
本明細書に記載の技法を使用し、システムは、時間において隔てられたデータレコードをほぼリアルタイムで処理するためのグラフィカルプログラミングモデルを提供する。データレコードをキーに基づいて処理するため、この処理はキーベースの処理である。一例では、キーの特定の値に関連するデータレコードが一緒に分析され処理される。加えてシステムは、システムによって受信されるデータレコードに対してチャート内で定められる実行可能ロジックを適用した結果を示す結果データを表示することにより、時間的に焦点を絞った検査を可能にする。この結果データは、結果データが生成されるチャート内のノードに対して結果データの各項目を並べて表示しながらチャート内に表示することができる。加えてシステムは、チャートのキーの値に関する検査結果を利用者がステップ実行できるようにすることによってより粒度の細かいビューも利用者に提供する。この例では、システムがキーの特定の値に関連するデータレコードに対して実行可能ロジックを実行した結果を例えばチャートに対するオーバレイとして提供する。
上記の技法はコンピュータ上で実行するためのソフトウェアを使用して実装することができる。例えばソフトウェアは、(分散、クライアント/サーバ、グリッド等の様々なアーキテクチャのものとすることができる)1つ又は複数のプログラムされた又はプログラム可能なコンピュータシステム上で実行される1つ又は複数のコンピュータプログラムによって手続きを形成し、かかるコンピュータシステムは、少なくとも1つのプロセッサ、少なくとも1つのデータ記憶システム(揮発性及び不揮発性のメモリ及び/又は記憶素子を含む)、少なくとも1つの入力装置又はポート、及び少なくとも1つの出力装置又はポートをそれぞれ含む。ソフトウェアは、例えばチャート及びフローチャートの設計及び構成に関係する他のサービスを提供するより大きいプログラムの1つ又は複数のモジュールを形成し得る。チャートのノード、リンク、及び要素は、コンピュータ可読媒体内に記憶されるデータ構造又はデータリポジトリ内に記憶されるデータモデルに準拠する他の編成済みデータとして実装することができる。
本明細書に記載した技法はデジタル電子回路、又はコンピュータハードウェア、ファームウェア、ソフトウェア、若しくはその組合せによって実装することができる。機器はプログラム可能なプロセッサによって実行するために機械可読記憶装置(例えば、非一時的機械可読記憶装置、機械可読ハードウェア記憶装置等)の中に有形に具体化され又は記憶されるコンピュータプログラム製品によって実装することができ、方法のアクションは、入力データに作用して出力を生成することによって機能を実行するために命令のプログラムを実行するプログラム可能なプロセッサによって実行され得る。本明細書に記載した実施形態及び特許請求の範囲に記載の他の実施形態並びに本明細書に記載した技法は、データ及び命令をデータ記憶システムとの間でやり取りするために結合される少なくとも1つのプログラム可能なプロセッサと、少なくとも1つの入力装置と、少なくとも1つの出力装置とを含むプログラム可能なシステム上で実行可能な1つ又は複数のコンピュータプログラムによって有利に実装することができる。各コンピュータプログラムは高水準手続き型プログラミング言語若しくはオブジェクト指向プログラミング言語、又は所望の場合はアセンブリ言語若しくは機械言語によって実装することができ、何れにしても言語はコンパイラ型言語又はインタープリタ型言語とすることができる。
コンピュータプログラムを実行するのに適したプロセッサは、汎用マイクロプロセッサ及び専用マイクロプロセッサの両方、並びに任意の種類のデジタルコンピュータの1つ又は複数の任意のプロセッサを例として含む。概して、プロセッサは読取専用メモリ若しくはランダムアクセスメモリ又はその両方から命令及びデータを受信する。コンピュータの必須要素は、命令を実行するためのプロセッサ並びに命令及びデータを記憶するための1つ又は複数のメモリ装置である。概してコンピュータはデータを記憶するための1つ又は複数の大容量記憶装置、例えば磁気ディスク、光磁気ディスク、光ディスクも含み、又はそこからデータを受信するために、そこにデータを転送するために、若しくはその両方を行うためにそれらに動作可能に結合される。コンピュータプログラム命令及びデータを具体化するためのコンピュータ可読媒体は、半導体メモリ装置、例えばEPROM、EEPROM、フラッシュメモリ装置、磁気ディスク、例えば内蔵ハードディスクやリムーバブルディスク、光磁気ディスク、及びCD ROMディスクやDVD−ROMディスクを例として含むあらゆる形式の不揮発性メモリを含む。プロセッサ及びメモリは専用論理回路によって補うことができ又は専用論理回路に組み込むことができる。上記のものの何れもASIC(特定用途向け集積回路)によって補うことができ又はASICに組み込むことができる。
利用者との対話を可能にするために、利用者に情報を表示するためのディスプレイ装置、例えばLCD(液晶ディスプレイ)モニタ、並びに利用者がそれによりコンピュータに入力を与えることができるキーボード及びポインティング装置、例えばマウスやトラックボールを有するコンピュータ上で実施形態を実装することができる。利用者との対話を可能にするために他の種類の装置も使用することができ、例えば利用者に与えられるフィードバックは任意の形式の感覚フィードバック、例えば視覚フィードバック、聴覚フィードバック、触覚フィードバックとすることができ、利用者からの入力は音響入力、音声入力、又は触覚入力を含む任意の形式で受信することができる。
実施形態は、例えばデータサーバとしてバックエンドコンポーネントを含む計算システムによって、ミドルウェアコンポーネント、例えばアプリケーションサーバを含む計算システムによって、フロントエンドコンポーネント、例えば利用者がそれにより実施形態の実装と対話することができるグラフィカルユーザインタフェースやウェブブラウザを有するクライアントコンピュータを含む計算システムによって、又はかかるバックエンドコンポーネント、ミドルウェアコンポーネント、若しくはフロントエンドコンポーネントの任意の組合せを含む計算システムによって実装することができる。システムのコンポーネントは、デジタルデータ通信の任意の形式又は媒体、例えば通信ネットワークによって相互接続され得る。通信ネットワークの例はローカルエリアネットワーク(LAN)及び広域ネットワーク(WAN)、例えばインターネットを含む。
システム及び方法又はその一部は、ハイパーテキスト転送プロトコル(HTTP)を利用するインターネット上のサーバの集合である「ワールドワイドウェブ」(ウェブ又はWWW)を使用し得る。HTTPは、テキスト、グラフィックス、画像、音声、ビデオ、ハイパーテキストマーク付け言語(HTML)、プログラム等の様々な形式の情報であり得る資源へのアクセスを利用者に提供する既知のアプリケーションプロトコルである。利用者によってリンクが指定されると、クライアントコンピュータがウェブサーバにTCP/IPリクエストを行い、HTMLに従ってフォーマットされた別のウェブページであり得る情報を受信する。利用者は画面上の指示に従うことによって、特定のデータを入力することによって、又は選択されたアイコンをクリックすることによって同じサーバ又は他のサーバ上の他のページにアクセスすることもできる。所与のコンポーネントに関する選択肢を利用者が選択できるようにするために、ウェブページを使用する実施形態にはチェックボックスやドロップダウンボックス等、当業者に知られている任意の種類の選択デバイスを使用できることにも留意すべきである。UNIXマシンを含めサーバは様々なプラットフォーム上で実行されるが、Windows 2000/2003、Windows NT、Sun、Linux、Macintosh等の他のプラットフォームも使用され得る。コンピュータの利用者はFirefox、Netscape Navigator、Microsoft Internet Explorer、Mosaicブラウザ等のブラウジングソフトウェアを使用することによってウェブ上のサーバ又はネットワーク上で入手可能な情報を閲覧することができる。計算システムはクライアント及びサーバを含み得る。クライアントとサーバとは概して互いに離れており、典型的には通信ネットワークを介して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行され互いにクライアント−サーバ間の関係を有するコンピュータプログラムによって生じる。
他の実施形態も本明細書及び特許請求の範囲の範囲及び趣旨に含まれる。例えばソフトウェアの性質により、上記の機能はソフトウェア、ハードウェア、ファームウェア、ハードワイヤリング、又はそれらのものの何れかの組合せを使用して実装することができる。機能の一部が様々な物理的位置に実装されるように、機能を実装する特徴は分散させることを含め様々な位置に物理的に配置することもできる。本明細書及び本願の全体を通して「1つの(a)」という語を使用することは限定的な意味で使用するのではなく、従って「1つの(a)」という語について複数の意味又は「1つ又は複数」の意味を排除することは意図しない。加えて、仮特許出願に対して優先権が主張される限りにおいて、仮特許出願は限定的ではなく本明細書に記載した技法をどのように実装し得るのかについての例を含むことを理解すべきである。
本発明の幾つかの実施形態を説明してきた。それでもなお、特許請求の範囲及び本明細書に記載した技法の趣旨及び範囲から逸脱することなしに様々な修正を加えることができることを当業者なら理解されよう。