(57)【要約】ページング可能クエリが、イベント処理クエリに基づいて生成され得る。ページング可能クエリは、メモリへの且つメモリからのイベント処理クエリのスワップをサポートする、イベント処理クエリの形式である。例えば、ページイントリガ及びページアウトトリガが挿入され得る。ページイントリガの検出後、イベント処理クエリは、メモリにロードされ得、ページアウトトリガの検出後、イベント処理クエリは、メモリからアンロードされ得る。
2018517202.tif 000002
【特許請求の範囲】
【請求項１】
イベント処理システムであって、
メモリに接続されたプロセッサであって、前記メモリに記憶されている以下のコンピュータ実行可能なコンポーネントを実行するよう構成されているプロセッサと、
イベント処理クエリを受信するよう構成されている第１のコンポーネントと、
前記メモリへの且つ前記メモリからの前記イベント処理クエリの少なくとも一部のスワップをサポートするページング可能な形式に、前記イベント処理クエリを書き換えるよう構成されている第２のコンポーネントと、
を備えるイベント処理システム。
【請求項２】
前記メモリへの前記イベント処理クエリの前記少なくとも一部のロードを開始させるページイントリガを挿入するよう構成されている第３のコンポーネント
をさらに備える、請求項１記載のイベント処理システム。
【請求項３】
前記ページイントリガは、前記イベント処理クエリの実行に関連する過去のデータに基づいて生成される、請求項２記載のイベント処理システム。
【請求項４】
前記メモリからの前記イベント処理クエリの前記少なくとも一部の除去を開始させるページアウトトリガを挿入するよう構成されている第３のコンポーネント
をさらに備える、請求項１記載のイベント処理システム。
【請求項５】
前記ページアウトトリガは、前記イベント処理クエリの実行に関連する過去のデータに基づいて生成される、請求項４記載のイベント処理システム。
【請求項６】
コンピュータにより実施される方法であって、
以下の動作を実行するための、メモリに記憶されているコンピュータ実行可能な命令を実行するよう構成されている少なくとも１つのプロセッサを使用する動作と、
イベント処理クエリを受信する動作と、
前記イベント処理クエリに基づいてページング可能クエリを生成する動作であって、前記ページング可能クエリは、前記メモリへの且つ前記メモリからの前記イベント処理クエリの少なくとも一部のスワップをサポートする、動作と、
を含む方法。
【請求項７】
前記メモリへの前記イベント処理クエリの前記少なくとも一部のロードを開始させるページイントリガを挿入する動作
をさらに含む、請求項６記載の方法。
【請求項８】
前記メモリからの前記イベント処理クエリの前記少なくとも一部の除去を開始させるページアウトトリガを挿入する動作
をさらに含む、請求項６記載の方法。
【請求項９】
トリガされるまで、前記メモリへの前記イベント処理クエリの前記少なくとも一部のロードを遅延させるメカニズムを挿入する動作
をさらに含む、請求項６記載の方法。
【請求項１０】
前記イベント処理クエリの実行に関連するデータを収集するメカニズムを挿入する動作
をさらに含む、請求項６記載の方法。
【請求項１１】
前記データに関して機械学習を用いて、ページイントリガ及びページアウトトリガのうちの少なくとも一方を推定する動作
をさらに含む、請求項１０記載の方法。
【請求項１２】
前記メモリからの前記イベント処理クエリのスワップに関連して、前記イベント処理クエリの前記少なくとも一部の状態を保存するメカニズムを挿入する動作
をさらに含む、請求項６記載の方法。
【請求項１３】
前記メモリへの前記イベント処理クエリのスワップに関連して、前記イベント処理クエリの前記少なくとも一部の状態を復元するメカニズムを挿入する動作
をさらに含む、請求項６記載の方法。
【請求項１４】
前記メモリから、前記イベント処理クエリの前記少なくとも一部のサブセットをスワップするメカニズムを挿入する動作
をさらに含む、請求項６記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
イベント処理システムは、イベントが受信されると、リアルタイムに継続的にイベントを処理する。イベントは、データのペイロードと、関連付けられた時間と、を含むデータアイテムである。イベント処理は、経時的に発生する一連のイベントである非同期のイベントシーケンス又はイベントストリームに対して作用する。イベントシーケンスの例は、株式の価格の変化及びソーシャルメディアメッセージを特定する株式ティックを含む。処理は、例えば、投影、フィルタリング、及び集約を可能にするクエリを用いてイベントシーケンスにわたって指定される。従来のデータベースクエリとは異なり、イベント処理クエリは、記憶されたデータに対して１回評価されるわけではない。むしろ、イベント処理クエリは、イベントが発生したときにイベントに対して継続的に評価される。実質的にリアルタイムの処理を可能にするために、イベント処理システムは、メモリにクエリを記憶し、イベントがシステムに到着するとクエリを評価する。
【発明の概要】
【０００２】
以下は、開示される主題のいくつかの態様の基本的な理解を提供するために、簡略化された概要を提示する。この概要は、広範な概要ではない。この概要は、重要な／不可欠な要素を特定することを意図するものではないし、特許請求される主題の範囲を線引きすることを意図するものでもない。その唯一の目的は、後で提示されるより詳細な説明の前置きとして、いくつかのコンセプトを簡略化された形で提示することである。
【０００３】
簡潔に記載すると、本開示は、イベント処理システムのページングに関する。メモリへの且つメモリからのイベント処理クエリのスワップをサポートするページング可能な形式のイベント処理クエリが生成される。例えば、イベント処理クエリは、ページイントリガ及びページアウトトリガ、並びに、ページアウトに関する遅延ロード及びクエリの保存をサポートする機能を含むように、書き換えられ得る。処理の際、イベント処理クエリは、ページイントリガが観測された後に、メモリにロードされ、ページアウトトリガが観測された後に、メモリから永続ストアにアンロードされる。
【０００４】
前述の目的及び関連する目的を達成するために、特許請求される主題の所定の例示的な態様が、以下の説明及び添付の図面に関連して、本明細書において記載される。これらの態様は、主題が実施され得る様々なやり方を示し、それらの全ては、特許請求される主題の範囲内にあることが意図されている。他の利点及び新規な特徴は、図面と併せて考慮すると、以下の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【０００５】
【図１】イベント処理システムのブロック図。
【図２】代表的なページングコンポーネントのブロック図。
【図３】代表的な書き換えコンポーネントのブロック図。
【図４】過去のデータに基づく統計収集機能及びページング機能を用いた書き換えのグラフィカル図。
【図５】イベント処理システムにおいてページング可能クエリを生成する方法のフローチャート図。
【図６】クエリをページングする方法のフローチャート図。
【図７】クエリをページインする方法のフローチャート図。
【図８】クエリをページアウトする方法のフローチャート図。
【図９】本開示の態様のための適切な動作環境を示す概略ブロック図。
【発明を実施するための形態】
【０００６】
イベント処理システムは、多数のサブスクリプション又は長期継続イベントクエリをホスト及びサービスすることを伴い得る。例えば、とりわけ、毎日の通勤交通量通知、最新の気象情報、お気に入りのトピックに関するニュース、最新のスポーツスコア、航空会社のフライト通知等に関連付けられるもの等、多くのクエリが、単一のユーザについて存在し得る。さらに、大規模イベント処理システム又はサービスのコンテキストにおいて、これは、処理するための何百万もの又はより大きな桁のクエリに対応し得る。イベント処理はまた、多数のサブスクリプションに加えて、多数のイベントを伴い得る。
【０００７】
ほぼリアルタイムに処理することを実現することは、イベント処理クエリに関連付けられたできるだけ多くのコードをメモリに記憶することを伴う。結果として、イベントが発生したとき、イベントを処理するためのコードをメモリにロードするために、遅延はもたらされない。しかしながら、イベント処理システムは、メモリに常駐したままであるときに些細でないメモリ量を占める小規模な継続クエリ及びそれほど小規模でない継続クエリを有することがある。有限のメモリ及び大規模処理の観点から、課題は、どのようにインテリジェントにイベント処理コードをメモリにスワップしメモリからスワップするかである。
【０００８】
オペレーティングシステムは、ページング技術を使用して、メモリ等の主記憶装置における使用のために、ディスク等の補助記憶装置に対してデータのページを読み書きすることにより、メモリを管理する。しかしながら、オペレーティングシステムのページングは、ドメインに依存しないため、いつ何をページイン及びページアウトするかについて最適ではない決定を行うことがある。さらに、汎用オペレーティングシステムに関連するページング技術は、高スループットイベント処理に十分には対応できず、過度のディスクアクセス及びメモリアクセスをもたらす。
【０００９】
以下の詳細は、一般に、イベント処理システムのページングに関する。クエリ又はその一部をメモリにスワップすること及びメモリからスワップすることをサポートするページング可能イベント処理クエリが生成される。ページングのサポートは、一実施形態に従って、イベント処理クエリを書き換えることにより、提供され得る。例えば、クエリ式が、ページイントリガ、ページアウトトリガ、並びに、遅延ロード及びクエリ保存の機能を用いて、自動的に書き換えられ得る。さらに、トリガは、イベントシーケンス又はイベントストリームに対して指定され得、したがって、イベント処理システムのドメイン特有の特性の利用を可能にする。クエリ実行に関するデータを収集する機能がまた、挿入され得る。その後、収集されたデータが、ページイントリガ及びページアウトトリガを指定するのに有用なパターンについて分析され得る。さらに、ページング機能は、例えば、クエリ演算子及びチェックポイント処理を含む、イベント処理システムの機能を利用することができる。
【００１０】
本開示の様々な態様が、添付の図面を参照して、これより、より詳細に説明される。図面において、同様の符号は、概して、全体を通じて同様の又は対応する要素を指す。しかしながら、図面及び図面に関連する詳細な説明は、特許請求される主題を、開示される特定の形態に限定することを意図するものではないことを理解されたい。そうではなく、意図は、特許請求される主題の主旨及び範囲内に属する全ての変更形態、均等形態、及び代替形態を網羅することである。
【００１１】
最初に図１を参照すると、イベント処理システム１００が示されている。オブザーバデザインパターンに従って、イベント処理システム１００は、１つ以上のオブザーバから、１つ以上のオブザーバブルイベントシーケンス又はストリームへのサブスクリプションを受け入れ、対応するサブスクリプションに則して１つ以上のオブザーバに通知を提供するよう構成されている。サブスクリプションは、１回実行されることが意図されているアドホッククエリではなく、サブスクリプションの長さの間に到着したときにデータを継続的に処理することを実行する継続クエリに対応し得る又はそのような継続クエリを含み得る。通知のタイプは、単純なアラートから、サブスクリプションを受け入れることもできる一連のイベントまで変わり得る。
【００１２】
イベント処理システム１００は、評価コンポーネント１１０、最適化コンポーネント１２０、及びページングコンポーネント１３０を含む。評価コンポーネント１１０は、イベント処理クエリ又はより単純にクエリを評価するよう構成されている。クエリは、とりわけ、投影、フィルタリング、及び集約を実行するためにイベント処理システムによりサポートされる複数のクエリ演算子を含むクエリ式の観点で指定され得る。クエリは、メモリにロードされ得、データを受信すると、評価コンポーネント１１０は、データに対してクエリを評価し、通知を生成することができる。
【００１３】
最適化コンポーネント１２０は、評価性能を向上させるように、受信されたクエリを最適化するよう構成されている。最適化コンポーネント１２０は、とりわけ、システムリソース負荷及び処理能力に関するクエリ及びデータの代数的性質を利用して、評価コンポーネント１１０による評価のために、修正されたクエリを生成することができる。非限定的な例として、最適化コンポーネント１２０は、一連のフィルタを単一のフィルタに結合したり、フィルタを移動させたり、並行処理のためにクエリを分割したりすることができる。
【００１４】
ページングコンポーネント１３０は、クエリをメモリにスワップしメモリからスワップするよう構成されている。より詳細には、ページングコンポーネント１３０は、クエリに関連付けられたコード及びデータをメモリにロードしメモリからアンロードするよう構成されている。本明細書において、クエリをメモリにロードすることは、クエリをページインすると呼ばれ、クエリをメモリからアンロードすることは、クエリをページアウトすると呼ばれる。本明細書において、ページイン及びページアウトが使用されるが、このことは、オペレーティングシステムにより従来行われているような、ページと呼ばれる記憶ブロックが、メモリにロードされること又はメモリからアンロードされることを必ずしも意味するものではない。そうではなく、記憶ブロックは、特定のクエリコード及びデータに関連付けられる実質的に任意のサイズであってよい。
【００１５】
一実施形態に従うと、ページングコンポーネント１３０は、ページングを実行するために、イベント処理システムの特徴及び機能を再使用することができる。１つのアプローチは、ページングを、特定のクエリ実行エンジン又は本明細書に記載の評価コンポーネント１１０内に構築することである。しかしながら、これは、例えば、スケジューラ、メモリマネージャ、及び入出力マネージャ等を伴うわずかな抽象化を有する低レベルページングシステムをもたらすことを伴う。本明細書において説明される第２のアプローチは、イベント−イベント処理の能力の上にページングを構築し、クエリ演算子を用いてページングを実施することである。以下でさらに説明されるように、１つ以上のクエリ演算子を含むクエリ式が、ページングのサポートを含むように書き換えられ得る。さらに、低レベルオペレーティングシステムページングメカニズムには利用可能でない、イベント処理システムの高レベルドメイン固有特性が、ページングのために利用され得る。
【００１６】
例えば、個人のフライトが遅れそうであるかどうかを個人に通知するフライト追跡クエリを考えてみる。このクエリは、フライトの予約時に実行依頼され得るが、フライト出発の１日前にアクティブになる必要があるだけである。このような継続クエリは、クエリが実行依頼される時間とクエリがアクティブになる時間との間に、潜在的には数ヶ月間、長く生存している。クエリに対応するコードは、ある期間の間いかなるイベントにも反応しないので、そのコードは、ページアウトされ、その後、フライト出発より１日前にページインされ得る。これは、クエリ内の明示的な時間を処理するので、非常に些細な例である。それでも、この例は、クエリをいつページイン及びページアウトするかについてインテリジェントな決定を行うために、クエリドメイン及びイベント空間の知識の使用を強調する。
【００１７】
図２に注目を移すと、代表的なページングコンポーネント１３０が示されている。ページングコンポーネント１３０は、書き換えコンポーネント２１０、統計ストア２２０、プロセスコンポーネント２３０、及び更新コンポーネント２４０を含む。書き換えコンポーネント２１０は、ページングのサポートを追加するようにクエリ式を書き換えるよう構成されている。すなわち、書き換えは、クエリをページング可能クエリにする。書き換えは、イベントシーケンスにおけるイベントの到着に基づいて、ページングをトリガすることができる。次のものに限定されるものではないが、ページングは、タイマイベント又はティックのシーケンスに基づいて、トリガされ得る。書き換えはまた、ページアウトをトリガするメカニズムを追加することを含み得る。さらに、書き換えは、遅延ロードだけでなく、ページングの決定を行うために実行データを収集して利用することにも関連し得る。詳細には、クエリ又はその一部には、クエリ実行に関するデータを収集し、そのデータを統計ストア２２０に保存する機能が挿入され得る。このようなデータは、とりわけ、イベントの数及びイベントがいつ発生したかを取り込むことができる。プロセスコンポーネント２３０は、このデータを分析及び処理して、ページング可能クエリを指定するのに有用であり得るパターンを検出するよう構成されている。例えば、イベント処理アクティビティが、午前８時に毎日生じる場合（例えば、イベントが、クエリの入力部のうちの１つに到着するため）、プロセスコンポーネント２３０は、このパターンを検出又は推定することができる。結果として、ページイントリガは、毎日午前８時より前とすることができ、ページアウトトリガは、午前８時より後の何らかの時間とすることができる。パターンに関するこのようなデータ又は情報が、クエリ又は同様のクエリについて利用可能である場合、書き換えコンポーネント２１０は、クエリをページング可能な形式に書き換えることを開始するための情報を利用することができる。一方、書き換えコンポーネントはまた、後続の更新を可能にするようにクエリを指定することもできる。更新コンポーネント２４０は、プロセスコンポーネント２３０により特定されたパターンに基づいて、ページング可能クエリを更新するよう構成されている。詳細には、ページイントリガ及びページアウトトリガは、クエリ及び関連するイベントに関する現在の知識を反映するように変更され得る。
【００１８】
しばらくの間図３に注目を移すと、例示的な書き換えコンポーネント２１０が、さらに詳細に示されている。図示されるように、書き換えコンポーネント２１０は、ページインコンポーネント３１０、演算コンポーネント３２０、及びページアウトコンポーネント３３０を含む。ページインコンポーネント３１０は、コードと場合によってはクエリ演算に関連付けられた状態データとを用いてメモリをロードするページイン機能をトリガする機能を、クエリ式に挿入するよう構成されている。ページイン機能は、タイマティック又は何らかの他のメッセージ等のイベントの発生に基づいて、トリガされ得る。さらに、ページインコンポーネント３１０は、例えば過去の実行の統計に基づいて、ページインをいつトリガするかを更新することを可能にする機能を挿入するよう構成されている。演算コンポーネント３２０は、クエリ式又はこれに関連付けられた演算の少なくとも一部が、メモリにスワップされること及びメモリからスワップされることを可能にする機能を挿入するよう構成されている。一実施形態において、これは、イベント処理システムの遅延ロード機能、及び、チェックポイント機能の形の演算子状態永続性を用いることにより、実現され得る。演算コンポーネント３２０はまた、実行に関するデータを収集し、該データを統計ストア２２０に保存する機能を挿入するよう構成されている。ページアウトコンポーネント３３０は、ページアウト動作をトリガする機能を挿入するよう構成されている。これは、少なくとも部分的に、イベント処理システムのチェックポイント機能を利用してクエリコード及び状態を永続ストアに保存し、例えば、ポインタをヌルに設定し、空間がガベージコレクションメカニズムにより回収されることを可能にすることによって、メモリからのコードのアンロードを開始することにより、実現され得る。例えば実行の統計に基づいてページアウト動作をいつトリガするかについての更新を可能にする機能がまた、ページアウトコンポーネント３２０により追加され得る。
【００１９】
以下は、本開示の態様の１つの例示的な実施形態に関連する詳細である。説明は、クエリコード及びタイマ付きのデータをページインすることから始まる。これに続いて、コードをページインするためのアクティブ化パターンが説明される。最後に、コード及びデータをページアウトすることの説明が提供される。
【００２０】
様々な継続クエリは、それらがアクティブになるよりもかなり前に実行依頼され得る。これらのクエリのうちの一部は、長く生存していることがある。フライト追跡クエリを考えてみる。フライトを追跡する継続クエリは、典型的には、２４時間持続する必要があるだけであり、例えば、空港に向けて出発すること又はキャンセルすることを示唆するための、チェックイン前の何らかの時間から始まって、例えば、空港で誰かを出迎えることを示唆するための、着陸後の何らかの時間まで持続する。しかしながら、フライト追跡についての継続クエリは、フライトの予約時に、処理のためにイベント処理システムに実行依頼され得る。さらに、フライトに関心を持つ複数の人についてのクエリが存在し得る。
【００２１】
このようなクエリを記述するために、時間ベースの演算子が、クエリの実行に時間期間を割り当てるために、しばしば使用される。フライトクエリの例では、「DelaySubscription」演算子又は「SkipUntil」演算子を使用して、フライト出発前の何らかの時間までイベントの処理を遅延させることができ、「TakeUntil」演算子を使用して、フライト着陸後のクエリの処分の点で、同様の効果を実現することができる。例えば：
【数１】
2018517202.tif 000003
である。上記のクエリ式は、クエリの代数的性質に基づいてページングをサポートするように書き換えられ得る。第１に、「DelaySubscription」演算子は、概して、他のクエリ演算子と入れ替わることができる（例えば、サブスクライブに起因する副作用がないいくつかの性質は、固定される必要があり得る）。すなわち、「DelaySubscription」演算子の順序は、他の演算子と比較して、重要ではない。したがって、「DelaySubscription」演算子は、コンシューマのより近くに押し下げられ得る。実際、この演算子は、以下のように、「Subscribe」呼び出しの直前に移動され得る：
【数２】
2018517202.tif 000004
次に、「DelaySubscription」演算子は、以下の代数恒等式を使用して、よりプリミティブな形に展開され得る：
【数３】
2018517202.tif 000005
ここで、「DelaySubscription」演算子のソース「xs」は、「SelectMany」演算子のセレクタ関数についてのラムダ式本体内で最後になる。このポイントにおいて、イベント処理システムに関連付けられたチェックポイント機能、詳細には、「SelectMany」等のより高位の演算子についてのチェックポイント処理が、使用され得る。セレクタ関数の本体がメモリにロードされなければならないのは、イベントが、「SelectMany」演算子のソース（この場合はタイマパルス）から到着するまでではない。運用例は、以下のように記述され得る：
【数４】
2018517202.tif 000006
このクエリのイタリック体の部分は、「トラップ」式を挿入することにより、クエリから押し上げられ得る。名前付きアーティファクトとしてオブザーバブル（イタリック体の部分の型）を定義する機能を用いることにより、このコード部分が除去され得る。新たなアーティファクトが、以下のように定義され得る：
【数５】
2018517202.tif 000007
アーティファクト「someId」は、コードを含まず識別子のみを含むオブザーバブル（例えば、型IObservable）である。この識別子は、クエリの上記の除去部分の代わりとして使用され得、それにより、１つのレベルの間接参照が挿入される。これは、元のクエリが、以下の最終形に書き換えられることを可能にする：
【数６】
2018517202.tif 000008
これは、特定のクエリを伴うサブスクリプションが、出発前の１２時間まで遅延されることを意味する。このポイントにおいて、「SelectMany」演算子が、イベントを受け取り、クエリコードが、例えば、ディスクからコードを読み出し、コードをコンパイルし、メモリにコードをロードすることにより、スワップインされ得る。その結果、クエリロジックについての常駐コードが著しく低減される。上記の最終形は、特にクエリ内で参照されるアーティファクトが内側位置（例えばラムダ式）において生じる場合には、評価コンポーネント１１０がクエリ内で参照されるアーティファクトの積極的なインライン展開を実行せず、むしろ、必要とされるまでインライン展開を遅らせることにより、遅延させて実行することを前提とする。このような挙動は、システムに組み込まれるか、又は、以下のように、書き換えコンポーネント２１０により追加されるか、のいずれかであり得る：
【数７】
2018517202.tif 000009
【００２２】
それ自体としては、「SelectMany」演算子は、１つ以上の「内側」のオブザーバブルに対して外側の「ソース」オブザーバブル及びサブスクリプションを切り離す。内側部分は、外側部分とは別にチェックポイント処理され得、この例におけるタイマシーケンス等、外側のソースサブスクリプションからイベントを受け取ると、インスタンス化されるだけである。しかしながら、これは、リソース利用の点で有益であることが分かった場合、さらにパターンを特別な演算子に簡約化することにより、さらに最適化され得る。例えば、「ContinueWith」演算子が、以下のように使用され得る：
【数８】
2018517202.tif 000010
【００２３】
さらなる最適化は、タイマ特性を利用することにより、例えば、複数のタイマを、次のレベルでタイマのインスタンス化をトリガするために使用され得るより粗い粒度のマスタタイマに融合することにより、行われ得る。これは、異なる継続クエリにわたって複数のタイマオブジェクトをインスタンス化するのではなく、タイマリソースを参照するオブジェクトを再使用できる点で有益であり得る。これらのオブジェクトは、O(n)空間を消費するハンドラリストと融合され得る。以下のクエリを考えてみる：
【数９】
2018517202.tif 000011
上述した技術を使用して、「SelectMany」演算子の内側部分がページアウトされ得る。しかしながら、常駐する「SelectMany」演算子は、タイマを融合することにより、さらに最適化され得る。タイマについての代数的書き換えは、以下の通りである：
【数１０】
2018517202.tif 000012
ここで、期限「t」であるタイマが、「N」という分解能であるより粗い粒度のタイマにされる。共通部分式削除を用いることで、タイマリソースが融合され得る。例えば、「N」が２４時間に設定されている場合、残りのタイマがインスタンス化されるのは、期限日の深夜までではない。したがって、１日タイマのみが１日ごとに常駐する必要がある。この例におけるタイマ「t1」及び「t2」が、同じ日「d」をもたらすと仮定すると、以下のようになる：
【数１１】
2018517202.tif 000013
【００２４】
さらに、（副作用に関するいくつかの前提条件が成り立つ場合、）「SelectMany」演算子は、以下の恒等式を使用して、「インサイドアウトに（inside  out）」変えられ得る：
【数１２】
2018517202.tif 000014
結果として、以下のクエリプランが生成される：
【数１３】
2018517202.tif 000015
「Timer(d)」を再使用することができるだけでなく、「SelectMany」演算子の本体をページアウトすることができる。書き換えコンポーネント２１０はまた、この技術を再帰的に再適用して、（例えば、１時間等の、Nより小さいMという分解能である）次のレベルの粗粒度タイマを得ることができる。
【００２５】
上述したページング方式は、必要とされる式を前もってフェッチする利点を有するので、ページインするコストは、タイマの精度に悪影響を及ぼさないことに留意されたい。このパラメータは、例えばクエリに渡される時間許容パラメータに基づいて、調整され得る。例えば、再使用の可能性を高めるために、タイマを、１分という分解能に丸めることができる。
【００２６】
上述したように、コードロードのタイマベースの遅延が、かなり頻繁に用いられ得るが、コードのタイマベースの遅延は、クエリが所定の形を有することを必要とする。しかしながら、クエリは、任意の形を有し得る。例えば、タイマ以外の何らかのイベントシーケンス又はイベントストリームが、クエリソースとして使用され得る。この場合、代数的書き換えだけでは十分でない場合がある。
【００２７】
そうではなく、クエリは、クエリ実行に関する統計を収集するためのコードを用いて書き換えられ得、統計は、統計ストア２２０に保存され得る。したがって、統計ストア２２０は、クエリ実行に関する過去の統計を保存することができる。プロセスコンポーネント２３０は、過去の統計に対して作用し、イベントがいつどれくらい発生するか等、ページングについての有用な情報を決定及び／又は推定するよう構成されている。書き換えコンポーネント２１０又は更新コンポーネント２４０は、ページングについて、クエリすなわちページイントリガ及びページアウトトリガを指定する際に、プロセスコンポーネント２３０からのデータ又は情報を使用することができる。
【００２８】
まれにイベントを生成するソースを考えてみる。ここで、クエリの残りの部分は遅延ロードされ得る。より一般的に、クエリは多くのソースを有し得るが、本明細書に記載の技術は等しく適用可能である。単純にするため、単一ソースのクエリを考えてみる。例えば、以下のクエリ式を考えてみる：
【数１４】
2018517202.tif 000016
シアトルの気象についてのパラメータ化されたストリームは、まれにイベントを生成し得るが、述部（摂氏３０度を超える気温）をパスするイベントの可能性は幾分低い。そのような情報は、クエリを書き換える際に考慮され得る基数推定値（より正確には、イベント処理システムにおける時間次元の重要性を所与とする速度推定値）を取得するためのクエリ計装により、得られ得る：
【数１５】
2018517202.tif 000017
上記において、「Measure」演算子は、ソースとして「xs」を取り込んで、これにサブスクライブするだけでなく、計測値をその部分式に関連付ける。例えば、「Measure」演算子は、部分式により生成されたイベント発生率のレコード履歴を記憶することができる。「weather(“SEA”）」が、同様に計装されるならば、部分式についての入口と出口との比率も算出され得る。これから、様々な種類の派生（イベント数、速度、加速度、ジャーク；処理時間等）の多くの統計を得ることができることを理解されたい。
【００２９】
「weather」ストリームのパラメータ化は、フィルタリングも提供するが、このストリームが、「Where」演算子を用いるフィルタリングを必要とする大規模な「ファイヤーホース（firehose）」であるならば、同じオブザベーションが適用されるであろうことに留意されたい：
【数１６】
2018517202.tif 000018
このような場合、クエリは、最も限定的な述部を最初に配置するように、例えばいくつかの連続する「Where」演算子節を用いて、正規化され得る。以下のことについては、気温条件が、イベントのまれなトリガを生じさせると仮定する。あるいは、より一般的に、
【数１７】
2018517202.tif 000019
において、ソース「xs」が、プロセスコンポーネント２３０により決定されるように、まれにイベントを生成する。このポイントにおいて、「xs」のイベントフローに、クエリロジックの残りの部分のページインをトリガさせることは、意味があるであろう。こうするために、タイマに類似する技術が使用され得るが、「xs」は、１より大きい値である基数を有することがあり、したがって、全てのメッセージについてではなく演算を１回ページインするのが望ましいことを覚えておいてほしい。一般的な形では、以下の書き換えが可能である：
【数１８】
2018517202.tif 000020
これは、非常に複雑に思えるかもしれないが、副作用の可能性がある一般的なケースにおいて必要とされる。詳細には、サブスクリプションの作成は、外部サービスとコンタクトする等の副作用を有する場合があるので、「xs」に複数回サブスクライブすることは、望ましくない場合がある。これは、「Publish」演算子の使用が役割を持つ場合である。サブスクリプションに応じて通知を生成するのを開始するのではなく、サブスクリプションに関係なく、通知が生成されることを意味する、「xs」がホットストリームであるならば、「Publish」演算子は除去され得る。上記のコードを単純化するために、「xs」が、所望される回数だけサブスクライブすることができるホットストリームであると仮定する：
【数１９】
2018517202.tif 000021
ここで、「xs」上の最初のイベントが到着するまで、任意の大きさ（例えば、Where(f).Select(p)）であり得る式「F」について、ロードが遅延されることがより明らかになる。元のクエリ式「F」がそのイベントを逃さないようにするために、書き換えコンポーネント２１０は、「xs」に対する新たなサブスクリプションの前に式を再挿入することができる。これは、「StartWith」演算子の実装が同期的であることを前提とし、「x」が取得されたときと、「xs」に対する内側サブスクリプションがなされるときと、の間で、「xs」上で受け取られるイベントを逃さないようになる。この保証が存在しない場合、他の演算子は、メッセージバッファを維持するように組み立てられ得る。
【００３０】
いずれにしても、ここから、タイマについて説明された技術と同じ技術が適用される。「SelectMany」演算子の内側部分は、メッセージ（タイマの場合には、これはティックであった）が到着すると、遅延してページインされ得る。この全てを行う特殊化された演算子「PageWhenFirstEventArrives」が、構築され得る：
【数２０】
2018517202.tif 000022
このような演算子は、上記で示されたような演算子の混成として構築されてもよいし、既存の遅延ロードメカニズム及びチェックポイント処理メカニズムを再使用するために、「SelectMany」演算子と同じより高位の演算子ベースクラスを使用する独自のプリミティブとして構築されてもよい。すなわち、最初のイベントが到着するまで、「ys.F()」に対するチェックポイント処理及びメモリ常駐のコストがない。さらに、この演算子へのパラメータは、以下のように、遅延ロードアーティファクトへと抽象化され得る：
【数２１】
2018517202.tif 000023
【００３１】
イベント到着トリガページングは、ロード時間に起因してメッセージ処理の遅延をもたらし得る。統計収集と連携して、例えば過去のデータから、次のメッセージ到着を予測できる場合には、これは軽減され得る。次いで、この情報を使用して、事前シグナルを生成することができる。これに関係なく、予測が間違っている場合には、イベントベースのトリガがやはり必要とされる。この観測結果を用いることで、「xs.First()」又はタイマを超えるページインイベントを可能にするように、ページング技術が一般化され得る。すなわち、以下の演算子を考えてみる：
【数２２】
2018517202.tif 000024
ここで、「ys」と別名が付けられた「xs」が、２つのラムダ式に入力される。２番目のラムダ式は、前述したように、ページング可能コードが挿入される場所である。１番目のラムダ式は、（「ys」と別名が付けられた）ソース「xs」を使用できる任意のオブザーバブルな式であり得るシグナルを提供する。例えば、最初のイベントが到着したときに又は予測タイマが満了したときに演算をページインすることが望ましい場合、「xs.F()」は、以下のように書き換えられ得る：
【数２３】
2018517202.tif 000025
イベント処理演算子の豊富な混成を再使用することにより、ページングシステムを構築するための非常にフレキシブルな手段が提供される。
【００３２】
イベント処理演算を表すコードをページインする上述したメカニズムが与えられると、２つのランタイムアーティファクト、すなわちページインされたコード及び新たに開始された演算により累積された状態、が生じる。結果として生じた演算に、新たな到来イベントがまれにしか与えられない（且つタイマがイベントストリームとしてモデル化されていると仮定した）場合、コード及び状態を含む演算をページアウトできることが有利である。
【００３３】
イベント処理システムは、状態をチェックポイント処理するメカニズムを含み得る。したがって、状態をチェックポイント処理することの既存の演算子サポートを用いて、実行中の演算を効果的にページアウトするためのページングをサポートすることができる。
【００３４】
フレキシビリティを提供するために、上述した「PageIn」演算子が、ページアウトシグナルも受け取る例示的な「Page」演算子に組み込まれ得る：
【数２４】
2018517202.tif 000026
この演算子の機能は、ページイン部分について先に示されたように、混成的に構築され得る。操作に関して、「Page」演算子は、ライフサイクル中にいくつかのことを行う。この演算子は、ソースに対するサブスクリプションの副作用を繰り返すことなく、且つ、ロック方式又は限られたバッファリングのいずれかを使用することによりメッセージを失うことなく、供給された関数にメッセージを伝えるための主部を導入しているソースにサブスクライブする。さらに、「Page」演算子は、いくつかのアクションを繰り返し実行する。まず、伝えられたソースを「pageIn」関数に入力し、その結果にサブスクライブする。通知を受け取ると、伝えられたソースを「compute」関数に入力し、結果として生じたイベントを下流のオブザーバに入力し、伝えられたソースを「pageOut」関数に入力する。「pageOut」関数にはまた、決定を行うためのさらなるデータが入力され得、限定ではなく例として、イベント発生の計測を可能にし、イベント発生率が、予め定められた長期の期間の間０であり続けたときにページアウトするように、演算の結果が、「pageOut」演算子に渡され得る。「pageOut」関数チェックポイント現在演算状態に関連付けられた通知を受け取ると、ランタイムアーティファクトをページアウトし、ライフサイクルを繰り返す。
【００３５】
使用例が以下に示される：
【数２５】
2018517202.tif 000027
「pageIn」関数がメッセージを生成するまで、「pageOut」関数さえもページアウトされ得る。すなわち、書き換えコンポーネント２１０は、以下のように、遅延ロード引数を導入することができる：
【数２６】
2018517202.tif 000028
ここで、「someId1」及び「someId2」は、前述のように定義される。操作に関して、この演算子は、「xs」にサブスクライブし、最初のイベントを受け取ると又は予測イベントが到着すると、演算をページインする。演算は、調整された入力シーケンスがイベントを受け入れると、ページアウトされる。すなわち、入力イベントの後時間「t2」内に、別のイベントが続かなかった場合、これは、ページアウト機能に伝わり、「t2」時間を超えて非アクティブであることに起因してページアウトを生じさせる。
【００３６】
更新コンポーネント２４０は、取り込まれた過去のクエリ実行データに応じて、プロセスコンポーネント２３０から得られた現在のデータ又は情報に基づいて、ページングの動作を更新又は変更するよう構成されている。定義されたアーティファクト又は識別子の使用は、「Page」演算子に関連付けられたページング機能を動的に変更するために使用され得る１つのレベルの間接参照を提供する。
【数２７】
2018517202.tif 000029
上記のフラグメントにおいて、「pageIn」についての遅延ロードも挿入されている。これは、最初のサブスクリプションについては無駄であり得るが、クエリが繰り返しページアウトし再度ページインする場合には成功する。このポイントにおいて、書き換えコンポーネント２１０又は更新のために指定される別個の更新コンポーネント２４０は、ページアウト挙動をそれほど積極的にしないように且つ／又はページイン挙動をより積極的にするように、何らかのポイントにおける「someId3」及び「someId2」を再定義することができる。更新を可能にするために、これらのページング機能を表す式は、積極的にインライン展開されるべきではなく、したがって、「Defer」演算子が使用される。
【００３７】
図４は、過去のデータに基づく統計収集機能及びページング機能を用いた書き換えのグラフィカル図を示している。左側で始まって、初期ジオフェンスクエリ４００が受信される。ジオフェンスクエリ４００は、仮想境界線を設定し、パラメータ「Bart（バート）」、パラメータ「leaves（出る）」、及びパラメータ「home（自宅）」に基づいて、「バートが自宅を出る（Bart  leaves  home）」と、イベントを生成する。ジオフェンスクエリ４００は、ジオフェンスクエリのページング可能バージョン４１０を生成するように書き換えられ得る。ページング機能は、「SelectMany」演算子の一般化とすることができる。ここで、ジオフェンスクエリ４００は、２つの部分において書き換えられ、その第１の部分４２０は、メモリに常駐する必要があるコードを表し、その第２の部分４３０は、ページインイベントの発生とページアウトイベントの発生との間を除いてメモリに常駐する必要がないコードを表す。クエリ実行に関する統計データを収集し、過去統計ストア４４０に該統計データを保存する統計収集コードがまた、クエリの第２の部分４３０に追加される。書き換えはまた、クエリの第２の部分４３０がメモリにいつスワップされるかを制御するページイン機能４５０と、クエリの第２の部分４３０がメモリからいつスワップされるかを制御するページアウト機能４６０と、を挿入する。さらに、ページイン機能４５０及びページアウト機能４６０は、統計データに基づいて決定される。過去統計ストアに示されるように、統計は、パラメータ「Bart（バート）」、パラメータ「leaves（出る）」、及びパラメータ「home（自宅）」について、ジオフェンスが典型的にはいつ破られるかに留意して、以前のクエリ実行に基づいて収集され得る。ジオフェンスが午前８時付近に典型的には破られることが、データに基づいて決定又は推定され得る。したがって、ページイン機能４５０は、午前８時より前（例えば午前７時４５分）にトリガするように設定され得、ページアウト機能は、午前８時より後（例えば８時１５分）にトリガするように設定され得る。機械学習等のより先進的な分析を利用することで、クエリについてのトリガが、平日では午前８時付近であり、週末では午前１０時付近であることが推定され得る。したがって、ページインイベント及びページアウトイベントについてのイベントシーケンスは、２４時間周期タイマ（例えば毎日７時４５分にページイン）から、発見されたパターンを考慮したより複雑なシーケンスに変わり得る。
【００３８】
しばらくの間図１に戻って参照すると、最適化コンポーネント１２０及びページングコンポーネント１３０は、別々のエンティティとして示されていることに留意されたい。最適化コンポーネント１２０は、ページングコンポーネント１３０により本質的になされないクエリ最適化を提案することができる。すなわち、ページングコンポーネント１３０は、最適化されたクエリを最適化解除又は逆最適化して、クエリをページング可能にすることができる。例えば、最適化コンポーネント１２０は、二重の「SelectMany」演算子をインライン展開しないようにすることができるが、ページングコンポーネント１３０は、これを逆にして、これらの演算子をインライン展開することができる。別の実施形態に従うと、ページングコンポーネント１３０の機能は、最適化コンポーネントの結果が最適化されたページング可能クエリであるように、最適化コンポーネント１２０内に組み込まれてもよい。
【００３９】
前述のシステム、アーキテクチャ、環境等は、いくつかのコンポーネント間の相互作用に関して説明されている。このようなシステム及びコンポーネントは、これらの中で特定されたコンポーネント又はサブコンポーネント、特定されたコンポーネント又はサブコンポーネントの一部、及び／又は追加のコンポーネントを含んでもよいことを理解されたい。サブコンポーネントはまた、親コンポーネント内に含まれるものではない他のコンポーネントに通信可能に接続されるコンポーネントとして実装されてもよい。さらに、１つ以上のコンポーネント及び／又はサブコンポーネントは、集約機能を提供するように、単一のコンポーネントに結合されてもよい。システム、コンポーネント、及び／又はサブコンポーネントの間の通信は、プッシュモデル及び／又はプルモデルに従って実現され得る。コンポーネントはまた、簡潔さのために本明細書において詳細には記載されていないが当業者に知られている１つ以上の他のコンポーネントと相互作用することもできる。
【００４０】
さらに、上記の開示されたシステム及び以下の方法の様々な部分は、人工知能、機械学習、又は、知識ベースの若しくはルールベースのコンポーネント、サブコンポーネント、プロセス、手段、方法論、若しくはメカニズム（例えば、サポートベクタマシン、ニューラルネットワーク、エキスパートシステム、ベイジアンネットワーク、ファジィ論理、データフュージョンエンジン、分類器等）を含み得る又はこれらを使用し得る。そのようなコンポーネントは、特に、そのようなコンポーネントにより実行される所定のメカニズム又はプロセスを自動化して、システム及び方法の諸部分をより適応的にするとともに、効率的且つインテリジェントにすることができる。限定ではなく例として、プロセスコンポーネント２３０は、そのようなメカニズムを使用して、いつページイン及びページアウトするかを決定するのを容易にするために、継続クエリについてのアクティブな時間期間を推定することができる。
【００４１】
上述した例示的なシステムを考慮して、開示される主題に従って実施され得る方法が、図５〜図８のフローチャートを参照することにより、より良く理解されるであろう。説明を簡単にするために、方法が、一連のブロックとして図示され説明されるが、特許請求される主題は、これらのブロックの順序により限定されるものでないことを理解されたい。なぜならば、いくつかのブロックは、異なる順序で生じることもあるし、且つ／又は、本出願において図示され説明されるものからの他のブロックと並行して生じることもあるからである。さらに、以下で説明される方法を実施するために、図示されるブロックの全てが必要とされるわけではない。
【００４２】
図５を参照すると、イベント処理システムにおいてページング可能クエリを生成する方法５００が示されている。符号５１０において、継続イベント処理クエリが、受信される、検索される、又は他の形で得られる若しくは取得される。継続イベント処理クエリは、イベントシーケンス又はイベントストリームに対して、経時的に継続的に評価される。
【００４３】
符号５２０において、ページイントリガがクエリに挿入される。ページイントリガは、クエリ又はその一部をいつメモリにロードするかを特定する。ページイントリガは、クエリにより処理されるイベントの発生後に定義されてもよいが、ページイントリガは、クエリにより処理されるイベントの発生前に指定されることが好ましい。これは、クエリ演算子のパラメータ及び代数的性質に基づいて決定されることが可能であり得る。追加的又は代替的に、クエリの実行に関連して収集されたデータを使用して、ページイントリガを決定及び更新してもよい。
【００４４】
符号５３０において、クエリ又はその一部をページインする機能、すなわち、クエリ又はその一部をメモリにロードする機能が挿入される。一実施形態に従うと、ページイン機能は、「SelectMany」演算子の内側シーケンスの遅延ロード、及び、コードと状態を取り込んだデータとを含め、クエリ又はその一部をロードするためのチェックポイント処理メカニズムを含むイベント処理システム機能を利用することができる。さらに、クエリの実行に関するデータを取得する機能が挿入され得る。とりわけ、アクティブな時間が、このデータから予測され、ページイントリガ及びページアウトトリガを設定又は更新するために使用され得る。
【００４５】
符号５４０において、ページアウトトリガが挿入される。ページアウトトリガは、クエリがメモリからいつ除去又はアンロードされ得るかを示す。例えば、これは、とりわけ、予め定められた時間の後であってもよいし、予め定められた、非アクティブである時間の後であってもよい。さらに、ページアウトトリガは、予測されたアクティビティ時間又は処理時間等の収集された実行データに基づいて、生成及び更新され得る。
【００４６】
符号５５０において、クエリをページアウトする機能が挿入され得る。一実施形態に従うと、ページアウト機能は、イベント処理システムにより提供されるチェックポイント処理に関連付けられる状態永続性を利用することができる。例えば、コード及びコードの状態が、永続データストアに保存され得る。その後、クエリが、メモリから除去又はアンロードされ得る。これは、例えば、メモリを解放することにより直接的に、又は、例えば、ヌルポインタを設定することにより若しくはガベージコレクションを開始するために参照カウンタをゼロに減少することにより間接的に、行われ得る。
【００４７】
図６は、クエリをメモリにページインしメモリからページアウトする方法６００を示している。符号６１０において、ページイントリガが検出される。符号６２０において、コードと場合によっては状態を取り込んだデータとを含む継続イベント処理クエリ又はその一部がページインされる。すなわち、以前にはメモリになかったデータに対してクエリを評価するために必要とされるコードがメモリにロードされる。一実施形態に従うと、コードの遅延ロードに関する、クエリ処理システムの機能を使用して、クエリをページインすることができる。符号６３０において、ページアウトトリガが検出され得る。次いで、符号６４０において、クエリ又はその一部がページアウトされ得る。一実施形態において、クエリ処理システムのチェックポイント機能を使用して、コード及び状態を永続データストアに保存することができる。その後、メモリを解放することにより直接的に、又は、ポインタをヌルに設定することにより若しくはガベージコレクションを開始するために参照カウンタを減少することにより間接的に、クエリがメモリから除去され得る。一実施形態に従うと、クエリ全体又はその一部がページアウトされる必要はなく、クエリのサブセットのみがページアウトされ得る。例えば、ネストされたクエリが存在する状況において、最高のメモリ消費サブツリーをページアウトする等、任意のレベルで諸部分を選択的にページアウトする方策を用いることができる。
【００４８】
図７は、クエリをページインする方法７００を示している。符号７１０において、識別子が読み取られる。開示される主題の１つの態様に従うと、１つのレベルの間接参照が使用され得、この場合において、クエリへの参照すなわち識別子のみが、メモリに常駐する。これは、クエリのロードを遅延させるメカニズムを提供する。符号７２０において、識別子に関連付けられたクエリ又はその一部が特定される。例えば、ディクショナリ記憶構造又はキー−値ストアは、クエリを記憶することができる。この場合、識別子は、データとして記憶されているクエリを取得するためのキーとして使用される。符号７３０において、クエリ又はその一部が、実行可能コードにコンパイルされる。符号７４０において、実行可能コードが、メモリ内でインライン展開される。別の言い方をすれば、実行可能コードが、識別子に置き換わって、メモリにロードされる。最後に、符号７５０において、クエリに関連する状態が、永続ストレージから取得され、復元される。もちろん、このクエリが最初にページインされた場合は、状態は、何らかの初期状態である又は何の状態でもない。
【００４９】
図８は、クエリをページアウトする方法８００のフローチャート図である。符号８１０において、クエリ又はその一部がチェックポイント処理される。これは、クエリに関連付けられた識別子、クエリ自体、及びクエリの状態を永続ストレージに保存することに対応し得る。一実施形態に従うと、このチェックポイント機能は、イベント処理システムにより提供され、クエリをページアウトする際の使用のために単に呼び出され得る。符号８２０において、メモリから除去する、クエリの部分が特定される。一実施形態に従うと、実質的にクエリ全体又は全ての部分が、クエリをページインするための必要とされるフックを除いて、メモリから除去され得る。別の実施形態に従うと、最高のメモリ消費部分等の、クエリのサブセットのみが、メモリから除去される。一例において、クエリはネストされ得、任意のレベルで諸部分を選択的に除去する方策が実装され得る。符号８３０において、クエリの特定された部分が、メモリから除去される。例えば、クエリは、メモリから直接的に解放され得る、又は、参照ポインタをヌルに設定することにより若しくは参照カウンタをゼロに減少することにより、間接的にガベージコレクションされ得る。
【００５０】
イベントシーケンス又はイベントストリームとして表され得るデータは、ページイン機能及びページアウト機能についての決定プロセスの一部として使用され得る。１つの特定の例において、例えば、物理メモリ及び中央処理装置に関連付けられるシステムイベントは、イベントストリームとして表され得る。従来、オペレーティングシステムベースのページングメカニズムは、これらのタイプのシステムメトリックを排他的に処理している。これらのメトリックは、本明細書に記載のドメイン固有の決定プロセスにとっては副次的である。実際、ドメインの知識は、システムレベルメトリックを使用してクエリをメモリにページインしメモリからページアウトするエッジケースを低減させる。しかしながら、比較的短い時間期間にわたって又は予測パワーが良好でない時間にわたって多数のイベントが発生する状況であるイベントストームに関して、イベント処理システムは、過剰コミットを回避するために、システムイベントに基づくページングにフォールバックすることができる。さらに、システムイベントに基づく分散環境イベント処理を用いて、演算を異なるマシンに移行することにより負荷の自己バランシングを促すことができる。
【００５１】
本開示文書の態様は、小規模デバイス処理としての大規模分散処理に適用可能である。例えば、本開示の態様は、多くのユーザの多くのクエリを処理する分散イベント処理システム又はサービスと組み合わせて実施することができる。このシナリオにおいて、ページングは、メモリ密度を増大させて、多数のクエリの処理を助けることができる。態様は、電話機等の単一のコンピューティングデバイスにも適用可能である。ここでは、例えば、ページングを用いて、メモリから１つ以上のユーザクエリを除去し、バッテリ電力を節約するためにバックグラウンド処理を除去することができる。
【００５２】
本開示は、イベント処理システムにおいてページングに関する様々なアクションを実行する又はそのようなアクションを実行するよう構成されている様々な製品及びプロセスをサポートする。以下は、１つ以上の例示的なシステム及び方法である。
【００５３】
システムは、
メモリに接続されたプロセッサであって、前記メモリに記憶されている以下のコンピュータ実行可能なコンポーネントを実行するよう構成されているプロセッサと、
イベント処理クエリを受信するよう構成されている第１のコンポーネントと、
前記メモリへの且つ前記メモリからの前記イベント処理クエリの少なくとも一部のスワップをサポートするページング可能な形式に、前記イベント処理クエリを書き換えるよう構成されている第２のコンポーネントと、
を備える。
本システムは、前記メモリへの前記イベント処理クエリの前記少なくとも一部のロードを開始させるページイントリガを挿入するよう構成されている第３のコンポーネントをさらに備えてもよい。
一例において、前記ページイントリガは、前記イベント処理クエリの実行に関連する過去のデータに基づいて生成される。
本システムは、前記メモリからの前記イベント処理クエリの前記少なくとも一部の除去を開始させるページアウトトリガを挿入するよう構成されている第３のコンポーネントをさらに備えてもよい。
一例において、前記ページアウトトリガは、前記イベント処理クエリの実行に関連する過去のデータに基づいて生成される。
本システムは、前記イベント処理クエリの実行に関するデータを収集するよう構成されている第３のコンポーネントをさらに備えてもよい。
【００５４】
方法は、
以下の動作を実行するための、メモリに記憶されているコンピュータ実行可能な命令を実行するよう構成されている少なくとも１つのプロセッサを使用する動作と、
イベント処理クエリを受信する動作と、
前記イベント処理クエリに基づいてページング可能クエリを生成する動作であって、前記ページング可能クエリは、前記メモリへの且つ該メモリからの前記イベント処理クエリの少なくとも一部のスワップをサポートする、動作と、
を含む。
本方法は、前記メモリへの前記イベント処理クエリの前記少なくとも一部のロードを開始させるページイントリガを挿入する動作をさらに含む。
本方法は、前記メモリからの前記イベント処理クエリの前記少なくとも一部の除去を開始させるページアウトトリガを挿入する動作をさらに含む。
本方法は、トリガされるまで、前記メモリへの前記イベント処理クエリの前記少なくとも一部のロードを遅延させるメカニズムを挿入する動作をさらに含む。
本方法は、前記イベント処理クエリの実行に関連するデータを収集するメカニズムを挿入する動作をさらに含む。
本方法は、前記データに関して機械学習を用いて、ページイントリガ及びページアウトトリガのうちの少なくとも一方を推定する動作をさらに含む。
本方法は、前記メモリからの前記イベント処理クエリのスワップに関連して、前記イベント処理クエリの前記少なくとも一部の状態を保存するメカニズムを挿入する動作をさらに含む。
本方法は、前記メモリへの前記イベント処理クエリのスワップに関連して、前記イベント処理クエリの前記少なくとも一部の状態を復元するメカニズムを挿入する動作をさらに含む。
本方法は、前記メモリから、前記イベント処理クエリの前記少なくとも一部のサブセットをスワップするメカニズムを挿入する動作をさらに含む。
【００５５】
命令を記憶しているコンピュータ読み取り可能な記憶媒体であって、前記命令は、少なくとも１つのプロセッサが、前記命令を実行したときに、方法を実行することを可能にし、前記方法は、
イベントシーケンスに関するページイントリガを検出する動作と、
前記ページイントリガを検出したことに応じて、イベント処理クエリの少なくとも一部をメモリにロードする動作と、
を含む。
前記方法の前記イベント処理クエリをロードすることは、
識別子に基づいて、前記イベント処理クエリの前記少なくとも一部のデータ表現を特定することと、
前記データ表現を実行可能コードにコンパイルすることと、
を含んでもよい。
前記方法は、前記イベントシーケンスに関するページアウトトリガを検出する動作と、
前記ページアウトトリガを検出したことに応じて、前記メモリから前記イベント処理クエリの前記少なくとも一部をアンロードする動作と、
をさらに含んでもよい。
前記方法の前記イベント処理クエリをアンロードすることは、前記イベント処理クエリの現在の状態を取得する状態取得動作を開始することを含んでもよい。
前記方法の前記イベント処理クエリをアンロードすることは、前記イベント処理クエリの前記少なくとも一部のサブセットのみをアンロードすることを含んでもよい。
【００５６】
本開示の態様は、継続クエリを処理することに伴うコンピュータメモリの管理の技術的問題に関する。この問題に対処することに関連する技術的特徴は、メモリへのページイン及びメモリからのページアウトをサポートするようにクエリを書き換えることによりメモリを管理するイベント処理システムの使用を含む。したがって、本開示の態様は、メモリの節約及び処理速度の増大を含むがこれらに限定されないリソースの効率的な使用に関する技術的効果を示す。
【００５７】
「例示的」という用語又はその様々な語形は、本明細書において、例、事例、又は例示としての役割を果たすことを意味するよう使用されている。「例示的」として本明細書に記載されている任意の態様又は設計は、必ずしも、他の態様又は設計よりも好ましい又は有利であるとして解釈されるべきではない。さらに、例は、明瞭化及び理解の目的のために提供されているに過ぎず、特許請求される主題又は本開示の関連部分を限定又は制限することを意図するものではない。変化する範囲の多数の追加又は代替の例が提示されてもよいが、簡潔さのために省略されていることを理解されたい。
【００５８】
本明細書で使用される場合、「コンポーネント」及び「システム」という用語並びにそれらの様々な語形（例えば、コンポーネント、システム、サブシステム等）は、コンピュータ関連エンティティ、ハードウェア、ハードウェアとソフトウェアとの組合せ、ソフトウェア、又は実行中のソフトウェアを指すよう意図されている。例えば、コンポーネントは、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、インスタンス、実行可能ファイル、実行スレッド、プログラム、及び／又はコンピュータであってよいが、これらに限定されるものではない。例えば、コンピュータ上で実行されるアプリケーション及びコンピュータの両方が、コンポーネントであってよい。１つ以上のコンポーネントが、実行プロセス及び／又は実行スレッド内に存在してもよく、コンポーネントが、１つのコンピュータ上に局在してもよいし、且つ／又は、２つ以上のコンピュータの間で分散されてもよい。
【００５９】
本説明及び請求項において使用される「又は」という接続詞は、別途指定されない限り又は文脈から明らかでない限り、排他的な「又は」ではなく包含的な「又は」を意味するよう意図されている。すなわち、「Ｘ」又は「Ｙ」は、「Ｘ」及び「Ｙ」の包含的な置換の全てを意味するよう意図されている。例えば、“「Ａ」が「Ｘ」を使用する”場合、“「Ａ」が「Ｙ」を使用する”場合、又は“「Ａ」が「Ｘ」及び「Ｙ」の両方を使用する”場合、“「Ａ」が「Ｘ」又は「Ｙ」を使用する”は、前述の場合のうちのいずれにおいても満たされる。
【００６０】
さらに、「含む」という用語、「有する」という用語、又はこれらの変化形が、詳細な説明又は請求項において使用される限りにおいて、そのような用語は、「備える」という用語が請求項において移行語として使用されるときに解釈されるのと同様に、非排他的であることが意図されている。
【００６１】
特許請求される主題についてのコンテキストを提供するために、図９及び以下の記載は、主題の様々な態様を実施することができる適切な環境の簡潔で概括的な説明を提供するよう意図されている。しかしながら、この適切な環境は、例に過ぎず、使用又は機能の範囲について限定を示唆するようには意図されていない。
【００６２】
上記で開示されたシステム及び方法は、１つ以上のコンピュータ上で実行されるプログラムのコンピュータ実行可能な命令の一般的なコンテキストにおいて説明され得るが、態様は、他のプログラムモジュール等とともに実施されてもよいことが、当業者には認識されよう。一般に、プログラムモジュールは、とりわけ、特定のタスクを実行する且つ／又は特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造を含む。さらに、上記のシステム及び方法は、シングルプロセッサ、マルチプロセッサ、又はマルチコアプロセッサのコンピュータシステム、ミニコンピューティングデバイス、メインフレームコンピュータだけでなく、パーソナルコンピュータ、ハンドヘルドコンピューティングデバイス（例えば、携帯情報端末（ＰＤＡ）、電話機、時計等）、マイクロプロセッサベースの又はプログラム可能なコンシューマ電子機器又は産業用電子機器等を含む様々なコンピュータシステム構成により実施できることが、当業者には理解されよう。態様はまた、通信ネットワークを介して接続されるリモート処理デバイスによりタスクが実行される分散コンピューティング環境においても実施することができる。しかしながら、特許請求される主題の全てではないにしても一部は、スタンドアロンコンピュータ上で実施することができる。分散コンピューティング環境において、プログラムモジュールは、ローカルメモリデバイス及びリモートメモリデバイスの一方又は両方に配置され得る。
【００６３】
図９を参照すると、例示的な汎用コンピュータ又はコンピューティングデバイス９０２（例えば、デスクトップ、ラップトップ、タブレット、時計、サーバ、ハンドヘルド、プログラム可能なコンシューマ電子機器又は産業用電子機器、セットトップボックス、ゲームシステム、コンピュートノード等）が示されている。コンピュータ９０２は、１つ以上のプロセッサ９２０、メモリ９３０、システムバス９４０、１つ以上の大容量記憶デバイス９５０、及び１つ以上のインタフェースコンポーネント９７０を含む。システムバス９４０は、少なくとも上記のシステムコンポーネントを通信可能に接続する。しかしながら、その最も単純な形態では、コンピュータ９０２は、メモリ９３０に記憶されている、様々な実行可能なアクション、命令、及び／又はコンポーネントを実行する、メモリ９３０に接続される１つ以上のプロセッサ９２０を含み得ることを理解されたい。
【００６４】
１つ以上のプロセッサ９２０は、本明細書に記載の機能を実行するように設計された、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、若しくは他のプログラマブルロジックデバイス、ディスクリートゲート若しくはトランジスタロジック、ディスクリートハードウェアコンポーネント、又はこれらの任意の組合せを用いて実装され得る。汎用プロセッサは、マイクロプロセッサであってよいが、代替として、プロセッサは、任意のプロセッサ、コントローラ、マイクロコントローラ、又は状態機械であってもよい。１つ以上のプロセッサ９２０はまた、例えば、ＤＳＰとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、マルチコアプロセッサ、ＤＳＰコアと組み合わせた１つ以上のマイクロプロセッサ、又は任意の他のそのような構成といったコンピューティングデバイスの組合せとして実装されてもよい。一実施形態において、１つ以上のプロセッサは、グラフィックスプロセッサであってもよい。
【００６５】
コンピュータ９０２は、特許請求される主題の１つ以上の態様を実施するようにコンピュータ９０２の制御を円滑にするために、様々なコンピュータ読み取り可能な媒体を含んでもよいし、そのような様々なコンピュータ読み取り可能な媒体と相互作用してもよい。コンピュータ読み取り可能な媒体は、コンピュータ９０２によりアクセス可能であり、揮発性媒体及び不揮発性媒体並びに取り外し可能な媒体及び取り外し不可能な媒体を含む任意の利用可能な媒体であってよい。コンピュータ読み取り可能な媒体は、２つの異なる相互に排他的なタイプの媒体、すなわち、コンピュータ記憶媒体及び通信媒体を含み得る。
【００６６】
コンピュータ記憶媒体は、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、又は他のデータ等の情報の記憶のための任意の方法又は技術により実装された揮発性及び不揮発性の取り外し可能及び取り外し不可能な媒体を含む。コンピュータ記憶媒体は、メモリデバイス（例えば、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的に消去可能なプログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ）等）、磁気記憶デバイス（例えば、ハードディスク、フロッピー（登録商標）ディスク、カセット、テープ等）、光ディスク（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）等）、及びソリッドステートデバイス（例えば、ソリッドステートドライブ（ＳＳＤ）、フラッシュメモリドライブ（例えば、カード、スティック、キードライブ等）等）、又は、コンピュータ９０２によりアクセス可能な所望の情報を伝送又は通信するのではなく、そのような情報を記憶する任意の他の同様の媒体を含む。したがって、コンピュータ記憶媒体は、変調されたデータ信号、及び、通信媒体に関して説明される媒体を含まない。
【００６７】
通信媒体は、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、又は他のデータを、搬送波又は他の伝送機構等の変調されたデータ信号で具現化するものであり、任意の情報配信媒体を含む。「変調されたデータ信号」という用語は、信号内の情報を符号化するように設定又は変更された、信号の特性のうちの１つ以上を有する信号を意味する。限定ではなく例として、通信媒体は、有線ネットワーク又は直接配線接続等の有線媒体と、音響、ＲＦ、赤外線、及び他の無線媒体等の無線媒体と、を含む。
【００６８】
メモリ９３０及び１つ以上の大容量記憶デバイス９５０は、コンピュータ読み取り可能な記憶媒体の例である。コンピューティングデバイスの正確な構成及びタイプに応じて、メモリ９３０は、揮発性（例えば、ＲＡＭ）であってもよいし、不揮発性（例えば、ＲＯＭ、フラッシュメモリ等）であってもよいし、これら２つの何らかの組合せであってもよい。例えば、起動中等にコンピュータ９０２内の要素間で情報を転送するための基本ルーチンを含む基本入出力システム（ＢＩＯＳ）は、不揮発性メモリに記憶され得るのに対し、揮発性メモリは、とりわけ、１つ以上のプロセッサ９２０による処理を円滑にするための外部キャッシュメモリとして動作することができる。
【００６９】
１つ以上の大容量記憶デバイス９５０は、メモリ９３０と比較して大量のデータを記憶する取り外し可能／取り外し不可能な揮発性／不揮発性のコンピュータ記憶媒体を含む。例えば、１つ以上の大容量記憶デバイス９５０は、磁気ディスクドライブ、光ディスクドライブ、フロッピー（登録商標）ディスクドライブ、フラッシュメモリ、ソリッドステートドライブ、又はメモリスティック（登録商標）等の１つ以上のデバイスを含むが、これらに限定されるものではない。
【００７０】
メモリ９３０及び１つ以上の大容量記憶デバイス９５０は、オペレーティングシステム９６０、１つ以上のアプリケーション９６２、１つ以上のプログラムモジュール９６４、及びデータ９６６を含み得る又は記憶し得る。オペレーティングシステム９６０は、コンピュータ９０２のリソースを制御し割り当てるよう動作する。アプリケーション９６２は、システムソフトウェア及びアプリケーションソフトウェアの一方又は両方を含み、メモリ９３０及び／又は１つ以上の大容量記憶デバイス９５０に記憶されているプログラムモジュール９６４及びデータ９６６を介するオペレーティングシステム９６０によるリソースの管理を利用して、１つ以上のアクションを実行することができる。したがって、アプリケーション９６２は、汎用コンピュータ９０２を、それにより提供されるロジックに従って、特殊化されたマシンに変えることができる。
【００７１】
特許請求される主題の全て又は一部は、標準プログラミング技術及び／又はエンジニアリング技術を使用してソフトウェア、ファームウェア、ハードウェア、又はこれらの任意の組合せを作成して、開示されている機能を実現するようにコンピュータを制御することで、実施することができる。限定ではなく例として、イベント処理システム１００又はその一部は、アプリケーション９６２であってもよいし、アプリケーション９６２の一部を形成してもよく、メモリ及び／又は１つ以上の大容量記憶デバイス９５０に記憶されている１つ以上のモジュール９６４及びデータ９６６を含み、その機能は、１つ以上のプロセッサ９２０により実行されると実現され得る。
【００７２】
１つの特定の実施形態に従うと、１つ以上のプロセッサ９２０は、単一の集積回路基板上のハードウェア及びソフトウェアの両方を含む、すなわち、単一の集積回路基板上でハードウェア及びソフトウェアの両方を統合した、システムオンチップ（ＳＯＣ）又は同様のアーキテクチャに対応し得る。ここで、１つ以上のプロセッサ９２０は、とりわけ、１つ以上のプロセッサ９２０及びメモリ９３０に少なくとも類似する１つ以上のプロセッサ及びメモリを含み得る。従来のプロセッサは、最小限の量のハードウェア及びソフトウェアを含み、外部ハードウェア及びソフトウェアに大きく依拠している。対照的に、ＳＯＣ実装のプロセッサは、より強力である。なぜならば、これは、外部ハードウェア及びソフトウェアに最小限しか依拠しないで又は全く依拠することなく特定の機能を可能にするハードウェア及びソフトウェアを組み込むからである。例えば、イベント処理システム１００及び／又は関連する機能は、ＳＯＣアーキテクチャのハードウェア内に組み込むことができる。
【００７３】
コンピュータ９０２はまた、システムバス９４０に通信可能に接続され、コンピュータ９０２との相互作用を円滑にする１つ以上のインタフェースコンポーネント９７０を含む。例えば、インタフェースコンポーネント９７０は、ポート（例えば、シリアル、パラレル、ＰＣＭＣＩＡ、ＵＳＢ、ＦｉｒｅＷｉｒｅ（登録商標）等）又はインタフェースカード（例えば、サウンド、ビデオ等）等であってよい。１つの例示的な実施形態において、インタフェースコンポーネント９７０は、ユーザが、１つ以上の入力デバイス（例えば、マウス、トラックボール、スタイラス等のポインティングデバイス、タッチパッド、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ、カメラ、他のコンピュータ等）を通じて、例えば、１つ以上のジェスチャ又は音声入力を用いて、コンピュータ９０２にコマンド及び情報を入力することを可能にするユーザ入力／出力インタフェースとして具現化され得る。別の例示的な実施形態において、インタフェースコンポーネント９７０は、とりわけ、ディスプレイ（例えば、ＬＣＤ、ＬＥＤ、プラズマ等）、スピーカ、プリンタ、及び／又は他のコンピュータに出力を供給するための出力周辺インタフェースとして具現化され得る。さらに、インタフェースコンポーネント９７０は、有線通信リンク又は無線通信リンクを介する等、他のコンピューティングデバイス（図示せず）との通信を可能にするネットワークインタフェースとして具現化され得る。
【００７４】
上記で説明されたことは、特許請求される主題の態様の例を含む。特許請求される主題を説明する目的でコンポーネント又は方法の考えられる全ての組合せを説明することはもちろん不可能であるが、当業者であれば、開示されている主題の多くのさらなる組合せ及び置換が可能であることを認識することができるであろう。したがって、開示されている主題は、請求項の主旨及び範囲内に属する全てのそのような変更形態、修正形態、及び変形形態を包含するよう意図されている。
【図１】
2018517202.tif 000030
【図２】
2018517202.tif 000031
【図３】
2018517202.tif 000032
【図４】
2018517202.tif 000033
【図５】
2018517202.tif 000034
【図６】
2018517202.tif 000035
【図７】
2018517202.tif 000036
【図８】
2018517202.tif 000037
【図９】
2018517202.tif 000038
【国際調査報告】
2018517202.tif 000039
2018517202.tif 000040
2018517202.tif 000041