(57)【要約】  パターンを識別するためのシステムおよび方法。本発明の方法は、パターン記述が第１イベントおよび第１イベントと関係する第２イベントのシリーズを定義するパターン記述をコンパイルする。第１イベントが受け取られ、それはタイプパラメータデータ、タイムパラメータデータ、およびサブスタンスパラメータデータを含む。本発明のシステムは、第１スクリプトを第１イベントに関連付けるか、または添付するためのスクリプトコンポーネントを含む。第１スクリプトは、第２イベントのタイプ、タイム、およびサブスタンスの各パラメータを、パターン記述に従って第１イベントのパラメータの関数として定義する。パターン認識エンジンは、添付された第１スクリプトを実行し、実行されたスクリプトは第２イベントを識別し、それによってパターンを認識する。
2008546054.tif 000002
【特許請求の範囲】
【請求項１】
パターンを識別するための方法であって、
第１イベントおよび第１イベントに関係する第２イベントのシリーズを定義しているパターン記述をコンパイリングすること、
タイプパラメータデータ、時間パラメータデータ、およびサブスタンスパラメータデータを含む第１イベントを受け取ること、
前記第１イベントに、第２イベントのタイプ、時間、およびサブスタンスパラメータをパターン記述による第１イベントのパラメータ関数として定義する第１スクリプトを添付すること、
第１イベントに添付された第１スクリプトを実行することを含み、
前記実行されたスクリプトは、第２イベントを識別することによってパターンを識別することを特徴とする方法。
【請求項２】
前記実行することは、第２イベントのパラメータと第１イベントとを相互に関係付け、第２イベントがパターン記述に従って定義されたシリーズに属するか判定することを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記実行することは、第１イベントのパラメータデータおよび識別されたパターンに関係するデータを、パラメータデータおよび識別されたパターンに関係するデータを分析するための計算環境に出力することを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記第１スクリプトを前記第１イベントに添付することは、第１イベントのタイプ、時間、およびサブスタンスパラメータと第２イベントの関係するタイプ、時間、およびサブスタンスパラメータを比較することによって第２イベントのタイプ、時間、およびサブスタンスパラメータを定義することを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記識別されたパターンを、分析のためにデータ構造に記憶することを更に含むことを特徴とする請求項１に記載の方法。
【請求項６】
第１イベントの１つ又は複数のパラメータデータが、コンパイルされたパターン記述に従って第２イベントまたはシリーズ中の追加イベントの１つ又は複数のパラメータデータと関係する時に、コンパイルされたパターン記述および第１イベントに添付されたスクリプトに応えて、定義されたシリーズのコピーを作ることを更に含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記パターン記述は、第１イベント、第２イベント、ならびに第１および第２イベントに関係する第３イベントのシリーズを定義し、前記添付することは、第２イベントに第２スクリプトを添付することを含み、前記第２スクリプトが第３イベントのタイプ、時間、およびサブスタンスパラメータを、パターン記述に従って第２イベントのパラメータの関数として定義し、且つ実行段階が第２イベントに添付された第２スクリプトを実行することを含み、前記実行スクリプトが第３イベントを識別し、それによってパターンを識別することを特徴とする請求項１に記載の方法。
【請求項８】
１つ又は複数のコンピュータ可読媒体が、請求項１に記載の方法を実施するためのコンピュータ実行可能命令を記録することを特徴とする請求項１に記載の方法。
【請求項９】
イベントパターンを識別するためのコンピュータ実行可能コンポーネントを記録する１つ又は複数のコンピュータ可読媒体であって、
前記コンピュータ実行可能コンポーネントは、
複数のパターン記述をコンパイリングするためのパターンコンパイリングコンポーネントであって、前記パターン記述のそれぞれが連続するイベントのシリーズを定義しているコンポーネントと、
複数のイベントを収集するためのイベントコンポーネントであって、前記各複数のイベントが各複数のイベントに関係するデータパラメータを有するコンポーネントと、
各複数のイベントにスクリプトを関連付けするためのスクリプトコンポーネントであって、前記スクリプトが各複数のイベントのパターン記述に従って、各複数イベントシリーズ中の後続イベントのデータパラメータを定義するコンポーネントと、
各複数のイベントのスクリプトを実行してシリーズ中の後続イベントを識別することによってパターンを識別するパターン認識エンジンと
を含むことを特徴とするコンピュータ可読媒体。
【請求項１０】
前記パターン記述は、パターン名、イベントリファレンス、イベントフィルタリング、イベントシーケンス、イベントタイムアウト予想、イベント相関関係、および出力結果の１つ又は複数を含むことを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１１】
前記パターン認識エンジンは、第２イベント中のデータパラメータを第１イベントと相互に関連付けして、第２イベントがパターンコンパイラによって定義されているパターン記述に従って定義されたシリーズに属するか判定することを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１２】
前記パターン認識エンジンを管理するためのホスト環境を更に含み、前記ホスト環境は、インメモリホスト環境、ファイルベースのホスト環境、およびＳＱＬベースのホスト環境の少なくとも１つを含むことを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１３】
前記パターン認識エンジンは、パラメータデータおよび識別されたパターンに関係するデータを更に処理するために、各複数イベントのパラメータデータおよび識別されたパターンに関係するデータを前記ホスト環境に出力することを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１４】
前記ＳＱＬベースのホスト環境は、パターン認識エンジンによって出力された各複数イベントのパラメータデータおよび識別されたパターンに関係するデータをデータベース内に記憶し、データベース内に記憶されたデータを検索するためのユーザからのクエリを受け取ることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１５】
前記パターン認識エンジンは、イベントの１つ又は複数のパラメータデータと定義されたシリーズ中の追加イベントの１つ又は複数のパラメータデータとが関係する場合に、パターンコンパイリングコンポーネントによってコンパイルされたパターン記述、および定義されたシリーズ中のイベントにスクリプトコンポーネントによって添付されたスクリプトに応えて定義されたシリーズのコピーを更に作成することを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１６】
複数のイベント中のあるパターンを識別するためのシステムであって、
関係イベントをパターンイベントのシリーズとして収集するための複数の収集コンピュータと、
収集した各シリーズ中からパターンの第１部分を識別するためのコンピュータの第１セットであって、収集された各シリーズはパターンイベントのシリーズの第１部分と一致する第１セットと、
第１セットによってパターンの第１部分が識別された各シリーズについてパターンの第２部分を識別するためのコンピュータの第２セットと
を備え、
パターンの第１部分およびパターンの第２部分は、パターンイベントのシリーズに一致し、且つパターンの第１および第２部分を含むイベントの各シリーズは、評価のために蓄積および記憶されることを特徴とするシステム。
【請求項１７】
クエリに応えて蓄積および記憶したパターンを検索するために、ユーザからのクエリを受け取るためのインターフェイスを更に備えたことを特徴とする請求項１６に記載のシステム。
【請求項１８】
コンピュータの第１セットおよびコンピュータの第２セットは、識別されたパターンの第１部分および識別されたパターンの第２部分を相互に関係付けるためのパターン認識エンジンを含むことを特徴とする請求項１６に記載のシステム。
【請求項１９】
コンピュータの第１セットおよびコンピュータの第２セットは、複数のパターン記述を記憶し、複数のパターン記述のそれぞれは、パターンイベントの各シリーズに対応することを特徴とする請求項１６に記載のシステム。
【請求項２０】
コンピュータサーバの第２セットは、コンピュータサーバの第１セットによってシリーズの第１部分に識別されたイベントの１つ又は複数のパラメータデータがコンピュータサーバの第２セットによってシリーズの第２部分に識別されたイベントの１つ又は複数のパラメータデータと関係する時に、パターン記述およびシリーズ中に集められたイベントに添付されたスクリプトに応えて収集された各シリーズのコピーを作成することを特徴とする請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施態様は、イベントストリーム（ｅｖｅｎｔ ｓｔｒｅａｍ）の処理の分野に関する。具体的には、本発明の実施態様は、複数のイベントの中にあるパターンを識別することに関する。
【背景技術】
【０００２】
企業はアプリケーションを備えたコンピュータシステムを使用して、ビジネス活動および取引を監視および処理している。例えば、オンラインストアの売上げ会計は、ビジネスアプリケーションを用いて、オンライン販売注文を受け取り、在庫アプリケーションを用いて、在庫管理を行い、仕入れ先と連絡するか、または他のアプリケーションもしくはサービスを使用して、オンラインインターフェイスを創出している。複雑な取引および活動を扱っている企業体は、分散型のコンピュータシステムを使用することもある。例えば、クレジットカードやＡＴＭ取引を扱う金融機関は、１０分毎に何千もの取引を受けることがある。
【０００３】
各種の活動または取引のそれぞれは、ビジネスアプリケーションまたはソフトウェアによって単一のイベントとして処理さえる。例えばオンライン会計ブティックストアストアの場合、ユーザのログインセッションは１つのイベントとして、そしてショッピングモールで消費者が使ったクレジットカードの読みとりは別のイベントとして金融機関によって処理される。それぞれの単一イベントには意味があるものの、それぞれの単一イベントを分析しても有益ではない。それよりむしろ企業体またはその他の組織は、特定のパターンに従った複数イベントの発生に関心がある。特定パターンから集められたこのような情報は「高レベルイベント」であり、更なる解析が有益であり、且つ有意義である。
【０００４】
例えば、オンラインストアのユーザのログインセッション、ショッピングカートへあるアイテムを入れるといった単一イベントは些細なことであろう。しかしながら、オンラインストアは、（１）ユーザがログインし、（２）ショッピングカートにアイテムを入れ、（３）チェックアウトに進んだが、（４）ユーザからそれ以上のアクションがないという特定のパターンに関心がある。このようなパターンは、ユーザが（ａ）発送手数料に納得しないか、（ｂ）購入前にそのアイテムの価格を比較することに決めたか、（ｃ）ユーザが「購入」ボタンをクリックしたが取扱いサーバが要求を受け取らなかったか、またはその他の理由から自身のショッピングカートを放棄したことを示す。
【０００５】
現在のシステムは、イベントを処理し、特に関心のあるパターンにイベントをマッチさせようと試みる。例えば、「ショッピングカートの放棄」パターンを識別する場合、オンラインストアは、（１）ユーザログイン、（２）ショッピングカートのアップデート、（３）チェックアウト、そしてその後の１０分間にユーザからアクションがないことといった、あるイベントの連続を識別するようにアプリケーションを設計できる。しかしながら、このようなパターンのマッチングは、ソフトウェアプログラマーに依頼して「ショッピングカートの放棄」パターンを取り扱うアプリケーションをカスタマイズすることをオンラインストアに求める。別のシステムでは、パターンマッチングは、オフライン中、および／またはイベントからのデータがデータベースもしくはデータウェアハウスに記憶された後にのみ分析を行うことによって、後付け処理(hindsight process)として実施されている。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
これらのシステムは、一連のイベントからパターンを効率よく識別するための汎用パターン認識実装を欠いている。これに加えて、カスタマイズされたコードまたはルーチンは、既存のシステムにイベントデータの相関付けとパターン評価を同時に実施するように求める。例えば、パターン識別では、既存のシステムは、パターンが生じたか判断する前に、イベントが発生しイベントからのデータと相関付けられるのを待つ。新規のパターンを評価する場合は、パターンを評価できるように既存システムを設定するための、カスタマイズされたルーチンの新規セットが必要となる。
【０００７】
従って、これら、およびその他の不都合および欠点の1つ、または複数を解決するために、受信イベントをモニタリングし、且つモニタリングされたイベントを相関付けることによって複数のイベント中にあるパターンを識別するためのシステムおよび方法が望まれている。
【課題を解決するための手段】
【０００８】
本発明の実施態様は、一連のイベントを定義するパターン記述をコンパイルすることによって、周知のシステムの欠点を克服する。各イベントには実行可能コードのスクリプトまたはセットが添付または関連付けられ、且つスクリプトはパターン記述に従ったイベントを相関付けするデータパラメータを定義している。本発明の実施態様は、各イベントのスクリプトを実行し、イベントが特定のパターンとマッチしているか判定する。
【０００９】
本発明の１態様によれば、方法は一連のイベントにあるパターンを識別する。方法はあるパターン記述をコンパイルする。パターン記述は第１イベント、および第１イベントに関連する第２イベントのシリーズを定義する。第１イベントが受け取られ、第１イベントはタイプパラメータデータ、時間パラメータデータ、およびサブスタンスパラメータデータを含んでいる。方法はまた、第１スクリプトを第１イベントに添付する。第１スクリプトは第２イベントのタイプ、時間、およびサブスタンスパラメータを、パターン記述に従って第１イベントのパラメータの関数として定義する。第１イベントの添付された第１スクリプトが実行される。実行されたスクリプトは第２イベントを識別し、それによってパターンを識別する。
【００１０】
本発明の別の態様では、コンピュータ実施可能なコンポーネントを有する１つ又は複数のコンピュータ可読媒体がイベントパターンを識別する。コンポーネントをコンパイルするあるパターンは、複数のパターン記述をコンパイルしている。各パターン記述は、一連のイベントを順番に定義している。イベントコンポーネントは複数のイベントを収集する。複数のイベントのそれぞれが、複数のイベントそれぞれを相互に関連付けているデータパラメータを持っている。スクリプトコンポーネントは、あるスクリプトを複数イベントのそれぞれに関連付ける。スクリプトは、複数イベントそれぞれのシリーズにおける次のイベントのデータパラメータを、複数イベントそれぞれのパターン記述に従って定義する。パターン認識エンジンは、複数イベントそれぞれのスクリプトを実行して、次の一連のイベントを識別し、そうしてパターンを識別する。
【００１１】
本発明の更なる態様によれば、システムは複数あるイベントの中のあるパターンを識別する。複数の収集コンピュータが関係するイベントを、パターンイベントのシリーズとして収集する。第１セットのコンピュータは収集した各シリーズ中の、パターンの第１部分を識別する。収集された各シリーズは、パターンイベントシリーズの第１部分とマッチする。コンピュータの第２セットは、パターンの第１部分が第１セットによって識別された各シリーズ中のパターンの第２部分を識別する。パターンの第１部分およびパターンの第２部分は、パターンイベントのシリーズにマッチングする。パターンの第１および第２部分を含む各イベントシリーズが、評価のために蓄積され、記憶される。
【００１２】
あるいは、本発明は様々なその他の方法および装置を含んでもよい。
【００１３】
以下にその他の特徴の一部を明らかに、また一部を指摘する。
【００１４】
対応する参照文字は、図面を通して対応する部分を示している。
【発明を実施するための最良の形態】
【００１５】
図１を参照すると、ブロック図は本発明の１つの実施態様による、イベントシリーズ中のパターンを識別するためのシステム１００を描いている。例えばシステム１００は、コンピュータサーバを含む、図７のコンピュータ１３０のような計算装置（図１に示さず）、共通の通信網（インターネット、イントラネット等）により連結された計算装置の集合、または複数のパターン認識エンジン１１２を実行できるその他計算装置、およびスクリプトコンポーネント１０６を含んでいる。システム１００は、複数のイベント１０４を受け取るためのイベントコンポーネント１０２を含んでいる。イベントコンポーネント１０２は、イベント供給源から複数のイベント１０４を受け取るユーザインターフェイス（ＵＩ）またはアプリケーションプログラミングインターフェイス（ＡＰＩ）を備えてもよい。上記オンラインストアを例に挙げると、イベントコンポーネント１０２はイベント１０４を、ユーザログインセッションを受け取るウェブサーバ等からのイベントストリームとして受け取る。ＡＴＭの例では、イベントコンポーネント１０２はＡＴＭ装置および共通通信網からのＡＴＭ取引を受け取ることができる。イベント１０４は、ＡＴＭ取引、ユーザログイン、または商業的ウェブサイトとのインタラクション、安全なネットワークとのユーザログインセッションなどのような不連続な活動段階の発生を含む。一方、発生しない活動は、イベント１０４中に欠けているイベントとして表すことができる。
【００１６】
システム１００は、パターン記述のコンパイリングに応答するパターンコンパイリングコンポーネント１１０の含み、これが連続するイベントのシリーズを定義する。例えば上記の例の「ショッピングカートの放棄」では、パターン記述は（１）ユーザログイン、（２）ショッピングカートにアイテムを入れる、（３）チェックアウト、および（４）１０分以内にショッピングカート中のアイテムの注文が完了されないというパターンとして定義できる。別のパターンの例示としては、「ＡＴＭ詐欺」のパターン記述は一連の現金自動預払機（ＡＴＭ）処理を：（１）顧客のＡＴＭカードによる、場所ＡでのＡＴＭ処理の最初の試み、および（２）最初の試みから１０分以内の異なる場所Ｂでの同一カードを用いた別のＡＴＭ処理の第２の試みとして定義できる。
【００１７】
パターン記述の別の例は、ハードウエア販売店での「窃盗または万引」を識別するものである。例えば、ハードウエア販売店のアイテムは、アイテム番号、アイテムシリアル番号、単価、またはその他アイテムに関する測量情報のようなアイテム関係情報の入った無線周波識別（ＲＦＩＤ）タグを使ってマークを付けることができる。チェックアウトカウンターにあるＲＦＩＤタグ読取り器は、無線信号を送ってハードウエア販売店内のＲＦＩＤタグの存在をスキャンし、顧客が購入しつつあるアイテムを登録する。ハードウエア販売店の出口には別のＲＦＩＤタグ読取り器が配置されており、アイテムが販売店から出て行く時にそれをモニターする。この状況での興味深いパターンは、出口にあるＲＦＩＤタグ読取り器が、まだチェックアウトカウンターでスキャンされていないアイテムのＲＦＩＤタグをスキャンしたことを販売店のシステムが示すことである。このようなパターン（即ちチェックアウトスキャンがない）は、窃盗または万引きの可能性を示唆しているかもしれない。
【００１８】
更なるパターン記述の例は、（１）仮想私設ネットワーク（ＶＰＮ）へのログインセッションの成功が記録され、（２）ドメインへのログインの試行が記録されておらず、且つ（３）同一ＩＰアドレスを用いたテルネットへのログインの試みの失敗または成功が記録される「ハッカー攻撃」パターンによって例示できるだろう。このようなイベントのパターンは、ドメインがハッカー攻撃に曝されているか、必要なクライアントコンポーネントを使用せずに誰かがドメインへのアクセスを試みていることを表す。
【００１９】
本発明の１つの実施態様によれば、全てのイベントパターンは表１に例示する情報の幾つかに分解することができる。
【００２０】
【表１】
2008546054.tif 000003
【００２１】
本発明の実施態様は、イベントに関係するデータを、それらがデータウェアハウスに記憶された後に分析するのに代わって、イベントストリームを監視またはモニターし、リアルタイムにイベントを評価して有意義または有用な情報を示すパターンを判定する。
【００２２】
再び図１を参照する。これを達成するためにシステム１００は小さなスクリプトのセットにパターン記述をコンパイルするスクリプトコンポーネントを含んでおり、このとき各スクリプトはイベント１０４で起こり得る個々のイベントタイプに対する反応を記述する。スクリプトは実行可能コード、エクスプレッション、ルーチン、関数、条件、またはアルゴリズムを含み、パターン記述の中から次イベントを発見するために特定イベントをどう扱うかを示す。スクリプトは、次イベントのパラメータを特定イベントのパラメータの関数として定義する。表２は、スクリプトに含まれるオペレーションの例を示す。
【００２３】
【表２】
2008546054.tif 000004
【００２４】
図１に戻ると、スクリプト１０８が関連または帰属しているイベントは、複数の実行のためのパターン認識エンジン１１２に送られる。例えば表２に例示したように、各イベント１０４に関連付けられたスクリプトは、スクリプトを実行する様々なオペレーションおよびパターン認識エンジン１１２を含んでいる。１つの例では、パターン認識エンジン１１２−１、１１２−２、１１２−３および１１２−Ｎはパターン認識エンジン１１２の個別インスタンスである。
【００２５】
図２Ａ〜２Ｆは、本発明の一実施態様による、イベント１０４に関連付けられたスクリプト実行プロセスにおけるパターン認識エンジン１１２のインスタンスを描いた図である。図２Ａは、イベント２０２、スクリプト２１０、およびパターン認識エンジン（ＰＲＥ）２１８間のインタラクションを描いた図である。イベント２０２は、イベントタイプ２０４、イベント時間２０６、およびイベントサブスタンス２０８に関係するパラメータを含む。例えば、オンライン会計ストアでの典型的なイベントであるユーザログインイベントは、イベントタイプ２０４を「Ｌｏｇｉｎ（ログイン）」、イベント時間２０６を「１０：００Ａ．Ｍ．（午前１０時）」、そしてイベントサブスタンス２０８を「Ｃｉｔｙ＝Ｓｅａｔｔｌｅ；Ｓｔａｔｅ＝Ｗａｓｈｉｎｇｔｏｎ（市＝シアトル；州＝ワシントン）」のように示す。ＡＴＭ取引の例では、イベントタイプは「Ｗｉｔｈｄｒａｗ（引出し）」、イベント時間２０６を「９：５５Ｐ．Ｍ．，」そしてイベントサブスタンス２０８「Ｓｔｏｒｅ（店舗）０９９４」のように示すだろう。一つの実施態様では、イベント２０２に関するその他および追加のパラメータを各イベント２０２に含めることができる。
【００２６】
スクリプト２１０は、パターン記述に従ってパターン認識エンジン１１２に処理を行わせるためのオペレーションを１つ又は複数含んでいる。例えば、スクリプト２１０は、次イベント条件２１２およびデータ蓄積ロジック２１４のようなパーツを含む。表２に例示した様に、各イベント２０２に添付または関連付けされたスクリプトは、パターン記述に従って続くイベントをどのように処理するか示している（図２Ｂ〜２Ｆで更に詳しく論ずる）。図２Ａにも示すように、ＰＲＥ２１８のインスタンスは、スクリプト２１０を実行する汎用スクリプトインタープリタであり、個々のパターン例に関する認識状態を含んでいる。例えばＰＲＥ２１８は、ＰＲＥ２１８がスクリプト２１０をプロセスイベント取扱い２１６時に受信し、パターンイベント予想２２０時に次イベントの条件を処理し、パターン例データ２２２を記憶し、スクリプト２１０に従って特性を「Ｓｔａｔｕｓ（ステータス）」２２４、「Ｗａｋｅｕｐ（ウェイクアップ）」２２６、「ＪｏｉｎＥｖｅｎｔｓ（ジョインイベント）」２２８、および「ＧｅｔＤａｔａ（ゲットデータ）」２３０に公開するようにスクリプト２１０を実行する、システム１００内の実行可能モジュールであってよい。例えば、オンラインショッピングカートでは、「ログイン（Ｌｏｇｉｎ）」イベント後ＰＲＥ２１８はスクリプトを実行し、ステータス２２４を「Ｗａｉｔｉｎｇ（待機）」に更新する（即ち後発イベントを待つ）。ＰＲＥ２１８はまた、ステータス２２４をモニタリングする「Ｗａｋｅｕｐ」２２６時間１０：０５：２０と出力する。「ＪｏｉｎＥｖｅｎｔｓ」または「ＧｅｔＨａｓｈ（ゲットハッシュ）」２２８は、後発イベントにおいて相関される必要があるパラメータデータを記述し、「ＧｅｔＤａｔａ」２３０はそれまでに蓄積されたデータを検索する外部環境を可能にする。イベント未発生に基づく時間制限およびパターンのサポートを可能にするため、ＰＲＥはステータスを新規イベント統合に似たステータスに変えることができる方法２１７「ＯｎＷａｋｅｕｐ（オンウェイクアップ」も公開する。
【００２７】
換言すれば、ＰＲＥ２１８はパターン記述に従って１つ又は複数のオペレーションまたはルーチンを含むことができるスクリプト２１０の解釈および実行を行わせる、コンピュータ実行可能な指示のセットである。このように本発明の実施態様は、ＰＲＥ２１８が外部環境（例えばスクリプト２１０およびイベント２０２）に依存して関連イベント２０２およびスクリプト２１０を処理することから、スクリプト２１０およびＰＲＥ２１８の実行を通して、多方面でのイベントの処理および様々な条件およびパラメータのパターンを評価に適合している。本発明の実施態様の利点は、システム１００がパターン記述をコンパイルしており、各ユーザのニーズに合ったスクリプトを関連付けしてＰＲＥ２１８のインスタンスがスクリプトを実行してパターンの発生を判定できることから、各ユーザが関心を持つイベントのタイプまたはパターンのタイプとは関係なく、異なるユーザおよび異なるイベントについてコードまたはパターン処理をカスタマイズする必要性を少なくとも排除する。
【００２８】
一つの実施態様では、コンピュータ、計算システム、１台のサーバ、複数台のサーバ、またはその他プロセスもしくはアプリケーションを受ける自動イベントを含むホスト環境が、各イベントに関するパターン記述および／またはスクリプトを提供する。
【００２９】
別の実施態様では、ＰＲＥ２１８はユーザデータタイプ（ＵＤＴ）として実行できるスモール（ｓｍａｌｌ）Ｃ＃クラスのプログラミング言語、またはその他プログラミング言語、モデル等として実行できる。スモールＣ＃クラスは、１つのパターンの個別インスタンスの認識状態の保持を担当する。前記状態には、予想イベントおよびタイムアウト、ならびにイベントから蓄積されたデータ、またはスクリプト２１０に従ったその他のデータが挙げられる。この実施態様では、イベント２０２はＰＲＥ２１８にも、イベントタイプ、イベントが起こった時のタイムスタンプ（例えばそれが起こった機器から）、およびイベント２０２のサブスタンスに関係する幾つかのデータを含むＣ＃クラス（ＵＤＴ）を渡すことができる。本発明の一つの実施態様の実施において、イベント２０２はルーチンのオンイベント（ＯｎＥｖｅｎｔ）を通してＰＲＥ２１８に渡される。
【００３０】
例示として「ショッピングカートの破棄」パターンを図２Ｂ〜２Ｆに描いた。図２Ｂは、パターンをイベントのシリーズ：Ｅ１−Ｅ２−Ｅ３−Ｅ４として定義しているパターン記述２５０によるパターンの評価を描いており、この場合Ｅ１は「ログイン」を表し、Ｅ２は「アイテム追加（ＩｔｅｍＡｄｄｅｄ）」を表し、Ｅ３は「チェックアウト（Ｃｈｅｃｋｏｕｔ）」を表し、そしてＥ４はイベント「支払い」が起こらなかったことを表している。これら４つのイベントを含むイベントのシリーズが存在するならば、前記シリーズはユーザがショッピングカートを破棄したことを示しているだろう。イベント供給源２４８は、イベントＥＶ１、ＥＶ２、ＥＶ３が目下処理待機中であることを示している。始めにイベントＥＶ１  ２３２は、それがイベント時間「１０：００：００」であり、且つイベントサブスタンスデータが「セッション（Ｓｅｓｓｉｏｎ）ＩＤ＝５８９０４３５４３」、「州＝ＷＡ」および「市＝レドモンド」であるイベントタイプ「ログイン」であることを示す。イベント１  ２３２に添付するスクリプトは、イベントＥＶ１  ２３２を処理するための次のオペレーションを含んでいる：（ａ）イベントタイプ「アイテム追加」は５分内であると予想すること、（ｂ）このイベントを「セッションＩＤ」に基づいてイベントタイプ「アイテム追加」と相関付けること、および（ｃ）イベントＥＶ１  ２３２により提供されたデータを設定すること。
【００３１】
イベントＥＶ１  ２３２はＰＲＥ２３４に渡され、それはイベント１  ２３２に添付されたスクリプトを実行する。例えば、スクリプトを実行した後、ＰＲＥ２３４はイベント時間「１０：０５：２０」より前に起こる必要のある「アイテム追加」のイベントタイプを示す。ＰＲＥ２３４はさらに、ＥＶ１の「セッションＩＤ」データを「アイテム追加」イベントに相互に関係付けして、それらが同一シリーズに属する（即ち同一ユーザおよび所定のログインセッション）ようにしなければならない。言い換えると、イベントＥＶ１のスクリプトは、次または予想されるイベントのタイプ、時間、およびサブスタンスパラメータを、パターン記述に従ってイベントＥＶ１のパラメータの関数として定義する。イベント間のその他の識別データを用いて、スクリプト実行中にイベント間のデータを相互に関係付けることができることも理解すべきである。
【００３２】
一つの実施態様では、イベントＥＶ１向け「ログイン」スクリプトは進行中のイベントであり、それがイベントシリーズ中の第１イベントであることを表している。従って、ＰＲＥ２３４によるスクリプトの実施のスナップショット２５２は、ＥＶ１が定義されたパターンの最初のものであることから（例えば「ログイン」イベント）、イベントＥＶ１２３２がシリーズＡの第１イベントであることを示す。またシリーズＡのステータスは、このスクリプトは、同一ユーザによる、同じセッションＩＤでのイベント「アイテム追加」が起こることを予想しているため、「待機（Ｗａｉｔｉｎｇ）」である。そうではなく、イベント「アイテム追加」がＥＶ１のスクリプトが要求する時間内に起こらない場合には、イベントがもはや定義されたパターン記述に一致しないことからシリーズＡは破棄される。即ち、スクリプト中のオペレーション「ウェイクアップ」は、ＰＲＥ２３４がシリーズＡのステータスを更新して、予想したイベントが起こったか判定することを示している。するとＰＲＥ２３４に呼び出されたゲットハッシュ（ＧｅｔＨａｓｈ）（０）は、セッションＩＤのハッシュを戻すであろう。
【００３３】
次に図２Ｃを参照する。新規イベントＥＶ２  ２３６がイベント供給源２４８から受け取られ、そのイベントタイプはイベント時間が「１０：００：２０」の「アイテム追加」であり、「セッションＩＤ」はやはり５８９０４３５４３である。イベントＥＶ２のパラメータデータはイベント１のスクリプトが定義した予想イベントに対応した時、イベント２はイベントＥＶ１と同一のシリーズＡに属すると判定される。例えば、イベントＥＶ２がイベントＥＶ１と同一シリーズＡに属すると判定する場合、判定はハッシュに基づいて適切なＰＲＥインスタンス２３４を見つけ出し、インスタンスＰＲＥ２３４’を「アイテム追加」のスクリプトで呼び出し、そのとき正確に一致しない場合にはイベントＥＶ２を無視することによって達成できる。このときパターン認識処理のスナップショット２５８は、ＥＶ２がシリーズＡに属する時に起こることを示している。この場合、イベントＥＶ２に関連付けられたスクリプトは、次の、または予想されるイベントを定義しており、ＰＲＥ２３４’はその通りにスクリプトを実行する。例えばイベントＥＶ２のスクリプトは、別の「アイテム追加」イベントが５分以内に起こることを示す；チェックアウト時間は、決定されていなければならず、またセッションＩＤを用いてデータを次のイベントと相互に関係付けする。実行後、ＰＲＥ２３４’は、シリーズＡの次イベントのパラメータデータを示す。例えば別の「アイテム追加」イベントは「１０：０５：２０」（即ち１０：００：２０＋５分）の前に起こる可能性があり、もし「チェックアウト」イベントが１０：０５：２０までに起こらない場合は、シリーズＡは、パターン記述によるところの「ショッピングカートの放棄」パターンには一致しない。
【００３４】
次に図２Ｄを参照すると、新規イベントＥＶ３  ２４０が次のパラメータデータを持つイベント供給源２４８から受け取られる：イベントタイプ「ログイン」、イベント時間「１０：０２：３１」、および「セッションＩＤ」５８９０７７６２５。一つの例では、「ログイン」に関するスクリプトはそれが進行中のイベントであることを示しており、セッションＩＤがイベントＥＶ１  ２３２およびＥＶ２  ２３６のそれとは一致しないことから、イベントＥＶ３  ２４０は新規シリーズＢを開始するように決定される。従ってスナップショット２６０は、イベントＥＶ３がシリーズＢの第１イベントであることを示す。また、イベントＥＶ３のスクリプトが次のイベントを定義し（例えば「アイテム追加」が１０：０７：３１前に起こる等）、ＰＲＥ  ２４２の新規インスタンスがＥＶ３  ２４０のスクリプトを実行することに注意する。
【００３５】
次に図２Ｅを参照する。別のイベントＥＶ４  ２５６がイベントタイプ「チェックアウト」、イベント時間「１０：０２：４０」、およびセッションＩＤ５８９０４３５４３と一緒に受け取られる。このイベントＥＶ４  ２５６のパラメータデータは、イベントＥＶ３  ２４０のスクリプトが定義するパラメータデータに一致している。従って、スナップショット２６２は、イベントＥＶ４がシリーズＡに属し、シリーズＡの第３イベントであることを示す。イベントＥＶ４  ２５６のスクリプトは、続く５分以内に「支払い」イベントが予想されないことを示す。従って、ＰＲＥ  ２３４’’は、イベント４  ２５６のスクリプトを実行し、「支払い」イベントが「１０：０７：４０」前に起こってはならないことを示す。さもなければシリーズＡのステータスは、シリーズＡが「ショッピングカートの放棄」のパターンに一致しないことを示すようにセットされる。
【００３６】
図２Ｆを参照する。「支払い」について設定されたタイムアウトは、ウェイクアップタイムプロパティを介して時間「１０：０７：４０」を公開することになる。これに加えて、ＰＲＥ２３４’’’はこのタイムアウトが起こった場合、そのパターンについてそれ以上イベントが予想されないので、新規ステータスは「一致（Ｍａｔｃｈ）」となることを覚えている。例えば数多くのＰＲＥインスタンスを管理するホスト環境（例えばホスト環境１１４）は、ウェイクアップタイムに基づいてソートされたリストまたはインデックスを保持するかもしれない。インデックスは、起動が必要な全てのインスタンスを見つけ出すのに用いることができる。例えば、１０：０８にＰＲＥインスタンス２３４’’’のメソッドＯｎＷａｋｅｕｐを呼び出す必要があると決定できる。それが起こると、ＰＲＥインスタンス２３４’’はそのステータスを、「ショッピングカートの放棄」のパターンが一致していることをホスト環境に示す「一致」に設定する。
【００３７】
一つの実施態様では、ＰＲＥ２３４’’’は、イベントシリーズのステートおよびパターンと関連しているデータを、イベントシリーズおよびパターンを分析するためにホスト環境に公開する。一例を挙げると、このようなホスティング環境は、ゲットハッシュ（）に基づくハッシュテーブル（Ｈａｓｈｔａｂｌｅ）およびウェイクアップタイムに基づいてソートされたリストを保持でき、両者は共にＰＲＥインスタンスのセットを指示している。このインメモリのホスト環境は、出力イベントとして一致したパターンを出力できる。インメモリホスト環境は、揮発性メモリ、非揮発性メモリ、または揮発性と非揮発性メモリの組み合わせのようなその記憶装置内に複数のエンジンインスタンスを保持し、受信イベントおよびスクリプトオペレーション（例えばウェイクアップ通知）を相応しいエンジンインスタンスに送る。インメモリのホスト環境はまた無関係なイベントおよび／またはステータスが「不一致（ＮｏＭａｔｃｈ）」であるＰＲＥ２３４を廃棄する。
【００３８】
ファイルベースのホスト環境では、イベントシリーズのパラメータデータおよびパターンに関係するデータは、あるファイルの集合またはあるファイルに全てのＰＲＥ２３４インスタンスをシリアル化することによって編成することができ、ホスト環境、ＰＲＥ２３４、またはそれらの組み合わせがクラッシュした場合に、蓄積されたステートを回復することが可能となる。
【００３９】
ホスト環境の別の実装は、ＳＱＬをベースとするホスト環境であり、これはＰＲＥ２３４をＵＤＴ（ユーザデータタイプ（Ｕｓｅｒ  Ｄａｔａ  Ｔｙｐｅ）−ＳＱＬ２００５の新規機能）として実装し、スクリプトオペレーション（例えばタイムアウト通知）および多数の入力イベントを、ＰＲＥ２３４にアクセス可能なプロパティ上のインデックスを利用して、待機中の多数のＰＲＥ２３４インスタンスに効率的に届けることができる。ＳＱＬベースのホスト環境は、ＰＲＥ２３４から一部または全てのデータをＳＱＬカラムに昇格することによる受信イベントまたはイベントストリームのデータ確認を含み、これによりイベントコンポジションのすべてを見ることができ、且つ表としてクエリを行うことができる（図３にて論じる）。別の例では、一致パターンを保存している表およびデータ構造は分割できる。
【００４０】
本発明の範囲から逸脱することなしに、他のパターンを評価および識別してユーザの関心に応えられること、および本発明の実施態様の追加例または応用が可能であることを理解しなければならない。
【００４１】
次に図３を参照する。図は本発明の一実施態様による、パターン関係データを記憶するためのデータ構造３１２を描いている。イベントデータ構造は、テーブル３０２の中にイベントを記憶する。スクリプトオペレーションテーブル３０４は、パターン記述を、識別対象となる各イベントに関するスクリプトオペレーションと一緒に含んでいる。一つの実装では、イベントはテーブル３０２の中にＵＤＴとして記憶されている。テーブル３０２は「イベントタイプ（Ｅｖｅｎｔ  Ｔｙｐｅ）」および「連結判断基準または連結イベントのハッシュ」のためのカラムを含んでよい。例えば、オンラインショッピングイベントでは、イベントタイプは「ログイン」、「チェックアウト」、「アイテム追加」等でよく、ハッシュはセッションＩＤに基づいてよい。一つの実施態様では、テーブル３０２のカラムをクラスターインデックスとして含めることによって、計算システム（図７のコンピュータ１３０のような）メモリのディスクセクターにあるテーブルの物理的記憶を最適化できる。
【００４２】
新規パターンタイプをこのようなホスティング環境に展開することは、各イベントタイプについて実行するオペレーションのスクリプトを含む行をテーブル３０４内に挿入することで達成できる。当初テーブル３０２は空でよく、イベントストリームまたはイベント供給源１０４から１つ又は複数のイベントを受け取ると、テーブル３０２の行はイベント関係データで埋まり始まる。イベントテーブル３０２およびスクリプトオペレーションテーブル３０４は、パターンが評価および識別されるパターンテーブル３１２と相互に関係している。パターンテーブル３１２はイベントテーブル３０２、スクリプトオペレーションテーブル３０４からの情報、およびＰＲＥからの実行スクリプト情報を含んでいる。パターンテーブル３１２の一つの実装では、ＳＱＬステートメントはパターンテーブル３１２を次のように定義できる。  
create table Patterns
(
PatternType nvarchar(256),
Hash as PRE.GetHash(0) persisted,--promoted from the PRE
PRE as PatternRecognitionEngine,--this is UDT registered before
Status as PRE.Status persisted,--promoted from the PRE
Wakeup as PRE.Wakeup persisted--promoted from the PRE
)
【００４３】
一つの実施態様では、パターンテーブル３１２はパターンテーブル３０６によりソートされ編成される。例えば、パターンテーブル３１２に示すように、パターンＰ１は、パターンＰ２の上にインデックスを付けたものである。同じく例示したように、パターンＰ１は１対上のパターンインスタンス（パターンＰＩ内の行によって示される）を含み、このとき各パターンインスタンスの各行は、パターンが待機中であるか、または追加のイベントを予想していることを示す。インデックスまたはパターンタイプの選別に加えて、本発明の一つの実施態様は、ステータスカラム３０８およびウェイクアップカラム３１０にインデックスを付けることによってパターンテーブルを編成する。
【００４４】
従って、新規イベントの行をイベントテーブル３０２および対応するスクリプトオペレーションテーブル３０４に作る場合は、ＰＲＥのインスタンスはスクリプトオペレーションテーブル３０４に従ってスクリプトを実行し、評価対象となるパターンイベントシリーズ中の連続するイベントを識別する。このようにして本発明の実施態様は、各パターンを独立に識別するアルゴリズムを平行して実行する。言い換えると、ＰＲＥの１つのインスタンスは、パターンＰ１を評価するイベントに関連付けされたスクリプトを実行でき、一方別のＰＲＥのインスタンスはパターンＰ２を評価する事象に関連付けされたスクリプトを実行できる。後述するAppendixＢにはアルゴリズムの例示的実装が描かれており、図６Ａおよび６Ｂにはアルゴリズムに由来する例示的方法が描かれている。
【００４５】
図４は、本発明の一つの実施態様によるクエリに関する、図３の記憶データを編成するためのデータ構造を描いた図である。パターンテーブル４０２は、パターンイベントの評価結果として、パターンの集合体を含んでいる。例えば、集合４０８は、「ログイン」、「チェックアウト」等のＰＲＥインスタンスから収集または抽出されたパラメータデータを含んでいる。パターンテーブル４０２は更に、ＰＲＥの実行に関係する情報も含む。一つの実施態様では、パターンテーブル４０２内の一致パターンは別の一致パターンテーブル４０４に移される。このようにして、一致パターンテーブル４０４を効率的に調査またはクエリを行い、オンライン会計ストアの取引をさらに評価または改善できる。
【００４６】
図５は、本発明の一つの実施態様による、イベントシリーズ中のあるパターンを識別するためのサーバの集合を描いた図である。複数の収集コンピュータ５０２が、パターンイベントのシリーズとして関係するイベントを収集する。例えば、オンライン会計ストアが多数のフロントエンドサーバを使って、オンラインウェブサイトによるユーザ取引からデータを収集することを考えると、これらフロントエンドサーバは、ユーザのログインセッション、ユーザのショッピングカートにアイテムを入れるといったイベントを収集する、収集コンピュータ５０２の一部である。各収集コンピュータ５０２は、図１および２Ａ〜２Ｆに記載されているように、パターン記述を実施し、各イベントにスクリプトを関連付けし、ＰＲＥを用いて前記スクリプトを実行することができる。
【００４７】
次にコンピュータの第１セット５０４は収集された各シリーズの中からパターンの第１部分を識別する。集められた各シリーズは、パターンイベントのシリーズの第１部分が一致している。例えばコンピュータ５１２は、パターン（Ｐ１、Ｐ２、およびＰ３）を評価するように設定でき、一方コンピュータ５１４はパターン（Ｐ４およびＰ５）を評価または識別するように設定できる。コンピュータの第２セット５０６はこれらのパターンＰ１〜Ｐ５をイベントと見なすかもしれない。このようにしてコンピュータの第２セット５０６は、イベント（即ち第１セット５０４からのパターンＰ１〜〜５）を受け取り、各シリーズ中にパターンの第２部分を識別する。このようにして、評価のために第１セット５０４により識別されたパターンの第１部分および第２セット５０６によって識別されるパターンの第２部分が蓄積され、記憶される。言い換えれば、第１セット５０４は、第２セット５０６のための収集コンピュータと見なす、または扱うことができる。図５に示したように、第２セット５０６のコンピュータ５１６は、第１セットのコンピュータ５１２および５１４の両方からイベントとして受け取ることができる。一方、第２セット５０６中のコンピュータ５１８は、第１セット５０４のコンピュータ５１４および複数ある収集コンピュータ５０２のコンピュータ５２０から、事象として受け取ることができる。
【００４８】
本発明の別の実施態様によれば、記載の１つまたは複数のホスティング環境は、イベントストリーム上でのパターンマッチングのための分散型インフラストラクチャの一部であり、従って幾つかノード（例えばホスティング環境）はホスティング環境のインメモリコンポジションでよく、幾つかはファイルベースでよく、一方その他はＳＱＬ−ベースのホスティング環境でよい。これに加えて、幾つかのその他の処理が、コンポジション間のイベントストリーム上で行われる。このような処理の例としては、カスタムコード、ビジネスルール、またはイベントストリーム上での変換が挙げられる。
【００４９】
一致パターンをコンピュータの第１セット５０４および第２セット５０６で評価する場合、一致パターン由来のデータおよび／またはパターンイベントのパラメータデータは、一致パターンを更に処理するために、ホスト環境５０８（例えばＳＱＬをベースとするホスト環境）またはワークフロービジネスプロセス分析のホスト環境に出力することができる。
【００５０】
次に図６Ａおよび６Ｂを参照する。本発明の一つの実施態様に従った、ホスティング環境によって実施されたイベントシリーズ中のあるパターンを識別するための方法がフローチャートとして描かれている。一つの実施態様では、後述するAppendixＡの例示的アルゴリズムは、イベントシリーズ中のパターンを識別するための実装例を描いている。まず６０２で新規イベントが受け取られると、それは直ちに、または実質的に直ちに、イベントのタイプに基づいて６０４でスクリプトに関連付けされる。６０６では、別経路を取ってイベントが新規シリーズを始動させるか決定することができる。例えば図２Ａ〜２Ｆで記載したように「ログイン」イベントは、それがシリーズ中の第１イベントであることから始動イベントである。イベントを始動した場合は、６０８で新規のシリーズが創られ、６１０でイベントを待ち待機中のシリーズのセットに加えられる。例えばインメモリホスティング環境では、これは新規ＰＲＥインスタンスを作り、それを起動時間に関するハッシュテーブルおよびソートリスト内に登録できる。ＳＱＬをベースとするホスティング環境が実装される別の例では、ＳＱＬベースのホスティング環境はパターンテーブルの中にＰＲＥインスタンスをＵＤＴとして挿入できる。次にそれは６０２に進み、１つ又は複数のイベントを受け取る。
【００５１】
スクリプトが始動しない場合は、このイベントで関心対象となる可能性のあるシリーズが６１２で処理される。例えば、これはＰＲＥインスタンスのオンイベントメソッドを最初に呼び出し、受信イベントを関連付けされたスクリプトと一緒に通すことにより達成される。ＰＲＥはパターン記述を評価することによって、６１４において続く二つの作業を実施する。ハッシュ値を一致させることが必ずしも相関関係条件が満たされたことを意味しないことを指摘することは重要である。例えば、ハッシュは社会保障番号または氏名のようなパターン記述による関係付けに用いられる幾つかのストリングのためのものであった。このようにしてＰＲＥは、受信イベントのデータおよびそれまでにシリーズ中に蓄積されたステートに対して実際のパターン記述を計算する。パターン記述の評価がネガティブの場合は、そのシリーズについてイベントは無視される。
【００５２】
評価がポジティブの場合、イベントは６１６においてＰＲＥに統合される。イベントと蓄積されたステートとが統合された結果、ＰＲＥインスタンスのステータスは、変更されるか、または更新されるだろう。例えばあるセッションＩＤについて「支払い」イベントが受け取られた場合は、ステータスは「不一致（Ｎｏ  Ｍａｔｃｈ）」に変更される。６１８では、ステータスに基づいて、ホスティング環境はこのシリーズに行うべきことを決定する。ステータスが「一致」（例えばイベントのシリーズがあるパターンに一致している）の場合は、シリーズは無事完了したと見なされ、前記シリーズは待機インスタンスのセットから取り除かれ、蓄積データは６２０でコンポジットイベントとして送られる。あるいは、一致したシリーズは、図４に描かれているように別のテーブルでのクエリおよび分析のために保持してもよい。
【００５３】
ステータスが「不一致」の場合は、シリーズは６２２において放棄または無視される。６２４では、ステータスが「待機中（Ｗａｉｔｉｎｇ）」の時には、シリーズは６０２に進み、そのまま別のイベントを待つ。
【００５４】
本発明の別の実施態様では、イベントは既存のシリーズと統合されることも新規のシリーズを開始することもせず、６１６の前にシリーズのコピーまたはクローンを作る。かくして関係付けされたか、または連続しているイベントと、シリーズのクローン化コピーの両方が処理される。例示されているように、パターン記述Ｐ１は次の３つのイベントを定義すると考えられる：
イベントＡ、Ｂ、およびＣであって、イベントＡのｘ値はイベントＢのｘ値に等しく、イベントＢのｙ値はイベントＣ値のｙ値に等しい。
【００５５】
イベントＡ−Ｂ−Ｃの識別では、最初にｘ値が１であり、且つｙ値を持たないイベントｅｖ１が受け取られる。パターン記述に拠れば、イベントｅｖ１はｙ値を持たずｘ値のみを含むことから始動イベントである。このようにしてイベントｅｖ１は新規パターンシリーズＳ１を開始する。第２イベントｅｖ２が受け取られ、それはｘ値１およびｙ値２を含む。イベントｅｖ１およびｅｖ２のｘ値が同一であることから、パターンシリーズＳ１は、イベントｅｖ２をパターンP１のイベントとして識別するだろう。
【００５６】
一方、ｘ値が１であり、且つｙ値が３である受信イベントｅｖ３が存在する場合、パターンシリーズＳ１はそれが関係イベントまたは続くイベント、即ちＢ（即ちｅｖ２）のｙ値に等しいｙ値を有するイベントＣでないことからイベントｅｖ３を無視する。
【００５７】
都合良くは、この実施態様では、本発明はイベントeｖ１を含み、２つシリーズのコピーが存在するようにシリーズＳ１をクローン化またはコピーする：１つのコピーはシリーズＳ１のオリジナルコピーであり、もう一つのコピーは新規シリーズＳ２の中で用いられる。かくしてシリーズＳ１は、シリーズ中にイベントｅｖ１を含んでいるだろう。一方、新規シリーズＳ２は、ｅｖ１およびｅｖ２を有する。こうすることによって、受信イベント、即ちイベントｅｖ３が受け取られた時にシリーズＳ１およびＳ２の両方が、イベントｅｖ３がパターンＰ１に一致するか評価および識別するだろう。シリーズＳ１は、イベントｅｖ３のｘ値がｅｖ１のｘ値に等しいことからイベントｅｖ３を含んでいるだろう。しかしながらシリーズＳ２は、イベントｅｖ３のｙ値がイベントｅｖ２のｙ値に等しくないことからイベントｅｖ３を無視するだろう。次に、新規イベントｅｖ４がｙ値が３の時だけ受け取られる場合を考える。この状況では、シリーズＳ１およびＳ２がパターン記述を評価するだろう。クローン化またはコピーされたシリーズを用いて、シリーズＳ１はイベントｅｖ４がイベントＣであること、および一致したパターンがあることを確認する。一方、シリーズＳ２はイベントｅｖ４をイベントＣとしは認めない。クローン化されたシリーズＳ１またはクローン化されたイベントｅｖ１が存在しない場合は、オリジナルシリーズＳ１によってイベントｅｖ２（Ｂ（ｘ＝１，ｙ＝２））が確認されることからパターンは一致せず、またイベントｅｖ３はパターン記述に従ってオリジナルシリーズＳ１によって無視されるが、それはそれがイベントＣだけを予想するからである。このクローン化は、将来関連性のより強い別の一致が生ずることが考えられることから、必要である。
【００５８】
上記の実施態様によれば、パターン記述のコンパイル化およびイベントスクリプトの付着は、既存シリーズのクローン化を実行するか決定する。例えばシリーズが、例えばショッピングカート内の「支払」のようなイベントの不発生について待機中の時、このタイプのイベントはクローニングをせずに直接統合しなければならないが、それはパターン記述がシリーズを終了させるためのものであるからである。言い換えれば、我々は上記イベントＢのような幾つかのイベントを統合し、それらはイベントＣとの追加の関係または条件を含み、パターン記述は、それがパターンを識別するためのシリーズを１つもつことからクローン化が必要となるだろう。
【００５９】
イベントのシリーズがイベント発生について待機中である別の実施態様では、待機中のシリーズを図６Ｂに描かれているようなタイマーに基づいて変更できる。例えば６５０では、期間はイベント供給源からの最終イベントのタイムスタンプを維持することによって、タイマーが計算する。あるいはイベント供給源は一定間隔で、AppendixＡまたはAppendixＢに記載されているアルゴリズムを実行させるシグナルを送ることができる。６５２では、後続イベント（即ちウェイクアップタイム＜現在の時間）待機中の各シリーズについて（例えば「ログイン」イベントは「アイテム追加」イベントについて待機している）、各ＰＲＥインスタンスについてオンウェイクアップのオペレーションを６５４で実行する。その結果、６５６でＰＲＥインスタンスのＰＲＥステータスが変更される。「ショッピングカートの放棄」例では、ＰＲＥインスタンスは、「支払い」イベントを５分以内に受け取ることを期待している。「支払い」イベントが５分以内に受け取られない場合、オンウェイクアップオペレーションが実行され、ＰＲＥインスタンスのステータスは「一致」（即ちオンライン顧客はショッピングカートの放棄した）に変更される。６５８では、ホスティング環境が一致パターンを記憶または出力すると同時に、ホスティング環境は６６０でこのシリーズを廃棄する。本メソッドは６５２で次の待機中シリーズを評価するか、または６６２で終了する。
【００６０】
図６Ａおよび６Ｂに描かれたメソッドおよび対応するAppendixＡに記載のアルゴリズムは例示であり、任意の順番で実装できることを指摘しておくことは重要である。例えば、ＰＲＥをＳＱＬをベースとするホスティング環境内で用いる場合、１つのオペレーション（例えばＵＰＤＡＴＥオペレーション）が数百万のインスタンスに影響することがあり、その間各ＰＲＥのインスタンスは別のＰＲＥインスタンスと平行して実行することができる。
【００６１】
図７は、コンピュータ１３０の形をした汎用的な計算装置の１例を示している。本発明の一実施態様では、本明細書に例示および記載した他の図面での使用について、コンピュータ１３０のようなコンピュータが好適である。コンピュータ１３０は、１つ又は複数のプロセッサーまたは処理ユニット１３２、およびシステムメモリ１３４を有している。例示の実施態様では、システムバス１３６は、システムメモリ１３４を含む様々なシステム構成要素とプロセッサー１３２とをつないでいる。バス１３６は、各種バスアーキテクチャのいずれかを用いた、１つ又は複数のメモリバスもしくはメモリコントローラ、ペリフェラルバス、アクセラレイテッドグラフィックポート、およびプロセッサーもしくはローカルバスを含む任意のタイプのバス構造を表す。このようなアーキテクチャは、例として業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャンネルアーキテクチャ（ＭＣＡ）バス、エンハンスドＩＳＡ（ＥＩＳＡ）バス、ビデオエレクトロニクス規格協会（ＶＥＳＡ）ローカルバス、およびＭｅｚｚａｎｉｎｅバスとしても知られるペリフェラルコンポーネントインターコネクタ（ＰＣＩ）バスが挙げられるが、これらに限定されない。
【００６２】
コンピュータ１３０は、典型的には少なくともコンピュータ可読媒体の形を取る。コンピュータ可読媒体は、揮発性および不揮発性媒体、取外し可能および着脱式媒体の両方を含み、コンピュータ１３０がアクセスできる任意の利用可能な媒体でよい。コンピュータ可読媒体の例には、コンピュータ記憶媒体および通信媒体が含まれるが、これらに限定されない。コンピュータ記憶媒体としては、コンピュータ可読の指示、データ構造、プログラムモジュール、またはその他データのような情報を記憶するための方法または技術で実行される揮発性および不揮発性、取外し可能および着脱式媒体が挙げられるが、これらに限定されない。例えば、コンピュータ記憶媒体としては、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、またはその他メモリ技術、ＣＤ−ＲＯＭ、デジタル汎用ディスク（ＤＶＤ）またはその他の光学ディスク記憶媒体、磁気カセット、磁気テープ、磁気ディスク記憶装置またはその他の磁気記憶装置、あるいは所望する情報の記憶に用いることができ、且つコンピュータがアクセスできるその他の媒体が挙げられる。通信媒体は、典型的には、コンピュータが判読可能な指示、データ構造、プログラムモジュール、またはキャリアーウェイブもしくはその他の移送機構のような変調データシグナルの形をしたその他のデータを具現化しており、且つ任意の情報送達媒体を含んでいる。当業者は、その特徴の１つ又は複数のセットを持つ、または情報をシグナルにコード化するよう変更された１つ又は複数のセットを持っている変調データシグナルについて精通している。。有線ネットワークまたは有線直接接続のような有線媒体、および音響、ＲＦ、赤外線、およびその他無線媒体のような無線媒体が通信媒体の例である。上記の任意の組み合わせもまたコンピュータ可読媒体の範囲内に含まれる。
【００６３】
システムメモリ１３４は、取外し可能および／または着脱式な、揮発性および／または不揮発性メモリの形をしたコンピュータ記憶媒体を含む。例示した実施態様では、システムメモリ１３４は、読出し専用メモリ（ＲＯＭ）１３８およびランダムアクセスメモリ（ＲＡＭ）１４０を含む。起動中等の、基本入出力システム１４２（ＢＩＯＳ）は、コンピュータ１３０内の構成要素間の情報転送を支援する基本ルーチンを含んでおり、典型的にはＲＯＭ１３８に記憶されている。ＲＡＭ１４０は、典型的には処理ユニット１３２に素早くアクセスでき、且つ／またはやがてそれによって運転されるデータおよび／またはプログラムモジュールを含んでいる。例として図７は、オペレーティングシステム１４４，アプリケーションプログラム１４６、その他プログラムモジュール１４８、およびプログラムデータ１５０を描いているが、これらに限定されない。
【００６４】
コンピュータ１３０は、その他取外し可能／着脱式な、揮発性／不揮発性のコンピュータ記憶媒体を含むこともできる。例えば、図７は着脱式な、不揮発性磁気媒体から読み出し、または書き込むハードディスクドライブ１５４を描いている。図７はまた、取外し可能な、不揮発性磁気ディスク１５８から読み出し、または書き込む磁気ディスクドライブ１５６、ならびに取外し可能な、不揮発性の、ＣＤ−ＲＯＭのような光学ディスク１６２またはその他光学媒体も示している。例示のオペレーティング環境で用いることができるその他の取外し可能／着脱式な、揮発性／不揮発性コンピュータ記憶媒体としては、磁気テープカセット、フラッシュメモリカード、デジタル汎用ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭ等が挙げられるが、これらに限定されない。ハードディスクドライブ１５４、ならびに磁気ディスクドライブ１５６および光学ディスクドライブ１６０は、典型的にはインターフェイス１６６のような不揮発性メモリンターフェイスによってシステムバス１３６に接続されている。
【００６５】
ドライブまたはその他大容量記憶装置、およびそれらと関連する上記および図７に描かれているコンピュータ記憶媒体は、コンピュータ可読の指示、データ構造、プログラムモジュールおよびコンピュータ１３０に関するその他情報を提供する。図７には、例えば、ハードディスクドライブ１５４が記憶オペレーティングシステム１７０、アプリケーションプログラム１７２、その他のプログラムモジュール１７４、およびプログラムデータ１７６として描かれている。これらのコンポーネントは、オペレーティングシステム１４４，アプリケーションプログラム１４６、その他のプログラムモジュール１４８、およびプログラムデータ１５０と同一でも、異なっていてもよいことに注意されたい。本明細書では、オペレーティングシステム１７０、アプリケーションプログラム１７２、その他のプログラムモジュール１７４、およびプログラムデータ１７６には、少なくともそれらが異なるコピーであることを表すために別の番号が付けられている。
【００６６】
ユーザはコンピュータ１３０に、キーボード１８０およびポインティングデバイス１８２（例えばマウス、トラックボール、ペン、またはタッチパッド）のような入力装置またはユーザインターフェイス選択装置を通して命令および情報を入力できる。その他の入力装置（示さず）としては、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナー等が挙げられる。これら、およびその他の入力装置は、システムバス１３６に連結されているユーザ入力インターフェイス１８４を通して処理ユニット１３２に接続されているが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）のような他のインターフェイスおよびバス構造によって接続することもできる。モニター１８８またはその他タイプの表示装置もビデオインターフェイス１９０のようなインターフェイスを介してシステムバス１３６に接続されている。モニター１８８に加えて、コンピュータはプリンターおよびスピーカーのようなその他ペリフェラル出力装置（示さず）を備えることが多いが、これらは出力ペリフェラルインターフェイス（示さず）を通して接続できる。
【００６７】
コンピュータ１３０は、遠隔コンピュータ１９４のような１台以上の遠隔コンピュータと、理論結合を用いてネットワーク環境内で操作できる。遠隔コンピュータ１９４は、パーソナルコンピュータ、サーバ、ルーター、ネットワークＰＣ、ピアーデバイス、またはその他一般的なネットワークノードでよく、典型的にはコンピュータ１３０に関係する上記要素の多く、または全てを備えている。図７に描いた理論接続は、ローカルエリアネットワーク（ＬＡＮ）１９６および広域ネットワーク（ＷＡＮ）１９８を含むが、他のネットワークを含んでもよい。ＬＡＮ１３６および／またはＷＡＮ１３８は有線ネットワーク、無線ネットワーク、それらの組み合わせ等でよい。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、および地球規模のコンピュータネットワーク（例えばインターネット）では一般的である。
【００６８】
ローカルエリアネットワーク環境で用いる場合、コンピュータ１３０はネットワークインターフェイスまたはアダプタ１８６を通してＬＡＮ１９６に接続する。広域ネットワーク環境で用いる場合、コンピュータ１３０は、モデム１７８または典型的にはインターネットのようなＷＡＮ１９８との通信を確立するためのその他手段を含む。モデム１７８は内在型または外付けどちらでもよく、ユーザ入力インターフェイス１８４、またはその他適切な機構を介してシステムバス１３６に接続する。ネットワーク化された環境では、コンピュータ１３０、またはその一部に関係して描かれているプログラムモジュールは、遠隔メモリ記憶装置（示さず）内に格納されていてもよい。例として、図７は遠隔アプリケーションプログラム１９２をメモリ装置上に存在するように描いているが、これに限定されない。示したネットワーク接続は例示であり、コンピュータ間の通信連絡を確立する他の手段を用いてもよい。
【００６９】
一般的にコンピュータ１３０のデータプロセッサは、コンピュータの様々なコンピュータ可読記憶媒体中に、様々な時間に記憶された指示を手段としてプログラムされる。プログラムおよびオペレーティングシステムは、典型的には、例えばフロッピーディスクまたはＣＤ−ＲＯＭ上に分散している。それらはここからコンピュータの二次メモリ内にインストールまたはロードされる。実行時それらは、少なくとも一部はコンピュータの主要電子メモリ内にロードされる。本明細書に記載の本発明は、そのような媒体がマイクロプロセッサまたはその他データプロセッサと連動して以下記載の段階を実行するための指示またはプログラムを含む場合、これらおよびその他各種タイプのコンピュータ可読記憶媒体を含む。本発明はまた、本明細書に記載の方法および技術に従ってプログラムされた時のコンピュータそのものも含む。
【００７０】
本明細書では、オペレーティングシステムのようなプログラムおよびその他実行可能なプログラムコンポーネントは、例示の目的上離散ブロックとして描かれている。しかしながらこのようなプログラムおよびコンポーネントは、様々な時間に、コンピュータの様々な記憶コンポーネント内に存在し、そしてコンピュータのデータプロセッサによって実行されることが認められる。
【００７１】
コンピュータ１３０を含む例示的な計算システム環境に結びつけて記載しているが、本発明は、多くのその他汎用または特殊用途の計算システム環境または設定を用いて運用できる。計算システム環境は、本発明の使用または機能性の範囲について制限を意味するものではない。さらには、計算システム環境が、例示のオペレーティング環境に描かれているコンポーネントの任意の１つ、または組み合わせに関係して依存関係または必要関係にあると解釈されるべきではない。本発明での使用に適する周知の計算システム、環境、および／または設定の例としては、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド型またはラップトップ型装置、マルチプロセッサシステム、マイクロプロセッサを基本とするシステム、セットトップボックス、プログラム可能な消費者電子製品、携帯電話、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記システムまたは装置のいずれかを含む分散型計算環境が挙げられるが、これらに限定されない。
【００７２】
本発明は、１台以上のコンピュータまたはその他装置によって実行される、プログラムモジュールのようなコンピュータ実行可能な指示の一般的な状況で記載される。一般的には、プログラムモジュールはルーチン、プログラム、オブジェクト、コンポーネント、および特別なタスクを行うか、または特別なアブストラクトデータタイプを実施するデータ構造を含むが、これらに限定されない。本発明はまた、タスクが通信ネットワークを通して連結している遠隔処理装置によって行われる分散型計算環境でも実行できる。分散型計算環境では、プログラムモジュールは、メモリ記憶装置を含むローカルおよび遠隔コンピュータ記憶媒体内に置くことができる。
【００７３】
ソフトウェアアーキテクチャと関係するインターフェイスは、ソフトウェアモジュール、コンポーネント、コード部分、またはコンピュータが実施可能な指示のその他シーケンスを含む。インターフェイスは、例えば第１モジュールのために計算タスクを実行する第２モジュールにアクセスしている第１モジュールを含む。第１および第２モジュールは、一つの例では、オペレーティングシステムから提供されるようなアプリケーションプログラミングインターフェイス（ＡＰＩ）、コンポーネントオブジェクトモデル（ＣＯＭ）インターフェイス（例えばピアー・ツー・ピアーアプリケーション通信）、および拡張可能マークアップ言語メタデータ交換フォーマット（ＸＭＩ）インターフェイス（例えばウェブサイト間の通信のための）を含む。
【００７４】
インターフェイスは、例えばＪａｖａ  ２プラットホームエンタープライズエディション（Ｊ２ＥＥ）、ＣＯＭ、または分散型ＣＯＭ（ＤＣＯＭ）の様な、結合が密な同期実行でよい。これに代わって、またはこれに加えてインターフェイスは、ウェブサービスでのように（例えば簡素なオブジェクトアクセスプロトコールを用いた）結合がルーズな非同期実行でもよい。一般的には、インターフェイスは密結合、柔軟結合、同期および非同期の各特徴の任意の組み合わせを含む。更には、インターフェイスは標準プロトコール、独自プロトコール、または標準および独自プロトコールの任意の組み合わせに従うことができる。
【００７５】
本明細書に記載のインターフェイスは、全てが単一インターフェイスの一部であっても、別々のインターフェイスまたはそれらの組み合わせとして実行されてもよい。インターフェイスは、局在的または遠隔的に実行して機能を提供できる。更には、インターフェイスは本明細書に例示または記載した機能以外を追加しても、それより少なくともよい。
【００７６】
稼働中、コンピュータ１３０の、コンピュータ実行可能コンポーネントを有する１つ又は複数のコンピュータ可読媒体は、図６に例示したようなコンピュータ実行可能指示を実行して本発明を実施する。
【００７７】
本明細書に例示および記載した方法を実行または遂行の順番は、特に指定しない限り絶対的ではない。即ち、方法の要素は、特に指定しない限り任意の順番で遂行でき、方法は本明細書に開示されたものより多い、または少ない要素を含むことができる。例えば、別の要素の前、同時、または後に特定の要素を実行または遂行することも、本発明の範囲内に入るものとする。
【００７８】
上記を考慮すれば本発明の複数の目的が達成され、且つ別の有利な結果が得られるものとみられる。
【００７９】
上記のシステムおよび方法については、本発明の範囲から逸脱することなしに様々な変更を加えることができることから、上記に含まれる、および添付の図面に示された全ての事柄は例示であって、限定的な意味はないものと解釈される。
【００８０】
〈AppendixＡ〉
本発明の一つの実施態様によるマージロジック（ＭｅｒｇｅＬｏｇｉｃ）（同時）中の各パターンタイプＰの例示的アルゴリズムを以下に示す。  
For each PatternType P in MergeLogic (in parallel)
Loop for each EventType E for this pattern(in sequence)
IF(IsActivating)
INSERT Patterns(PatternType,PRE)
SELECT P, InitializePRE(Event,Script)
FROM Events
WHERE EventType=E
ELSE
UPDATE Patterns
SET PRE.OnEvent(Event,Script)
FROM Patterns p JOIN Events e
ON Patterns.Hash=Events.Hash
WHERE PatternType=P
AND EventType=E
UPDATE Patterns SET PRE.OnWakeup()
WHERE Pattern Type=P AND Wakeup<@Now
FROM Patterns WITH(INDEX(WakeupIndex))
INSERT MatchedPatterns
SELECT Patterns WITH(INDEX(StatusIndex)
WHERE PatterType=P AND Status=Match
DELETE FROM Patterns WITH(INDEX(StatusIndex)
WHERE PatterType=P AND Status>Waiting
【００８１】
〈AppendixＢ〉
例えばアルゴリズムは、各イベントタイプのループを、パターンが期待する順番または順序通りに開始する。例えばスクリプトオペレーションテーブル３０４では、パターンＰ１のパターン記述はパターンを、イベントタイプＥ１−Ｅ２−Ｅ３を有するものとして定義しており、イベントＥ１、Ｅ２、およびＥ３のスクリプトはパラメータデータを評価する。スクリプトオペレーションテーブル３０４では、各イベントについて次の変数が定義される：＠ＰａｔｔｅｒｎＴｙｐｅ、＠ＥｖｅｎｔＴｙｐｅ、＠ＩｓＡｃｔｉｖａｔｉｎｇ、および＠Ｓｃｒｉｐｔ。
【００８２】
アルゴリズムは最初に、次の例示的ＳＱＬステートメントを提供して、イベントタイプが起動中であるか、または１つ又は複数の、既存の連続パターンイベントの一部であるか判定する。  
INSERT Patterns(PatternType,PRE)
SELECT @PatterType, InitializePRE(Event,@Script)
FROM Events
WHERE EventType=@EventType
【００８３】
上記の例示的実装では、関数ＩｎｉｔｉａｌｉｚｅＰＲＥ（）はＣ＃中で実行されるユーザ定義関数であり、起動中のイベントおよび対応するスクリプトを受け取る。前記関数は、イベントデータを用いて、スクリプトに従って初期化された、ステータスが「待機中（Ｗａｉｔｉｎｇ）」であるＰＲＥインスタンスを返却する。テーブル中のハッシュ、ステータス、およびウェイクアップのカラムはインサートステートメント内には設定されない−それらはＰＲＥ修正の副産物である−ことにも注意する必要がある。このステートメントは、数千の新たな挿入インスタンスを生ずる可能性がある−全てが１回のイベントテーブルのスキャニングにより生じ、パターンテーブルのクラスタ化インデックスに挿入される。
【００８４】
あるいは、イベントタイプが起動（Ａｃｔｉｖａｔｉｎｇ）でない場合には、全てのイベントは以下のステートメントを持つ対応するパターンに統合される。  
UPDATE Patterns SET PRE.OnEvent(Event,Script)
FROM Patterns WITH(INDEX(Join_Index)
JOIN Events ON Patterns.Hash=Events.Hash
WHERE Pattern Type=@PatterType AND EventType=@EventType
【００８５】
ここでは、ＳＱＬステートメントは最初に最も効率的な結合（Ｊｏｉｎ）のタイプを予測する。例えば両方のテーブルが巨大な場合、ハッシュを含む同一タイプのインデックスを使用していることから、それはＭｅｒｇｅ−Ｊｏｉｎとなるだろう。これ以外にＳＱＬサーバは：
（ａ）ディスクから幾つかのイベントに関係するパターンを含む全セクターを検索し；
（ｂ）記録の一部であるＰＲＥインスタンスをデシリアライズ処理し；
（ｃ）イベントＵＤＴを通して、そのメソッド０ｎＥｖｅｎｔｏを呼び出し；
（ｄ）ＰＲＥに昇格属性のステータスおよびウェイクアップ、ならびにハッシュについてクエリ；
（ｅ）修正したＰＲＥをシリアル化して記録に戻し；
（ｆ）ディスクにセクターを書き入れる。
【００８６】
この場合、ハッシュは、例えばハッシュは衝突するがセッションＩＤが異なる場合に発見的なものとして用いられること−ＰＲＥがイベントを無視する多少の可能性があることに注意されたい。また、２つ以上のハッシュカラムが必要な場合−例えば２つの別々のハッシュかラムが次のようなパターン等に必要となる場合もある。  
el and then e2 and then e3
where e2.x=e1.x and e3.y=e2.y
【００８７】
このようなパターンについては、各統合理論は各イベントタイプについて、異なるタイプの結合も使用する−例えばｅ２についてはｘに結合し、ｅ３についてはｙに結合する。このことは、２つのパターンタイプは、それらが同一数の結合を持つ時だけテーブルが共有できることも意味している。
【００８８】
まとめると、これは数百万パターンの中の数千のパターンを修正する可能性のある単一のＵＰＤＡＴＥステートメントである。これらのパターンの幾つかについては、それらのステータスが変更される場合がある。例えば、「支払い」イベントがＰＲＥに統合されると、ステータスは「待機中」から「不一致」に変更されるかもしれない。
【００８９】
次の難問は、所定のタイムアウト内にイベントが確認されないことで変更する場合、どのようにしてパターンのステータスを変えるかということである。このタイムアウトの評価は、次のようなＳＱＬステートメントによって、パターンテーブル上にある別のバルクオペレーションにより達成される。  
UPDATE Patterns SET PRE.OnWakeup()
WHERE PatternType=@PatternType AND Wakeup<@Now
FROM Patterns WITH(INDEX(Wakeup_Index))
【００９０】
このオペレーションがＷａｋｅｕｐ＿Ｉｎｄｅｘを使用しており、従ってタイムアウトに達したパターンを含むディスクセクターだけが検索されて更新されることに注意されたい。ＤｅａｄＬｏｃｋの機会はないが、それはこのオペレーションが特定のパターンタイプのテーブルの一部に局在しており、このパターンタイプについては統合（Ｍｅｒｇｅ）と同時に実行されないからである。
【００９１】
最後に、一致したパターンは次のようなステートメントとともに、別のテーブルにバルク移動する。  
INSERT MathcedPatterns
SELECT Patterns WITH(INDEX(Status_Index)
WHERE PatterType=@PatternType AND Status=Match
DELETE FROM Patterns WITH(INDEX(Status_Indes)
WHERE PatterType=@PatternType AND Status>Waiting
【００９２】
最後のステートメントは、例えば待機が０であり、一致（Ｍatch）および不一致（ＮｏＭａｔｃｈ）が＞０であることを予想している。副次的な影響として、「不一致」のパターンも他所へ移動しないままパターンテーブルから削除される。しかしこれは意図的なものである−不要なイベントを除去して、真に有用なもののみ出力するためのものである。
【００９３】
以上パターンを相関付けする中心概念について説明してきたが、最後の段階に戻りこの概念に基づき次にすべきことについて見てみる。そこには、明らかに２つの非常に異なるシナリオが存在している：
一致パターンを、ビジネス活動ソフトウェアプリケーション等のようなサブスクリプション（Ｓｕｂｓｃｒｉｐｔｉｏｎ）／ルーチン化メカニズムに送る。このようにパターンに関心のある人々には通知され、対応する措置（例えば「ＡＭＴ詐欺の可能性」に対するワークフローの始動）を取ることができる。
【００９４】
データを通常のＳＱＬ／ＯＬＡＰ／ＢＡＭの意味でクエリを行い、および分析に利用できるようにする。この場合、２つの変形がある。
【００９５】
一致パターンだけのクエリ能力および分析−例えば、人々がショッピングカートを放棄した理由（それは送料か？どの州／市内で、この問題が最も大きな事業損失の理由になっているか？）
終了していないものも含めたパターンの全てのインスタンスのクエリ能力および分析。これは特に、事業活動の観察といった長期稼働パターンにとって重要である。例えば、発送を伴う取引の事業を行う場合、完了していない発送の進行状況についてクエリ、または集約できることは重要である（例えばＲＦＩＤタグを付けたアイテムを運搬するトラックを想像する）。
【００９６】
これらのオプションのうち１）が最も簡便である−一致パターンを得て、それらを「イベント」として消費者に送るか、または更なるパターン評価のために送る。オプション２ｂは、最も複雑なものであるが、それはこれまでの我々のデータがＰＲＥバイナリーブロブ内に封入されているからである。図５は、このデータをクエリ能力のためにどのようにして露出させるかについて示している。ここでは、テーブルの定義は次のように変更されている。  
Create table Patterns_ShoppingCart
(
Hash as PRE.GetHash(0) persisted, -- promoted from the PRE
PRE as PatternRecognitionEngine,  -- this is UDT registered before
Status as PRE.Status persisted,   -- promoted from the PRE
Wakeup as PRE.Wakeup persisted    -- promoted from the PRE
Login as PRE.GetDataItem("LoginTime"),
Checkout as PRE.GetDataItem("CheckoutTime"),
ShipType as PRE.GetDataItem("ShipmentType")
)
【００９７】
ここでは、クエリおよび分析に必要な全てのカラムが、実際のＳＱＬカラムに昇格している。それらのＵＤＴからの昇格によるＣＰＵへのオーバーヘッドは僅かであるが、ディスクＩＯの追加はない。これに加えて、いくつかのカラムには“持続（Ｐｅｒｓｉｓｔｅｄ）”とマークすることができ、クエリを加速するためのインデックスにすら用いられる。
【００９８】
クエリ能力が必要な場合は、多くのパターンインスタンスについて、同一のテーブルを再使用することは不可能になること−見方を変えればテーブル自体は特定パターンタイプ専用であり、「パターンタイプ」カラムは有しておらず、またパターン定義に基づいて動的に作られることに注意されたい。
【図面の簡単な説明】
【００９９】
【図１】本発明の１つの実施態様による、一連イベント中のパターンを識別するためのシステムを描いたブロック図である。
【図２Ａ】本発明の１つの実施態様による、イベントと関連したスクリプトを実行するプロセスにおけるパターン認識エンジンの一例を描いた図である。
【図２Ｂ】本発明の１つの実施態様による、イベントと関連したスクリプトを実行するプロセスにおけるパターン認識エンジンの一例を描いた図である。
【図２Ｃ】本発明の１つの実施態様による、イベントと関連したスクリプトを実行するプロセスにおけるパターン認識エンジンの一例を描いた図である。
【図２Ｄ】本発明の１つの実施態様による、イベントと関連したスクリプトを実行するプロセスにおけるパターン認識エンジンの一例を描いた図である。
【図２Ｅ】本発明の１つの実施態様による、イベントと関連したスクリプトを実行するプロセスにおけるパターン認識エンジンの一例を描いた図である。
【図２Ｆ】本発明の１つの実施態様による、イベントと関連したスクリプトを実行するプロセスにおけるパターン認識エンジンの一例を描いた図である。
【図３】本発明の１つの実施態様による、パターンに関係するデータを記憶するためのデータ構造を描いた図である。
【図４】本発明の１つの実施態様による、図３の記憶データを、クエリに相応しい形に編成するためのデータ構造を描いた図である。
【図５】本発明の１つの実施態様による、イベントシリーズ中のパターンを認識するための、カスケード式サーバの集合を描いた図である。
【図６Ａ】本発明の１つの実施態様による、ホスティング環境により実行されるイベントシリーズ中のパターンを認識するための方法を描いた流れ図である。
【図６Ｂ】本発明の１つの実施態様による、ホスティング環境により実行されるイベントシリーズ中のパターンを認識するための方法を描いた流れ図である。
【図７】本発明が実行できる好適なコンピュータシステム環境の一例を描いたブロック図である。
【図１】
2008546054.tif 000005
【図２Ａ】
2008546054.tif 000006
【図２Ｂ】
2008546054.tif 000007
【図２Ｃ】
2008546054.tif 000008
【図２Ｄ】
2008546054.tif 000009
【図２Ｅ】
2008546054.tif 000010
【図２Ｆ】
2008546054.tif 000011
【図３】
2008546054.tif 000012
【図４】
2008546054.tif 000013
【図５】
2008546054.tif 000014
【図６Ａ】
2008546054.tif 000015
【図６Ｂ】
2008546054.tif 000016
【図７】
2008546054.tif 000017