(57)【特許請求の範囲】
【請求項１】
システムであって、
コンピューター実行可能命令を記憶するメモリーと、
プロセッサーとを備え、前記プロセッサーは、前記メモリーにアクセスし、かつ前記コンピューター実行可能命令を実行して、少なくとも、
ユーザーに関連付けられるデータストリームを識別し、
前記識別されたデータストリームの少なくとも一部分を処理するためのクエリを受信し、
前記識別されたデータストリームの属性を識別するコードを前記ユーザーから受信し、前記コードは、前記属性に少なくとも部分的に基づいて前記クエリを構成することが可能であり、さらに、
コンピューターシステムによって前記コードを前記クエリに関連付け、
前記コードが前記クエリに関連付けられた後、前記属性に少なくとも部分的に基づいて前記データストリームをパーティションするように前記クエリを構成し、
前記属性に少なくとも部分的に基づいて前記データストリームを複数の部分にパーティションし、
前記複数の部分のうち少なくとも１つのためのサブストリームを前記クエリに提供し、
前記提供されたサブストリームに少なくとも部分的に基づいて前記クエリの結果を提供する、ように構成される、システム。
【請求項２】
前記コードは、前記ユーザーに提供されるコントラクトに少なくとも部分的に基づくオブジェクト指向のクラスを含み、
前記クエリを構成することは、前記クエリを前記オブジェクト指向のクラスに結び付けることを含む、請求項１に記載のシステム。
【請求項３】
前記プロセッサーは、前記コンピューター実行可能命令を実行して、少なくとも、
前記クエリに少なくとも部分的に基づいて前記データストリームのイベントを受信し、
前記イベントを前記オブジェクト指向のクラスに提供し、
前記オブジェクト指向のクラスからの出力を受信する、ようにさらに構成される、請求項２に記載のシステム。
【請求項４】
前記データストリームは、前記オブジェクト指向のクラスからの出力に少なくとも部分的に基づいてパーティションされる、請求項３に記載のシステム。
【請求項５】
前記属性は、前記ユーザーのカスタマーのコンピューティングデバイスの第１の識別子、前記ユーザーに関連付けられる項目の第２の識別子、または前記項目に関連付けられる項目属性の第３の識別子のうち少なくとも１つを含む、請求項１〜４のいずれか１項に記載のシステム。
【請求項６】
前記カスタマーの前記コンピューティングデバイスの識別子は、前記カスタマーの前記コンピューティングデバイスのインターネットプロトコルアドレスを示す、または、前記カスタマーの前記コンピューティングデバイスが位置する地理的領域を示す、請求項５に記載のシステム。
【請求項７】
１つ以上のプロセッサーによって実行可能な複数の命令を含むコンピューター読取可能プログラムであって、前記複数の命令は、
ユーザーに関連付けられるデータストリームの少なくとも一部分を処理するためのクエリを前記１つ以上のプロセッサーに識別させる命令と、
前記識別されたデータストリームの属性を識別するコードを前記ユーザーから前記１つ以上のプロセッサーに受信させる命令とを含み、前記コードは、前記属性に少なくとも部分的に基づいて前記クエリを構成することが可能であり、さらに、
前記属性に少なくとも部分的に基づいて前記データストリームの１つ以上のサブストリームを処理するように前記クエリを前記１つ以上のプロセッサーに構成させる命令を含む、コンピューター読取可能プログラム。
【請求項８】
コンピューターにより実行される方法であって、
ユーザーに関連付けられるデータストリームをコンピューティングシステムによって識別することと、
前記識別されたデータストリームの少なくとも一部分を処理するためのクエリを受信することと、
前記識別されたデータストリームの属性を識別するコードを前記ユーザーから受信することとを含み、前記コードは、前記属性に少なくとも部分的に基づいて前記クエリを構成することが可能であり、さらに、
前記属性に少なくとも部分的に基づいて前記データストリームを少なくとも１つのサブストリームにパーティションするように前記コードを構成することと、
前記受信されたクエリを用いて前記少なくとも１つのサブストリームを処理することとを含む、コンピューターにより実行される方法。
【請求項９】
前記コードを前記クエリに関連付けることをさらに含む、請求項８に記載のコンピューターにより実行される方法。
【請求項１０】
前記少なくとも１つのサブストリームは、前記コードからの出力として受信された少なくとも第２のサブストリームと並行して、前記受信されたクエリを用いて処理される、請求項９に記載のコンピューターにより実行される方法。
【請求項１１】
前記クエリに少なくとも部分的に基づいて前記データストリームのイベントを受信することと、
前記受信されたコードに対応するｊａｖａクラスに前記イベントを提供することと、
前記属性に少なくとも部分的に基づいて前記イベントを処理するように前記ｊａｖａクラスを実施することと、
前記少なくとも１つのサブストリームを識別する前記ｊａｖａクラスからの出力を受信することとをさらに含む、請求項１０に記載のコンピューターにより実行される方法。
【請求項１２】
前記データストリームは、前記ｊａｖａクラスに少なくとも部分的に基づいてパーティションされる、請求項１１に記載のコンピューターにより実行される方法。
【請求項１３】
前記サブストリームは、複数の部分のうち少なくとも１つに対して行なわれるハッシュ関数に少なくとも部分的に基づいて生成される、請求項８〜１２のいずれか１項に記載のコンピューターにより実行される方法。
【請求項１４】
前記属性は、前記ユーザーのカスタマーに関連付けられるインターネットプロトコルアドレス、または前記ユーザーの前記カスタマーに関連付けられる地理的領域のうち少なくとも一方を含む、請求項８〜１３のいずれか１項に記載のコンピューターにより実行される方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連する出願への相互参照
本願は、「CUSTOM PARTITIONING OF DATA STREAM」と題された２０１４年６月１１日付け米国仮特許出願番号第１４／３０２，０３１号、代理人番号88325-904541-152300USの利益および優先権を主張する。その全内容は、完全に本明細書に記載されるように引用によって援用される。
【背景技術】
【０００２】
背景
イベント処理アプリケーションは、多くの異種のソースからの極めて大量のストリーミングデータを処理するように構成されることができる。一部の場合において、ストリーミングデータは、複数の異なる属性に関連付けられ得る。たとえば、企業のアクセスネットワークコンテンツに関連付けられるカスタマーデータのストリームは、インターネットプロトコル（ＩＰ）アドレスおよび／またはカスタマーに関連付けられる地理的な位置情報を含み得る。多くの場合、データストリームは非常に高速で受信され、ほぼ管理不可能な量の情報を含む。多様な入力ストリームおよびデータパラメータ、ならびに受信される情報の速度および量のさらなる増大により、そのようなデータストリームを管理することが負担となる可能性がある。したがって、データストリームをカスタムパーティションするための解決策を提供する必要性がある。
【発明の概要】
【課題を解決するための手段】
【０００３】
詳細な説明が、添付の図面を参照して述べられる。図面において、参照番号の最も左の数字は、参照番号が最初に表われる図面を識別する。異なる図面において同じ参照番号が使用される場合、それは同様もしくは同一の要素を示す。
【図面の簡単な説明】
【０００４】
【図１】少なくとも１つの例に従う、本明細書において記載されるデータストリームのカスタムパーティションを管理するためのアーキテクチャ例を例示する簡易化されたブロック図である。
【図２】少なくとも１つの例に従う、本明細書において記載されるデータの連続ストリームを扱うことが可能なイベント処理エンジンの少なくとも一部の特徴を例示する簡易化されたブロック図である。
【図３】少なくとも１つの例に従う、本明細書において記載されるデータストリームのカスタムパーティションを実施するように構成されるカスタムコンフィギュレーションサービスの少なくとも一部の特徴を例示する簡易化されたブロック図である。
【図４】少なくとも１つの例に従う、本明細書において記載されるデータストリームのカスタムパーティションのための少なくとも一部の技術を例示する簡易化されたフロー図である。
【図５】少なくとも１つの例に従う、本明細書において記載されるデータストリームのカスタムパーティションを実施するためのうち少なくとも１つのプロセスを例示する簡易化されたフロー図である。
【図６】少なくとも１つの例に従う、本明細書において記載されるデータストリームのカスタムパーティションを実施するためのうち少なくとも１つのプロセスを例示する簡易化されたフロー図である。
【図７】少なくとも１つの例に従う、本明細書において記載される例のうちの一部を実現するための分散型システムの簡易化された図である。
【図８】少なくとも１つの例に従う、本明細書において記載される例のうちの一部に係る、実施形態のシステムのコンポーネントによって提供されるサービスがクラウドサービスとして提示され得るシステム環境のコンポーネントの簡易化されたブロック図である。
【図９】少なくとも１つの例に従う、本明細書において記載される例のうちの一部に係る、本開示の様々な実施形態が実施され得る典型的なコンピューターシステムを例示する図である。
【図１０】少なくとも１つの例に従うシステムのブロック図を例示する図である。
【図１１】少なくとも１つの例に従うシステムのブロック図を例示する図である。
【図１２】少なくとも１つの例に従うコンピューター実装システムのブロック図を例示する図である。
【発明を実施するための形態】
【０００５】
概要
以下の説明において、様々な実施形態が記載される。説明を目的として、実施形態についての完全な理解を提供するために、具体的な構成および詳細が述べられる。しかしながら、具体的な詳細がなくとも実施形態が実施され得ることは当業者にとって明らかである。さらにまた、周知の特徴は、記載される実施形態を不明瞭にしないために、省略もしくは簡易化され得る。
【０００６】
一実施形態によれば、システムはメモリーおよびプロセッサーによって構成され得る。プロセッサーは、メモリー上に記憶された命令を実行して、ユーザーに関連付けられるデータストリームを識別するように構成され得る。プロセッサーは、識別されたデータストリームの少なくとも一部分を処理するためのクエリを受信し、識別されたデータストリームの属性を識別するコードをユーザーから受信するための命令を実行するようにも構成され得て、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能である。一部の局面において、プロセスは、コンピューターシステムによってコードをクエリに関連付け、コードがクエリに関連付けられた後、属性に少なくとも部分的に基づいてデータストリームをパーティションするようにクエリを構成するための命令を実行するように構成され得る。命令は、属性に少なくとも部分的に基づいてデータストリームを複数の部分にパーティションし、複数の部分のうちの少なくとも１つのためのサブストリームをクエリに提供し、提供されたサブストリームに少なくとも部分的に基づいてクエリの結果を提供するようにも実行され得る。
【０００７】
一部の例において、コードは、ユーザーに提供されるコントラクトに少なくとも部分的に基づくオブジェクト指向のクラスを含み、クエリを構成することは、オブジェクト指向のクラスにクエリを結び付けることを含む。命令は、クエリに少なくとも部分的に基づいてデータストリームのイベントを受信し、イベントをオブジェクト指向のクラスに提供し、オブジェクト指向のクラスからの出力を受信するようにも実行され得る。データストリームは、オブジェクト指向のクラスからの出力に少なくとも部分的に基づいてパーティションされ得る。属性は、ユーザーのカスタマーのコンピューティングデバイスの第１の識別子、ユーザーに関連付けられる項目の第２の識別子、または当該項目に関連付けられる項目属性の第３の識別子のうち少なくとも１つを含み得る。カスタマーのコンピューティングデバイスの識別子は、カスタマーのコンピューティングデバイスのインターネットプロトコルアドレス、またはカスタマーのコンピューティングデバイスが位置する地理的領域を示し得る。
【０００８】
別の実施形態によれば、コンピューター読取可能媒体は、実行されると、ユーザーに関連付けられるデータストリームの少なくとも一部分を処理するためのクエリを識別するようにコンピュータープロセッサーを構成する命令を含み得る。命令はさらに、識別されたデータストリームの属性を識別するコードをユーザーから受信するようにプロセッサーを構成し得て、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能である。命令は、属性に少なくとも部分的に基づいてデータストリームの１つ以上のサブストリームを処理するようにクエリを構成するようにもプロセッサーを構成し得る。
【０００９】
一部の例において、複数の命令はさらに、１つ以上のサブストリームの複数を並行して１つ以上のプロセッサーに処理させる命令を含み得る。コードは、ユーザーに提供されたＪａｖａ（登録商標）コントラクトに少なくとも部分的に基づくｊａｖａクラスを含み得る。複数の命令はさらに、１つ以上のプロセッサーにクエリに少なくとも部分的に基づいてデータストリームのイベントを受信させ、ｊａｖａクラスにイベントを提供させる命令を含み得る。複数の命令はさらに、１つ以上のプロセッサーにｊａｖａクラスを実施させて、属性に少なくとも部分的に基づいてイベントを処理させ、かつｊａｖａクラスからの出力を受信させる命令を含み得る。一部の例において、ｊａｖａクラスからの出力は１つ以上のサブストリームのうちの少なくとも１つであり得る。属性は、コードの受信に先立ってユーザーによって特定され得る。一部の例において、１つ以上のサブストリームのうちの少なくとも１つのサブストリームは、データストリームの少なくとも一部分に対して行なわれるハッシュ関数に少なくとも部分的に基づいて生成され得る。
【００１０】
別の実施形態によれば、方法はコンピューターシステムによって実行されて、少なくともユーザーに関連付けられるデータストリームをコンピューティングシステムによって識別し得る。方法は、識別されたデータストリームの少なくとも一部分を処理するためのクエリも受信し得る。方法は、識別されたデータストリームの属性を識別するコードもユーザーから受信し得て、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能である。方法はまた、属性に少なくとも部分的に基づいてデータストリームを少なくとも１つのサブストリームにパーティションし、受信されたクエリを用いて少なくとも１つのサブストリームを処理するようにコードを構成し得る。
【００１１】
一部の場合において、方法はまた、コードをクエリに関連付け得る。少なくとも１つのサブストリームは、コードから出力として受信された少なくとも第２のサブストリームと並行して、受信されたクエリを用いて処理され得る。方法はまた、クエリに少なくとも部分的に基づいてデータストリームのイベントを受信し、受信されたコードに対応するｊａｖａクラスにイベントを提供し得る。一部のインスタンスにおいて、方法は、属性に少なくとも部分的に基づいてイベントを処理し、少なくとも１つのサブストリームを識別するｊａｖａクラスからの出力を受信するようにｊａｖａクラスを実施し得る。データストリームは、ｊａｖａクラスに少なくとも部分的に基づいてパーティションされ得る。サブストリームは、複数の部分のうち少なくとも１つに対して行なわれるハッシュ関数に少なくとも部分的に基づいて生成され得る。加えて、属性は、ユーザーのカスタマーに関連付けられるインターネットプロトコルアドレス、またはユーザーのカスタマーに関連付けられる地理的領域のうち少なくとも一方を含み得る。
【００１２】
上記は、他の特徴および実施形態と共に、以下の明細書、請求項および添付の図面を参照することでより明らかにとなる。
【００１３】
詳細な説明
以下の説明において、様々な実施形態が記載される。説明を目的として、実施形態についての完全な理解を提供するために、具体的な構成および詳細が述べられる。しかしながら、具体的な詳細がなくとも実施形態が実施され得ることは当業者にとって明らかである。さらにまた、周知の特徴は、記載される実施形態を不明瞭にしないために、省略もしくは簡易化され得る。
【００１４】
本開示の実施形態は、とりわけ、ストリーミングデータをパーティションするためのカスタム（たとえばカスタマイズ可能な）メカニズムを提供することに向けられている。一部の例において、このカスタムメカニズムは、イベント処理および／またはビジネスインテリジェンスフレームワーク内に設けられ得る。たとえば、イベント処理フレームワークは１つ以上のソース（たとえば第三者ストリーミングソース等）からのストリーミングデータを処理し、１つ以上のフォーマットで（たとえばストリームおよび／または１つ以上のサブストリームとして）データを管理し、記憶し、かつ／または出力するように構成され得る。記載したように、一人以上のユーザー、カスタマーなどが（たとえばイベント処理エンジンを利用して）イベント処理フレームワークを構成して、カスタムパラメータに少なくとも部分的に基づいて１つ以上の受信中のストリームをパーティションすることを可能にするカスタマイズ可能なメカニズムが提供され得る。
【００１５】
非限定的な一例では、カスタマーは、受信中のデータストリームからデータを照会するためのクエリ（たとえば連続クエリ）を生じさせ、かつ／または提供し得る。ストリームは、カスタマーについてのクエリを用いてストリームを処理するサービスプロバイダーによって受信され得るが、他の例では、カスタマーはサービスプロバイダーを使用せずにクエリを用いてデータを処理させ得る。いずれのイベントでも、カスタマーは、パーティションのためにデータストリームの１つ以上の属性を識別する何らかの構成情報も提供し得る。たとえば、データストリームのデータは、任意の数および／またはタイプの属性（たとえばデータに関連付けられるＩＰアドレス、データに関連付けられる地理的な位置（または領域）、データに関連付けられるユーザー識別子（ＩＤ）等）を含み得る。構成情報に基づいて、サービスプロバイダーは、構成情報にリストされた属性を識別し、識別された属性に関連付けられるイベントを抽出するかまたは他の方法で収集し、属性に関連付けられる、抽出されかつ／または収集されたイベントを（たとえば限定はしないがサブストリームなどの出力データストリームとして）提供するように構成され得る。出力サブストリームは、限定はしないが、フィルタリング、集約（aggregation）などを含む後処理を含む１つ以上のクエリを用いて処理され得る。したがって、コードがイベントストリームをサブストリームにパーティションした後、下流クエリ処理が生じ得る。このように、カスタマー（本明細書ではユーザーともいわれる）は、選択されたイベント属性に少なくとも部分的に基づいて、受信中のデータストリームをパーティションするようにサービスプロバイダーを構成し得る。加えて、ユーザーは、パーティションを完全にカスタマイズしてもよく、かつ／または受信中のデータストリームのパーティションを完全にカスタマイズするようにコードを提供してもよい。
【００１６】
一部の例において、サービスプロバイダーは、１つ以上のデータストリームに対する連続クエリ言語（ＣＱＬ）クエリ（「クエリ宣言」ともいわれる）をサポートするように構成され得る。加えて、一部の例において、ＣＱＬクエリをサポートするためのメカニズムは、サービスプロバイダー（たとえばJavaScript（登録商標）等）によって実行されるスクリプトコードの構成も可能にし得る。このコードは、ユーザー、管理者、またはイベントデータ（たとえばビジネスイベントデータ）に関連付けられる他のエンティティによって、構成され、生成され、管理され、更新され、かつ／または他の方法で操作され得る。
【００１７】
一般に、連続的なデータストリーム（イベントストリームともいわれる）は、明示的な終点のない連続もしくは非有界の特性を有し得るデータもしくはイベントのストリームを含み得る。論理的に、イベントもしくはデータストリームは、データ要素（イベントともいわれる）のシーケンスであり得て、各データ要素は、関連付けられたタイムスタンプを有する。連続イベントストリームは、要素のバッグもしくはセット（ｓ，Ｔ）として論理的に表わされ得て、ここで「ｓ」はデータ部分を表わし、「Ｔ」は時間ドメインに属する。「ｓ」部分は、概してタプルもしくはイベントといわれる。したがって、イベントストリームは、タイムスタンプを持つタプルもしくはイベントのシーケンスであり得る。
【００１８】
一部の局面において、ストリームにおけるイベントに関連付けられるタイムスタンプは、クロックタイムと同等とされ得る。しかしながら、他の例において、イベントストリームにおけるイベントに関連付けられる時間は、アプリケーションドメインによって定義され得て、クロックタイムに対応しない場合があるが、たとえば、代わりにシーケンス番号によって表わされ得る。このため、イベントストリームにおけるイベントに関連付けられる時間情報は、数字、タイムスタンプ、または時間の概念を表わす他の情報によって表され得る。入力イベントストリームを受信するシステムについては、イベントは、タイムスタンプの増加順でシステムに到達する。同じタイムスタンプを有する２つ以上のイベントがあり得る。
【００１９】
一部の例において、イベントストリームにおけるイベントは、いくぶん世俗的なイベント（たとえば、温度センサーが値を新しい値に変更した場合や、株式表示記号の価格が変化した場合など）の発生を表わし得て、イベントに関連付けられる時間情報は、データストリームイベントによって表わされる世俗的なイベントが発生した場合を示し得る。加えて、各イベントに関連付けられる属性は、限定はしないが、世俗的なイベントに関連付けられるユーザーおよび／または項目（たとえば購入者ＩＤ、販売者ＩＤ、製品ＩＤ、商品価格、ユーザーの位置等）、世俗的なイベント中の場所での天候等といった世俗的なイベントに関する（たとえばメタデータとして記憶される）特定の（たとえば関連する）情報を示し得る。
【００２０】
イベントストリームを介して受信したイベントについては、イベントストリームにおけるイベントが確実にタイムスタンプ値の増加順で到達するように、イベントに関連付けられる時間情報が使用され得る。これにより、イベントストリームにおいて受信されたイベントを、それらに関連付けられる時間情報に基づいてオーダー付けることができる。このオーダー付けを可能にするために、後に生成されるイベントが前に生成されるイベントよりも後のタイムスタンプを有するように、タイムスタンプがイベントストリームにおけるイベントに対して非減少の態様で関連付けられ得る。他の例として、シーケンス番号が時間情報として使用されている場合、後に生成されるイベントに関連付けられるシーケンス番号は、前に生成されるイベントに関連付けられるシーケンス番号よりも大きくなり得る。一部の例において、たとえばデータストリームイベントによって表される世俗的なイベントが同時に発生した場合に、複数のイベントが、同じタイムスタンプもしくは同じシーケンス番号に関連付けられ得る。同じイベントストリームに属するイベントは、概して、関連付けられる時間情報によってイベントに対して加えられるオーダーで処理され得て、前のイベントは後のイベントの前に処理される。
【００２１】
イベントストリームにおけるイベントに関連付けられる時間情報（たとえば、タイムスタンプ）は、ストリームのソースによって設定され得る、または代替的にストリームを受信するシステムによって設定され得る。たとえば、特定の実施形態において、イベントストリームを受信するシステムに対してハートビートが維持され得て、イベントに関連付けられる時間は、ハートビートによって測定されるようにシステムへのイベントの到達の時間に基づき得る。イベントストリームにおける２つのイベントが同じ時間情報を有することは可能である。なお、タイムスタンプオーダー付け要件は１つのイベントストリームに対して特定のものであるが、異なるストリームのイベントが適宜インターリーブされ得る。
【００２２】
イベントストリームは、関連付けられるスキーマ「Ｓ」を有し得て、スキーマは、時間情報と、１つ以上の指定される名前付き属性の集合とを含む。特定のイベントストリームに属するすべてのイベントは、その特定のイベントストリームに関連付けられるスキーマに準拠する。このため、イベントストリーム（ｓ，Ｔ）については、イベントストリームは、スキーマ「Ｓ」を（<time_stamp>,<attribute(s)>）として有し得て、ここで<attributes>は、スキーマのデータ部分を表わし、１つ以上の属性を含み得る。たとえば、株式相場ディスプレイデバイスイベントストリームについてのスキーマは、<stock symbol>および<stock price>の属性を含み得る。このようなストリームを介して受信される各イベントは、タイムスタンプと１つ以上の属性とを有する。たとえば、株式相場ディスプレイデバイスイベントストリームは、以下のイベントおよび関連付けられるタイムスタンプを受け取り得る。
【００２３】
(<timestamp_N>,<NVDA,4>)
(<timestamp_N+1>,<ORCL,62>)
(<timestamp_N+2>,<PCAR,38>)
(<timestamp_N+3>,<SPOT,53>)
(<timestamp_N+4>,<PDCO,44>)
(<timestamp_N+5>,<PTEN,50>)
上記のストリームにおいて、ストリーム要素（<timestamp_N+1>,<ORCL,62>）については、イベントは、「stock_symbol」および「stock_value」を伴う<ORCL,62>である。ストリーム要素に関連付けられるタイムスタンプは、「timestamp_N+1」である。したがって、連続イベントストリームはイベントのフローであり、各イベントは一連の（一部の例では、同じ一連の）属性を有する。
【００２４】
記載したように、ストリームはＣＱＬクエリが作用し得るデータの主要なソースであり得る。ストリームＳは、要素（ｓ，Ｔ）のバッグ（「マルチセットともいわれる）であり得て、ここで「ｓ」はＳのスキーマに属し、「Ｔ」は時間ドメインに属する。加えて、ストリーム要素は、タプルとタイムスタンプのペアであり得て、タイムスタンプを持つタプル挿入のシーケンスとして表わされ得る。言い換えると、ストリームは、タイムスタンプを持つタプルのシーケンスであり得る。一部の場合において、同じタイムスタンプを有する２つ以上のタプルがあり得る。また、入力ストリームのタプルは、タイムスタンプの増加順でシステムに到達する必要があり得る。さらに、本願明細書で使用される連続クエリは、概してストリームおよび／またはリレーションのデータを処理する（すなわち、照会する）ことが可能であり得る。加えて、リレーションは、ストリームのデータを参照し得る。
【００２５】
以下の記載では、説明を目的として、実施形態についての十分な理解をもたらすために具体的な詳細を記載する。しかしながら、具体的な詳細がなくとも実施形態が実施され得ることは当業者にとって明らかである。図および説明は、限定的なものとは意図されていない。
【００２６】
図のうちの一部に示されるシステムは、様々な構成で提供され得る。一部の実施形態において、システムは、システムの１つ以上のコンポーネントがクラウドコンピューティングシステムにおいて１つ以上のネットワークを介して分散される分散型システムとして構成され得る。
【００２７】
図１は、データストリームのコンフィギュラブル／カスタムパーティションを管理するための技術が実施され得る、簡易化された例示的なシステムもしくはアーキテクチャ１００を示す。アーキテクチャ１００において、１人以上のユーザー１０２（たとえば、アカウント保持者）が、コンピューティングデバイス１０４（１）〜１０４（Ｎ）（まとめて、「ユーザーデバイス１０４」）を利用し、１つ以上のネットワーク１０８を介して１つ以上のサービスプロバイダーコンピューター１０６にアクセスし得る。一部の局面において、サービスプロバイダーコンピューター１０６は、ネットワーク１０８を介して、１つ以上のストリーミングデータソースコンピューター１１０および／または１つ以上のデータベース１１２と通信し得る。たとえば、ユーザー１０２は、サービスプロバイダーコンピューター１０６を利用し、ストリーミングデータソースコンピューター１１０および／またはデータベース１１２のデータにアクセスし得る、またはそれ以外にデータを管理し得る（たとえば、ストリーミングデータソースコンピューター１１０またはデータベース１１２のうちのいずれかもしくは両方のデータを処理するのにクエリが使用され得る）。データベース１１２は、リレーショナルデータベースまたはＳＱＬサーバーなどであり得て、一部の例においては、過去データ、イベントデータ、リレーション、またはアーカイブされたリレーションなどをユーザー１０２の代わりに管理し得る。加えて、データベース１１２は、ストリーミングデータソースコンピューター１１０によって提供されるデータを受信もしくはそれ以外に記憶し得る。一部の例において、ユーザー１０２は、ユーザーデバイス１０４を利用し、データ（たとえば、過去のイベントデータ、ストリーミングイベントデータなど）についてのクエリ（「クエリ宣言」ともいう）または他のリクエストを提供することによってサービスプロバイダーコンピューター１０６と対話し得る。そして、このようなクエリまたはリクエストは、サービスプロバイダーコンピューター１０６によって実行され、データベース１１２のデータおよび／またはストリーミングデータソースコンピューター１１０からの受信中のデータが処理され得る（たとえば、受信中のデータがクエリに送られる際に受信中のデータを連続的に照会する）。さらに、一部の例において、ストリーミングデータソースコンピューター１１０および／またはデータベース１１２は、サービスプロバイダーコンピューター１０６に関連付けられる、統合された分散環境の一部であり得る。
【００２８】
一部の例において、ネットワーク１０８は、ケーブルネットワーク、インターネット、無線ネットワーク、携帯電話ネットワーク、イントラネットシステム、ならびに／または他の私的および／もしくは公共ネットワークなど、複数の異なるタイプのネットワークのうちの１つもしくはこれらの組み合せを含み得る。示される例は、ユーザー１０２がネットワーク１０８を介してサービスプロバイダーコンピューター１０６にアクセスすることを表わしているが、記載の技術は、ユーザー１０２が固定電話で１つ以上のユーザーデバイス１０４を介して、キオスクを介して、または他の方法により１つ以上のサービスプロバイダーコンピューター１０６と対話する場合においても等しく適用され得る。また、記載の技術は、他のクライアント／サーバー構成（たとえば、セットトップボックスなど）および非クライアント／サーバー構成（たとえば、ローカルに記憶されるアプリケーションなど）においても適用され得る。
【００２９】
ユーザーデバイス１０４は、携帯電話、スマートフォン、パーソナルデジタルアシスタント（ＰＤＡ）、ラップトップコンピューター、デスクトップコンピューター、シンクライアントデバイス、タブレットＰＣなどの任意のタイプのコンピューティングデバイスであり得るが、これらに限定されない。一部の例において、ユーザーデバイス１０４は、ネットワーク１０８を介して、または他のネットワーク接続を介して、サービスプロバイダーコンピューター１０６と通信し得る。さらに、ユーザーデバイス１０４は、データベース１１２（または他のデータストア）の処理されるデータを要求するための１つ以上のクエリもしくはクエリ宣言を提供するようにも構成され得る。ユーザーデバイス１０４は、コードに少なくとも部分的に基づいて受信中のイベントデータをパーティションするようにサービスプロバイダーコンピューター１０６を構成するためのコードを提供するようにも構成され得る。たとえば、ユーザーコンピューター１０４は、受信中のストリームを適宜パーティションするようにJavaScriptを実施するためにサービスプロバイダーコンピューター１０６が実行することができる拡張可能なハイパーテキストマークアップ言語（ＸＭＬ）、ユーザーが構成したｊａｖａクラス等を提供し得る。
【００３０】
一部の局面において、サービスプロバイダーコンピューター１０６は、モバイル、デスクトップ、シンクライアント、および／またはサーバーのようなクラウドコンピューティングデバイスなど、任意のタイプのコンピューティングデバイスでもあり得るが、これらに限定されない。一部の例において、サービスプロバイダーコンピューター１０６は、ネットワーク１０８を介して、または他のネットワーク接続を介してユーザーデバイス１０４と通信し得る。サービスプロバイダーコンピューター１０６は、場合によってはクラスターにおいて、サーバーファームとして、または互いに関連付けられていない個別のサーバーとして構成される１つ以上のサーバーを含み得る。これらのサーバーは、本願明細書において記載されるＣＱＬリレーションの管理、入力リレーションの生成、入力リレーションに関連付けられるコンフィギュラブルウィンドウ演算子、および出力リレーションの生成を含む、本願明細書に記載される特徴を行なう、もしくはホスティングするように構成され得る。加えて、一部の局面において、サービスプロバイダーコンピューター１０６は、ストリーミングデータソースコンピューター１１０および／またはデータベース１１２を含む、統合された分散コンピューティング環境の一部として構成され得る。
【００３１】
１つの例示的な構成において、サービスプロバイダーコンピューター１０６は、少なくとも１つのメモリー１３６と１つ以上の処理ユニット（プロセッサー）１３８とを含み得る。プロセッサー１３８は、ハードウェア、コンピューター実行可能命令、ファームウェア、またはこれらの組み合せにおいて適切に実施され得る。プロセッサー１３８のコンピューター実行可能命令またはファームウェアの実施は、記載される様々な機能を行なうために任意の適したプログラミング言語で書かれたコンピューター実行可能命令もしくはマシン実行可能命令を含み得る。
【００３２】
メモリー１３６は、プロセッサー１３８上でローディング可能および実行可能なプログラム命令ならびにこれらのプログラムの実行時に生成されるデータを記憶し得る。サービスプロバイダーコンピューター１０６の構成およびタイプに応じて、メモリー１３６は、揮発性（ランダムアクセスメモリー（ＲＡＭ）など）および／または不揮発性（読み取り専用メモリー（ＲＯＭ）、フラッシュメモリーなど）であり得る。サービスプロバイダーコンピューター１０６またはサーバーは、追加の記憶部１４０も含み得て、この記憶部１４０は、リムーバブル記憶部および／または非リムーバブル記憶部を含み得る。追加の記憶部１４０は、磁気記憶部、光学ディスク、および／またはテープ記憶部を含み得るが、これらに限定されない。ディスクドライブおよびこれに関連付けられるコンピューター読取可能媒体は、コンピューター読取可能命令、データ構造、プログラムモジュール、およびコンピューティングデバイスのための他のデータの不揮発性記憶部を提供し得る。一部の実施において、メモリー１３６は、スタティックランダムアクセスメモリー（ＳＲＡＭ）、ダイナミックランダムアクセスメモリー（ＤＲＡＭ）、またはＲＯＭなどの複数の異なるタイプのメモリーを含み得る。
【００３３】
メモリー１３６ならびにリムーバブルおよび非リムーバブルの両方の追加の記憶部１４０は、すべてコンピューター読取可能記憶媒体の例である（かつ非一時的であり得る）。たとえば、コンピューター読取可能記憶媒体は、コンピューター読取可能命令、データ構造、プログラムモジュール、もしくは他のデータなどの情報の記憶のための任意の方法もしくは技術において実施される、揮発性もしくは不揮発性のリムーバブルもしくは非リムーバブル媒体を含み得る。メモリー１３６および追加の記憶部１４０は、すべてコンピューター記憶媒体の例である。
【００３４】
代替的に、コンピューター読取可能通信媒体は、コンピューター読取可能命令、プログラムモジュール、または搬送波などのデータ信号もしくは他の伝送で送信される他のデータを含み得る。しかしながら、本明細書で用いられるコンピューター読取可能記憶媒体は、コンピューター読取可能通信媒体を含まない。
【００３５】
サービスプロバイダーコンピューター１０６は、記憶されるデータベース、他のコンピューティングデバイスもしくはサーバー、ユーザー端末、および／またはネットワーク１０８上の他のデバイスとサービスプロバイダーコンピューター１０６が通信することを可能にする通信接続１４２も含み得る。サービスプロバイダーコンピューター１０６は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、ディスプレイ、１つ以上のスピーカー、プリンターなどの入力／出力（Ｉ／Ｏ）デバイス１４４も含み得る。
【００３６】
より詳細にメモリー１３６の内容を見ると、メモリー１３６は、オペレーティングシステム１４５と、少なくともカスタムコンフィギュレーションサービス１４６を含む、本願明細書に開示される特徴を実施するための１つ以上のアプリケーションプログラムもしくはサービスとを含み得る。一部の例において、カスタムコンフィギュレーションサービス１４６は、ユーザーアプリケーションモジュール１４８、コントラクトモジュール１４９、および／またはコンフィギュラブルパーティションモジュール１５０を含むがこれらに限定されない１つ以上のアプリケーションプログラムまたは特徴によって実施され得る。本願明細書において使用されるモジュールは、サービス（たとえばカスタムコンフィギュレーションサービス１４６）の一部であるサーバーもしくはサーバーのクラスターによって実行されるプログラミングモジュールを言い得る。この特定の文脈において、モジュールは、サービスプロバイダーコンピューター１０６の一部であるサーバーもしくはサーバーのクラスターによって実行され得る。
【００３７】
一部の例において、ユーザーアプリケーションモジュール１４８は、ユーザー１０２に関連付けられるイベントストリームを、受信し、識別し、生成し、または他の方法で管理するように構成され得る。たとえば、ユーザー１０２は、ストリーミングデータソースコンピューター１１０の１つを介してイベントストリームを提供するビジネス（たとえば電子市場等）を所有し得る。そのため、ユーザー１０２は、サービスプロバイダーコンピューター１０６に依拠して、イベントストリームのデータを管理し得る。加えて、一部の例において、ユーザー１０２は、彼らのビジネスに関連付けられる受信中のイベントストリームを処理するために１つ以上のクエリ（たとえばクエリ１５４）を提供し得る。そのため、受信されたクエリ１５４および受信されたイベントストリームに少なくとも部分的に基づいて、サービスプロバイダーコンピューター１０６は、ユーザーアプリケーションモジュール１４８を介してクエリ１５４の結果を（たとえばユーザーインターフェイス（ＵＩ）等において）提供し得る。
【００３８】
一部の例において、コントラクトモジュール１４９は、イベントストリームのパーティションを構成するためにソフト開発キット（ＳＤＫ）等をユーザー１０２に提供するように構成され得る。加えて、コントラクトモジュール１４９は、ＳＤＫまたは他の合意に少なくとも部分的に基づいて策定される（たとえばユーザー１０２からの）１つ以上のカスタムコントラクトを受信し、記憶し、かつ／または管理するように構成され得る。カスタムコントラクトは、ユーザー１０２によってリクエストされたカスタムパーティションを識別する構成情報１５５を含み得る。しかし一部の場合において、コントラクトモジュール１４９は、ユーザー１０２がいずれかのコードを書く必要なしにカスタムパーティションを構成するためのＵＩを提供するために、ユーザーアプリケーションモジュール１４８の一部であり得、かつ／または、ユーザーアプリケーションモジュール１４８と協働し得る。そのため、ＵＩは、ドロップダウンリスト、チェックボックス、ラジオボタン、テキストフィールド、および／またはユーザーがＵＩを介して構成情報１５５を示すいずれかの他のやり方を提供し得る。
【００３９】
加えて、一部の例において、コンフィギュラブルパーティションモジュール１５０は、少なくともコントラクトモジュール１４９から構成情報１５５を受信し、かつユーザーアプリケーションモジュール１４８からクエリ１５４を受信するように構成され得る。コンフィギュラブルパーティションモジュール１５０は、構成情報１５５およびクエリ１５４に少なくとも部分的に基づいてクエリ１５４を構成する１５６ようにも構成され得る。ひとたびクエリ１５４が構成される１５６と、コンフィギュラブルパーティションモジュール１５０は、１つ以上の受信中のデータストリームをパーティションし１５７、１つ以上のサブストリームを生成し得る１５８。次いで、生成された１５８サブストリームは、処理のためにクエリ１５４に提供され（たとえば送られ）、次いでリクエストしたユーザーデバイス１０４にその後提供され得る。
【００４０】
サービスプロバイダーコンピューター１０６および／またはユーザーデバイス１０４に存在し得る追加的なタイプの（非一時的でもあり得る）コンピューター記憶装置媒体は、限定はしないが、プログラム可能なランダムアクセスメモリー（ＰＲＡＭ）、ＳＲＡＭ、ＤＲＡＭ、ＲＡＭ、ＲＯＭ、電気的消去可能プログラム可能な読み取り専用メモリー（ＥＥＰＲＯＭ）、フラッシュメモリーまたは他のメモリー技術（コンパクトディスク読み取り専用メモリー（ＣＤ−ＲＯＭ））、デジタルバーサタイルディスク（ＤＶＤ）もしくは他の光学記憶部、磁気カセット、磁気テープ、磁気ディスク記憶部または他の磁気記憶デバイス、または所望の情報を記憶するために用いることができるとともに、サービスプロバイダーコンピューター１０６および／またはユーザーデバイス１０４によってアクセスすることができる任意の他の媒体を含み得る。上記のうちいずれかの組み合せも、コンピューター読取可能記憶媒体の範囲内に含まれるべきである。
【００４１】
図２は、本開示の実施形態を組込み得るイベント処理システム２００の簡易化されたハイレベル図を示す。イベント処理システム２００は、１つ以上のイベントソース２０４，２０６，２０８、イベントストリームを処理するための環境を提供するように構成されるイベント処理サーバー（ＥＰＳ）２０２、１つ以上のイベントシンク２１０，２１２を含み得る。イベントソースは、ＥＰＳ２０２によって受信されるイベントストリームを生成する。ＥＰＳ２０２は、１つ以上のイベントソース２０４，２０６，２０８から１つ以上のイベントストリームを受信し得る。たとえば、図２に示されるように、ＥＰＳ２０２は、入力イベントストリーム２１４をイベントソース２０４から、第２の入力イベントストリーム２１６をイベントソース２０６から、第３のイベントストリーム２１８をイベントソース２０８から受信する。１つ以上のイベント処理アプリケーション２２０，２２２，および２２４がＥＰＳ２０２上に配置され得て、ＥＰＳ２０２によって実行され得る。ＥＰＳ２０２によって実行されるイベント処理アプリケーション（たとえばイベントアプリケーション２２０）は、１つ以上の入力イベントストリームを聞き取り、入力イベントストリームから１つ以上のイベントを注目すべきイベントとして選択する処理ロジックに基づいて１つ以上のイベントストリームを介して受信されたイベントを処理するように構成され得る。注目すべきイベントは、次いで、１つ以上の出力イベントストリームの形態で１つ以上のイベントシンク２１０，２１２に送信され得る。たとえば図２において、ＥＰＳ２０２は、イベントストリーム２２６をイベントシンク２１０に、第２の出力イベントストリーム２２８をイベントシンク２１２に出力する。特定の実施形態において、イベントソース、イベント処理アプリケーション、およびイベントシンクは、他のコンポーネントに変化を生じさせることなくこれらのコンポーネントのうちのいずれかを追加するかまたは除去することができるように互いから分断される。
【００４２】
一実施形態において、ＥＰＳ２０２は、共有サービスを有するEquinox（登録商標）OSGi（登録商標）に基づくものなどの軽量Ｊａｖａアプリケーションコンテナを含むＪａｖａサーバーとして実施され得る。一部の実施形態において、ＥＰＳ２０２は、たとえばJRockit（登録商標）Real Timeを用いることによってイベントを処理するために超高速スループットおよびマイクロセカンドレイテンシーをサポートし得る。ＥＰＳ２０２は、イベント処理アプリケーションを開発するためのツール（たとえばOracle CEP VisualizerおよびOracle CEP IDE）を含む開発プラットフォーム（たとえば完全リアルタイムエンドツーエンドのJava Event Driven Architecture （ＥＤＡ）開発プラットフォーム）も提供し得る。
【００４３】
イベント処理アプリケーション２２０，２２２，２２４のうち少なくとも１つは、１つ以上の入力イベントストリーム２１４，２１６，２１８を聞き取り、１つ以上の入力イベントストリームから１つ以上の注目すべきイベントを選択するためのロジック（たとえばクエリ）を実行し、選択された注目すべきイベントを１つ以上の出力イベントストリーム２２６，２２８を介して１つ以上のイベントシンク２１０，２１２に出力するように構成される。図２は、一部の例においてカスタムコンフィギュレーションサービス１４６に関して上記した特徴を行なうように構成され得る１つのそのようなイベント処理アプリケーション２２０のためのドリルダウンを提示する。図２に示されるように、イベント処理アプリケーション２２０は、入力イベントストリーム２１８を聞き取り、入力イベントストリーム２１８から１つ以上の注目すべきイベントを選択するためのロジックを含むＣＱＬエンジン／ＣＱサービスによってクエリを実行し、選択された注目すべきイベントを出力イベントストリーム２２８を介してイベントシンク２１２に出力するように構成される。イベントソースの例は、限定はしないが、アダプタ（たとえばＪＭＳ、ＨＴＴＰおよびファイル）、チャネル、プロセッサー、表、キャッシュ等を含む。イベントシンクの例は、限定はしないが、アダプタ（たとえばＪＭＳ、ＨＴＴＰおよびファイル）、チャネル、プロセッサー、キャッシュ等を含む。
【００４４】
図２のイベント処理アプリケーション２２０は、１つの入力ストリームを聞き取り、選択されたイベントを１つの出力ストリームを介して出力するものとして示されるが、これは限定的なものとは意図されていない。代替的な実施形態において、イベント処理アプリケーションは、１つ以上のイベントソースから受信されたマルチ入力ストリームを聞き取り、監視されたストリームからイベントを選択し、選択されたイベントを１つ以上の出力イベントストリームを介して１つ以上のイベントシンクに出力するように構成され得る。同じクエリは、２つ以上のイベントシンク、および異なるタイプのイベントシンクに関連付けられ得る。
【００４５】
その非有界性質により、イベントストリームを介して受信されるデータ量は概して非常に大きい。したがって、照会目的のためにデータすべてを記憶するかまたはアーカイブすることは一般に非実用的であり、望ましくない。イベントストリームの処理は、イベントがＥＰＳ２０２によって受信される際に、受信されるイベントデータすべてを記憶する必要なしに、リアルタイムなイベントの処理を必要とする。したがって、ＥＰＳ２０２は、受信されるイベントすべてを記憶する必要なしに、ＥＰＳ２０２によってイベントが受信される際にイベントの処理が行なわれることを可能にする特別な照会メカニズムを提供し得る。
【００４６】
イベントドリブンアプリケーションはルールドリブンであり得て、これらのルールは入力ストリームを処理するのに用いられる連続クエリの形態で表現され得る。連続クエリは、どのイベントが注目すべきイベントとして選択されるべきかを含む受信されるイベントのために行なわれる処理を識別する命令（たとえばビジネスロジック）を含み得て、照会処理の結果として出力し得る。連続クエリはデータストアに持続され、イベントの入力ストリームを処理しイベントの出力ストリームを生成するために用いられ得る。連続クエリは典型的に、フィルタリングおよび集約機能を行なって、入力イベントストリームから注目すべきイベントを発見し抽出する。その結果、出力イベントストリーム内のアウトバウンドイベントの数は、イベントが選択される入力イベントストリーム中のイベントの数よりも一般にはるかに少ない。
【００４７】
有限データセットに対して一回実行されるＳＱＬクエリとは異なり、特定のイベントストリームについてＥＰＳ２０２と共にアプリケーションによって登録されている連続クエリは、そのイベントストリームにおいてイベントが受信されるたびに実行され得る。連続クエリ実行の一部として、ＥＰＳ２０２は、連続クエリによって特定された命令に少なくとも部分的に基づいて、受信されたイベントを評価して、１つ以上のイベントが注目すべきイベントとして選択されるべきかどうかを判定し、連続クエリ実行の結果として出力し得る。
【００４８】
連続クエリは、異なる言語を用いてプログラムされ得る。特定の実施形態において、連続クエリは、Oracleによって提供され、OracleのComplex Events Processing（ＣＥＰ）製品提供によって用いられるＣＱＬを用いて構成され得る。OracleのＣＱＬは、イベントストリームに対して実行することができるクエリ（ＣＱＬクエリともいわれる）をプログラムするために用いることができる宣言型言語である。特定の実施形態において、ＣＱＬは、ストリーミングイベントデータの処理をサポートする追加された構造体を有するＳＱＬに基づく。
【００４９】
一実施形態において、イベント処理アプリケーションは以下のコンポーネントタイプで構成され得る：
（１）入力および出力ストリームならびにリレーションソースおよびシンクに直接にインターフェイス接続する１つ以上のアダプタ。アダプタは、入力および出力ストリームプロトコルを理解するように構成され、アプリケーションプロセッサーによって照会されることができる正規形にイベントデータを変換することを担う。アダプタは、正規化されたイベントデータをチャネルまたは出力ストリームおよびリレーションシンクに転送し得る。イベントアダプタは、様々なデータソースおよびシンクについて規定され得る。
（２）イベント処理エンドポイントとして作用する１つ以上のチャネル。とりわけ、チャネルは、イベント処理エージェントがそれに基づいて作用することができるまでイベントデータをキューに入れることを担う。
（３）１つ以上のアプリケーションプロセッサー（またはイベント処理エージェント）は、正規化されたイベントデータをチャネルから消費し、クエリを用いてそれを処理して注目すべきイベントを選択し、選択された注目すべきイベントを出力チャネルに転送（またはコピー）するように構成される。
（４）１つ以上のユーザー定義Ｊａｖａクラスは、イベントデータの属性に少なくとも部分的に基づいて、注目すべきイベントをパーティションするように実施され得る。一部の例において、イベントデータは次いで、パーティションに少なくとも部分的に基づいてサブストリームに分割され得て、それぞれのサブストリームを適当な出力チャネルに送ることができる。
（５）１つ以上のビーンは出力チャネルを聞き取るように構成され、出力チャネルへの新しいイベントの挿入によってトリガーされる。一部の実施形態において、このユーザーコードは、通常の従来型Ｊａｖａオブジェクト（ＰＯＪＯ）である。ユーザーアプリケーションは、ＪＭＳ、ウェブサービスおよびファイルライターなどの１組の外部サービスを利用して、生成されたイベントを外部イベントシンクに転送することができる。
（６）イベントビーンは、出力チャネルを聞き取るように登録され得て、出力チャネルへの新しいイベントの挿入によってトリガーされる。一部の実施形態において、このユーザーコードは、ビーンをOracle CEPによって管理することができるように、Oracle CEPイベントビーンＡＰＩを使用し得る。
【００５０】
一実施形態において、イベントアダプタは、イベントデータを入力チャネルに提供する。入力チャネルは、入力チャネルによって提示されるイベント上で動作する１つ以上のＣＱＬクエリに関連付けられるＣＱＬプロセッサーに接続される。ＣＱＬプロセッサーは、クエリ結果が書かれている出力チャネルに接続される。
【００５１】
一部の実施形態において、アセンブリファイルは、イベント処理アプリケーションの様々なコンポーネント、コンポーネントがどのように互いに接続されるか、およびアプリケーションによって処理されるイベントタイプについて記述するイベント処理アプリケーションに提供され得る。イベントの選択のために連続クエリまたはビジネスロジックを特定するため、別個のファイルが提供され得る。
【００５２】
なお、図２に示されるシステム２００は、図２に示される以外のコンポーネントを有し得る。さらに、図２に示される実施形態は、本開示の実施形態を組込み得るシステムの単なる一例である。一部の他の実施形態において、システム２００は、図２に示されるよりも多いかもしくは少ないコンポーネントを有してもよいし、２つ以上のコンポーネントを組み合わせてもよいし、または異なる構成または配置のコンポーネントを有してもよい。システム２００は、パーソナルコンピューター、携帯機器（たとえば自動車電話またはデバイス）、ワークステーション、ネットワークコンピューター、メインフレーム、キオスク、サーバー、または任意の他のデータ処理システムを含む様々なタイプであり得る。一部の他の実施形態において、システム２００は、システム２００の１つ以上のコンポーネントがクラウドにおける１つ以上のネットワークを介して分散される分散型システムとして構成され得る。
【００５３】
図２に示されるコンポーネントの１つ以上は、ソフトウェア、ハードウェア、またはそれらの組み合せにおいて実施され得る。一部の実施形態において、ソフトウェアはメモリー（たとえば非一時的コンピューター読取可能媒体）内、メモリーデバイス上、またはいくつかの他の物理メモリーに記憶され得て、サービスプロバイダーコンピューター１０６または他のコンピューティングシステムの１つ以上の処理ユニット（たとえば１つ以上のプロセッサー、１つ以上のプロセッサーコア、１つ以上のＧＰＵ等）によって実行され得る。
【００５４】
図３は、図１および図２のカスタムコンフィギュレーションサービス１４６の追加的な局面および／または特徴を例示する簡易化されたアーキテクチャ３００を示す。たとえば図３は、（たとえば、１つ以上のストリーミングソースまたはチャネルからの）入力データストリーム３０２および１つ以上のイベントシンク３０４（１）〜（Ｎ）（まとめて、イベントシンク３０４）に通信可能に結合されたカスタムコンフィギュレーションサービス１４６を例示する。図３に見られるように、カスタムコンフィギュレーションサービス１４６は、サブストリーム（たとえばクエリ３０６がデータストリーム３０２から注目すべきイベントを抽出した後、またはクエリ３０６を変更した後のいずれかにおいて入力ストリーム３０２のデータを処理するためのＪａｖａクラス３０８の出力）を照会するための（たとえば、ユーザー１０２から受信され得る図１のクエリ１５４のような）クエリ３０６によっても構成され得る。言いかえれば、一部の例において、ｊａｖａクラス３０８は、図１のユーザー１０２から受信された構成情報１５５によって変更され、その構成情報に少なくとも部分的に基づいてクエリを実施するために利用され得る。加えて、一部の例において、ユーザーがクエリを提供し、登録し、かつ／または構成すると、その特定のストリームをパーティションすることを担う１つ以上のＪａｖａコンポーネントを特定し得る。いずれにせよ、Ｊａｖａクラス３０８は、ユーザー定義構成情報１５５に少なくとも部分的に基づいて（たとえば、データストリーム３０２の属性に少なくとも部分的に基づいて）、より高いレベルのイベント処理言語の拡張子を用いて（たとえば、Ｊａｖａ実施をＪａｖａインターフェイスによって照会言語に結び付けて）、入力ストリーム３０２のデータをパーティションするように構成され得る。
【００５５】
一部の局面において、イベントがカスタムＪａｖａクラスによってパーティションされると、各パーティションにはパーティションＩＤまたはバケットＩＤがアサインされ得る。１つ以上のアプリケーションプログラミングインターフェイス（ＡＰＩ）コールまたはＪａｖａインターフェイスコールは、パーティションＩＤおよび／またはバケットＩＤに少なくとも部分的に基づいて、パーティションされたイベントをバケットに配置するように行なわれ得る。ハッシュ関数がユーザーによって提供され得る場合、これらのバケットは、ランタイムに実施され得て、パーティションされたデータのハッシングに少なくとも部分的に基づき得る。一部の例において、各パーティションはそれぞれのバケット３１０（１）〜（Ｎ）（まとめて、バケット３１０）に提供され得て、次いでパーティションされたデータを１つ以上の出力サブストリーム３１２（１）〜（Ｎ）（まとめて、出力サブストリーム３１２）を介してクエリ３０６に提供され得る。一部の例において、２つ以上の出力サブストリーム（たとえば出力サブストリーム３１２（１）および３１２（２））は、パーティションされたデータをクエリ３０６に提供し得、クエリ３０６は、パーティションされたストリームそれ自体を管理することができ、並行してそれらを処理し得る。出力サブストリーム３１２を介してクエリ３０６に提供されるパーティションの例は、限定はしないが、特定の期間中に一定回数より多く出現した入力ストリーム３０２からのＩＰアドレス、特定の期間中の特定回数より多い（たとえばユーザー１０２の）口座アクセスに関連付けられる入力ストリーム３０２からのＩＰアドレス、および／または（たとえばある期間中にまたは永久的に）所与のストリングと一致するアカウント名を有する入力ストリーム３０２からのＩＰアドレスを含む。カスタムコンフィギュレーションサービス１４６は次いで、クエリ３０６を用いて（たとえば出力サブストリーム３１２のデータをクエリ３０６に送ることによって）出力サブストリーム３１２を（たとえば並行して）処理し得て、１つ以上のイベントシンク３０４に結果を提供し得る。一部の例において、クエリ３０６は、クエリ構成体に応じて、単一のストリームまたはリレーションを（たとえばイベントシンク３０４（１）に）出力し得る。しかしながら、他の例においては、クエリ３０６は複数のストリームまたはリレーション（たとえばイベントシンク３０４（１）および３０４（Ｎ）の各々に一つ）を提供し得る。
【００５６】
一部の例において、クエリ３０６は、ＣＱＬ言語を拡張してストリングのための新しいデータ定義をサポートすることによってパーティションを実施するようにＪａｖａクラス３０８に関連付けられ得る。新しいデータ定義は、ユーザーがいずれかのコードを書いても書かなくてもパーティションスキームがクエリコンポーネントに関連付けられ得るように発行され得る。加えて、各イベントは次いでストリームから受信され、サービスプロバイダーコンピューター１０６上で動くＪａｖａエンジンに渡され得る。一部の場合において、ＸＭＬファイルを利用して、カスタマーコンフィギュレーションサービス１４６がランタイムにそれをピックアップし得、イベントを処理している間にＪａｖａクラス３０８を呼び出してどのバケット３１０にイベントを配置するかを見出し得、したがって適切なサブストリーム３１２で終了するように、Ｊａｖａクラス３０８をクエリ３０６に関連付け得る。これらの特徴を実施するために、ユーザーがＪａｖａクラス３０８を関連付けることを可能にするためにＣＱＬ言語が変更され得る。加えて、ＣＱＬエンジンのランタイム実行の一部である物理的なオペレータは、関連付けられているＪａｖａクラスへの呼出しを可能にするように変更され得る。加えて、各ＸＭＬファイルは、いつどのクエリについて各パーティションスキームを実施するかを識別し得る。たとえば、複数のクエリは複数のパーティションスキームに関連付けられ得て、各ＸＭＬファイルは、どのパーティションスキームが、どのＪａｖａクラスに、どのクエリに、どのストリームに、および／またはどの時間に属しているかを識別することが可能であり得る。Ｊａｖａクラスは、複数の異なるクエリおよび／またはデータストリーム上で再使用され得る。さらに、サービスプロバイダーコンピューター１０６は、異なるデータストリーム、ビジネス利用ケース、および／またはクエリに使用されるＪａｖａクラスの推奨および／または提案を提供するように構成され得る。たとえば、イベントストリームは、カスタマーがどのようにそれらをパーティションしているかと同様に研究され得る。そのため、一人のカスタマーによって用いられる１つのパーティションスキームは、同様のイベントストリーム、データのタイプ等に少なくとも部分的に基づいて他のカスタマーに推奨され得る。たとえば、第１のカスタマーのイベントストリームが財務情報を含むことが識別され、かつ財務情報を処理している第２のカスタマーが特定のパーティションスキームを利用したことをサービスプロバイダーコンピューター１０６がさらに識別した場合、サービスプロバイダーコンピューター１０６は、第２のカスタマーによって提供されるＪａｖａクラスおよび／または第２のカスタマーによって用いられるパーティションスキームを第１のカスタマーが実施することを推奨し得る。
【００５７】
加えて、一部の例において、クエリ３０６は、ユーザーから受信された構成情報１５５に少なくとも部分的に基づいて変更され得る。記載したように、Ｊａｖａクラス３０８は入力データストリーム３０２を適宜パーティションするためにこの構成情報１５５に少なくとも部分的に基づいてクエリ３０６を変更するように構成され得る。一部の例において、クエリ３０６は、元来以下のクエリ宣言に類似し得る：
View#1(IPView1):
SELECT ipAddress, acctName
FROM DSLoadChannel1 [RANGE 240 SECONDS]
Query#1 (DSEventIPQuery1):
SELECT ipAddress FROM IPView1
GROUP BY ipAddress HAVING COUNT(1) = 100
Query#2 (DSEventIPQuery2):
SELECT ipAddress FROM IPView1
GROUP BY ipAddress, acctName HAVING COUNT(1) = 50
Query#3 (DSEventIPQuery3):
SELECT ipAddress FROM IPView1
WHERE acctName LIKE '10101010' GROUP BY ipAddress
一部の例において、ベンチマークデータは、これらのクエリについてのスロットルイベント送出レートが毎秒およそ１０，０００イベントである傾向があることを例示、以下の問題領域が明らかとなる：
スケーラビリティ問題
・３０％未満のＣＰＵ利用
・入力スレッドの数の増大はスループットを拡大しない
有効なパーティションの欠如
・入力スレッドのランタイムはそれらの寿命の約４０％である
・入力スレッド間のコンテンション
特に、有効なパーティションの欠如に関して、１つの問題は、各スレッドのランタイムはその寿命の約４０％であるため、ベンチマークテストのスレッドタイムラインがロットスレッドコンテンションを示すことであると考えられる。これは、ＩＰアドレス属性を「ストリング」値と想定することによって入力データがＩＰアドレスについて効果的にパーティションされなかったことによるケースであると考えられる。この問題に対する少数の解決策は、限定はしないが、ＩＰアドレスオクテット値を用いてＩＰアドレスごとにクラス（たとえば、クラスＡ、クラスＢ、およびクラスＣ）を判定することと、ＣＱＬの拡張性フレームワークを用いて、ＩＰアドレス値およびそのクラスＩＤを有することになる拡張可能なタイプとしてＩＰアドレスを定義することと、ＩＰアドレスクラスに従ってデータをパーティションするための適切なハッシュメカニズムによるhashCode()法を定義することとを含む。たとえば、一例として以下のコードを用いる：
public class IPAddress {
public String ipAddress;
// getter & setters
@Override
public int hashCode(){
return ipAddress.hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof IPAddress) {
IPAddress other = (IPAddress)obj;
return this.ipAddress.equals(other.getIpAddress());
}
else
return false;
}
}
同様に：
public class DSEvent {
protected IPAddress ipAddress ;
protected String acctName ;
protected long partitionId;
protected long eventTs ;
protected int hashCode;
public DSEvent () {}
public DSEvent (IPAddress ipAddress, String acctName, long eventTS, long num, long partitionId)
{
this.ipAddress = ipAddress;
this.acctName = acctName;
this.eventTs = eventTS;
this.partitionId = partitionId;
this.hashCode = (int)num;
}
......
......
}
現行システムのないクエリのモデリングに関して、１つの問題は、少なくとも、上記したオリジナルのクエリにおいて「IPView1」という名のビューが以下のように規定されたことから、データベースビューの使用法がパーティションを可能にしない場合があることであるようと考えられる：
SELECT ipAddress, acctName
FROM DSLoadChannel1 [RANGE 240 SECONDS]
しかしながら、Partitioningを用いたParallelizationの現在のサポートでは、ビューソースに基づいてクエリをパーティションすることができない。したがって、本開示は、RANGE WINDOWを直接にクエリに以下のように適用することを説明する：
SELECT ipAddress FROM DSLoadChannel1[RANGE 240 SECONDS]
GROUP BY ipAddress
HAVING COUNT(ipAddress) = 100
以下の変更されたクエリがもたらされる：
変更されたクエリ１：
SELECT ipAddress
FROM DSLoadChannel1[RANGE 240 SECONDS]
GROUP BY ipAddress HAVING COUNT(ipAddress) = 100
変更されたクエリ２：
SELECT ipAddress
FROM DSLoadChannel1[RANGE 240 SECONDS]
GROUP BY ipAddress, acctName HAVING COUNT(ipAddress) = 50
変更されたクエリ３：
SELECT ipAddress
FROM DSLoadChannel1[RANGE 240 SECONDS]
WHERE acctName LIKE'10101010'
GROUP BY ipAddress
そのため、上記の技術および特徴は、とりわけ、ＩＰアドレス属性について新しいＪａｖａクラスを提供している。たとえば、新しいイベントを生成している間に、IPAddressおよびそのクラスを有するクラスIPAddressのインスタンスの生成。加えて、ThrottleEventSender内のスレッドがそのIPAddressが同じクラスに属するイベントを常に送信することを確実にするメカニズムが導入される。さらに、スレッドごとに危険地域を縮小するための別個のｓｔａｔカウンターが維持される。これらの技術のうちの少なくとも一部は、同じかまたは同様のコンピューター環境および関連付けられた状態が与えられたとすると、（上記の）毎秒約１０，０００イベントから毎秒約５０，０００イベントまで進むことを含むスロットルイベント送出レートの向上につながる。
【００５８】
したがって、記載される技術は、ＣＱＬ内の在来のOBJECTデータタイプのためのＣＯＵＮＴ集合体のサポート、下流の処理時間に関係なく呼出し当たりわずか１つのタイムアウトハートビートを送信するための固定されたScheduler Thread、入力スレッド上で待機する入力がある場合にタイムアウトハートビート伝播が行なわれないことを確実にするための同期されたメカニズムの導入、および現行システム時間がタイムアウト値以上に最後の入力のタイムスタンプと異なる場合にのみタイムアウトハートビートを送信するためのメカニズムの導入を提供する。記載される技術は、（他の属性タイプ間の）IPAddress属性タイプを、ＪＡＶＡクラスとして定義することによってＣＱＬ拡張可能データタイプに変換もし、Throttle Event senderにおいて、各スレッドが同じクラスに属するＩＰアドレスを有するイベントを送信することを確実にし、ScheduledThreadPoolExecutorスレッドの代わりに単純なスレッドを用いる。
【００５９】
図４は、一例に従う、データストリームのカスタムパーティションを実施するための１つ以上の技術４００を示す簡易化されたフロー図を示す。図４において、サービスプロバイダーコンピューター１０６は、ネットワーク１０８を介してユーザー１０２、ユーザーデバイス１０４、および／またはストリームソース１１０と通信しているものとして再び示される。加えて、一部の例において、サービスプロバイダーコンピューター１０６は、（たとえばネットワーク１０８を介して）１つ以上のイベントプロセッサーコンピューターおよび／またはデータベースを含んでいてもよいし、それらと通信してもよい。技術４００は（任意のシーケンス番号を含む）特定のオーダーで図４に示されているが、特定のオーダーは必要ではなく、技術４００の１つ以上のステップまたは部分が省略、スキップ、および／または並べ替えされ得ることが理解されるべきである。少なくとも一つの非限定的な例において、図１および図２に関して上記した１つ以上のサービスプロバイダーコンピューター１０６は、（たとえばユーザー１０２のビジネスに関連付けられる）ストリームを識別し得、かつ／またはストリームのイベントを照会するためにユーザーからクエリを受信し得る。一部の例において、サービスプロバイダーコンピューター１０６は、ユーザーデバイス１０４からのコードも受信し得る。コードは、サービスプロバイダーコンピューター１０６によって実行されて、ＣＥＰエンジンまたは他のイベント処理サーバー／サービス／プログラムに関連付けられて実行されているＪａｖａコードと相互作用するかまたは他の方法でＪａｖａコードを変更するように構成され得る。サービスプロバイダーコンピューター１０６は、一部の例において、コードに少なくとも部分的に基づいてクエリを構成し得る。コードは、ストリームの１つ以上のパラメータを識別して、データおよび／またはデータをパーティションするための１つ以上のコンディションもしくはルールをパーティションし得る。
【００６０】
一部の例において、サービスプロバイダーコンピューター１０６は、１つ以上のストリームソース１１０からストリーミングデータも受信し得て、次いでストリームの結果を受信されたコードに少なくとも部分的に基づいてバケット、および／またはサブストリームにパーティションし得る（たとえばランタイムに）。記載したように、パーティションは、受信されたコードによって定義されるように、イベント自体のルール、状態、および／または属性に基づき得る。一部の例において、サービスプロバイダーコンピューター１０６は次いで、サブストリームを（たとえば並行して）処理するために受信されたクエリに、次いでクエリからユーザーデバイス１０４に、および／または１つ以上のイベントシンクに送り得る。
【００６１】
図５および図６は、本願明細書において記載されるデータストリームのカスタムパーティションを実施するためのそれぞれの処理５００および６００を示す例示的なフロー図である。これらの処理５００，６００は、論理フロー図として示され、その各動作は、ハードウェア、コンピューター命令、またはそれらの組み合せにおいて実施され得る動作のシーケンスを表わす。コンピューター命令の文脈において、動作は、１つ以上のプロセッサーによって実行される場合に記載の動作を行なう、１つ以上のコンピューター読取可能記憶媒体に記憶されるコンピューター実行可能命令を表わす。概して、コンピューター実行可能命令には、特定の機能を行なう、もしくは特定のデータタイプを実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。動作が記載されるオーダーは、限定的に解釈されることを意図しておらず、任意の数の記載の動作が任意のオーダーで、および／または並列に組み合わされ得て、処理が実施され得る。
【００６２】
加えて、一部の、任意の、もしくはすべての処理は、実行可能命令を用いて構成される１つ以上のコンピューターシステムの制御下において行なわれ得る、および１つ以上のプロセッサー上でまとめて実行されるコード（たとえば、実行可能命令、１つ以上のコンピュータープログラム、または１つ以上のアプリケーション）として実施され得る、またはハードウェアによって実施され得る、またはこれらの組み合せによって実施され得る。上記のように、コードは、たとえば１つ以上のプロセッサーによって実行可能な複数の命令を含むコンピュータープログラムの形態でコンピューター読取可能記憶媒体上に記憶され得る。コンピューター読取可能記憶媒体は、非一時的であり得る。
【００６３】
一部の例において、図１〜図４に示される１つ以上のサービスプロバイダーコンピューター１０６（たとえば、少なくともカスタムコンフィギュレーションサービス１４６および／またはコンフィギュラブルパーティションモジュール１５０を利用する）は、図５の処理５００を行ない得る。処理５００は、ユーザーに関連付けられるデータストリームの一部分を処理するためのクエリを識別することによってブロック５０２において開始され得る。記載したように、クエリはユーザーから受信され得て、実体経済イベントについてデータストリームに照会するように構成され得る。５０４において、プロセス５００は、識別されたストリームの属性を識別するコードを受信することを含み得る。一部の例において、コードは、イベントの属性に少なくとも部分的に基づいてクエリを構成することが可能であり得る。プロセス５００は、５０６においてコードをクエリに関連付けることも含み得る。コードは、上記のように多くの異なるやり方でクエリに関連付けられ得る。たとえば、コードは、クエリを変更してイベントデータをパーティションするためにサービスプロバイダーコンピューターによって利用され得る。コードはまた、イベント処理エンジン、何らかのJavaScriptまたはクエリを実施するように構成される他のプロセスを変更するために、サービスプロバイダーコンピューターによって利用され得る。
【００６４】
５０８において、プロセス５００は、クエリに少なくとも部分的に基づいてデータストリームのイベントデータを受信することを含み得る。プロセス５００は、５１０において、（たとえば、受信されたコードに少なくとも部分的に基づいて）各イベントをＪａｖａクラスに提供することも含み得る。Ｊａｖａクラスは次いで、５１２において、属性に少なくとも部分的に基づいてイベントをパーティションするように実施され得る。５１４において、プロセス５００は、Ｊａｖａクラス実施（たとえばサブストリーム）の出力を受信することを含み得る。出力は、パーティションされたデータのバケットを含み得る（たとえば各バケットはデータイベントの異なるパーティションに対応し得る）。５１６において、プロセス５００は、属性に少なくとも部分的に基づいて（たとえば、さらに、実施されるＪａｖａクラスに少なくとも部分的に基づいて）サブストリームを処理するようにクエリを構成することにより終了し得る。
【００６５】
図６は、本明細書において記載されるデータストリームのカスタムパーティションを実施するための処理６００を示す例示的なフロー図を例示する。図１〜図４に示される１つ以上のサービスプロバイダーコンピューター１０６は（たとえば少なくともカスタムコンフィギュレーションサービス１４６および／またはコンフィギュラブルパーティションモジュール１５０を利用して）、図６の処理６００を行ない得る。処理６００は、ユーザー（たとえば図１のユーザー１０２）に関連付けられるデータストリームを識別することによって６０２において開始され得る。６０４において、処理６００は、データストリームによって受信されているイベントのレートがしきい値を上回っているかどうかを判定することを含み得る。一部の例において、しきい値は、問題のあるものとして識別された、かつ／または問題（たとえば低いスロットルイベント送出レート、多くかつ／または管理不可能な数の入力スレッド、高入力スレッドランタイム、入力スレッドコンテンション、スタービング入力スレッド等）を引起こすことが知られている数を含み得る。一部の例において、イベントのレートがしきい値を上回っていると判定されない場合、処理６００は、６０６において、標準的なまたはオリジナルのパーティションルールおよび／またはクエリモデルに従って、シングル出力ストリームを提供することを含み得る。代替的に、６０４においてしきい値に達している場合、処理６００は、６０８においてユーザーからクエリを受信することを含み得る。しかしながら、一部の例において、クエリは、６０４における判定に先立って、かつその判定とは無関係に受信され得る。
【００６６】
一部の例において、プロセスは、６１０において、カスタムコンフィギュレーションコード（たとえば構成情報１５５）が受信されるかどうか判定することを含み得る。カスタムコンフィギュレーションコードが受信されていないと判定された場合、処理６００は６０６に進むことを含み得る。しかしながら、カスタムコンフィギュレーションコードが６１０において受信され、イベントのレートがしきい値を上回っている場合は、処理６００は、６１２においてコードをクエリに関連付けることを含み得る。６１４において、プロセスは、コードにおいて識別された属性に少なくとも部分的に基づいて、イベントデータをパーティションするためにストリームイベントをコード（たとえばＪａｖａサーバーまたはエンジン）に送ることを含み得る。６１６において、処理６００は、各パーティション／属性のための出力サブストリームを、６０８において受信されたクエリに提供することを含み得る。さらに、処理６００は６１８において終了し得る。処理６００は、クエリ（または、限定はしないがフィルタ、集約、結合等を含む他のクエリオペレーター）を用いてサブストリームを処理することを含み得る。したがって、コードがイベントストリームをサブストリームにパーティションした後で、下流のクエリ処理が生じ得る。
【００６７】
図７は、本明細書において記載される実施形態の１つを実施するための分散型システム７００の簡易化された図を示す。例示された実施形態では、分散型システム７００は、１つ以上のクライアントコンピューティングデバイス７０２，７０４，７０６，および７０８を含み、これらは、１つ以上のネットワーク７１０を通じて、ウェブブラウザー、専用クライアント（たとえば、Oracle Forms）などのクライアントアプリケーションを実行および動作させるように構成される。サーバー７１２は、ネットワーク７１０を介して遠隔のクライアントコンピューティングデバイス７０２，７０４，７０６，および７０８と通信可能に結合され得る。
【００６８】
様々な実施形態において、サーバー７１２は、システムのコンポーネントの１つ以上によって提供される１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合され得る。一部の実施形態において、これらのサービスは、ウェブベースもしくはクラウドサービスとして、またはサービス（ＳａａＳ）モデルとしてのソフトウェアの下で、クライアントコンピューティングデバイス７０２，７０４，７０６，および／または７０８のユーザーに提供され得る。クライアントコンピューティングデバイス７０２、７０４および７０６，および／または７０８を動作させるユーザーはひいては、１つ以上のクライアントアプリケーションを利用して、サーバー７１２と相互作用して、これらのコンポーネントによって提供されるサービスを利用し得る。
【００６９】
図７に示される構成において、システム７００のソフトウエアコンポーネント７１８、７２０および７２２は、サーバー７１２上で実施されるものとして示される。他の実施形態において、システム７００のコンポーネントの１つ以上および／またはこれらのコンポーネントによって提供されるサービスは、クライアントコンピューティングデバイス７０２，７０４，７０６，および／または７０８のうち１つ以上によっても実施され得る。クライアントコンピューティングデバイスを動作させるユーザーは次いで、１つ以上のクライアントアプリケーションを利用して、これらのコンポーネントによって提供されるサービスを使用し得る。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合せにおいて実施され得る。分散型システム７００とは異なり得る様々な異なるシステムコンフィギュレーションが可能であることが認識されるべきである。図に示される実施形態は、したがって実施形態のシステムを実施するための分散型システムの一例であり、限定するものとは意図されていない。
【００７０】
クライアントコンピューティングデバイス７０２，７０４，７０６，および／または７０８は、ポータブルハンドヘルドデバイス（たとえばiPhone（登録商標）、携帯電話、ｉＰａｄ（登録商標）、コンピューティングタブレット、携帯情報端末（ＰＤＡ））、またはウェアラブルデバイス（たとえばGoogle Glass（登録商標）ヘッドマウンテッドディスプレイ）、Microsoft Windows Mobile（登録商標）などの実行ソフトウェア、および／またはiOS（登録商標）、ウィンドウズフォン、アンドロイド、Blackberry１６、Palm OS等といった様々なモバイルオペレーティングシステムであり得、インターネット、電子メール、ショートメッセージサービス（ＳＭＳ）、Blackberry（登録商標）、または他の通信プロトコルに対応する。クライアントコンピューティングデバイスは、Microsoft Windows（登録商標）、Apple Macintosh（登録商標）、および／またはＬｉｎｕｘ（登録商標）オペレーティングシステムの様々なバージョンを実行するパーソナルコンピューターおよび／またはラップトップコンピューターを例として含む汎用パーソナルコンピューターであり得る。クライアントコンピューティングデバイスは、たとえばGoogle Chrome OSなどの様々なＧＮＵ／Ｌｉｎｕｘオペレーティングシステムを含み、限定されない様々な商業的に利用可能なＵＮＩＸ（登録商標）もしくはＵＮＩＸのようなオペレーティングシステムのいずれかを実行するワークステーションコンピューターであり得る。代替的に、または加えて、クライアントコンピューティングデバイス７０２，７０４，７０６，および７０８は、ネットワーク７１０を通じて通信可能な、シンクライアントコンピューター、インターネット対応ゲーミングシステム（たとえばKinect（登録商標）ジェスチャー入力デバイスの有無に関わらずMicrosoft Xbox（登録商標）ゲーミングコンソール）、および／またはパーソナルメッセージングデバイスなどの任意の他の電子デバイスであり得る。
【００７１】
４つのクライアントコンピューティングデバイスを用いて例示的な分散型システム７００が示されているが、任意の数のクライアントコンピューティングデバイスが支持され得る。センサーを有するデバイスなどの他のデバイスが、サーバー７１２と対話し得る。
【００７２】
分散型システム７００のネットワーク７１０は、ＴＣＰ／ＩＰ（Transmission control protocol/Internet protocol）、ＳＮＡ（systems network architecture）、ＩＰＸ（Internet packet exchange）、ＡｐｐｌｅＴａｌｋ（登録商標）などを含みこれらに限定されない様々な商業的に利用可能なプロトコルのいずれかを使用してデータ通信をサポートすることができる、当業者によく知られた任意のタイプのネットワークであり得る。単に例示であるが、ネットワーク７１０は、イーサネット（登録商標）および／またはトークンリングなどに基づくものなどの、ローカルエリアネットワーク（ＬＡＮ）であり得る。ネットワーク７１０は、広域ネットワークおよびインターネットであり得る。これは、仮想プライベートネットワーク（ＶＰＮ）を含むがこれに限定されない仮想ネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網（ＰＳＴＮ）、赤外線ネットワーク、無線ネットワーク（たとえば、Institute of Electrical and Electronics （ＩＥＥＥ）７０２．１１プロトコルスイート、Ｂｌｕｅｔｏｏｔｈ（登録商標）プロトコル、および／または任意の他の無線プロトコルのうちのいずれかにおいて動作するネットワーク）、ならびに／またはこれらおよび／もしくは他のネットワークの組み合せを含むことができる。
【００７３】
サーバーコンピューター７１２は、１つ以上の汎用コンピューター、専用サーバーコンピューター（たとえば、ＰＣ（パーソナルコンピューター）サーバー、ＵＮＩＸ（登録商標）サーバー、ミッドレンジサーバー、メインフレームコンピューター、ラックマウントサーバーなどを含む）、サーバーファーム、サーバークラスター、または任意の他の適切な構成および／または組み合せで構成され得る。様々な実施形態において、サーバー７１２は、上記の開示において記載される１つ以上のサービスもしくはソフトウェアアプリケーションを実行するように適合され得る。たとえば、サーバー７１２は、本開示の実施形態に係る、上記の処理を行なうためのサーバーに対応し得る。
【００７４】
サーバー７１２は、上記のいずれかを含むオペレーティングシステム、ならびに商業的に利用可能なサーバーオペレーティングシステムのいずれかを実行し得る。また、サーバー７１２は、ＨＴＴＰ（hypertext transport protocol）サーバー、ＦＴＰ（file transfer protocol）サーバー、ＣＧＩ（common gateway interface）サーバー、ＪＡＶＡ（登録商標）サーバー、データベースサーバーなどを含む、様々な付加的なサーバーアプリケーションおよび／またはミッドティアアプリケーションのいずれかを実行し得る。例示的なデータベースサーバーは、Ｏｒａｃｌｅ、Ｍｉｃｒｏｓｏｆｔ、Ｓｙｂａｓｅ、ＩＢＭ（International Business Machines）などから商業的に入手可能なものも含むが、これらに限定されない。
【００７５】
一部の実施において、サーバー７１２は、クライアントコンピューティングデバイス７０２，７０４，７０６，および７０８のユーザーから受信されたデータフィードおよび／またはイベント更新を分析し統合するための１つ以上のアプリケーションを含み得る。一例として、データフィードおよび／またはイベント更新は、限定はしないが、１つ以上の第三者情報源および連続データストリームから受信されたTwitter（登録商標）フィード、Facebook（登録商標）更新、またはリアルタイム更新を含み得て、これらはデータアプリケーション、株式相場ディスプレイデバイス、ネットワーク性能測定ツール（たとえば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム分析ツール、自動車トラフィック監視などに関連するリアルタイムイベントを含み得る。サーバー７１２は、クライアントコンピューティングデバイス７０２，７０４，７０６，および７０８の１つ以上のディスプレイデバイスを介してデータフィードおよび／またはリアルタイムイベントを表示するための１つ以上のアプリケーションも含み得る。
【００７６】
また、分散型システム７００は、１つ以上のデータベース７１４および７１６を含み得る。データベース７１４および７１６は、様々な場所に置かれ得る。たとえば、データベース７１４および７１６のうちの１つ以上は、サーバー７１２に対してローカルの（および／またはそこに置かれる）非一時的記憶媒体上に置かれ得る。代替的に、データベース７１４および７１６は、サーバー７１２から遠隔に設けられ得て、ネットワークベースもしくは専属接続を介してサーバー７１２と通信し得る。実施形態の１つのセットにおいて、データベース７１４および７１６は、ストレージエリアネットワーク（ＳＡＮ）内に置かれ得る。同様に、サーバー７１２に帰する機能を行なうために必要な任意のファイルは、適宜、サーバー７１２にローカルに記憶され得る、および／または遠隔的に記憶され得る。実施形態の１つの集合において、データベース７１４および７１６は、ＳＱＬフォーマットの命令に応答してデータを記憶、更新、および検索するように適合される、Ｏｒａｃｌｅによって提供されるデータベースなどのリレーショナルデータベースを含み得る。
【００７７】
図８は、本開示の実施形態に従う、実施形態のシステムの１つ以上のコンポーネントによって提供されるサービスがクラウドサービスとして提供され得るシステム環境８００の１つ以上のコンポーネントの簡易化されたブロック図である。例示される実施形態では、システム環境８００は、クラウドサービスを提供するクラウドインフラストラクチャーシステム８０２と相互作用するためにユーザーによって用いられ得る１つ以上のクライアントコンピューティングデバイス８０４，８０６，および８０８を含む。クライアントコンピューティングデバイスは、クラウドインフラストラクチャーシステム８０２と相互作用してクラウドインフラストラクチャーシステム８０２によって提供されるサービスを使用するためにクライアントコンピューティングデバイスのユーザーによって用いられ得るウェブブラウザー、専用クライアントアプリケーション（たとえばOracle Forms）または何らかの他のアプリケーションなどのクライアントアプリケーションを動作させるように構成され得る。
【００７８】
図に示されるクラウドインフラストラクチャーシステム８０２は、図に示されているもの以外のコンポーネントを有し得ることが認識されるべきである。さらに、図に示される実施形態は、開示の実施形態を組込み得るクラウドインフラストラクチャーシステムの単なる一例である。一部の他の実施形態において、クラウドインフラストラクチャーシステム８０２は図に示されるよりも多いかもしくは少ないコンポーネントを有してもよいし、２つ以上のコンポーネントを組み合わせてもよいし、または異なる構成または配置のコンポーネントを有してもよい。
【００７９】
クライアントコンピューティングデバイス８０４，８０６，および８０８は、７０２，７０４，７０６，および７０８について上記したのと同様のデバイスであり得る。
【００８０】
典型的なシステム環境８００は、３つのクライアントコンピューティングデバイスを用いて例示的なシステム環境８００が示されているが、任意の数のクライアントコンピューティングデバイスが支持され得る。センサーを有するデバイスなどの他のデバイスが、サーバー８１２と対話し得る。
【００８１】
ネットワーク８１０は、クライアント８０４，８０６、８０８とクラウドインフラストラクチャーシステム８０２との間のデータの通信および交換を容易にし得る。各ネットワークは、ネットワーク１４１０について上記したものを含む様々な商業的に利用可能なプロトコルのいずれかを使用してデータ通信をサポートすることができる、当業者によく知られた任意のタイプのネットワークであり得る。
【００８２】
クラウドインフラストラクチャーシステム８０２は、サーバー７１２について上記したものを含み得る１つ以上のコンピューターおよび／またはサーバーを含み得る。
【００８３】
特定の実施形態において、クラウドインフラストラクチャーシステムによって提供されるサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホストされたオフィスパッケージおよびドキュメントコラボレーションサービス、データベース処理、管理された技術サポートサービス等といったクラウドインフラストラクチャーシステムのユーザーに対してオンデマンドで利用可能とされる多数のサービスを含み得る。クラウドインフラストラクチャーシステムによって提供されるサービスは、そのユーザーのニーズを満たすために動的にスケール変更することができる。クラウドインフラストラクチャーシステムによって提供されるサービスの具体的なインスタンス化は、本明細書において「サービスインスタンス」と称される。一般に、クラウドサービスプロバイダーのシステムから、インターネットなどの通信ネットワークを介してユーザーに利用可能とされる任意のサービスは、「クラウドサービス」と称される。典型的に、パブリッククラウド環境において、クラウドサービスプロバイダーのシステムを構築するサーバーおよびシステムは、カスタマー自身のオンプレミスサーバーおよびシステムとは異なる。たとえば、クラウドサービスプロバイダーのシステムはアプリケーションをホストし得て、ユーザーは、インターネットなどの通信ネットワークを介してオンデマンドにアプリケーションをオーダーし、使用し得る。
【００８４】
一部の例において、コンピューターネットワーククラウドインフラストラクチャーにおけるサービスは、クラウドベンダーによってユーザーに提供される記憶部、ホストされたデータベース、ホストされたウェブサーバー、ソフトウェアアプリケーション、または他のサービスに対する保護されたコンピューターネットワークアクセスを含み得るか、または当技術において他の方法で知られている。たとえば、サービスは、インターネットを通じてクラウド上の遠隔ストレージに対するパスワードで保護されたアクセスを含むことができる。別の例として、サービスは、ネットワーク化されたデベロッパーによる私的使用のためのウェブサービスベースのホストされたリレーショナルデータベースおよびスクリプト言語ミドルウェアエンジンを含むことができる。別の例として、サービスは、クラウドベンダーのウェブサイト上にホストされた電子メールソフトウェアアプリケーションに対するアクセスを含むことができる。
【００８５】
特定の実施形態において、クラウドインフラストラクチャーシステム８０２は、セルフサービスで、申し込みに基づき、弾力的に拡張可能で、確実で、非常に有効で、安全なやり方でカスタマーに与えられるアプリケーション、ミドルウェアおよびデータベースサービス提供物一式を含み得る。そのようなクラウドインフラストラクチャーシステムの一例は、本譲受人によって提供されるOracle Public Cloudである。
【００８６】
様々な実施形態において、クラウドインフラストラクチャーシステム８０２は、クラウドインフラストラクチャーシステム８０２によって提供されるサービスに対するカスタマーの申し込みを自動的にプロビジョニングし、管理し、かつトラックするように適合され得る。クラウドインフラストラクチャーシステム８０２は、異なるデプロイメントモデルを介してクラウドサービスを提供し得る。たとえば、サービスは、（たとえばOracle所有の）クラウドサービスを販売する組織によってクラウドインフラストラクチャーシステム８０２が所有されるパブリッククラウドモデルの下で提供され得て、サービスは、一般大衆または異なる産業企業にとって利用可能とされる。別の例として、サービスは、クラウドインフラストラクチャーシステム８０２が単一の組織のためにのみ動作され、組織内の１つ以上のエンティティのためのサービスを提供し得る個人のクラウドモデルの下で提供され得る。また、クラウドサービスは、クラウドインフラストラクチャーシステム８０２およびクラウドインフラストラクチャーシステム８０２によって提供されるサービスが、関連するコミュニティー内の一部の組織によって共有されるコミュニティークラウドモデルの下で提供され得る。また、クラウドサービスは、２つ以上の異なるモデルの組み合せであるハイブリッドクラウドモデルの下で提供され得る。
【００８７】
一部の実施形態において、クラウドインフラストラクチャーシステム８０２によって提供されるサービスは、Service(SaaS)カテゴリーとしてのソフトウェア、Service(PaaS)カテゴリーとしてのプラットフォーム、Service(IaaS)カテゴリーとしてのインフラストラクチャー、またはハイブリッドサービスを含む他のカテゴリーのサービスの下で提供される１つ以上のサービスを含み得る。カスタマーは、クラウドインフラストラクチャーシステム８０２によって提供される１つ以上のサービスを申し込みオーダーによってオーダーし得る。クラウドインフラストラクチャーシステム８０２は次いで、カスタマーの申し込みオーダーにおけるサービスを提供するための処理を行なう。
【００８８】
一部の実施形態において、クラウドインフラストラクチャーシステム８０２によって提供されるサービスは、限定はしないが、アプリケーションサービス、プラットフォームサービスおよびインフラストラクチャーサービスを含み得る。一部の例において、アプリケーションサービスは、クラウドインフラストラクチャーシステムによってＳａａＳプラットフォームを介して提供され得る。ＳａａＳプラットフォームは、ＳａａＳカテゴリーに入るクラウドサービスを提供するように構成され得る。たとえば、ＳａａＳプラットフォームは、統合された開発およびデプロイメントプラットフォーム上のオンデマンドのアプリケーション一式を構築し、伝える能力を提供し得る。ＳａａＳプラットフォームは、ＳａａＳサービスを提供するための基礎的なソフトウェアおよびインフラストラクチャーを管理し、制御し得る。ＳａａＳプラットフォームによって提供されるサービスを利用することによって、カスタマーは、クラウドインフラストラクチャーシステム上で実行するアプリケーションを利用することができる。カスタマーは、カスタマーが別個のライセンスおよびサポートを購入する必要なしに、アプリケーションサービスを得ることができる。様々な異なるＳａａＳサービスが提供され得る。例は、限定はしないが、大きな組織のための販売実績管理、企業統合およびビジネス上のフレキシビリティのためのソリューションを提供するサービスを含む。
【００８９】
一部の実施形態において、プラットフォームサービスは、クラウドインフラストラクチャーシステムによってＰａａＳプラットフォームを介して提供され得る。ＰａａＳプラットフォームは、ＰａａＳカテゴリーに入るクラウドサービスを提供するように構成され得る。プラットフォームサービスの例は、共有の共通アーキテクチャ上の既存のアプリケーションを組織（Oracleなど）が統合することを可能にするサービスと、プラットフォームによって提供される共有サービスを活用する新しいアプリケーションを構築する能力とを含み得る。ＰａａＳプラットフォームは、ＰａａＳサービスを提供するための基礎的なソフトウェアおよびインフラストラクチャーを管理し、制御し得る。カスタマーは、カスタマーが別個のライセンスおよびサポートを購入する必要なしに、クラウドインフラストラクチャーシステムによって提供されるＰａａＳサービスを得ることができる。プラットフォームサービスの例は、限定はしないが、Oracle Java Cloud Service（ＪＣＳ）、Oracle Database Cloud Service（ＤＢＣＳ）他を含む。
【００９０】
ＰａａＳプラットフォームによって提供されるサービスを利用することによって、カスタマーは、クラウドインフラストラクチャーシステムによってサポートされたプログラミング言語およびツールを採用し、また、デプロイされたサービスを制御することができる。一部の実施形態において、クラウドインフラストラクチャーシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス（たとえばOracle Fusion Middleware services）、およびＪａｖａクラウドサービスを含み得る。一実施形態において、データベースクラウドサービスは、組織がデータベースリソースをプールし、かつデータベースクラウドの形態でのサービスとしてカスタマーにデータベースを提示することを可能にする共有サービスデプロイメントモデルをサポートし得る。ミドルウェアクラウドサービスは、カスタマーが様々なビジネスアプリケーションを展開しデプロイするためのプラットフォームを提供し得て、Ｊａｖａクラウドサービスは、クラウドインフラストラクチャーシステムにおいてカスタマーがＪａｖａアプリケーションをデプロイするためのプラットフォームを提供し得る。
【００９１】
様々な異なるインフラストラクチャーサービスは、クラウドインフラストラクチャーシステムにおいてＩａａＳプラットフォームによって提供され得る。インフラストラクチャーサービスは、ＳａａＳプラットフォームおよびＰａａＳプラットフォームによって提供されるサービスを利用するカスタマーのための記憶部、ネットワーク、および他の基本のコンピューティングリソースといった基礎的なコンピューティングリソースの管理および制御を容易にする。
【００９２】
特定の実施形態において、クラウドインフラストラクチャーシステム８０２は、クラウドインフラストラクチャーシステムのカスタマーに様々なサービスを提供するために用いられるリソースを提供するためのインフラストラクチャーリソース８３０を含み得る。一実施形態において、インフラストラクチャーリソース８３０は、ＰａａＳプラットフォームおよびＳａａＳプラットフォームによって提供されるサービスを実行するためのサーバー、記憶部、およびネットワークのリソースといったハードウェアのあらかじめ統合され最適化された組み合せを含み得る。
【００９３】
一部の実施形態において、クラウドインフラストラクチャーシステム８０２におけるリソースは、複数のユーザーによって共有され、要求ごとに動的に再び割り当てられ得る。加えて、リソースは、異なるタイムゾーンのユーザーに割り当てられ得る。たとえば、クラウドインフラストラクチャーシステム８３０は、第１のタイムゾーンでの第１の組のユーザーに特定数の時間クラウドインフラストラクチャーシステムのリソースを利用させ、次いで異なるタイムゾーンに位置する別の組のユーザーに対する同じリソースの再割り当てを可能にすることが可能であり、それによってリソースの利用を最大化し得る。
【００９４】
特定の実施形態において、クラウドインフラストラクチャーシステム８０２の異なるコンポーネントまたはモジュールによって、かつクラウドインフラストラクチャーシステム８０２により提供されるサービスによって共有される多数の内部共有サービス８３２が提供され得る。これらの内部共有サービスは、限定はしないが、セキュリティおよびアイデンティティサービス、インテグレーションサービス、企業リポジトリサービス、企業マネージャーサービス、ウィルススキャン、およびホワイトリストサービス、高アベイラビリティ、保存後修復サービス、クラウドサポートを可能にするためのサービス、電子メールサービス、通知サービス、ファイル転送サービス等を含み得る。
【００９５】
特定の実施形態において、クラウドインフラストラクチャーシステム８０２は、クラウドインフラストラクチャーシステムにおいてクラウドサービス（たとえばＳａａＳ、ＰａａＳおよびＩａａＳサービス）の包括的な管理を提供し得る。一実施形態において、クラウド管理機能性は、クラウドインフラストラクチャーシステム８０２によって受信されたカスタマーの申し込みをプロビジョニングし、管理し、トラックする機能を含み得る。
【００９６】
一実施形態において、図に示されるように、クラウド管理機能性は、オーダー管理モジュール８２０、オーダー組織化モジュール８２２、オーダープロビジョニングモジュール８２４、オーダー管理および監視モジュール８２６、およびアイデンティティ管理モジュール８２８といった１つ以上のモジュールによって提供され得る。これらのモジュールは、汎用コンピューター、専用サーバーコンピューター、サーバーファーム、サーバークラスター、および／または任意の他の適切な配置および／または組み合せであり得る１つ以上のコンピューターおよび／またはサーバーを含み得るか、またはそれらを用いて提供され得る。
【００９７】
典型的な動作８３４において、クライアントデバイス８０４、８０６、または８０８などのクライアントデバイスを用いるカスタマーは、クラウドインフラストラクチャーシステム８０２によって提供される１つ以上のサービスをリクエストし、クラウドインフラストラクチャーシステム８０２によって提示される１つ以上のサービスに申し込むためのオーダーを行うことによって、クラウドインフラストラクチャーシステム８０２と相互作用し得る。特定の実施形態において、カスタマーは、クラウドユーザーインターフェイス（ＵＩ）、クラウドＵＩ８１２、クラウドＵＩ８１４、および／またはクラウドＵＩ８１６にアクセスし、これらのＵＩを介して申し込みオーダーを行ない得る。カスタマーがオーダーを行ったことに応じてクラウドインフラストラクチャーシステム８０２によって受信されるオーダー情報は、カスタマーを識別する情報と、カスタマーが申し込むつもりのクラウドインフラストラクチャーシステム８０２によって提供される１つ以上のサービスとを含み得る。
【００９８】
カスタマーによってオーダーが行なわれた後、オーダー情報は、クラウドＵＩ８１２，８１４，および／または８１６によって受信される。
【００９９】
動作８３６において、オーダーはオーダーデータベース８１８に記憶される。オーダーデータベース８１８は、クラウドインフラストラクチャーシステム８１８によって動作され、他のシステムエレメントと共に動作される一部のデータベースの１つであり得る。
【０１００】
動作８３８において、オーダー情報はオーダー管理モジュール８２０に転送される。一部のインスタンスにおいて、オーダー管理モジュール８２０は、オーダーを確認し、確認後にオーダーを記入するなどの、オーダーに関連する課金および会計機能を行なうように構成され得る。
【０１０１】
動作８４０において、オーダーに関する情報がオーダー組織化モジュール８２２に伝えられる。オーダー組織化モジュール８２２は、カスタマーによって行なわれたオーダーのためのサービスおよびリソースのプロビジョニングを調整するためにオーダー情報を利用し得る。一部のインスタンスにおいて、組織化モジュール８２２は、リソースのプロビジョニングを組織化して、申し込まれたサービスをオーダープロビジョニングモジュール８２４のサービスを用いてサポートし得る。
【０１０２】
特定の実施形態において、オーダー組織化モジュール８２２は、各オーダーに関連付けられるビジネスプロセスの管理を可能にし、オーダーがプロビジョニングに進むべきかどうか判定するためにビジネスロジックを適用する。動作８４２において、新規申し込みのためのオーダーを受信すると、オーダー組織化モジュール８２２は、オーダープロビジョニングモジュール８２４にリクエストを送信して、リソースを割り当て、申し込みオーダーを遂行するために必要とされるリソースを構成する。オーダープロビジョニングモジュール８２４は、カスタマーによってオーダーされたサービスのためのリソースの割り当てを可能にする。オーダープロビジョニングモジュール８２４は、クラウドインフラストラクチャーシステム８００によって提供されるクラウドサービスと、リクエストされたサービスを提供するためにリソースをプロビジョニングのために用いられる物理的な実施層との間に抽象化レベルを提供する。オーダー組織化モジュール８２２はしたがって、サービスおよびリソースが実際にオンザフライでプロビジョニングされるかまたはあらかじめプロビジョニングされ、かつリクエスト後に割当て／アサインされたかどうかといった実施詳細から分離され得る。
【０１０３】
動作８４４において、ひとたびサービスおよびリソースがプロビジョニングされると、プロビジョニングされたサービスの通知が、クラウドインフラストラクチャーシステム８０２のオーダープロビジョニングモジュール８２４によってクライアントデバイス８０４、８０６および／または８０８上のカスタマーに送信され得る。
【０１０４】
動作８４６において、カスタマーの申し込みオーダーは、オーダー管理および監視モジュール８２６によって管理され、追跡され得る。一部のインスタンスにおいて、オーダー管理および監視モジュール８２６は、用いられる記憶部の量、転送されるデータ量、ユーザー数、ならびにシステムアップタイムおよびシステムダウンタイムの量といった、申し込みオーダーにおけるサービスのための使用統計を収集するように構成され得る。
【０１０５】
特定の実施形態において、クラウドインフラストラクチャーシステム８００は、アイデンティティ管理モジュール８２８を含み得る。アイデンティティ管理モジュール８２８はクラウドインフラストラクチャーシステム８００へのアクセス管理および権限付与のサービスといったアイデンティティサービスを提供するように構成され得る。一部の実施形態において、アイデンティティ管理モジュール８２８は、クラウドインフラストラクチャーシステム８０２によって提供されるサービスを利用したいカスタマーに関する情報を制御し得る。そのような情報は、そのようなカスタマーのアイデンティティを認証する情報と、どの動作によって様々なシステムリソース（たとえばファイル、ディレクトリ、アプリケーション、通信ポート、メモリーセグメントなど）に対してそれらのカスタマーが行なうことを権限付与されるかを記述する情報とを含むことができる。アイデンティティ管理モジュール８２８は、各カスタマーについての、またどのように誰によってその記述情報がアクセスされ変更することができるかについての記述情報の管理も含み得る。
【０１０６】
図９は、本開示の様々な実施形態が実施され得る典型的なコンピューターシステム９００を例示する。システム９００は上記したコンピューターシステムのうちのいずれかを実施するために用いられ得る。図に示されるように、コンピューターシステム９００は、バスサブシステム９０２を介して多くの周辺サブシステムと通信する処理ユニット９０４を含む。これらの周辺サブシステムは、処理加速ユニット９０６、Ｉ／Ｏサブシステム９０８、記憶サブシステム９１８、および通信サブシステム９２４を含み得る。記憶サブシステム９１８は、有形のコンピューター読取可能記憶媒体９２２およびシステムメモリー９１０を含む。
【０１０７】
バスサブシステム９０２は、コンピューターシステム９００の様々なコンポーネントおよびサブシステムを意図される通りに互いに通信させるためのメカニズムを提供する。バスサブシステム９０２は、単母線として概略的に示されるが、バスサブシステムの代替的な実施形態は複数のバスを利用し得る。バスサブシステム９０２は、多様なバスアーキテクチャのうちのいずれかを用いて、メモリーバスまたはメモリーコントローラー、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造のいずれかであり得る。たとえば、そのようなアーキテクチャは、ＩＥＥＥ  Ｐ１３８６．１規格で製造されたMezzanineバスとして実施することができるIndustry Standard Architecture （ＩＳＡ）バス、Micro Channel Architecture（ＭＣＡ）バス、Enhanced ISA（ＥＩＳＡ）バス、Video Electronics Standards Association （ＶＥＳＡ）ローカルバス、およびPeripheral Component Interconnect （ＰＣＩ）を含み得る。
【０１０８】
１つ以上の集積回路（たとえば従来のマイクロプロセッサーまたはマイクロコントローラー）として実施することができる処理ユニット９０４は、コンピューターシステム９００の動作を制御する。１つ以上のプロセッサーが処理ユニット９０４に含まれ得る。これらのプロセッサーは、シングルコアまたはマルチコアプロセッサーを含み得る。特定の実施形態において、処理ユニット９０４は、各処理ユニットに含まれるシングルまたはマルチコアプロセッサーを有する１つ以上の独立した処理ユニット９３２および／または９３４として実施され得る。他の実施形態において、処理ユニット９０４は、２つのデュアルコアプロセッサーをシングルチップに統合することによって形成されたクアッドコア処理ユニットとしても実施され得る。
【０１０９】
様々な実施形態において、処理ユニット９０４はプログラムコードに応じて様々なプログラムを実行することができ、複数の同時に実行するプログラムまたはプロセスを維持することができる。任意の所与の時間において、実行されるべきプログラムコードの一部またはすべては、プロセッサー９０４におよび／または記憶サブシステム９１８に存在し得る。適切なプログラミングによって、プロセッサー９０４は、上記した様々な機能を提供することができる。コンピューターシステム９００は加えて、デジタル信号プロセッサー（ＤＳＰ）、専用プロセッサーなどを含むことができる処理加速ユニット９０６を含み得る。
【０１１０】
Ｉ／Ｏサブシステム９０８は、ユーザーインターフェイス入力デバイスおよびユーザーインターフェイス出力デバイスを含み得る。ユーザーインターフェイス入力デバイスは、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システム付きオーディオ入力デバイス、マイクロフォン、および他の種類の入力デバイスを含み得る。ユーザーインターフェイス入力デバイスは、たとえば、ジェスチャーおよび口頭での指示を用いた生来のユーザーインターフェイスによって、Microsoft Xbox（登録商標）３６０ゲームコントローラーなどの入力デバイスをユーザーが制御しそれと対話することを可能にするMicrosoft Kinect（登録商標）モーションセンサなどの動き検知および／またはジェスチャー認識装置を含み得る。ユーザーインターフェイス入力デバイスは、ユーザーから目の動作（たとえば撮影および／またはメニュー選択を行っている間の「まばたき」）を検出し、アイジェスチャーを入力デバイス（たとえばGoogle Glass（登録商標））への入力として変換するGoogle Glass（登録商標）まばたき検出器などのアイジェスチャー認識装置を含み得る。加えて、ユーザーインターフェイス入力デバイスは、ユーザーが音声コマンドによって音声認識システム（たとえばＳｉｒｉ（登録商標）ナビゲーター）と相互作用することを可能にする音声認識検知装置を含み得る。
【０１１１】
ユーザーインターフェイス入力デバイスは、限定はしないが、三次元（３Ｄ）マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、およびスピーカーなどのオーディオ／ビジュアル装置、デジタルカメラ、デジタルビデオカメラ、ポータブルメディアプレイヤー、ウェブカメラ、イメージスキャナ、指紋スキャナ、バーコードリーダー、３Ｄスキャナ、３Ｄプリンター、レーザー測距装置、およびアイゲイズトラッキング装置を含み得る。加えて、ユーザーインターフェイス入力デバイスは、たとえば、コンピューター断層撮影装置、磁気共鳴画像装置、ポジトロン断層撮影装置、医療用超音波検査装置などの医療用撮像入力デバイスを含み得る。ユーザーインターフェイス入力デバイスは、たとえば、ＭＩＤＩキーボード、デジタル楽器などといった音声入力装置も含み得る。
【０１１２】
ユーザーインターフェイス出力デバイスは、ディスプレイサブシステム、表示灯、または音声出力装置などの非視覚的ディスプレイを含み得る。ディスプレイサブシステムは、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）またはプラズマディスプレイを用いるものなどのフラットパネルデバイス、投影デバイス、タッチスクリーンなどであり得る。一般に、「出力デバイス」という用語の使用は、コンピューターシステム９００からユーザーまたは他のコンピューターに情報を出力するためのあらゆる可能な種類の装置およびメカニズムを含むことが意図されている。たとえば、ユーザーインターフェイス出力デバイスは、限定はしないが、モニタ、プリンター、スピーカー、ヘッドホン、カーナビ、プロッタ、音声出力デバイス、およびモデムといった、テキスト、図形、およびオーディオ／ビデオ情報を視覚的に伝える様々なディスプレイデバイスを含み得る。
【０１１３】
コンピューターシステム９００は、現在システムメモリー９１０内にあるものとして示される、ソフトウェア要素を含む記憶サブシステム９１８を含み得る。システムメモリー９１０は、処理ユニット９０４上でローディング可能および実行可能なプログラム命令ならびにこれらのプログラムの実行時に生成されるデータを記憶し得る。
【０１１４】
コンピューターシステム９００の構成およびタイプに応じて、システムメモリー９１０は、揮発性（ランダムアクセスメモリー（ＲＡＭ）など）および／または不揮発性（読み取り専用メモリー（ＲＯＭ）、フラッシュメモリーなど）であり得る。ＲＡＭは、処理ユニット９０４に直ちにアクセス可能であり、かつ／または処理ユニット９０４によって現在動作され実行されているデータおよび／またはプログラムモジュールを典型的に含む。一部の実施において、システムメモリー９１０は、スタティックランダムアクセスメモリー（ＳＲＡＭ）またはダイナミックランダムアクセスメモリー（ＤＲＡＭ）などの複数の異なるタイプのメモリーを含み得る。一部の実施において、起動中などにコンピューターシステム９００内の要素間で情報を転送するのを支援する基本的なルーチンを含んでいる基本入力／出力システム（ＢＩＯＳ）は、典型的にＲＯＭに記憶され得る。例として、限定ではないが、システムメモリー９１０は、アプリケーションプログラム９１２も例示する。アプリケーションプログラム９１２は、クライアントアプリケーション、ウェブブラウザー、ミッドティアアプリケーション、リレーショナルデータベース管理システム（ＲＤＢＭＳ）等、プログラムデータ９１４、およびオペレーティングシステム９１６を含み得る。例として、オペレーティングシステム９１６は、Microsoft Windows（登録商標）、Apple Macintosh（登録商標）および／またはＬｉｎｕｘオペレーティングシステムの様々なバージョン、様々な商業的に利用可能なＵＮＩＸ（登録商標）もしくはＵＮＩＸのようなオペレーティングシステム（限定はしないが様々なＧＮＵ／Ｌｉｎｕｘオペレーティングシステム、Google Chrome（登録商標）ＯＳ等を含む）、および／またはｉＯＳ、Windows（登録商標）フォン、Android（登録商標）ＯＳ、BlackBerry（登録商標）9 OSおよびPalm（登録商標）ＯＳオペレーティングシステムなどのモバイルオペレーティングシステムを含み得る。
【０１１５】
記憶サブシステム９１８は、一部の実施形態の機能性を提供する基本的なプログラミングおよびデータ構造体を記憶するための有形のコンピューター読取可能記憶媒体も提供し得る。プロセッサーによって実行されると上記した機能性を提供するソフトウェア（プログラム、コードモジュール、命令）は、記憶サブシステム９１８に記憶され得る。これらのソフトウェアモジュールまたは命令は、処理ユニット９０４によって実行され得る。記憶サブシステム９１８は、本開示に従って用いられるデータを記憶するためのリポジトリを提供し得る。
【０１１６】
記憶サブシステム９００は、コンピューター読取可能記憶媒体９２２にさらに接続することができるコンピューター読取可能記憶媒体リーダー９２０も含み得る。これらは合わせて、および、選択的には、システムメモリー９１０と組み合わせて包括的に、遠隔、ローカル、固定、および／またはリムーバブル記憶デバイスと、コンピューター読取可能情報を一時的および／またはより永続的に含み、記憶し、送信し、かつ取り出すための記憶媒体とを加えたものを表わす。
【０１１７】
コードもしくはコードの一部を含むコンピューター読み取り可能記憶媒体９２２は、当該技術において知られる、もしくは使用される任意の適切な媒体も含むことができ、この媒体には、情報の記憶および／または伝達のための任意の方法および技術において実施される揮発性および不揮発性（非一時的）のリムーバブルおよび非リムーバブル媒体などの記憶媒体および通信媒体が含まれる。これは、ＲＡＭ、ＲＯＭ、電気的消去可能プログラム可能なＲＯＭ(ＥＥＰＲＯＭ）、フラッシュメモリー、もしくは他のメモリー技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）、もしくは他の光学記憶部、磁気カセット、磁気テープ、磁気ディスク記憶部、もしくは他の磁気記憶デバイス、または他の有形のコンピューター読取可能媒体が含むことができる。これは、データ信号、データ伝送、または所望の情報を送信するために用いることができ、コンピューティングシステム９００によってアクセスすることができる任意の他の媒体などの非有形のコンピューター読取可能媒体も含むことができる。
【０１１８】
例として、コンピューター読取可能記憶媒体９２２は、非リムーバブルで不揮発性の磁気媒体から読出すかまたはそこに書込むハードディスクドライブ、リムーバブルで不揮発性の磁気ディスクから読出すかまたはそこに書込む磁気ディスクドライブ、およびＣＤ  ＲＯＭ、ＤＶＤ、およびBlu-Ray（登録商標）ディスクなどのリムーバブルで不揮発性の光ディスクから読出すかまたはそこに書込む光ディスクドライブ、または他の光媒体を含み得る。コンピューター読取可能記憶媒体９２２は、限定はしないが、Ｚｉｐ（登録商標）ドライブ、フラッシュメモリーカード、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ、セキュアデジタル（ＳＤ）カード、ＤＶＤディスク、デジタルビデオテープなどを含み得る。コンピューター読取可能記憶媒体９２２は、フラッシュメモリーベースのＳＳＤ、企業フラッシュドライブ、ソリッドステートＲＯＭ等といった不揮発性メモリーベースのソリッドステートドライブ（ＳＳＤ）、ソリッドステートＲＡＭ、ダイナミックＲＡＭ、スタティックＲＡＭ、ＤＲＡＭベースのＳＳＤ、磁気抵抗ＲＡＭ（ＭＲＡＭ）ＳＳＤ、ならびにＤＲＡＭおよびフラッシュメモリーベースのＳＳＤの組み合せを用いるハイブリッドＳＳＤなどの揮発性メモリーベースのＳＳＤも含み得る。ディスクドライブおよびそれらの関連付けられたコンピューター読取可能媒体は、コンピューター読取可能命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶装置をコンピューターシステム９００に提供し得る。
【０１１９】
通信サブシステム９２４は、他のコンピューターシステムおよびネットワークへのインターフェイスを提供する。通信サブシステム９２４は、データを受信し、コンピューターシステム９００から他のシステムにデータを送信するためのインターフェイスとして機能する。たとえば、通信サブシステム９２４は、コンピューターシステム９００がインターネットを介して１つ以上の装置に接続することを可能にし得る。一部の実施形態において、通信サブシステム９２４は、（たとえば携帯電話技術、３Ｇ、４ＧまたはＥＤＧＥ（enhanced data rates for global evolution）などの高度データネットワーク技術、ＷｉＦｉ（ＩＥＥＥ  １４０２．１１系列基準、もしくは他の移動通信技術、またはそれらの任意の組み合せを用いて）無線音声および／またはデータネットワークにアクセスするための無線周波数（ＲＦ）トランシーバーコンポーネント、全地球測位システム（ＧＰＳ）レシーバーコンポーネント、ならびに／または他のコンポーネントを含むことができる。一部の実施形態において、通信サブシステム９２４は、無線インターフェイスに加えて、またはその代わりに、有線ネットワークコネクティビティ（たとえばイーサネット（登録商標））を提供することができる。
【０１２０】
一部の実施形態において、通信サブシステム９２４は、コンピューターシステム９００を使用し得る一人以上のユーザーのために、構造化されたおよび／または構造化されていないデータフィード９２６、イベントストリーム９２８、イベント更新９３０などの形態の入力通信も受信し得る。
【０１２１】
例として、通信サブシステム９２４は、Twitter（登録商標）フィード、Facebook（登録商標）更新、Rich Site Summary（ＲＳＳ）フィードなどのウェブフィード、および／または１つ以上の第三者情報源からのリアルタイム更新などのソーシャルネットワークおよび／または他の通信サービスのユーザーからリアルタイムにデータフィード９２６を受信するように構成され得る。
【０１２２】
加えて、通信サブシステム９２４は、明示的な終わりのない本質的に連続的または無限であり得るリアルタイムイベントのイベントストリーム９２８および／またはイベント更新９３０を含み得る連続的なデータストリームの形態でデータを受信するようにも構成され得る。連続的なデータを生成するアプリケーションの例は、たとえば、センサーデータアプリケーション、株式相場表示装置、ネットワーク性能測定ツール（たとえば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム分析ツール、自動車トラフィック監視などを含み得る。
【０１２３】
通信サブシステム９２４は、構造化されたデータおよび／または構造化されていないデータフィード９２６、イベントストリーム９２８、イベント更新９３０等を、コンピューターシステム９００に結合された１つ以上のストリーミングデータソースコンピューターと通信し得る１つ以上のデータベースに出力するように構成され得る。
【０１２４】
コンピューターシステム９００は、ハンドヘルドポータブルデバイス（たとえばiPhone（登録商標）携帯電話、ｉＰａｄ（登録商標）コンピューティングタブレット、ＰＤＡ）、ウェアラブルデバイス（たとえばGoogle Glass（登録商標）ヘッドマウンテッドディスプレイ）、ＰＣ、ワークステーション、メインフレーム、キオスク、サーバーラック、または任意の他のデータ処理システムを含む様々な種類のうちの１つであり得る。
【０１２５】
コンピューターおよびネットワークの常に変化する性質により、図に示されるコンピューターシステム９００の説明は具体的な一例としてのみ意図される。図に示されるシステムよりも多いかまたは少ないコンポーネントを有する他の多くの構造が可能である。たとえば、カスタマイズされるハードウェアも使用され得る、および／または特定の要素がハードウェア、ファームウェア、ソフトウェア（アプレットを含む）、または組み合せで実施され得る。さらに、ネットワーク入力／出力デバイスなどの他のコンピューティングデバイスへの接続も採用され得る。本明細書において提供される開示および教示に基づいて、当該分野の当業者は、様々な実施形態を実施する他のやり方および／または方法を認識するであろう。
【０１２６】
図１０は、実施形態に従うシステム１０００のブロック図である。システム１０００のブロックは、本発明の原則を実行するために、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合せによって実施され得る。当業者は、図１０に記載されるブロックが組み合わされ得る、またはサブブロックに分離され得て、上記の本発明の原則が実施されることを理解する。たとえば、第１の受信ユニット１００２および第２の受信ユニット１００３は、１つの受信ユニットに統合することができる。このため、本願明細書における記載は、可能性のある組み合せもしくは分離、または本願明細書に記載される機能ブロックのさらなる定義を支持し得る。
【０１２７】
図１０に示されるように、システム１０００は、識別ユニット１００１、第１の受信ユニット１００２、第２の受信ユニット１００３、関連付けユニット１００４、構成ユニット１００５、パーティションユニット１００６、第１の提供ユニット１００７、および第２の提供ユニット１００８を含む。識別ユニット１００１は、ユーザーに関連付けられるデータストリームを識別することができる。第１の受信ユニット１００２は、識別されたデータストリームの少なくとも一部分を処理するためのクエリを受信することができる。第２の受信ユニット１００３は、識別されたデータストリームの属性を識別するコードをユーザーから受信することができる。コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能である。関連付けユニット１００４は、コードをクエリに関連付けることができる。構成ユニット１００５は、コードがクエリに関連付けられた後、属性に少なくとも部分的に基づいてデータストリームをパーティションするようにクエリを構成することができる。パーティションユニット１００６は、属性に少なくとも部分的に基づいてデータストリームを複数の部分にパーティションすることができる。第１の提供ユニット１００７は、複数の部分のうち少なくとも１つのためのサブストリームをクエリに提供することができる。第２の提供ユニット１００８は、提供されたサブストリームに少なくとも部分的に基づいてクエリの結果を提供することができる。
【０１２８】
発明の実施形態によれば、コードは、ユーザーに提供されるコントラクトに少なくとも部分的に基づくオブジェクト指向のクラスを含み、構成ユニットは、オブジェクト指向のクラスにクエリを結び付けることができる結び付けユニットを含む。
【０１２９】
発明の実施形態によれば、システム１０００はさらに、第３の受信ユニット１００９、第３の提供ユニット１０１０、および第４の受信ユニット１０１１を含むことができる。第３の受信ユニット１００９は、クエリに少なくとも部分的に基づいてデータストリームのイベントを受信することができる。第３の提供ユニット１０１０は、イベントをオブジェクト指向のクラスに提供することができる。第４の受信ユニットは、オブジェクト指向のクラスからの出力を受信することができる。
【０１３０】
発明の実施形態によれば、データストリームは、オブジェクト指向のクラスからの出力に少なくとも部分的に基づいてパーティションされる。
【０１３１】
発明の実施形態によれば、属性は、ユーザーのカスタマーのコンピューティングデバイスの第１の識別子、ユーザーに関連付けられる項目の第２の識別子、または当該項目に関連付けられる項目属性の第３の識別子のうち少なくとも１つを含む。
【０１３２】
発明の実施形態によれば、カスタマーのコンピューティングデバイスの識別子は、カスタマーのコンピューティングデバイスのインターネットプロトコルアドレス、またはカスタマーのコンピューティングデバイスが位置する地理的領域を示す。
【０１３３】
図１１は、実施形態に従うシステム１１００のブロック図である。システム１１００のブロックは、本発明の原則を実行するために、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合せによって実施され得る。当業者は、上記の本発明の原則を実行するために図１１のブロックが結合され得る、またはサブブロックに分離され得ることを理解する。たとえば、第２の受信ユニット１１０５および第３の受信ユニット１１０８は、１つの受信ユニットに統合することができる。このため、本願明細書における記載は、可能性のある組み合せもしくは分離、または本願明細書に記載の機能ブロックのさらなる定義を支持し得る。
【０１３４】
図１１に示されるように、システム１１００は、識別ユニット１１０１、第１の受信ユニット１１０２、構成ユニット１１０３、処理ユニット１１０４、第２の受信ユニット１１０５、提供ユニット１１０６、実施ユニット１１０７、および第３の受信ユニット１１０８を含む。識別ユニット１１０１は、ユーザーに関連付けられるデータストリームの少なくとも一部分を処理するためのクエリを識別することができる。第１の受信ユニット１１０２は、識別されたデータストリームの属性を識別するコードをユーザーから受信することができる。コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能である。構成ユニット１１０３は、属性に少なくとも部分的に基づいてデータストリームの１つ以上のサブストリームを処理するようにクエリを構成することができる。
【０１３５】
発明の実施形態によれば、システムはさらに並列処理ユニット１１０４を含むことができる。処理ユニット１１０４は、１つ以上のサブストリームの複数を並行して処理することができる。
【０１３６】
発明の実施形態によれば、コードは、ユーザーに提供されるｊａｖａコントラクトに少なくとも部分的に基づくｊａｖａクラスを含むことができる。
【０１３７】
発明の実施形態によれば、システムはさらに、第３の受信ユニット１１０５、提供ユニット１１０６、実施ユニット１１０７、および第３の受信ユニット１１０８を含むことができる。
【０１３８】
発明の実施形態によれば、ｊａｖａクラスからの出力は、１つ以上のサブストリームのうちの少なくとも１つである。
【０１３９】
発明の実施形態によれば、属性は、コードの受信に先立ってユーザーによって特定される。
【０１４０】
発明の実施形態によれば、１つ以上のサブストリームのうち少なくとも１つのサブストリームは、データストリームの少なくとも一部分に対して実行されるハッシュ関数に少なくとも部分的に基づいて生成される。
【０１４１】
図１２は、実施形態に従うコンピューター実装システム１２００のブロック図である。システム１２００のブロックは、本発明の原則を実行するために、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合せによって実施され得る。当業者は、上記の本発明の原則を実行するために図１２のブロックが結合され得る、またはサブブロックに分離され得ることを理解する。たとえば、第１の受信ユニット１２０２および第２の受信ユニット１２０３は、１つの受信ユニットに統合することができる。このため、本願明細書における記載は、可能性のある組み合せもしくは分離、または本願明細書に記載の機能ブロックのさらなる定義を支持し得る。
【０１４２】
図１２に示されるように、コンピューター実装システム１２００は、識別ユニット１２０１、第１の受信ユニット１２０２、第２の受信ユニット１２０３、構成ユニット１２０４、および処理ユニット１２０５を含む。識別ユニット１２０１は、ユーザーに関連付けられるデータストリームを識別することができる。第１の受信ユニット１２０２は、識別されたデータストリームの少なくとも一部分を処理するためのクエリを受信することができる。第２の受信ユニット１２０３は、識別されたデータストリームの属性を識別するコードをユーザーから受信することができる。コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能である。構成ユニット１２０４は、属性に少なくとも部分的に基づいてデータストリームを少なくとも１つのサブストリームにパーティションするようにコードを構成することができる。処理ユニット１２０５は、受信されたクエリを用いて、少なくとも１つのサブストリームを処理することができる。
【０１４３】
発明の実施形態によれば、コンピューター実装システムはさらに、コードをクエリに関連付けることができる関連付けユニット１２０６を含むことができる。
【０１４４】
発明の実施形態によれば、少なくとも１つのサブストリームは、コードから出力として受信された少なくとも第２のサブストリームと並行して、受信されたクエリを用いて処理されることができる。
【０１４５】
発明の実施形態によれば、コンピューター実装システムはさらに、第３の受信ユニット１２０７、提供ユニット１２０８、実施ユニット１２０９、および第４の受信ユニット１２１０を含むことができる。第３の受信ユニット１２０７は、クエリに少なくとも部分的に基づいてデータストリームのイベントを受信することができる。提供ユニット１２０８は、受信されたコードに対応するｊａｖａクラスにイベントを提供することができる。実施ユニット１２０９は、属性に少なくとも部分的に基づいてイベントを処理するためにｊａｖａクラスを実施することができる。第４の受信ユニット１２１０は、少なくとも１つのサブストリームを識別するｊａｖａクラスからの出力を受信することができる。
【０１４６】
発明の実施形態によれば、データストリームは、ｊａｖａクラスに少なくとも部分的に基づいてパーティションされることができる。
【０１４７】
発明の実施形態によれば、サブストリームは、複数の部分のうち少なくとも１つに対して行なわれるハッシュ関数に少なくとも部分的に基づいて生成されることができる。
【０１４８】
発明の実施形態によれば、属性は、ユーザーのカスタマーに関連付けられるインターネットプロトコルアドレスまたはユーザーのカスタマーに関連付けられる地理的領域のうち少なくとも一方を含むことができる。
【０１４９】
項目１。システムであって、
ユーザーに関連付けられるデータストリームを識別するように構成される識別ユニットと、
識別されたストリームの少なくとも一部分を処理するためのクエリを受信するように構成される第１の受信ユニットと、
識別されたデータストリームの属性を識別するコードをユーザーから受信するように構成される第２の受信ユニットとを含み、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能であり、さらに、
コードをクエリに関連付けるように構成される関連付けユニットと、
コードがクエリに関連付けられた後、属性に少なくとも部分的に基づいてデータストリームをパーティションするようにクエリを構成するように構成される構成ユニットと、
属性に少なくとも部分的に基づいてデータストリームを複数の部分にパーティションするように構成されるパーティションユニットと、
複数の部分のうち少なくとも１つのためのサブストリームをクエリに提供するように構成される第１の提供ユニットと、
提供されたサブストリームに少なくとも部分的に基づいてクエリの結果を提供するように構成される第２の提供ユニットとを含む。
【０１５０】
項目２。項目１のシステムであって、コードは、ユーザーに提供されるコントラクトに少なくとも部分的に基づくオブジェクト指向のクラスを含み、構成ユニットは、クエリをオブジェクト指向のクラスに結び付けるように構成される結び付けユニットを含む。
【０１５１】
項目３。項目２のシステムであって、システムはさらに、
クエリに少なくとも部分的に基づいてデータストリームのイベントを受信するように構成される第３の受信ユニットと、
イベントをオブジェクト指向のクラスに提供するように構成される第３の提供ユニットと、
オブジェクト指向のクラスからの出力を受信するように構成される第４の受信ユニットとを含む。
【０１５２】
項目４。項目３のシステムであって、データストリームは、オブジェクト指向のクラスからの出力に少なくとも部分的に基づいてパーティションされる。
【０１５３】
項目５。項目１のシステムであって、属性は、ユーザーのカスタマーのコンピューティングデバイスの第１の識別子、ユーザーに関連付けられる項目の第２の識別子、または項目に関連付けられる項目属性の第３の識別子のうち少なくとも１つを含む。
【０１５４】
項目６。項目５のシステムであって、カスタマーのコンピューティングデバイスの識別子は、カスタマーのコンピューティングデバイスのインターネットプロトコルアドレス、またはカスタマーのコンピューティングデバイスが位置する地理的領域を示す。
【０１５５】
項目７。方法であって、
ユーザーに関連付けられるデータを識別することと、
識別されたストリームの少なくとも一部分を処理するためのクエリを受信することと、
識別されたデータストリームの属性を識別するコードをユーザーから受信することとを含み、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能であり、さらに、
コンピューターシステムによって、コードをクエリに関連付けることと、
コードがクエリに関連付けられた後、属性に少なくとも部分的に基づいてデータストリームをパーティションするようにクエリを構成することと、
属性に少なくとも部分的に基づいてデータストリームを複数の部分にパーティションすることと、
複数の部分のうち少なくとも１つのためのサブストリームをクエリに提供することと、
提供されたサブストリームに少なくとも部分的に基づいてクエリの結果を提供することとを含む。
【０１５６】
項目８。項目７の方法であって、コードは、ユーザーに提供されるコントラクトに少なくとも部分的に基づくオブジェクト指向のクラスを含み、クエリを構成することは、オブジェクト指向のクラスにクエリを結び付けるように構成される結び付けユニットを含む。
【０１５７】
項目９。項目８の方法であって、方法はさらに、
クエリに少なくとも部分的に基づいてデータストリームのイベントを受信することと、
イベントをオブジェクト指向のクラスに提供することと、
オブジェクト指向のクラスからの出力を受信することとを含む。
【０１５８】
項目１０。項目９の方法であって、データストリームは、オブジェクト指向のクラスからの出力に少なくとも部分的に基づいてパーティションされる。
【０１５９】
項目１１。項目７の方法であって、属性は、ユーザーのカスタマーのコンピューティングデバイスの第１の識別子、ユーザーに関連付けられる項目の第２の識別子、または項目に関連付けられる項目属性の第３の識別子のうち少なくとも１つを含む。
【０１６０】
項目１２。項目１１の方法であって、カスタマーのコンピューティングデバイスの識別子は、カスタマーのコンピューティングデバイスのインターネットプロトコルアドレス、またはカスタマーのコンピューティングデバイスが位置する地理的領域を示す。
【０１６１】
項目１３。システムであって、
ユーザーに関連付けられるデータストリームを識別するための手段と、
識別されたストリームの少なくとも一部分を処理するためのクエリを受信するための手段と、
識別されたデータストリームの属性を識別するコードをユーザーから受信するための手段とを含み、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能であり、さらに、
コードをクエリに関連付けるための手段と、
コードがクエリに関連付けられた後、属性に少なくとも部分的に基づいてデータストリームをパーティションするようにクエリを構成するための手段と、
属性に少なくとも部分的に基づいてデータストリームを複数の部分にパーティションするための手段と、
複数の部分のうち少なくとも１つのためのサブストリームをクエリに提供するための手段と、
提供されたサブストリームに少なくとも部分的に基づいてクエリの結果を提供するための手段とを含む。
【０１６２】
項目１４。項目１３のシステムであって、コードは、ユーザーに提供されるコントラクトに少なくとも部分的に基づくオブジェクト指向のクラスを含み、構成するための手段は、クエリをオブジェクト指向のクラスに結び付けるための手段を含む。
【０１６３】
項目１５。項目１４のシステムであって、
クエリに少なくとも部分的に基づいてデータストリームのイベントを受信するための手段と、
イベントをオブジェクト指向のクラスに提供するための手段と、
オブジェクト指向のクラスからの出力を受信するための手段とをさらに含む。
【０１６４】
項目１６。項目１５のシステムであって、データストリームは、オブジェクト指向のクラスからの出力に少なくとも部分的に基づいてパーティションされる。
【０１６５】
項目１７。項目１３のシステムであって、属性は、ユーザーのカスタマーのコンピューティングデバイスの第１の識別子、ユーザーに関連付けられる項目の第２の識別子、または項目に関連付けられる項目属性の第３の識別子のうち少なくとも１つを含む。
【０１６６】
項目１８。項目１７のシステムであって、カスタマーのコンピューティングデバイスの識別子は、カスタマーのコンピューティングデバイスのインターネットプロトコルアドレス、またはカスタマーのコンピューティングデバイスが位置する地理的領域を示す。
【０１６７】
項目１９。システムであって、
ユーザーに関連付けられるデータストリームの少なくとも一部分を処理するためのクエリを識別するように構成される識別ユニットと、
識別されたデータストリームの属性を識別するコードをユーザーから受信するように構成される第１の受信ユニットとを含み、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能であり、さらに、
属性に少なくとも部分的に基づいてデータストリームの１つ以上のサブストリームを処理するようにクエリを構成するように構成される構成ユニットとを含む。
【０１６８】
項目２０。項目１９のシステムであって、１つ以上のサブストリームの複数を並行して処理するように構成される処理ユニットをさらに含む。
【０１６９】
項目２１。項目１９のシステムであって、コードは、ユーザーに提供されるｊａｖａコントラクトに少なくとも部分的に基づくｊａｖａクラスを含む。
【０１７０】
項目２２。項目２１のシステムはさらに、
クエリに少なくとも部分的に基づいてデータストリームのイベントを受信するように構成される第２の受信ユニットと、
イベントをｊａｖａクラスに提供するように構成される提供ユニットと、
属性に少なくとも部分的に基づいてイベントを処理するためにｊａｖａクラスを実施するように構成される実施ユニットと、
ｊａｖａクラスからの出力を受信するように構成される第３の受信ユニットとを含む。
【０１７１】
項目２３。項目２２のシステムにおいて、ｊａｖａクラスからの出力は、１つ以上のサブストリームのうちの少なくとも１つである。
【０１７２】
項目２４。項目１９のシステムにおいて、属性は、コードの受信に先立ってユーザーによって特定される。
【０１７３】
項目２５。項目１９のシステムにおいて、１つ以上のサブストリームのうち少なくとも１つのサブストリームは、データストリームの少なくとも一部分に対して実行されるハッシュ関数に少なくとも部分的に基づいて生成される。
【０１７４】
項目２６。システムであって、
ユーザーに関連付けられるデータストリームの少なくとも一部分を処理するためのクエリを識別するための手段と、
識別されたデータストリームの属性を識別するコードをユーザーから受信するための手段とを含み、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能であり、さらに、
属性に少なくとも部分的に基づいてデータストリームの１つ以上のサブストリームを処理するための手段とを含む。
【０１７５】
項目２７。項目２６のシステムであって、１つ以上のサブストリームの複数を並行して処理するための手段をさらに含む。
【０１７６】
項目２８。項目２６のシステムであって、コードは、ユーザーに提供されるｊａｖａコントラクトに少なくとも部分的に基づくｊａｖａクラスを含む。
【０１７７】
項目２９。項目２８のシステムであって、
クエリに少なくとも部分的に基づいてデータストリームのイベントを受信するための手段と、
イベントをｊａｖａクラスに提供するための手段と、
属性に少なくとも部分的に基づいてイベントを処理するためにｊａｖａクラスを実施するための手段と、
ｊａｖａクラスからの出力を受信するための手段とをさらに含む。
【０１７８】
項目３０。項目２９のシステムであって、ｊａｖａクラスからの出力は、１つ以上のサブストリームのうちの少なくとも１つである。
【０１７９】
項目３１。項目２６のシステムであって、属性は、コードの受信に先立ってユーザーによって特定される。
【０１８０】
項目３２。項目２６のシステムであって、１つ以上のサブストリームのうち少なくとも１つのサブストリームは、データストリームの少なくとも一部分に対して実行されるハッシュ関数に少なくとも部分的に基づいて生成される。
【０１８１】
項目３３。方法であって、
ユーザーに関連付けられるデータストリームの少なくとも一部分を処理するためのクエリを識別することと、
識別されたデータストリームの属性を識別するコードをユーザーから受信することとを含み、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能であり、さらに、
属性に少なくとも部分的に基づいてデータストリームの１つ以上のサブストリームを処理するようにクエリを構成することとを含む。
【０１８２】
項目３４。項目３３の方法であって、１つ以上のサブストリームの複数を並行して処理することをさらに含む。
【０１８３】
項目３５。項目３３の方法であって、コードは、ユーザーに提供されるｊａｖａコントラクトに少なくとも部分的に基づくｊａｖａクラスを含む。
【０１８４】
項目３６。項目３５の方法であって、
クエリに少なくとも部分的に基づいてデータストリームのイベントを受信することと、
イベントをｊａｖａクラスに提供することと、
属性に少なくとも部分的に基づいてイベントを処理するためにｊａｖａクラスを実施することと、
ｊａｖａクラスからの出力を受信することとを含む。
【０１８５】
項目３７。項目３６の方法であって、ｊａｖａクラスからの出力は、１つ以上のサブストリームのうちの少なくとも１つである。
【０１８６】
項目３８。項目３３の方法であって、属性は、コードの受信に先立ってユーザーによって特定される。
【０１８７】
項目３９。項目３３の方法であって、１つ以上のサブストリームのうち少なくとも１つのサブストリームは、データストリームの少なくとも一部分に対して実行されるハッシュ関数に少なくとも部分的に基づいて生成される。
【０１８８】
項目４０。コンピューターにより実行される方法であって、
ユーザーに関連付けられるデータストリームを識別するための手段と、
識別されたデータストリームの少なくとも一部分を処理するためのクエリを受信するための手段と、
識別されたデータストリームの属性を識別するコードをユーザーから受信するための手段とを含み、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能であり、さらに、
属性に少なくとも部分的に基づいてデータストリームを少なくとも１つのサブストリームにパーティションするようにコードを構成するための手段と、
受信されたクエリを用いて少なくとも１つのサブストリームを処理するための手段とを含む。
【０１８９】
項目４１。項目４０のコンピューターにより実行される方法であって、コードをクエリに関連付けるための手段をさらに含む。
【０１９０】
項目４２。項目４１のコンピューターにより実行される方法であって、少なくとも１つのサブストリームは、コードからの出力として受信された少なくとも第２のサブストリームと並行して、受信されたクエリを用いて処理される。
【０１９１】
項目４３。項目４２のコンピューターにより実行される方法であって、クエリに少なくとも部分的に基づいてデータストリームのイベントを受信するための手段と、
受信されたコードに対応するｊａｖａクラスにイベントを提供するための手段と、
属性に少なくとも部分的に基づいてイベントを処理するようにｊａｖａクラスを実施するための手段と、
少なくとも１つのサブストリームを識別するｊａｖａクラスからの出力を受信するための手段とをさらに含む。
【０１９２】
項目４４。項目４３のコンピューターにより実行される方法であって、データストリームは、ｊａｖａクラスに少なくとも部分的に基づいてパーティションされる。
【０１９３】
項目４５。項目４０のコンピューターにより実行される方法であって、サブストリームは、複数の部分のうち少なくとも１つに対して行なわれるハッシュ関数に少なくとも部分的に基づいて生成される。
【０１９４】
項目４６。項目４０のコンピューターにより実行される方法であって、属性は、ユーザーのカスタマーに関連付けられるインターネットプロトコルアドレス、またはユーザーのカスタマーに関連付けられる地理的領域のうち少なくとも一方を含む。
【０１９５】
項目４７。コンピューター実装システムであって、
ユーザーに関連付けられるデータストリームを識別するように構成される識別ユニットと、
識別されたデータストリームの少なくとも一部分を処理するためのクエリを受信するように構成される第１の受信ユニットと、
識別されたデータストリームの属性を識別するコードをユーザーから受信するように構成される第２の受信ユニットとを含み、コードは、属性に少なくとも部分的に基づいてクエリを構成することが可能であり、さらに、
属性に少なくとも部分的に基づいてデータストリームを少なくとも１つ以上のサブストリームをパーティションするようにコードを構成するように構成される構成ユニットと、
受信されたクエリを用いて少なくとも１つ以上のサブストリームを処理するように構成される処理ユニットとを含む。
【０１９６】
項目４８。項目４７のコンピューター実装システムであって、コードをクエリに関連付けるように構成される関連付けユニットをさらに含む。
【０１９７】
項目４９。項目４８のコンピューター実装システムであって、少なくとも１つのサブストリームは、コードからの出力として受信された少なくとも第２のサブストリームと並行して、受信されたクエリを用いて処理される。
【０１９８】
項目５０。項目４９のコンピューター実装システムであって、
クエリに少なくとも部分的に基づいてデータストリームのイベントを受信するように構成される第３の受信ユニットと、
イベントを受信されたコードに対応するｊａｖａクラスに提供するように構成される提供ユニットと、
属性に少なくとも部分的に基づいてイベントを処理するためにｊａｖａクラスを実施するように構成される実施ユニットと、
少なくとも１つのサブストリームを識別するｊａｖａクラスからの出力を受信するように構成される第４の受信ユニットとをさらに含む。
【０１９９】
項目５１。項目５０のコンピューター実装システムであって、データストリームは、ｊａｖａクラスに少なくとも部分的に基づいてパーティションされる。
【０２００】
項目５２。項目４７のコンピューター実装システムであって、サブストリームは、複数の部分のうち少なくとも一つに対して実行されるハッシュ関数に少なくとも部分的に基づいて生成される。
【０２０１】
項目５３。項目４７のコンピューター実装システムであって、属性は、ユーザーのカスタマーに関連付けられるインターネットプロトコルアドレス、またはユーザーのカスタマーに関連付けられる地理的領域のうち少なくとも一方を含む。
【０２０２】
前述の明細書において、開示の局面はその具体的な実施形態に関して説明されているが、当業者は、開示がそれに限定されないことを認識する。上記開示の様々な特徴および局面は、個々にまたは共に用いられ得る。さらに、実施形態は、明細書のより広い精神および範囲から逸脱することなく、本明細書において記載されるものを超える任意の数の環境およびアプリケーションにおいて利用され得る。明細書および図面はしたがって、限定的ではなく例示的なものと見なされるべきである。
【図１】
0006539647.tif 000002
【図２】
0006539647.tif 000003
【図３】
0006539647.tif 000004
【図４】
0006539647.tif 000005
【図５】
0006539647.tif 000006
【図６】
0006539647.tif 000007
【図７】
0006539647.tif 000008
【図８】
0006539647.tif 000009
【図９】
0006539647.tif 000010
【図１０】
0006539647.tif 000011
【図１１】
0006539647.tif 000012
【図１２】
0006539647.tif 000013