(57)【特許請求の範囲】
【請求項１】
プロセッサーを有するコンピューターにアクセス可能なデータストアに格納されるデータセットをターゲットとするクエリーを実行する方法であって、
前記プロセッサー上で命令を実行するステップを含み、前記命令は、データセットをターゲットとするクエリーを受け取ると、
前記クエリーを、前記データセットをフィルタリングされたデータサブセットへとフィルタリングするために少なくとも１つのフィルタ基準を特定するフィルター部分と、前記フィルタリングされたデータサブセットに対して実行されるべき少なくとも１つの非フィルタリング動作を特定する処理部分とに分割し、
前記クエリーの前記フィルター部分から、前記少なくとも１つのフィルタ基準を満たす前記データセットの第１の部分を含み前記少なくとも１つのフィルタ基準を満たさない前記データセットの第２の部分を除くフィルタリングされたデータサブセットを取り出すためのリクエストを生成し、前記リクエストは前記データセットの前記第１の部分を前記データセットの前記第２の部分と区別する少なくとも１つのフィルタ基準を特定し、
前記リクエストにより前記データストアを呼び出し、
前記リクエストに応答して前記データストアから前記フィルタリングされたデータサブセットを受け取ると、前記クエリーの前記処理部分を前記フィルタリングされたデータサブセットに適用する
ように構成されている、方法。
【請求項２】
前記データストアが、少なくとも１つのフィルタ基準のための少なくとも１つのインデックスを含み、
前記命令が、前記データセットとともに格納されるべきデータアイテムを受け取ると、少なくとも１つのフィルタ基準に従い少なくとも１つのインデックスで前記データアイテムをインデックス付けをするように構成されており、
前記リクエストにより前記データストアを呼び出すことが、それぞれのフィルタ基準に対し、フィルタ基準を満たすデータアイテムを識別するために、前記フィルタ基準に対応するインデックスを用いて前記フィルタリングされたデータサブセットを取り出すことを含む、請求項１に記載の方法。
【請求項３】
インデックスセットから選択される少なくとも１つのインデックスは、
それぞれのデータアイテムによって表されるイベントを特定するイベントインデックスと、
それぞれのデータアイテムによって表されるイベントの時間を特定する時間インデックスと、
それぞれのデータアイテムによって表されるイベントに関連付けられる少なくとも１つのユーザーを特定するユーザーインデックスと
を含む、請求項２に記載の方法。
【請求項４】
前記インデックスが、前記インデックスに対応するフィルタ基準のフィルタ基準値に対し、前記フィルタ基準に対する前記フィルタ基準値を有するデータアイテムを識別するデータアイテムセットを特定する、請求項２に記載の方法。
【請求項５】
前記少なくとも１つのインデックスでデータアイテムのインデックス付けをすることは、それぞれのフィルタ基準に対し、前記フィルタ基準に対する前記フィルタ基準値を有するデータアイテムのデータアイテムセットに、前記データアイテムを追加することを含み、
前記リクエストにより前記データストアを呼び出すことは、前記フィルタ基準に対して前記フィルタ基準値を有するデータアイテムの前記データアイテムセットを取り出すために前記リクエストにより前記データストアを呼び出すことを含む、請求項４に記載の方法。
【請求項６】
前記データストアは、受け取られたデータアイテムを格納するように構成されたデータアイテムバッファを有し、
前記データアイテムを格納することは、前記データアイテムバッファに格納されている前記データアイテムがデータアイテムバッファのサイズ閾値を超えるときに、
前記データアイテムバッファのそれぞれのデータアイテムを、前記データアイテムセットに追加すること、及び
前記データアイテムバッファを空にすることを含む、請求項５に記載の方法。
【請求項７】
前記データストアは、フィルタ基準に対するフィルタ基準値を有するデータアイテムを格納するように構成される少なくとも１つのデータアイテム分割を含み、
前記リクエストにより前記データストアを呼び出すことは、それぞれのフィルタ基準に対する少なくとも１つのフィルタ基準値に対し、前記フィルタ基準に対する前記フィルタ基準値を有するデータアイテムを格納する前記データアイテム分割を有する前記データストアを呼び出すことを含む、請求項４に記載の方法。
【請求項８】
前記命令が、データアイテムを受け取ると、
前記インデックスに対応する少なくとも１つのフィルタ基準に対する少なくとも１つのフィルタ基準値を識別し、
前記フィルタ基準に対する前記フィルタ基準値を有するデータアイテムを格納しているデータアイテム分割を識別し、
前記データアイテムを前記データアイテム分割に格納する、
ように構成されている、請求項７に記載の方法。
【請求項９】
前記データストアが、
第１のフィルタ基準に対する第１のフィルタ基準値と第２のフィルタ基準に対する第２のフィルタ基準値とを有するデータアイテムを格納するように構成された少なくとも１つのデータアイテム分割と、
前記第１のフィルタ基準に対する第１のフィルタ基準値を有するデータアイテムに対して、前記第２のフィルタ基準に対するそれぞれの第２のフィルタ基準値も有するデータアイテムを格納する前記それぞれのデータアイテム分割を識別するように構成された少なくとも１つのインデックスと、
を含む、請求項７に記載の方法。
【請求項１０】
データアイテムを格納することは、
前記第１のフィルタ基準に対して前記データアイテムの第１のフィルタ基準値を識別することと、
前記インデックスを用いて、前記第１のフィルタ基準に対する前記第１のフィルタ基準値を有するデータアイテムを格納するデータアイテム分割を識別することと、
前記第２のフィルタ基準に対して前記データアイテムの第２のフィルタ基準値を識別することと、
前記データアイテム分割の中から、前記第２のフィルタ基準に対する前記第２のフィルタ基準値を有するデータアイテムを格納するデータアイテム分割を識別することと、
前記データアイテムを前記データアイテム分割に格納することと
を含む請求項９に記載の方法。
【請求項１１】
前記リクエストにより前記データストアを呼び出すことは、
前記リクエスト、第１のフィルタ基準に対する第１のフィルタ基準値及び第２のフィルタ基準に対する第２のフィルタ基準値により前記データストアを呼び出すことであって、
前記インデックスを用いて、前記第１のフィルタ基準に対する前記第１のフィルタ基準値を有するデータアイテムを格納するデータアイテム分割を識別すること、
前記データアイテム分割の中から、前記第２のフィルタ基準に対する前記第２のフィルタ基準値を有するデータアイテムを格納するデータアイテム分割を識別すること、及び
前記少なくとも１つのデータアイテムを取り出すために前記リクエストにより前記データアイテム分割を呼び出すこと
を含む、前記データストアを呼び出すことをさらに含む、請求項９に記載の方法。
【請求項１２】
前記リクエストが、前記フィルタリングされたデータサブセットを生成するのに用いられる第１のフィルタリングされたデータサブセットを特定し、
前記リクエストにより前記データストアを呼び出すことが、前記リクエスト及び前記第１のフィルタリングされたデータサブセットにより前記データストアを呼び出して、前記少なくとも１つのフィルタ基準を満たす前記データセットの前記データアイテムを取り出すことと、前記第１のフィルタリングされたデータサブセットを用いてフィルタリングされたデータサブセットを生成することとを含む、請求項１に記載の方法。
【請求項１３】
前記第１のフィルタリングされたデータサブセットは、少なくとも１つの第１のフィルタ基準を特定する、前のリクエストに応答して、前記データストアによって生成される、請求項１２に記載の方法。
【請求項１４】
前記命令は、前記フィルタリングされたデータサブセットを取り出すために前記リクエストを呼び出す前に、
前記フィルタリングされたデータサブセットのフィルタリングされたデータサブセットのサイズを推定し、
前記フィルタリングされたサブセットデータのサイズを前記リクエスト元に送り、
前記リクエスト元からフィルタリングされたデータサブセットの承認を受け取ると、前記リクエストに応答して、前記フィルタリングされたデータサブセットを送る
ように構成されている、請求項１に記載の方法。
【請求項１５】
プロセッサーを有するデバイスによって実行される、リモートデータストアによって格納されたデータセットにクエリーを適用する方法であって、
前記プロセッサー上で命令を実行するステップを含み、前記命令は、
前記クエリーを、前記データセットをフィルタリングされたデータサブセットへとフィルタリングするために少なくとも１つのフィルタ基準を特定するフィルター部分と、前記フィルタリングされたデータサブセットに対して実行されるべき少なくとも１つの非フィルタリング動作を特定する処理部分とに分割し、
前記少なくとも１つのフィルタ基準を満たす前記データセットの第１の部分を含み前記少なくとも１つのフィルタ基準を満たさない前記データセットの第２の部分を除くフィルタリングされたデータサブセットをローカルストレージデバイスから取り出し、リクエストは、前記データセットの前記第１の部分を前記データセットの前記第２の部分と区別する少なくとも１つのフィルタ基準を特定し、
前記フィルタリングされたデータサブセットを前記ローカルストレージデバイスから受け取ると、前記クエリーの前記処理部分を前記フィルタリングされたデータサブセットに適用する、
ように構成されている、方法。
【請求項１６】
前記クエリーが、
第１のフィルタリングされたデータサブセットを生成する第１のフィルタ基準と、
前記第１のフィルタリングされたデータサブセットを用いて、第２のフィルタリングされたデータサブセットを生成する第２のフィルタ基準と、
を含んでおり、
前記リクエストを生成することが、前記第１のフィルタ基準に従ってフィルタリングされた前記第１のデータサブセットを特定する第１のリクエストを生成することを含み、
前記リクエストを前記リモートデータストアに送ることが、前記第１のリクエストを前記リモートデータストアに送ることを含み、
前記クエリーを適用することが、
前記第１のリクエストに応答して、前記第１のフィルタリングされたデータサブセットを前記リモートデータストアから受け取ると、
前記第２のフィルタ基準に従い前記第１のフィルタリングされたデータサブセットを用いてフィルタリングされた、第２のデータサブセットを特定する第２のリクエストを生成することと、
前記第２のリクエストを前記リモートデータストアに送ることと、
前記第２のリクエストに応答して、前記第２のフィルタリングされたデータサブセットを前記リモートデータストアから受け取ると、前記第２のフィルタリングされたデータサブセットに前記クエリーの前記処理部分を適用することと、
を含む、請求項１５に記載の方法。
【請求項１７】
前記命令が、前記フィルタリングされたデータサブセットを前記リモートデータストアから受け取る前に、
前記フィルタリングされたデータサブセットのフィルタリングされたデータサブセットのサイズを前記リモートデータストアから受け取り、
フィルタリングされたデータサブセットの承認を生成するために、前記フィルタリングされたデータサブセットのサイズを確認し、
フィルタリングされたデータサブセットの承認を生成すると、前記フィルタリングされたデータサブセットの承認を前記リモートデータストアに送る、
ように構成されている、請求項１５に記載の方法。
【請求項１８】
データストアへのアクセスを有するコンピューターのプロセッサー上で実行されると、
データセットをターゲットとするクエリーを受け取ると、
前記クエリーを、前記データセットをフィルタリングされたデータサブセットへとフィルタリングするために少なくとも１つのフィルタ基準を特定するフィルター部分と、前記フィルタリングされたデータサブセットに対して実行されるべき少なくとも１つの非フィルタリング動作を特定する処理部分とに分割することと、
前記クエリーの前記フィルター部分から、前記少なくとも１つのフィルタ基準を満たす前記データセットの第１の部分を含み前記少なくとも１つのフィルタ基準を満たさない前記データセットの第２の部分を除くフィルタリングされたデータサブセットを取り出すためのリクエストを生成することであって、前記リクエストは前記データセットの前記第１の部分を前記データセットの前記第２の部分と区別する少なくとも１つのフィルタ基準を特定する、リクエストを生成することと、
前記リクエストにより前記データストアを呼び出すことと、
前記データストアから前記フィルタリングされたデータサブセットを受け取ると、前記クエリーの前記処理部分を前記フィルタリングされたデータサブセットに適用することと
によって、前記データストアによって格納されるデータセットにクエリーを適用する命令を格納するメモリーデバイス。
【請求項１９】
前記クエリーが、
第１のフィルタリングされたデータサブセットを生成する第１のフィルタ基準と、
前記第１のフィルタリングされたデータサブセットを用いて、第２のフィルタリングされたデータサブセットを生成する第２のフィルタ基準と、
を含んでおり、
前記リクエストを生成することが、前記第１のフィルタ基準に従ってフィルタリングされた前記第１のデータサブセットを特定する第１のリクエストを生成することを含み、
前記リクエストを前記データストアに送ることが、前記第１のリクエストを前記データストアに送ることを含み、
前記クエリーを適用することが、
前記第１のリクエストに応答して、前記第１のフィルタリングされたデータサブセットを前記データストアから受け取ると、
前記第２のフィルタ基準に従い前記第１のフィルタリングされたデータサブセットを用いてフィルタリングされた、第２のデータサブセットを特定する第２のリクエストを生成することと、
前記第２のリクエストを前記データストアに送ることと、
前記第２のリクエストに応答して、前記第２のフィルタリングされたデータサブセットを前記データストアから受け取ると、前記第２のフィルタリングされたデータサブセットに前記クエリーの前記処理部分を適用することと、
を含む、請求項１８に記載のメモリーデバイス。
【請求項２０】
前記命令が、前記フィルタリングされたデータサブセットを前記データストアから受け取る前に、
前記フィルタリングされたデータサブセットのフィルタリングされたデータサブセットのサイズを前記データストアから受け取り、
フィルタリングされたデータサブセットの承認を生成するために、前記フィルタリングされたデータサブセットのサイズを確認し、
フィルタリングされたデータサブセットの承認を生成すると、前記フィルタリングされたデータサブセットの承認を前記データストアに送る、
ようにさらに構成されている、請求項１８に記載のメモリーデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データストアにおけるクエリーデータのフィルタリングに関する。
【背景技術】
【０００２】
[0001]コンピューティングの分野では、多くのシナリオが、１つまたは複数のデータストアに保存されているデータセットに適用されるクエリーに関係する。例えば、ユーザーまたはデータ駆動プロセスは、構造化照会言語（ＳＱＬ）などのクエリー言語で特定されたクエリーをデータストアにリクエストすることによって、データの特定のサブセットをリクエストすることがある。データストアは、クエリーを受け取り、それをクエリー処理エンジン（例えば、クエリーの中の名前をデータベースの名付けられたオブジェクトと関連付け、様々なオペレーターによって特定される動作を識別するなど、様々なパージング動作をクエリーに対して実行するコンポーネントを含むソフトウェアパイプラインなど）を用いて処理し、パージングされたクエリーによって特定された動作を保存されているデータに適用し、そして、クエリーによって特定されたクエリー結果を戻しうる。クエリー結果は、クエリーによって特定されたレコードの集合、そのようなレコードの属性の集合、またはデータから計算された結果（例えば、あるクエリー基準と一致するレコードのカウント）を含みうる。この結果は、また、テーブルの作成もしくは修正、または、テーブルにおけるレコードの挿入、更新、もしくは削除など、保存されているデータとの関係で行われる作用の報告を含みうる。
【０００３】
[0002]こうした多くのシナリオにおいて、データベースは、複数であり潜在的に多数のデータストアにわたって分散されていることがある。例えば、分散型データベースでは、保存されているデータの異なる複数の部分が、サーバファームにおける１つまたは複数のデータストアに保存されている場合がある。データセットに適用されるクエリーが受け取られると、クエリーを受け取るマシンは、どのデータストアが、クエリーのターゲットになっているデータを含む蓋然性が高いのかを識別し、そのクエリーをそれらのデータストアのうちの１つまたは複数に送りうる。そのようなデータストアは、それぞれが、クエリーを、保存されているデータに適用し、クエリー結果を送り返すことができる。クエリーが２つ以上のデータストアによって適用される場合には、集約されたクエリー結果を生成するために、クエリー結果が組み合わされることがある。いくつかのシナリオでは、１つのマシンが、関係のあるデータストアにクエリーを分散させてクエリー結果をまとめるプロセスを調整することがある。そのような分散と集約とを効率的に達成するために、ＭａｐＲｅｄｕｃｅフレームワークなどの手法が工夫されてきた。
【０００４】
[0003]そのようなデータストアによって用いられるデータエンジンは、相当に高度で、データベーストランザクション、ジャーナリング、保存されている手順の実行、およびエージェントの受け入れと実行など、多くの複雑な計算プロセスをそれらのデータストアに適用することができる場合がある。クエリー言語自体が、ネスティング、ストリングおよび他のデータタイプの計算集約的な類似性の比較、ならびにデータベースの構造への修正を含めて、データストアによって扱われるクエリーの複雑性を高めることもありうる。更に、データストアのクエリー処理エンジンによって適用される論理プロセスが、複雑なクエリーに効率的に応えることができ、クエリー最適化などの手法を用いることによりクエリーを改善することさえありうる。これらのおよびそれ以外のプロセスの結果として、データストアによるクエリーの評価は、大量の計算資源を消費する場合がある。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
[0004]この概要は、以下の詳細な説明において詳述される概念の選択された一部を簡略化された形式で紹介するために、提供されている。この概要は、特許請求される主題のキーとなるファクタまたは本質的な特徴を識別することは意図されていないし、特許請求される主題の範囲を限定するために用いられることも意図されていない。
【０００６】
[0005]高度なトランザクションを処理する能力を有する高度なクエリー処理エンジンをデータストアに設けることは効果的ではありうるが、いくつかの問題点も生じうる。特に、ローカルに保存されているデータに対して複雑なクエリーを実行するようにデータストアを構成するのは、問題があるまたは非効率的である。例えば、データストアが特に大きな需要を有するデータを偶然に保存しているが、クエリー処理エンジンは、他のクエリー（その中のいくつかは非常に単純なものでありうる）が未処理のままである間に、保存されているデータに適用された複雑なクエリーの適用により負荷を負う場合がありうる。複雑なクエリーは、このように、能力とクエリー評価のスループットとを低下させるボトルネックを生じさせる可能性がある。
【０００７】
[0006]第２の例として、データストアも高度なクエリーを実行するような分散型データベースアーキテクチャは、何らかのセキュリティ原則を含むことがある。その理由は、データを保存しているマシンは、そのデータに対して潜在的に危険なまたは悪意のある動作を実行することが許されるからである。更に、クエリー処理エンジンは、保存されているデータに対する任意のコードの実行（例えば、実行可能なモジュールが第三者から受け取られ、保存されているデータに対して実行されるようなエージェントシナリオ）が許可されていることさえもある。保存されているデータと妥協したマシンとの間でデータアイテムを分割するなど、（マシンの第１の集合での）データの保存と（マシンの第２の集合に配分された）データに対する任意のコードを含む複雑な計算の実行とを分離するセキュリティ原則が、いくつかのセキュリティ上の効果を奏する可能性がある。
【０００８】
[0007]これらのおよび他の効果は、データストア（例えば、分散型データベースのデータを保存するように構成されているサーバファームのマシン）からデータの複雑な処理を取り除くことから生じうる。しかし、例えば、純粋にデータ記憶装置としてのみ機能するデータストアであって、リクエストされたデータオブジェクト（例えば、あるテーブルの全体）を提供するだけの能力を有するまたは特定された変更を行うような、処理能力のないデータストアを構成することには、問題点もありうる。例えば、他のマシンが、特定のフィルタ基準を満たすテーブルからのレコードのサブセットなど、データのサブセットのみをデータストアにリクエストすることがありうる。しかし、そのリクエストが多くのレコードを含むテーブルの中の少数のレコードだけを特定する場合に、テーブル全体を送ることは、特にネットワーク接続された環境においてマシンとデータストアとの間に帯域幅の制限があることを仮定すると、著しく非効率である。
【課題を解決するための手段】
【０００９】
[0008]本明細書に提示されるのは、そこに保存されているデータを求めるリクエストに応えるように、データストアを構成する手法である。これらの手法によると、データストアは、著しい計算上の費用を必要とし、リクエストに応える際の性能を低下させ、および／または保存されているデータに対する任意のコードに実行を許容するクエリー処理エンジンを用いない。しかし、データストアは、更に、そこに保存されているデータのサブセットだけを提供することができる。データストアは、１つまたは複数のフィルタ基準を特定するリクエストを受け入れることによってこの結果を達成する。なお、ここで、それぞれのリクエストによって、要求されるデータの量を特定の態様で減量している。例えば、リクエストに、特定のフィルタ基準値を特定するフィルタ基準を含むようにすることができ、ある特定のフィルタ基準に対するフィルタ基準値を有しているレコードだけを要求しうる（例えば、イベントを表すデータを保存するように構成されているデータストアでは、フィルタ基準は、イベントのタイプまたはイベントが生じたときを識別しうる）。従って、このリクエストは様々なフィルタ基準だけを特定し、データストアは、そのフィルタ基準を満たすデータを提供することができるが、複雑な動作を特定する可能性があるクエリーを処理するようには構成されない。従って、この構成により、分散型データベースの分割を、データを保存して提供するように構成されているデータノードの集合と、（任意のコードを含む）複雑なクエリーを適用することができる計算ノードの集合の中に設定することを可能にする。
【００１０】
[0009]以上のおよび関連する目的を達成するために、以下の説明と添付の図面とにより、いくつかの説明的な態様と実装例とを明らかにしている。これらは、１つまたは複数の態様を用いることができる様々な方法のうちのいくつかを示している。本開示のそれ以外の態様、効果、および新規な特徴は、以下の詳細な説明を添付の図面と共に考察することによって、明らかになるはずである。
【図面の簡単な説明】
【００１１】
【図１】[0010]複数のデータストアにわたり分散されているデータセットにクエリーを適用することを特色とする例示的なシナリオの図である。
【図２】[0011]データストアによって保存されているデータセットからのデータを求めるリクエストの適用を特色とする例示的なシナリオの図である。
【図３】[0012]本明細書に提示されている手法によるデータストアによって保存されているデータセットからのデータに対する少なくとも１つのフィルタ基準を特色とするリクエストの適用を特色とする例示的なシナリオの図である。
【図４】[0013]データセットのうちのデータセットをターゲットとするリクエストに応える例示的な方法を図解する流れ図である。
【図５】[0014]データセットのうちのデータセットをターゲットとするリクエストに応える例示的な方法を図解する流れ図である。
【図６】[0015]本明細書に提示されている発明（ｐｒｏｖｉｓｉｏｎ）の１つまたは複数を具体化するように構成されているプロセッサー実行可能な命令を含む例示的なコンピューター可読媒体の図である。
【図７】[0016]データセットによって保存されているデータアイテムのインデックス付けを特色とする例示的なシナリオの図である。
【図８】[0017]データセットによって保存されているデータアイテムの分割を特色とする例示的なシナリオの図である。
【図９】[0018]少なくとも１つのフィルタ基準を特色とするリクエストに応答してデータアイテムをフィルタリングするように構成されているデータアイテムプロセッサーを含むデータアイテムプロセッサーセットを特色とする例示的なシナリオの図である。
【図１０】[0019]本明細書に提示されている発明の１つまたは複数が実装されうる例示的なコンピューティング環境の図である。
【発明を実施するための形態】
【００１２】
[0020]以下では、特許請求されている主題について、図面を参照して説明する。図面では、類似の要素に言及する際には、図面全体を通じて、類似の参照番号が用いられている。説明を目的とする以下の記載では、特許請求されている主題の充分な理解を提供するために、多くの特定の詳細が明らかにされている。しかし、これら特定の詳細がなくても特許請求されている主題が実現されうることは、明白だろう。他の例では、特許請求されている主題の説明を容易にするために、構造およびデバイスがブロック図の形式で示されている。
【００１３】
[0021]コンピューティングの分野の中では、多くのシナリオが、データストアによって保存されたデータベースなどのデータセットに関係している。データストアは、データの集合が保存される記憶コンポーネント（例えば、メモリ回路、ハードディスクドライブ、ソリッドステートストレージデバイス、または磁気もしくは光ストレージディスク）を備えたコンピューターを含んでおり、様々なユーザーおよび／またはプロセスから受け取られうるデータにアクセスするというリクエストに応えるソフトウェアを実行するように構成することができる。多くのそのようなシナリオでは、保存されているデータは、潜在的には１つのテーブルおよび／もしくは多数のテーブルに数百万や数億ものレコードが保存されているほど大量でありうるし、ならびに／または、レコードやテーブルの間に多数の相互関係があり保存されうるデータのタイプに対する制約条件として機能する高度な制約条件があるなど複雑でありうる。
【００１４】
[0022]いくつかのそのようなシナリオでは、データセットが複数のデータストアに保存されることがある。第１の例として、２以上のデータストアが、データセットの同一のコピーを保存することがありうる。この構成は、可用性を高めるために効果がありうる（例えば、あるデータストアが、別のデータストアが使用中またはオフラインであるときに、データに対するリクエストに応答することができる）。第２の例として、データセットが、複数のデータストアに分散され、それぞれのデータストアがデータセットの一部を保存していることがありうる。この構成は、効率を高めるために効果的でありうる（例えば、特定のレコードなど特定のデータセットに対するリクエストを満足させるという計算上の障壁の分散を、リクエストされているデータを保存しているデータストアだけに限定できる）。多くのそのような例では、非常の大きなデータセットを保存し非常に大きなデータセットへのアクセスを提供する非常に多くのデータストアを含むサーバファームなどに、数ダースまたは数百のデータストアが、提供されうる。
【００１５】
[0023]図１は、ユーザー１２によって提出されたクエリー１４をデータセット２０に適用する第１のアーキテクチャを特色とする例示的なシナリオ１０を示している。なお、データセット２０は、特定の属性２４を有するレコード２６の集合をそれぞれが保存しているデータテーブル２２の集合を含む。この例示的なシナリオ１０では、データセット２０は、多くのデータストア１８にわたって様々な方法で分散されている。第１の例として、データセット２０が垂直的に分散される場合がある。すなわち、例えば、データセット２０が異なるタイプのレコード２６を保存する複数のデータテーブル２２を含んでいて、第１のデータストア１８が第１のテータテーブル２２のレコード２６を保存し、他方で、第２のデータストア１８が第２のテータテーブル２２のレコード２６を保存するような場合である。第２の例として、データセット２０が水平的に分散される場合もある。すなわち、例えば、特定のデータテーブル２２に対して、第１のデータストア１８がレコード２６の第１の集合を保存し、他方で、第２のデータストア１８がレコード２６の第２の集合を保存するような場合である。この分散は任意なのであって、すなわち、データテーブル２２の特定の属性２４に基づきうる（例えば、アルファベット順のストリングを特定する属性２４に対しては、第１のデータストア１８が「Ａ」から「Ｌ」の文字で始まるレコード２６を保存し、他方で、第２のデータストア１８が「Ｍ」から「Ｚ」の文字で始まるレコード２６を保存しうる）。データテーブル２２とデータレコード２６とを分散する他の方法を工夫することも可能である。すなわち、例えば、特定のデータテーブル２２に対して、第１のデータストア１８がレコード２６に対する属性２４の第１の集合を保存し、他方で、第２のデータストア１８がレコード２６に対する属性２４の第２の集合を保存することがありうるし、または、レコード２６の可用性とレコード２６に関するクエリーの迅速な評価を促進するために、２つのデータストア１８が同一のレコード２６を冗長的に保存することもありうる。
【００１６】
[0024]多くのこのようなシナリオにおいて、ユーザーまたはプロセスは、適用されるべきクエリーをデータセット２０に提出しうる。例えば、構造化照会言語（ＳＱＬ）のクエリーは、特定の属性２４に対して特定の値を有する１つまたは複数のデータテーブル２２からレコード２６を選択する、そのようなレコード２６の特定の属性２４を投影する、複合レコード２６を作成するために異なるレコード２６の属性２４を結合する、およびクエリー結果を提示する前に様々な他の動作を選択されたデータに適用する（例えば、レコードのソーティング、グルーピング、およびカウンティング）など、データセット２０に適用される１つまたは複数の動作を含みうる。クエリーは、また、データセット２０の様々な変更を特定することがあるが、これは、例えば、新たなレコード２６を挿入する、１つまたは複数のレコード２６の様々な属性２４を設定する、レコード２６を消去する、意味論的に関係するレコード２６の間の関係を確立または終了する、および、１つまたは複数のデータテーブル２２を挿入、修正、または消去することによるなどデータセット２０のレイアウトを変更する、などである。これらの動作は、また、そのような動作の集合、シーケンス、または条件的階層として、相互に連鎖することができる。構造化照会言語（ＳＱＬ）のバリアントは、また、高度なデータ検索（例えば、通常の表現と一致するレコードを識別することのサポート）、ジャーナリング（例えば、後で反転されうる動作の適用記録）、およびトランザクション（例えば、動作が成功裏に実行されるか、または、何も適用されない２以上の動作）などの、より複雑な動作をサポートする。構造化照会言語（ＳＱＬ）の更に別のバリアントは、データストア上でのコードの実行をサポートすることもある。例えば、クエリーが、保存されているデータに対しデータストアによって実行されるべき保存されている手順を特定するまたは呼び出すこと、または、局所的な実行のためにデータストアに提供されている解釈可能なスクリプトもしくは実行可能なバイナリなどのエージェントを含むことがありうる。そのようなクエリーを評価し応えるために、データストア１８は、クエリーに対し様々なパージング動作を実行するコンポーネントを含むソフトウェアパイプラインなど、クエリー処理エンジンを含みうる。なお、クエリーに対する様々なパージング動作とは、クエリーの中の名前をデータベースの名付けられているオブジェクトと関連付けて、様々なオペレーターによって特定された動作を識別するなど、である。クエリーの言語を辞書的にパージング（例えば、クエリー言語のシンタクス規則に従って、クエリーの様々なコンポーネントを識別する）し、クエリーのそれぞれのコンポーネントによって特定される動作と動作の論理構造およびシーケンスとを識別し、動作に応えることができるコンポーネントを呼び出すことにより、データストア１８は、クエリーの評価と満足とを達成しうる。
【００１７】
[0025]これらのおよび他のシナリオでは、多くのデータストアにわたって分散されているデータセットに複雑なクエリーを適用するというタスクは、実装に関する多くの問題点を生じることがある。効率的で自動化された態様でのそのような適用を可能にするために、多くの手法とアーキテクチャに関するフレームワークとが提案されてきている。
【００１８】
[0026]図１の例示的なシナリオ１０は、更に、多くのデータストア１８にわたって分散されているデータセット２０にクエリー１４を適用するのにしばしば用いられる１つの手法を提示している。この例示的なシナリオ１０では、ユーザー１２は、データセット２０に対して適用されうる動作１６の集合を含むクエリー１４を提出しうる。更に、例えば、特定の動作１６の結果を共に用いることができることを特定するためにブール演算子を用いるなど、動作１６を相互に連鎖させて論理シーケンスにできる。クエリー１４は、データセット２０の様々な部分を保存している複数のデータストア１８にわたってクエリー１４を分散するために「ＭａｐＲｅｄｕｃｅ」技術を適用するように構成されたコンピューターを含むＭａｐＲｅｄｕｃｅサーバ２８に、運ばれうる。例えば、ＭａｐＲｅｄｕｃｅサーバ２８は、クエリー１４内部の様々な動作１６が、特定の複数のデータストア１８によってそれぞれ保存されているデータセット２０の様々な部分をターゲットにしていることを識別しうる。例えば、第１の動作１６は第１のデータストア１８によって保存されているデータをターゲットにしており（例えば、第１のデータストア１８によって保存されているデータテーブル２２および／またはレコード２６の集合に適用されたＳｅｌｅｃｔ動作）、他方で、第２の動作１６は第２のデータストア１８によって保存されているデータをターゲットにしうる。従って、ＭａｐＲｅｄｕｃｅサーバは、クエリー１４を、特定のデータストア１８によって実行される１つまたは複数の動作をそれぞれが含む様々なクエリー部分３０に分解することができる。データストア１８は、クエリー部分３０を受け取り、そこで特定されている動作１６を適用し、ＭａｐＲｅｄｕｃｅサーバ２８（または、更なる処理のための別のデータストア１８）に運ばれうるクエリー結果３２を生成しうる。ＭａｐＲｅｄｕｃｅサーバ２８は、次に、データストア１８によって提供されたクエリー結果３２を合成し、クエリー１４に応答してユーザー１２に提供されうるクエリー結果３４を生成する。このようにして、データストア１８とＭａｐＲｅｄｕｃｅサーバ２８とが協働し、クエリー１４に応えることを達成することができる。
【００１９】
[0027]図１の例示的なシナリオ１０は、いくつかの長所を有しうる（例えば、クエリー１４から複数のデータストア１８への自動的な配分であり、これにより、クエリー１４の評価を加速しうる様々なクエリー部分３０の同時的な評価が可能になりうる）。しかし、例示的なシナリオ１０は、いくつかの短所も有しうる。特に、データの保存およびデータへのアクセスがデバイスの第１の集合で実行され、他方で、複雑な計算プロセスがデバイスの第２の集合で実行される分散型データベースなどの分散されたデータセットに対するアーキテクチャを工夫することが望まれる場合がある。例えばデータセット２０のセキュリティを向上させるために、そのような分割が効果的でありうる。例えば、データセット２０に適用されるクエリー１４が、計算的に高価である（例えば、多額の金銭と関係がある）、逆説的である（例えば、終了しないまたは論理的に評価できない再帰的なクエリー）、または悪意がある（例えば、データセット２０の承認されていない開示または修正を過度にまたは密かに含む）場合がある。いくつかのシナリオでは、計算が、データストア１８で実装され保存されている手順を呼び出すクエリー１４や、モバイルエージェントシナリオなど、コードの実行を含みうるが、その場合には、第三者がデータセット２０に適用することが可能な「エージェント」（例えば、解釈可能なスクリプト、または、部分的もしくは全体的にコンパイルされた実行可能ファイルなど）を提供することがありうる。従って、注意深くモニタすることができ、データセット２０に損害を与えうるように動作していると考えられる場合には、動作を一時的に中断する、オフライン扱いにする、または交換することが可能な特定のコンピューターの集合に複雑な計算を制限することによって、データセット２０のセキュリティを向上させることができる。しかし、図１の例示的なシナリオ１０は、そのよう分割を含まない。むしろ、データセット２０の様々な部分を保存するデータストア１８は、そのようなデータに対してもクエリー部分３０を実行し、従って、データセット２０へのアクセスとデータセット２０に対して実行される計算とを分離していない。
【００２０】
[0028]図１の例示的なシナリオ１０で起こりうる第２の短所は、データセット２０のパフォーマンスに関する。例えば、特定のデータストア１８を、一時的または慢性的に、頻繁にアクセスされるクエリー部分３０を保存するように構成することによって、データストア１８が短い時間周期でデータセット２０のその部分に関係する多くのクエリーを受け取り処理することがありうる。しかし、データストア１８が更に保存されているデータの複雑な計算処理を実行するように構成されている場合には、複雑な動作を含むクエリー１４は、他のクエリー１４に応えるためには用いることができない可能性があるデータストア１８の計算資源（例えば、メモリ、プロセッサーの容量、および帯域幅）を消費することがありうる。従って、ただひとつの複雑なクエリー１４が、データストア１８に保存されている同一のデータに関係する他の複数のクエリー１４を評価し、それに応えることに先んじることがありうる。それとは対照的に、このデータに関係する複雑な計算がそのデータの保存から分割されている場合には、複数のクエリー１４を並列に処理するように多くのコンピューターを構成することができるので、ある１つのコンピューターの資源を停止させているひとつの複雑なクエリー１４が、他のコンピューターによって処理される他の複数のクエリー１４を評価し、それに応えることに影響することがなくなる可能性がある。
【００２１】
[0029]図１の例示的なシナリオ１０において提示されているアーキテクチャから生じるこれらのおよび他の短所に鑑みると、あるデータセット２０におけるデータの保存およびアクセスを、そのデータに適用されうる複雑な計算クエリーから分離することが望ましい場合がある。しかし、データストア１８が低レベルのアクセスを提供するだけで、計算ノードがすべての計算を提供するリジッドな分割もまた、非効率的である可能性がある。
【００２２】
[0030]図２は、例示的なシナリオ４０を提示しており、ここでは、データストア１８が、多数のレコード２６（例えば、５万個のレコード）を含むデータセット２０を保存するように構成されている。ユーザー１２がクエリー１４を提出し、このクエリー１４は計算ノード４２によって受け取られて全体的に評価されうる。計算ノード４２は、例えば、クエリー処理エンジンを含みうる。このクエリー処理エンジンは、クエリー１４を辞書的にパージングし、その中で特定されている動作１６を識別し、データストア１８からのデータのリトリーブを含めて、そのような動作１６を実行するために様々なコンポーネントを呼び出すことができる。例えば、クエリー１４またはクエリー部分３０をデータストア１８に送る代わりに、計算ノード４２は、単に、データセット２０のデータテーブル２２を含むレコード２６など、レコード２６の特定の集合に対するリクエスト４４を送りうる。データストア１８は、計算ノード４２がいくらかの複雑な計算（例えば、クエリー１４の中で特定されている動作１６）を適用する可能性があるリクエストされているレコード２６を含むリクエスト結果４８によって応答し、クエリー結果３４をユーザー１２に戻すことができる。しかし、この例示的なシナリオ４０は、計算ノード４２とデータストア１８との間で責任をリジッドに分割している点で、非効率性を示す。例えば、クエリー１４は、ひとつのレコード２６（例えば、特定の識別子と関連する従業員のレコード２６）をリトリーブすることをリクエストすることがありうるが、データストア１８によって保存されているデータテーブル２２には、そのようなレコード２６が多数含まれていることがありうる。従って、データストア１８は、そのようなレコード２６がただひとつだけクエリー結果３４に含まれている場合でも、５万個のレコード２６を含むリクエスト結果４８を計算ノード４２に提供することがありうる。更に、（例えば、クエリー１４が、それぞれのレコード２６に対して一意的な識別子を有するインデクス付きのフィールドに従って、リクエストされたレコード２６を識別する場合には）クエリー１４の範囲からこのレコード２６を識別することは容易でありうるが、データストア１８はクエリー１４の評価に含まれる計算を実行することはできないのであるから、この比較的単純なフィルタリングは、データストア１８によって実行されない。この非効率性は、例えば、リクエスト結果４８が容量に制限がありうるネットワーク４６を介して計算ノード４２に送られる場合に、特に明らかになる可能性がある。ネットワーク４６経由で多くのレコード２６を送ることは、クエリー１４の完了に対して、速度を制限するファクタを課すことになりうるために、小さなクエリー結果３４を含む比較的単純なクエリー１４に応えることにおいて著しい遅延を生じさせる可能性がある。これらのおよびそれ以外の短所は、データセット２０を含むデータストア１８と計算ノード４２との責任に関するハードな分割から生じうる。
【００２３】
[0031]本明細書に提示されるのは、クエリー１４を評価するようにデータセット２０を構成する技術である。これらの技術は、例えば、図２の例示的なシナリオ１０と図２の例示的なシナリオ４０とにおける長所および短所を考慮して、工夫することができる。これらの技術によると、データストア１８は、データセット２０の１つまたは複数のデータアイテム（例えば、データセット２０の様々なテーブル２２、属性２４、および／またはレコード２６）を保存し、そのデータアイテムとの関係でクエリー１４の評価に参加するように構成することができる。図１の例示的なシナリオ１０と比較すると、データストア１８は、クエリー１４を評価するようには構成されていない。例えば、データストア１８は、クエリー処理エンジンを含まないことがあり、構造化照会言語（ＳＱＬ）クエリーなどのクエリー言語で定式化されたクエリー１４を受け入れるまたは評価することを拒否することがある。逆に、データストア１８は、リクエスト４４に応答してデータストア２０の１つまたは複数の部分を提供するように制限されており、これによって、図２の例示的なシナリオ４０に図解されているようなリジッドな分割から非効率性が生じる可能性がある。しかし、これらの技術によると、データストア１８は、フィルタリングされたデータサブセットを画定する１つまたは複数のフィルタリング基準を含むリクエスト４４を受け入れるように構成される。例えば、データストア１８は、様々なレコード２６を含む１つまたは複数のデータテーブル２２を保存しうるが、レコード２６に対する少数の属性２４がインデックス化されうる。フィルタリングは、識別すること、リトリーブすること、および、インデックス付きの属性２４のうちの１つに対して特定の値を有するレコード２６を含むデータセット２０のデータサブセットを提供することを含みうる。フィルタリング基準をデータセット２０に適用することの結果としてフィルタリングされたデータサブセット５８における送られるべきデータが著しく減少し、他方でクエリー１４の評価に関わる計算資源のわずかな割合だけが消費されるので、データストア１８は、リクエスト４４に応答してこのフィルタリングを実行するように構成されうる。しかし、データストア１８は、より複雑な計算プロセスの実行を行わないように構成されることもある。例えば、データストア１８は、クエリー処理エンジンを完全に削除する、クエリー言語で特定されたクエリー１４を受け入れることを拒否する、またはインデックス付けされていない属性２６を特定するリクエスト４４を拒絶する場合がある。このようにして、本明細書において提示されている技術は、図１の例示的なシナリオ１０におけるよりも、より大きな効率とセキュリティとを達成しながら、図２の例示的なシナリオ４０において提示されている短所を回避することができる。
【００２４】
[0032]図３は、クエリー結果３４を生成し提供するために、ユーザー１２によって提出されたクエリー１４を、様々なデータアイテム５２を保存しているデータセット２０に適用するという本明細書で提示される技術の適用を特色とする例示的なシナリオ５０の図解を提示している。この例示的なシナリオ５０では、データセット２０へのアクセスは、データストア１８を通じて達成することができる。なお、データストア１８へのアクセスは、計算ノード４２を通じてなされうる。しかし、ユーザー１２または計算ノード４２がクエリー１４をデータストア１８に提出する場合には、データストア１８はがクエリー１４の受け入れを拒絶する、または、クエリー１４を評価する能力を有しないことがありうる。（あるいは、例えばクエリー１４が管理者によって提出されるなどの特定の状況においてのみ、データストア１８がクエリー１４を受け入れ評価することもありうる。）代わりに、ユーザー１２（または、自動化されたプロセス）がクエリー１４を計算ノード４２に提出し、計算ノード４２が、クエリーを評価してクエリー結果３４を提供するためにデータストア１８との相互作用を試みることがある。特に、計算ノード４２は、データストア１８からの特定のデータアイテム５２のリトリーバルを特定しうる１つまたは複数のフィルタ基準５４を含むリクエスト４４を識別する（例えば、１つまたは複数のフィルタ基準５４を満たすデータアイテム５２に対するリクエスト４４として表現されうるクエリー１４の１つまたは複数の動作１６を識別する）ために、クエリー１４を検査しうる。データストア１８は、データアイテム５２を受け取り受け取られたデータアイテム５２をストレージコンポーネント（例えば、メモリ回路、ハードディスクドライブ、ソリッドステートストレージデバイス、または磁気もしくは光ディスク）にデータセット２０の一部として保存するように構成されている。更に、データストア１８は、１つまたは複数のフィルタ基準５４を含むリクエスト４４を受け取るように構成されている。リクエスト４４を受け取ると、データストア１８は、フィルタ基準５４を満たすデータアイテム５２を識別するためにフィルタリング５６を実行して、計算ノード４２に戻されるフィルタリングされたデータサブセット５８を生成しうる。計算ノード４２は、このフィルタリングされたデータサブセット５８を受け取り、クエリー１４の残りを適用しうる（例えば、リクエスト４４に表現されていなかったクエリー１４の動作１６によって特定される複雑な計算を実行する）。いくつかのこのようなシナリオにおいて、計算ノード４２は、他のフィルタ基準５４を特定するデータセット２０に第２のまたは更なるリクエスト４４を送り、その第２のまたは更なるフィルタリングされたデータサブセット５８を計算において用いることがある。結果的に、計算ノード４２はクエリー結果３４を生成しうるが、このクエリー結果３４は、クエリー１４に応答してユーザー１２（または自動化されたプロセス）に提示されうる。このようにして、データストア１８とオプションであるが計算ノード４２との構成により、図１の例示的なシナリオ１０および／または図２の例示的なシナリオ４０において提示されたよりも、効率的かつ安全にクエリー１４に応えることが可能になる。
【００２５】
[0033]図４は、これらの手法の第１の実施形態を提示しており、データセット２０をターゲットとするリクエスト４４に応える例示的な方法６０として、図解されている。例示的な方法６０は、例えば、データセット２０の一部またはすべてを保存するまたはデータセット２０の一部またはすべてへのアクセスを有するように構成されたデータストア１８によって、実行されうる。更に、例示的な方法６０は、例えば、データストア１８のプロセッサーによって実行されると、プロセッサーに本明細書で提示されている手法を実行させる、データストア１８のメモリコンポーネント（例えば、システムメモリ回路、ハードディスクドライブのプラッタ、ソリッドステートストレージデバイス、または磁気もしくは光ディスク）に保存されているソフトウェアの命令セットとして、実装される。例示的な方法６０は６２で始まり、プロセッサー上で命令を実行する（６４）ことを含む。更に詳しくは、命令は、データアイテム５２を受け取ると、データセット２０にデータアイテム５２を保存する（６６）ように構成されている。命令は、また、少なくとも１つのフィルタ基準５４を特定するリクエスト４４を受け取ると、少なくとも１つのフィルタ基準を満たすデータセット２０のデータアイテム５２をリトリーブ（７０）してフィルタリングされたデータサブセット５８を生成し、リクエスト４４に応答してフィルタリングされたデータサブセット５８を送る７２ように構成されている。このようにして、例示的な方法６０は、データストア１８をセキュリティ上のリスクにさらすこと、非効率、およびクエリー１４の評価に関係する計算資源の消費することなく、データセット２０にアクセスするリクエスト４４に応えることを達成し、従って、７4で終了する。
【００２６】
[0034]図５は、これらの手法の第２の実施形態を提示しており、データストア１８によって保存されているデータセット２０にクエリー１４を適用する例示的な方法８０として、図解されている。例示的な方法８０は、例えば、計算ノード４２などプロセッサーを有するデバイス上で実行されうる。更に、例示的な方法８０は、例えば、プロセッサーによって実行されるとプロセッサーに本明細書において提示されている手法を実行させる、計算ノード４２やそれ以外のデバイスのメモリコンポーネントに保存されているソフトウェアの命令セットとして、実装される。例示的な方法８０は８２で始まり、プロセッサー上で命令を実行する（８４）ことを含む。更に詳しくは、命令は、クエリー１４から、少なくとも１つのフィルタ基準５４を特定するリクエスト４４を生成する（８６）ように構成されている。命令は、また、リクエスト４４をデータストア１８に送り（８８）、リクエスト４４に応答してフィルタリングされたデータサブセット５８をデータストア１８から受け取ると、クエリー１４をフィルタリングされたデータサブセット５６に適用する（９０）ように構成されている。このようにして、例示的な方法８０は、データストア１８をセキュリティ上のリスクにさらすこと、非効率、およびクエリー１４の評価に関係する計算資源の消費なく、データセット２０へのクエリー１４に応えることを達成し、従って、９２で終了する。
【００２７】
[0035]更に別の実施形態は、本明細書で提示されている手法を適用するように構成されプロセッサー実行可能な命令を備えたコンピューター可読媒体に関係する。そのようなコンピューター可読媒体には、例えば、デバイスのプロセッサーによって実行されると本明細書に提示されている手法をデバイスに実装させるコンピューター可読な命令セットを符号化する、（例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、および／または同期式ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）技術などの）メモリ半導体、ハードディスクドライブのプラッタ、フラッシュメモリデバイス、または（ＣＤ−Ｒ、ＤＶＤ−Ｒ、もしくはフロッピーディスク（登録商標）などの）磁気もしくは光ディスクなど、有体物であるデバイスを含むコンピューター可読な記憶媒体が含まれうる。これらのコンピューター可読媒体には、また、デバイスのプロセッサーによって実行されると本明細書に提示されている手法をデバイスに実装させるコンピューター可読な命令セットを符号化する、様々な物理現象（例えば、電磁気信号、音波信号、または光信号）を通じて、ならびに様々なワイヤードシナリオ（例えば、イーサネット（登録商標）または光ファイバケーブル経由で）および／またはワイヤレスシナリオ（例えば、ＷｉＦｉなどのワイヤレスローカルエリアネットワーク（ＷＬＡＮ）、ブルートゥース（登録商標）、またはセルラもしくは無線ネットワークなどのパーソナルエリアネットワーク（PＡＮ）において伝播されうる信号など、様々なタイプの通信媒体が（コンピューター可読記憶媒体とは区別される技術のクラスとして）含まれうる。
【００２８】
[0036]これらの方法で工夫することができる例示的なコンピューター可読媒体が、図６に図解されている。図６では、実装例１００は、コンピューター可読データ１０４がその上で符号化されているコンピューター可読媒体１０２（例えば、ＣＤ−Ｒ、ＤＶＤ−Ｒ、またはハードディスクドライブのプラッタ）を含みうる。このコンピューター可読データ１０４は、また、ここで明らかにされている原理に従って動作するように構成されたコンピューター命令セット１０６を含む。あるそのような実施形態では、プロセッサー実行可能な命令１０６は、図４の例示的な方法６０など、データセットのうちのデータセットをターゲットにするリクエストに応える方法を実行するように構成されうる。別のそのような実施形態では、プロセッサー実行可能な命令１０６は、図５の例示的な方法８０など、データストアによって保存されているデータセット２０にクエリーを適用する方法を実装するように構成されうる。このコンピューター可読媒体のいくつかの実施形態は、このように構成されたプロセッサー実行可能な命令を保存するように構成されている非一時的なコンピューター可読記憶媒体（例えば、ハードディスクドライブ、光ディスク、またはフラッシュメモリデバイス）を含みうる。本明細書に提示されている手法に従って動作するように構成されている多くのそのようなコンピューター可読媒体は、当業者であれば、工夫して作成することが可能である。
【００２９】
[0037]ここで論じられる手法は、多くの態様におけるバリエーションを伴うように工夫することが可能であり、一部のバリエーションは、これらのおよびそれ以外の手法の他のバリエーションに関する追加的な長所および／または短所を与えうる。更に、いくつかのバリエーションは、組み合わせての実装されることがありうるのであって、いくつかの組み合わせは、シナジーとして協動することを通じて長所を追加しおよび／または短所を縮小するという特色を有しうる。これらのバリエーションは、それらの実施形態に個別的なおよび／またはシナジー的な効果を与えるという結果が得られるように、様々な実施形態に組み入れられることがある（例えば、図４の例示的な方法６０および図５の例示的な方法８０）。
【００３０】
[0038]これらの手法の実施形態の間で変動しうる第１の態様は、それらの手法が用いられうるシナリオに関する。第１のバリエーションとして、多くのタイプのデータストア１８（および／または計算ノード４２）が、クエリー１４とリクエスト４４とをデータセット２０に適用するのに用いられうる。そのような一例として、データストア１８および／または計算ノード４２は、特色のあるハードウェアデバイス（例えば、異なるマシンまたはコンピューター）、特定のハードウェアデバイスの内部で動作する特色のある回路（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ））、または、特定のハードウェアデバイスの１つまたは複数のプロセッサー上の１つまたは複数のコンピューティング環境の内部で動作するソフトウェアプロセス（例えば、別個のスレッド）を含みうる。データストア１８および／または計算ノード４２は、また、デバイスセットのうちの様々なデバイス上でインクリメンタルに実行されうる分散型プロセスなどの仮想的なプロセスを含みうる。更に、それぞれのデータストア１８は、データセット２０を含むデータアイテム５２を内部的に含みうるし、または、データアイテム５２を内部的に保存する他のデータストア１８（例えば、データ記憶レイヤまたはデバイスとインターフェースするデータアクセスレイヤまたはデバイス）へのアクセスを有することもある。第２のバリエーションとして、データベース、ファイルシステム、メディアライブラリ、電子メールのメールボックス、オブジェクトシステムにおけるオブジェクトセット、またはこれらのデータセット２０の組み合わせなど、多くのタイプのデータセット２０は、本明細書に提示されている手法を用いてアクセスすることができる。同様に、多くのタイプのデータアイテム５２は、データセット２０に保存されうる。第３のバリエーションとして、本明細書に提示されている手法を用いて推定されるクエリー１４および／またはリクエスト４４は、多くの方法で特定されうる。例えば、クエリー１４は、構造化照会言語（ＳＱＬ）のバリアントに従って、言語統合型のクエリー（例えば、ＬＩＮＱクエリー）、または、データセット２０の内部でデータアイテム５２の様々な操作を実行するように構成されている解釈可能なスクリプトもしくは実行可能なオブジェクトとして、特定されうる。リクエスト４４は、また、インデックス付きの属性２４と、フィルタリングされたデータサブセット５８に含まれるデータアイテム５２のそのような属性２４の１つまたは複数の値とを特定するなど、様々な方法で特定されうる。リクエスト４４は、フィルタリングされたデータサブセット５８に含まれるデータアイテム５２を特定する１つまたは複数のフィルタ基準５４に限定されるが、クエリー１４とリクエスト４４とがフォーマットされている言語、シンタクス、および／またはプロトコルは、本明細書に提示されている手法の適用または実装にそれほどには影響しない。
【００３１】
[0039]これらの手法の実施形態の間で変動しうる第２の態様は、データストア１８によってデータアイテム５２をデータセット２０に保存することに関係する。第１のバリエーションとして、データストア１８は少なくとも１つのインデックスを含みうるが、この少なくとも１つのインデックスは１つまたは複数のフィルタ基準５４（例えば、その属性に対する１つまたは複数の値を含むレコード２６がフィルタリングされたデータサブセット５８に含まれうるような、特定の属性２４）と対応しうる。データストア１８は、データアイテム５２を受け取ると、フィルタ基準５４に従って（例えば、フィルタ基準５４によってターゲットとなりうる１つまたは複数の属性２４に対するデータアイテム５２の値に従って）インデックスの中のデータアイテムにインデックスを付けるように構成されうる。データストア１８は、次に、フィルタ基準５４と対応するインデックスを用いることにより、リクエスト４４のフィルタ基準５４を満たすデータアイテム５２を識別することによって、リクエスト４４に応えることができる。リクエスト４４のフィルタ基準５４によってターゲットになる蓋然性が高いインデックスのためのデータアイテム５２の属性２４を選択して、データアイテム５２のそれ以外の属性２４にインデックスを付さないのが、効果的であろう（例えば、データアイテム５２が変化するにつれて、インデックスのメンテナンスが必要であり、フィルタ基準５４として頻繁に含まれることの蓋然性が高くない属性２４にインデックスを付けるために、そのようなメンテナンスに関する計算上の負荷を負うことは問題でありうる）。例えば、様々なユーザーによって様々な時点で実行されるイベントをトラッキングするように構成されているデータベースでは、それぞれのデータアイテム５２によって表されるイベントを特定するイベントインデックス、それぞれのデータアイテム５２によって表されるイベントの時間を特定する時間インデックス、およびそれぞれのデータアイテム５２によって表されるイベントと関連する少なくとも１つのユーザーを特定するユーザーインデックスを含むインデックスセットのためにインデックスを生成しメンテナンスをするようにデータストア１８を構成することが望ましい場合がある。しかし、リクエストに含まれるデジタル資源のユニフォームリソースアイデンティファイヤ（ＵＲＩ）、特定のイベントに関するテキストでのコメントが様々なユーザーや管理者によって入力されうるコメントフィールド、またはイベントに含まれる大きなデータセットに関する「ブロブ」フィールド（例えば、イベントを示すシステムログまたはキャプチャされた画像）など、このデータセット２０の他の属性２４のためのインデックスを生成しメンテナンスをすることが望まれない場合がある。
【００３２】
[0040]この第２の態様の更なるバリエーションとして、インデックスは、様々な方法で、特定のフィルタ基準５４に対して１つまたは複数の特定のフィルタ基準と関連するデータアイテム５２を識別しうる。そのような一例として、インデックスは、そのインデックスに対応するフィルタ基準５４のフィルタ基準値に対して、フィルタ基準５４に対するフィルタ基準値を有するデータアイテムを識別するデータアイテムセットを特定しうる。例えば、インデックスは、フィルタ基準５４のそれぞれのフィルタ基準値に対して、そのフィルタ基準値と関連するデータアイテム５２への参照の集合を保存することができる。更に、インデックスに保存されているデータアイテムセットは、様々な方法でアクセスが可能である。例えば、インデックスは、データアイテムセットへのインクリメンタルな書き込みを許容する（例えば、フィルタ基準に対するフィルタ基準値を有するデータアイテムのデータアイテムセットにデータアイテム５２を追加することによって、新たなデータアイテム５２にインデックスを付ける）が、データアイテムセットのアトミックな読み出しのみを許容する（例えば、特定のフィルタ基準５４に対する特定のフィルタ基準値を特定しているリクエスト４４に対しては、インデックスは、そのようなデータアイテム５２への参照の集合すべてを含むデータアイテムセットの全体を読み出し提示することができる）。更なるバリエーションとして、データストア１８は、それぞれのデータアイテム５２を受け取ると、そのデータアイテム５２をデータアイテムバッファに保存しうる。その際に、データアイテムバッファがデータアイテムバッファのサイズ閾値（例えば、データアイテムバッファの容量）を超えると、データストア１８はデータアイテムを対応するデータアイテムセットに追加して、データアイテムバッファを空にする。
【００３３】
[0041]図７には、インデックス１１２に従ってインデックスが付けられた１つまたは複数のデータアイテムセット１１８におけるデータアイテム５２のインデックス付けを特色とする例示的なシナリオ１１０の図解が示されている。この例示的なシナリオ１１０では、データストア１８は、様々なデータアイテム５２（例えば、報告されたイベントの集合）を受け取り、そのデータアイテム５２をデータセット２０に格納しうる。特に、データストア１８はインデックス１１２を生成しうるが、インデックス１１２は、１つまたは複数のデータアイテムセット１１８の１つまたは複数のデータアイテム５２への参照１１６を含むインデックスエントリ１１４の集合を含み、それぞれが、フィルタ基準５４（例えば、イベントが生じた日付の月および年）に対する異なるフィルタ基準値に対応する。データアイテム５２を受け取ると、データストア１８は、そのデータアイテム５２の１つまたは複数のフィルタ基準値を識別し、そのフィルタ基準値に対応するインデックス１１２のインデックスエントリ１１４に、保存されているデータアイテム５２への参照を保存しうる。データストア１８は、次に、（データアイテム５２をレコード２６のリストに加えることにより）データアイテム５２をデータセット２０に保存しうる。ユーザー１２が（例えば、１つまたは複数のフィルタ基準５４を特定するリクエスト４４をクエリー１４から生成するように構成されている計算ノード４２にクエリー１４を提出することによって、直接的または間接的に）リクエスト４４をデータストア１８に提出すると、データストア１８は、フィルタ基準値と関連するデータアイテムセット１１８をリトリーブすることによってリクエスト４４に応えることができ、特に、フィルタ基準値と対応するデータアイテムセット１１８のデータアイテム５２を識別するインデックス１１２のインデックスエントリ１１４を識別することにより、そうすることがありうる。データストア１８は、次に、データアイテムセット１１８のデータアイテム５２をリトリーブするためにインデックスエントリ１１４に保存されている参照１１６を用い、そのデータアイテム５２をフィルタリングされたデータサブセット５８として送りうる。このようにして、データアイテム５２が共にどのような態様で保存されている場合でも、データストア１８は、リクエスト４４のフィルタ基準５４に対応するインデックス１１２を用いることにより、リクエスト４４に効率的に応えることができる。例えば、インデックス１１２のインデックスエントリ１１４は、フィルタ基準５４の第１のフィルタ基準値に対して、第２のフィルタ基準５４のそれぞれの第２のフィルタ基準値に対応するデータアイテム分割への参照を保存しうる。データアイテム５２は、この２段階のインデックス付加技術を用いて保存および／またはリトリーブされうる。例えば、データアイテム５２を保存することは、インデックス１１２を用いてデータアイテム５２に対する第１のフィルタ基準５４の第１のフィルタ基準値と関連するインデックスエントリ１１４を識別することと、インデックスエントリ１１４によって参照されるデータアイテム分割を調べてデータアイテム５２に対する第２のフィルタ基準の第２のフィルタ基準値と関連するデータアイテム分割を識別することと、データアイテム５２をデータアイテム分割に保存することとに関係しうる。逆に、第１のフィルタ基準５４の特定の第１のフィルタ基準値と第２のフィルタ基準５４の特定の第２のフィルタ基準値とを有するデータアイテム５２をリトリーブすることは、インデックス１１２を用いて第１のフィルタ基準値と関連するインデックスエントリ１１４を識別することと、インデックスエントリ１１４において参照されるデータアイテム分割を調べて第２のフィルタ基準値と関連するデータアイテム分割を識別することと、リクエスト４４に応答してデータアイテム分割をリトリーブして送ることとに関係しうる。
【００３４】
[0042]第２の態様の更なるバリエーションとして、データストア１８は、特定のフィルタ基準５４を満たすデータアイテム５２（例えば、データアイテム５２がアクセスされるメモリ参照もしくはＵＲＩ、または、データテーブル２２のキーフィールドのキー値などデータアイテム５２の特有の識別子など、それへの参照）をそれぞれが含む分割の集合として、インデックスを構成することがある。例えば、データストア１８は、特定のフィルタ基準５４の特定のフィルタ基準値を有するデータアイテム５２を保存するように配分されているメモリの小さな部分として、様々な分割を生成しうる。データアイテム５２を受け取ると、データストア１８は、対応する分割にそのデータアイテム５２を保存しうる。そして、特定のフィルタ基準５４のフィルタ基準値を特定するリクエスト４４を受け取ると、データストア１８は、フィルタ基準に対するフィルタ基準値を有するデータアイテム５２を保存しているデータアイテム分割をリトリーブし、データアイテム分割をフィルタリングされたデータサブセット５８として送ることがある。更に別のバリエーションとして、２以上のインデックスが、２以上のフィルタ基準５４に従ってデータアイテムをグループ分けするのに用いられることもある。
【００３５】
[0043]図８には、データアイテム５２をそれぞれのデータアイテム分割１２２へ分割することを特色とする例示的なシナリオ１２０の図解が示されている。この例示的なシナリオ１２０では、データストア１８は、様々なデータアイテム５２（例えば、報告されたイベントの集合）を受け取り、そのデータアイテム５２をデータセット２０に格納することができる。データストア１８はインデックス１１２（図示せず）を再び生成しうるが、インデックス１１２は、１つまたは複数のデータアイテムセット１１８の１つまたは複数のデータアイテム５２への参照１１６を含むインデックスエントリ１１４の集合を含み、それぞれが、フィルタ基準５４（例えば、イベントが生じた日付の月および年）に対する異なるフィルタ基準値に対応する。しかし、図７の例示的なシナリオ１１０とは対照的に、この例示的なシナリオ１２０では、データアイテム５２は、フィルタ基準値に従って分割されて保存される。データアイテム５２を受け取ると、データストア１８は、そのデータアイテム５２の１つまたは複数のフィルタ基準値を識別し、そのフィルタ基準値と関連するデータアイテム分割１２２を識別することができる。データストア１８は、次に、フィルタ基準値に対応するデータアイテム分割１２２に、データアイテム５２を保存することができる。ユーザー１２が（例えば、１つまたは複数のフィルタ基準５４を特定するリクエスト４４をクエリー１４から生成するように構成されている計算ノード４２にクエリー１４を提出することによって、直接的または間接的に）リクエスト４４をデータストア１８に提出すると、データストア１８は、フィルタ基準値と関連するデータアイテムセット１１８をリトリーブすることによってリクエスト４４に応えることができ、特に、フィルタ基準値と関連するデータアイテム分割１２２を識別することにより、そうすることができる。データストア１８は、次に、データアイテム分割１２２の全体をリトリーブし、データアイテム分割１２２の全体をユーザー１２に送りうる。他のフィルタ基準５４（例えば、特定のフィルタ基準５４に対する２以上のフィルタ基準値、または、２以上の異なるフィルタ基準５４のそれぞれに対して異なるように特定されたフィルタ基準値）に応答して、追加的なデータアイテム分割１２２がリトリーブされ、送られることがある。このようにして、データストア１８は、リクエスト４４において特定された１つまたは複数のフィルタ基準５４に対応するデータアイテムインデックス１２２を用いることにより、フィルタ基準５４を満足するデータアイテム５２を、効率的に識別かつ提供することができる。当業者であれば、本明細書に提示されている手法に従ってデータセット２０のデータアイテム５２を保存する多くの方法を工夫することができるはずである。
【００３６】
[0044]これらの手法の実施形態の間で変動しうる第３の態様は、リクエスト４４のフィルタ基準５４を満足するデータアイテム５２をリトリーブするための、データストア１８および／または計算ノード４２の構成に関係しうる。第１のバリエーションとして、リクエスト４４は、多くのタイプのフィルタ基準５４を含みうる。特に、リクエスト４４は、第２のフィルタリングされたデータサブセット５８を含むデータアイテム５２と関係しうる第１のフィルタリングされたデータサブセット５８を特定し、データストア１８は、第２のフィルタリングされたデータサブセット５８を生成する間、第１のフィルタリングされたデータサブセット５８を用いることがある。例えば、クエリー１４は、別のフィルタリングされたデータサブセット５８を特定するリクエスト４４に関係しうる（例えば、「ユーザーＩＤが（１０，２２，５３，６７）の中にあるユーザーからユーザー名を選択する」というクエリー１４において、リクエスト４４は、フィルタリングされたデータサブセット５８として与えられている数字のユーザーＩＤの集合に従ってフィルタリングされる）。更なるバリエーションとして、クエリー１４が、第１のフィルタリングされたデータサブセット５８を特定する第１のリクエスト４４に関係し、これは、第２のフィルタリングされたデータサブセット５８を特定する第２のリクエスト４４において参照されうる。例えば、「ユーザーＩＤが（イベントタイプが１２であるイベントからユーザーを選択する）の中にあるユーザーからユーザー名を選択する」というクエリー１４では、第１のフィルタリングされたデータサブセット５８は、（例えば、「ＳＥＴ＿１＝ｅｖｅｎｔ．ｔｙｐｅ＝１２」という第１のリクエスト４４を用いて）イベントデータテーブルから生成され、第１のフィルタリングされたデータサブセット５８は、（例えば、「ｕｓｅｒ．ｉｄ  ｉｎ  ＳＥＴ＿１」である）第２のリクエスト４４によって参照され、結果的に第２のフィルタリングされたデータサブセット５８を生じる。このようにして、リクエスト４４は、同じクエリー１４を評価する間に提供され処理されるそれよりも前のリクエスト４４を含む、別のリクエスト４４によって生成されたフィルタリングされたデータサブセット５８を参照することがある。
【００３７】
[0045]この第３の態様の第２のバリエーションとして、少なくとも１つのフィルタ基準５４を含むリクエスト４４を与えられるときに、データストア１８は、（例えば、図７の例示的なシナリオ１１０と図８の例示的なシナリオ１２０とにあるように、データセット１１８を識別するインデックス１１２、および／または、データアイテム分割１２２を用いることにより）リクエスト４４のそれぞれのフィルタ基準５４を満たすコンテンツアイテム５２をデータセット２０からリトリーブするように構成されうる。あるいは、インデックスを用いるのではなく、データストア１８が、データセット２０のデータアイテム５２のすべてをリトリーブして、少なくとも１つのフィルタ基準を満たすデータアイテム５２だけを（例えば、計算ノード４２、または、リクエスト４４をデータストア１８に提出したユーザー１２に）送ることがありうる。前者の例では、データアイテム５２のフィルタは、受け取るときのデータアイテム５２のインデックス付けの間に達成される。しかし、後者の例では、データアイテム５２のフィルタリングは、データアイテム５２を送る間に達成される。例えば、リクエスト４４を満たすために、データアイテム５２のすべてをリアルタイムでフィルタリングするのは困難な可能性がある。しかし、何らかの手法を用いることにより、あるいは、インデックス１１２および／または分割１２２の利用と組み合わせることにより、データアイテム５２の、リアルタイムでのフィルタリングを加速することは可能であろう。
【００３８】
[0046]図９は、データアイテム５２のリアルタイムでのフィルタリングを実装するためのある手法を特色とする例示的なシナリオ１３０の図解を与えている。この例示的なシナリオ１３０では、データストア１８は、ユーザー１２から、少なくとも１つのフィルタ基準５４を特定するリクエスト４４を受け取り、リクエスト４４のフィルタ基準５４を満たすデータアイテム５２だけを含むフィルタリングされたデータサブセット５８を提供することによって、リクエスト４４を満たすことを試みるのである。しかし、この例示的なシナリオ１３０では、データストア１８は、データセット２０からデータアイテム５２のすべてをリトリーブし、次に、フィルタ基準５４を満たすデータアイテム５２だけを識別して提供するために、データアイテムプロセッサーの集合１３２をデータアイテム５２の集合全体に適用する。データアイテムプロセッサーの集合１３２は、例えば、それぞれがある状態１３６と少なくとも１つのフィルタリング条件（例えば、フィルタ基準５４が満たされているかどうかを識別するための任意の特定のデータアイテム５２の論理的評価）とを有するデータアイテムプロセッサーの集合を含みうる。データアイテムプロセッサー１３４は、データアイテム５２を受け取ると、データアイテムプロセッサー１３４の状態１３６を更新するように個別に構成され、データアイテムプロセッサー１３４の状態１３６が少なくとも１つのフィルタリング条件を満たすと、データアイテムプロセッサー１３４は、（例えば、フィルタリングされたデータサブセット５８にデータアイテム５２を含めることによって、または、更なる評価のためにデータアイテム５２を異なるデータアイテムプロセッサー１３４に送ることによって）送られるデータアイテム５２を承認しうる。これらの複数のデータアイテムプロセッサー１３４は、従って、例えばステートマシンを用いてデータアイテム５２を評価するリアルタイム処理システムとして、相互に接続されており、相互に協動しうる。従って、データストア１８は、データアイテム５２がデータセット２０からリトリーブされると、データアイテムプロセッサーの集合１３２を呼び出すことができ、また、データアイテムプロセッサーの集合１３２によって送ることが承認されたデータアイテム５２だけを送ることになりうる。このようにして、データストア１８は、分割１２２のインデックス１１２を生成し、維持し、または用いることを必要とせずにリクエスト４４のフィルタ基準５４を満たすデータアイテム５２を識別して搬送するために、データセット２０のすべてのデータアイテム５２のアドホックでリアルタイムの評価を達成することができる。
【００３９】
[0047]この第３の態様の第３のバリエーションとして、データストア１８は、リクエスト４４に応答してフィルタリングされたデータサブセット５８を提供する前に（そして、オプションであるが、リクエスト４４のフィルタ基準５４に一致するデータアイテム１８をリトリーブする前に）、フィルタリングされたデータサブセット５８のサイズを推定することができる。例えば、データストア１８によって受け取られるリクエスト４４は、リクエスト４４に応答してリトリーブし送るために著しい量のコンピューティング資源を必要とする比較的大きなフィルタリングされたデータサブセット５８に関係する可能性がある。従って、リクエスト元（例えば、特定のユーザー１２、または、自動化されたプロセス）から受け取られたリクエスト４４に対し、ある実施形態では、フィルタリングされたデータサブセット５８のフィルタリングされたデータサブセットとしてのサイズ（例えば、フィルタリングされたデータサブセット５８に含まれうるレコード２６またはデータアイテム５２の推定される総数）をまず推定して、このサイズのフィルタリングされたデータサブセット５８のリトリーブがリクエスト元にとって受け入れ可能であることを確認しようと試みられることになる。従って、ある実施形態を、リクエスト４４に応答してフィルタリングされたデータサブセット５８を送る前に、フィルタリングされたデータサブセット５８のフィルタリングされたデータサブセットのサイズを推定して、そのフィルタリングされたデータサブセットのサイズをリクエスト元に送るように構成され、リクエスト元からフィルタリングされたデータサブセットに関する承認を受け取ったときにのみ、フィルタリングされたデータサブセット５８のリトリーブし送ることに進むことができる。逆に、計算ノード４２は、少なくとも１つのフィルタ基準５４を特定するリクエスト４４を送ったあとであり、リクエスト４４に応答してフィルタリングされたデータサブセット５８を受け取る前に、フィルタリングされたデータサブセット５８のフィルタリングされたデータサブセットのサイズの推定をデータストア１８から受け取り、そのフィルタリングされたデータサブセットのサイズを、（例えば、フィルタリングされたデータサブセットのサイズをユーザー１２に提供することによって、または、フィルタリングされたデータサブセットのサイズを、データストア１８および／またはネットワーク４６のコンピューティング資源の受け入れ可能な使用を定義する受け入れ可能なフィルタリングされたデータサブセットのサイズ閾値と比較することによって）確認するように、構成されうる。推定されたフィルタリングされたデータサブセットのサイズが受け入れ可能である場合には、計算ノード４２は、フィルタリングされたデータサブセットの承認を生成してデータストア１８に送り、後で、フィルタリングされたデータサブセット５８を受け取ることができる。当業者であれば、データストア１８および／または計算ノード４２を、本明細書に提示されている手法に従ってデータセット２０からのデータアイテム５２をリトリーブするように構成する多くの方法を工夫することができるであろう。
【００４０】
[0048]以上では主題について構造的な特徴および／または方法上の行為に特有な言語で説明してきたが、特許請求の範囲において定義される主題は上述した特定の特徴または行為に必ずしも限定されないことを理解すべきである。むしろ、上述した特定の特徴および行為は、特許請求の範囲を実装する例示的な形式として開示されている。
【００４１】
[0049]この出願では、「コンポーネント」、「モジュール」、「システム」、「インターフェース」などの用語は、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、または実行中のソフトウェアであるコンピューターに関係するエンティティを意味することが一般的に意図されている。例えば、コンポーネントとは、これらに限定されることはないが、プロセッサー上で動作しているプロセス、プロセッサー、オブジェクト、実行可能ファイル、実行のスレッド、プログラム、および／またはコンピューターでありうる。実例としては、コントローラ上で動作しているアプリケーションとコントローラとは、共にコンポーネントでありうる。１つまたは複数のコンポーネントがプロセスおよび／または実行可能ファイルのスレッドの中に存在しうる。また、あるコンポーネントが、１つのコンピューター上にローカルに存在する、および／または、２以上のコンピューターの間で分散されていることがありうる。
【００４２】
[0050]更に、特許請求されている主題は、開示されている主題を実装するようにコンピューターを制御するソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを作る標準的なプログラミングおよび／もしくは工学的手法を用いて、方法、装置、または製品として実装することができる。ここで用いられている「製品」という用語は、任意のコンピューター可読デバイス、搬送波、または媒体からアクセス可能なコンピュータープログラムに及ぶことが意図されている。もちろん、当業者であれば、特許請求されている主題の範囲または精神から逸脱することなく、この構成に多くの修正を加えることができることを認識するであろう。
【００４３】
[0051]図１０と以下の議論とでは、ここで明らかにされ提供されている発明の１つまたは複数の実施形態を実装するのに適したコンピューティング環境に関する簡潔で一般的な説明を提供する。図１０の動作環境は、適切な動作環境の単なる一例であり、動作環境の使用または機能の範囲に関していかなる限定を示唆することを意図しない。例示的なコンピューティングデバイスには、これらに限定されないが、パーソナルコンピューター、サーバコンピューター、ハンドヘルドまたはラップトップデバイス、（携帯電話、パーソナルデジタルアシスタント（ＰＤＡ）、メディアプレーヤーなどの）モバイルデバイス、マルチプロセッサーシステム、家電製品、ミニコンピューター、メインフレームコンピューター、上述したシステムもしくはデバイスの任意のものを含む分散型コンピューティング環境などが含まれうる。
【００４４】
[0052]要求されているのではないが、実施形態は、１つまたは複数のコンピューティングデバイスによって実行されている「コンピューター可読命令」という一般的な文脈で説明されている。コンピューター可読命令は、コンピューター可読媒体（後述）を介して分散されうる。コンピューター可読命令は、特定のタスクを実行するまたは特定の抽象的なデータタイプを実装する関数、オブジェクト、アプリケーションプログラミングインターフェース（ＡＰＩ）、データ構造などのプログラムモジュールとして、実装可能である。典型的には、コンピューター可読命令の機能は、必要に応じて、様々な環境において組み合わせるまたは分散させることが可能である。
【００４５】
[0053]図１０には、本明細書において提供されている１つまたは複数の実施形態を実装するように構成されたコンピューティングデバイス１４２を備えたシステム１４０の例が、図解されている。ある構成では、コンピューティングデバイス１４２は、少なくとも１つの処理ユニット１４６とメモリ１４８とを含む。コンピューティングデバイスの正確な構成とタイプとに応じて、メモリ１４８は、揮発性（例えばＲＡＭなど）、不揮発性（例えばＲＯＭ、フラッシュメモリなど）、または両者の組み合わせでありうる。この構成は、図１０では、破線１４４によって図解されている。
【００４６】
[0054]他の実施形態では、デバイス１４２は、追加的な特徴および／または機能を含みうる。例えば、デバイス１４２は、これらに限定されないが、磁気ストレージや光ストレージなどを含む追加的なストレージを更に含みうる。このような追加的なストレージは、図１０では、ストレージ１５０によって図解されている。ある実施形態では、本明細書に提供されている１つまたは複数の実施形態を実装するコンピューター可読命令は、ストレージ１５０に存在しうる。ストレージ１５０は、また、オペレーティングシステムやアプリケーションプログラムなどを実装するそれ以外のコンピューター可読命令を保存しうる。コンピューター可読命令は、例えば、処理ユニット１４６によって実行されるために、メモリ１４８にロードされうる。
【００４７】
[0055]本明細書で用いられている「コンピューター可読媒体」という用語は、コンピューター記憶媒体を含む。コンピューター記憶媒体は、コンピューター可読命令またはそれ以外のデータなどの情報を保存するために任意の方法または技術において実装された、揮発性および不揮発性、取り外し可能および取り外し不可能な媒体を含む。メモリ１４８とストレージ１５０は、コンピューター記憶媒体の例である。コンピューター記憶媒体には、これらに限定されることはないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくはそれ以外のメモリ技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）もしくはそれ以外の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくはそれ以外の磁気記憶デバイス、または希望する情報を保存するのに用いることができデバイス１４２によってアクセス可能な任意のそれ以外の媒体が含まれる。このようなコンピューター記憶媒体の任意のものが、デバイス１４２の一部でありうる。
【００４８】
[0056]デバイス１４２は、また、デバイス１４２が他のデバイスと通信することを可能にする通信接続１５６を含みうる。通信接続１５６は、これらの限定されることはないが、モデム、ネットワークインターフェースカード（ＮＩＣ）、統合ネットワークインターフェース、無線周波数送信機／受信機、赤外線ポート、ＵＳＢ接続、またはコンピューティングデバイス１４２を他のコンピューティングデバイスに接続するためのそれ以外のインターフェースを含みうる。通信接続１５６は、ワイアード接続またはワイヤレス接続を含みうる。通信接続１５６は、通信媒体を送信および／または受信しうる。
【００４９】
[0057]「コンピューター可読媒体」という用語は、通信媒体を含みうる。通信媒体は、典型的には、搬送波やそれ以外の輸送機構など「変調されたデータ信号」におけるコンピューター可読命令またはそれ以外のデータを具体化しており、任意の情報搬送媒体を含む。「変調されたデータ信号」という用語は、情報を信号において符号化するようにその特性の１つまたは複数が設定または変更された信号を含みうる。
【００５０】
[0058]デバイス１４２は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、赤外線カメラ、ビデオ入力デバイス、および／または任意のそれ以外のデバイスなどの入力デバイスを含みうる。ディスプレイ、スピーカ、プリンタ、および／または任意のそれ以外の出力デバイスなどの出力デバイス１５２も、デバイス１４２に含まれうる。入力装置１５４と出力装置１５２とは、ワイアード接続、ワイヤレス接続、またはそれらの任意の組み合わせを介してデバイス１４２に接続されうる。ある実施形態では、他のコンピューティングデバイスからの入力装置または出力装置が、コンピューティングデバイス１４２のための（１つもしくは複数の）入力装置１５４または（１つもしくは複数の）出力装置１５２として用いられることもある。
【００５１】
[0059]コンピューティングデバイス１４２のコンポーネントは、バスなどの様々な相互接続によって接続することができる。このような相互接続には、ＰＣＩエクスプレスなどのペリフェラルコンポーネントインターコネクト（ＰＣＩ）、ユニバーサルシリアルバス（ＵＳＢ）、ファイヤワイヤ（ＩＥＥＥ１３９４）、光バス構造などが含まれうる。別の実施形態では、コンピューティングデバイス１４２のコンポーネントは、ネットワークで相互接続されうる。例えば、メモリ１４８は、ネットワークによって相互接続された異なる物理的位置に配置された複数の物理メモリ装置で構成される場合がある。
【００５２】
[0060]当業者であれば、コンピューター可読命令を保存するのに用いられる記憶装置がネットワーク経由で分散されることがあることを理解するはずである。例えば、ネットワーク１５８を経由してアクセス可能なコンピューティングデバイス１６０は、本明細書に提供されている１つまたは複数の実施形態を実装するコンピューター可読命令を保存しうる。コンピューティングデバイス１４２は、コンピューティングデバイス１６０にアクセスし、実行するためにコンピューター可読命令の一部またはすべてをダウンロードしうる。あるいは、コンピューティングデバイス１４２は、必要に応じてコンピューター可読命令のいくつかの部分をダウンロードすることもあるし、または、いくつかの命令がコンピューティングデバイス１４２で実行され、またいくつかの命令がコンピューティングデバイス１６０で実行されることもありうる。
【００５３】
[0061]本明細書では、実施形態に関する様々な動作が提供されている。ある実施形態では、説明されている動作の１つまたは複数が、１つまたは複数のコンピューター可読媒体上に保存されているコンピューター可読命令を構成しており、コンピューティングデバイスによって実行されると、コンピューティングデバイスに説明されている動作を実行させる。これらの動作のいくつかまたはすべてが説明されている順序は、これらの動作が必ずしも順序に依存することを意味するものと解釈されるべきではない。ここでの説明から利益を得た当業者であれば、別の順序を想到することができよう。更に、ここに提供されているそれぞれの実施形態にすべての動作が必ずしも存在するのではないことを、理解すべきである。
【００５４】
[0062]更に、「例示的（exemplary）」という用語は、ここでは、例、場合、または説明として機能することを意味するように用いられている。ここで「例示的」と説明されている態様または設計は、必ずしも、他の態様または設計よりも優れているものとして解釈されるべきではない。むしろ、例示的という用語の使用は、具体的な態様において概念を提示することを意図するためのものである。この出願において用いられている「または、もしくは（or）」という用語は、排他的な「or」ではなく、非排他的な「or」を意味することを意図している。すなわち、特に断らない限り、または、文脈から明白でない限り、「ＸはＡまたはＢを用いる」とは、自然で非排他的な順列のうちの任意のものを意味することを意図している。つまり、ＸはＡを用いる、ＸはＢを用いる、またはＸはＡとＢの両方を用いるならば、それらのどの場合でも、「ＸはＡまたはＢを用いる」が成立する。更に、この出願および特許請求の範囲において用いられている「a」および「an」という冠詞は、単数形を意味するものと特に断らない限りまたは文脈から明白でない限り、「１つまたは複数」を意味するものと一般的に解釈されうる。
【００５５】
[0063]また、ここでの開示は１つまたは複数の実装例との関係で示され説明されてきたが、当業者であれば、この明細書と添付の図面とを読んで理解したことに基づいて、均等な変更と修正とを想到することができるはずである。この開示は、そのような修正と変更とをすべて含み、特許請求の範囲によってのみ限定される。特に、上述したコンポーネント（例えば、要素、資源など）によって実行される様々な機能に関しては、これらのコンポーネントを説明するのに用いられた用語は、たとえ開示のうちのここで説明されている例示的な実装例においてその機能を実行する開示されている構造と構造的に均等でない場合でも、特に断らない限り、説明されているコンポーネントの特定の機能を実行する任意のコンポーネント（例えば、機能的に均等なもの）に対応することが意図されている。更に、開示の特定の特徴が複数の実装例のうちの１つに関してのみ開示されている場合がありうるが、そのような特徴は、希望に応じて、また、任意の与えられたまたは特定の応用例のために効果があるならば、他の実装例の１つまたは複数の他の特徴と組み合わせることが可能である。更に、「含む（includes）」、「有している（having）」、「有する（has）」、「備えている（with）」という用語、またはそれらのバリアントがこの詳細な説明または特許請求の範囲のいずれかにおいて用いられている限り、これらの用語は、「含んでいる（comprising）」という用語と類似するように、非排他的であることが意図されている。
【図１】
0005990192.tif 000002
【図２】
0005990192.tif 000003
【図３】
0005990192.tif 000004
【図４】
0005990192.tif 000005
【図５】
0005990192.tif 000006
【図６】
0005990192.tif 000007
【図７】
0005990192.tif 000008
【図８】
0005990192.tif 000009
【図９】
0005990192.tif 000010
【図１０】
0005990192.tif 000011