(57)【特許請求の範囲】
【請求項１】
１つまたは複数のハードウェアプロセッサによって実行されると、動作の実行を引き起こす命令を含むコンピュータ可読プログラムであって、前記動作は、
第１の期間中の同じ特定のクエリの複数の実行を識別することと、
前記複数の実行の各実行の実行時間を集計することによって前記第１の期間中の前記特定のクエリの前記複数の実行のための累積実行時間を計算することと、
前記第１の期間中の前記特定のクエリのための前記累積実行時間が第１の閾値を超えると決定することと、
前記決定の動作に応答して、前記特定のクエリの実行のために使用されたリソースを第２の期間中キャッシングすることを備える、コンピュータ可読プログラム。
【請求項２】
前記リソースは、テーブルである、請求項１に記載のコンピュータ可読プログラム。
【請求項３】
前記動作は、
前記特定のクエリの前記実行の少なくともサブセットのための前記実行時間が第２の閾値を超えると決定することであって、前記計算の動作は、前記特定のクエリの前記実行の少なくともサブセットのための前記実行時間が、前記第２の閾値を超えると決定することに応答して行われる、決定すること、または、
第２の閾値を超える前記特定のクエリの前記実行のサブセットの数を決定することであって、前記計算の動作は、前記第２の閾値を超える前記特定のクエリの前記実行の前記サブセットの前記数に基づき行われる、決定することのうちの１つまたは複数を備える、請求項１または２に記載のコンピュータ可読プログラム。
【請求項４】
前記動作は、
前記決定の動作に応答して、前記キャッシュされたリソースを保持すること、または、
前記特定のクエリの前記実行の少なくともサブセットのための前記実行時間が、第２の閾値を超えると決定することと、
前記特定のクエリの前記実行の少なくともサブセットのための前記実行時間が前記第２の閾値を超えると決定されたことに応答して、データテーブルに、前記第２の閾値を超える前記特定のクエリの前記実行の前記サブセットの各実行のためのログを格納することと、
前記計算の動作を前記データテーブルから前記同じ特定のクエリの実行を使用して実行することと、のうちの１つまたは複数を備える、請求項１または２に記載のコンピュータ可読プログラム。
【請求項５】
前記特定のクエリの第１の実行のための前記実行時間を決定することは、
前記特定のクエリを実行するためにリクエストを送信することと前記特定のクエリの実行から結果を受信することとの間の期間を決定することを備える、請求項１〜４のいずれか１項に記載のコンピュータ可読プログラム。
【請求項６】
前記同じ特定のクエリは、クエリデータフィールドの格納されたテーブルを介して識別される、請求項１〜５のいずれか１項に記載のコンピュータ可読プログラム。
【請求項７】
１つまたは複数のハードウェアプロセッサによって実行されると、動作の実行を引き起こす命令を含むコンピュータ可読プログラムであって、前記動作は、
第１の期間中の特定のリソース上の複数のクエリの１つまたは複数の実行を識別することと、
前記複数のクエリの１つまたは複数の実行を集計することによって前記第１の期間中の前記特定のリソースのための実行時間の累積実行時間を計算することと、
前記第１の期間中の前記特定のリソースのための累積実行時間が第１の閾値を超えると決定することと、
前記決定の動作に応答して、前記特定のリソースを第２の期間中キャッシングすることとを備える、コンピュータ可読プログラム。
【請求項８】
前記リソースは、テーブルである、請求項７に記載のコンピュータ可読プログラム。
【請求項９】
前記動作は、
前記特定のリソース上の前記複数のクエリの前記実行の少なくともサブセットのための前記実行時間が第２の閾値を超えると決定することであって、前記計算の動作は、前記特定のリソース上の前記複数のクエリの前記実行の少なくともサブセットのための前記実行時間が前記第２の閾値を超えると決定することに応答して行われる、決定すること、または、
第２の閾値を超える前記特定のリソース上の前記複数のクエリの前記実行のサブセットの数を決定することであって、前記計算の動作は、前記第２の閾値を超える前記特定のリソース上の前記複数のクエリの前記実行の前記サブセットの前記数に基づき行われる、決定することのうちの１つまたは複数を備える、請求項７または８に記載のコンピュータ可読プログラム。
【請求項１０】
前記動作は、
前記決定の動作に応答して、前記キャッシュされたリソースを保持すること、または
前記特定のクエリの前記実行の少なくともサブセットのための前記実行時間が、第２の閾値を超えると決定することと、
前記特定のクエリの前記実行の少なくともサブセットのための前記実行時間が前記第２の閾値を超えると決定されたことに応答して、データテーブルに、前記第２の閾値を超える前記特定のクエリの前記実行の前記サブセットの各実行のためのログを格納することと、
前記データテーブルから選択された前記同じ特定のクエリの実行を使用する前記計算の動作を実行することとのうちの１つまたは複数を備える、請求項７または８に記載のコンピュータ可読プログラム。
【請求項１１】
前記特定のリソース上の前記複数のクエリの第１の実行のための前記実行時間を決定することは、
前記特定のリソース上の前記複数のクエリを実行するためにリクエストを送信することと前記特定のリソース上の前記複数のクエリの実行から結果を受信することとの間の期間を決定することを備える、請求項７〜１０のいずれか１項に記載のコンピュータ可読プログラム。
【請求項１２】
１つまたは複数のハードウェアプロセッサによって実行されると、動作の実行を引き起こす命令を含むコンピュータ可読プログラムであって、前記動作は、
第１の期間中の少なくとも２つのテーブルに関連付けられたジョイン動作を備える１つまたは複数のクエリの１つまたは複数の実行を識別することと、
前記１つまたは複数のクエリの各実行の実行時間を集計することによって前記第１の期間中の前記１つまたは複数のクエリのための累積実行時間を計算することと、
前記第１の期間中の前記１つまたは複数のクエリのための前記累積実行時間が第１の閾値を超えると決定することと、
前記決定の動作に応答して、（ａ）前記ジョイン動作の結果または（ｂ）前記少なくとも２つのテーブルの各々をキャッシングすることを備える、コンピュータ可読プログラム。
【請求項１３】
前記動作は、
前記１つまたは複数のクエリの前記実行の少なくともサブセットのための前記実行時間が第２の閾値を超えると決定することであって、前記計算の動作は、前記１つまたは複数のクエリの前記実行の少なくともサブセットのための前記実行時間が前記第２の閾値を超えると決定することに応答して行われる、決定すること、または、
第２の閾値を超える前記１つまたは複数のクエリの前記実行のサブセットの数を決定することであって、前記計算の動作は、前記第２の閾値を超える前記１つまたは複数のクエリの前記実行の前記サブセットの前記数に基づき行われる、決定することのうちの１つまたは複数を備える、請求項１２に記載のコンピュータ可読プログラム。
【請求項１４】
前記動作は、
前記決定の動作に応答して、前記キャッシュされた（ａ）前記ジョイン動作の結果または（ｂ）前記少なくとも２つのテーブルの各々を保持することをさらに備える、請求項１２または１３に記載のコンピュータ可読プログラム。
【請求項１５】
前記１つまたは複数のクエリの第１の実行のための前記実行時間を決定することは、
前記１つまたは複数のクエリを実行するためにリクエストを送信することと前記１つまたは複数のクエリの実行から結果を受信することとの間の期間を決定することとを備える、請求項１２〜１４のいずれか１項に記載のコンピュータ可読プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本発明は、リソースキャッシングに関する。特に、本発明は、クエリによってアクセスされたリソースを選択的にキャッシングすることに関する。
【０００２】
優先権
この出願は、２０１７年５月１９日に提出された米国仮出願第１５／６００，５１８号の利益と優先権を主張する。
【背景技術】
【０００３】
背景
キャッシュとは、データを格納するためのハードウェアおよび／またはソフトウェアを指し得る。キャッシュからデータを取得することは、ハードディスクまたは実行環境に対してリモートにある任意のストレージシステムからデータを取得することよりも典型的に速い。最も一般的に、キャッシュは、最近使用されたデータを格納する。キャッシュは、別の場所において格納されたデータのコピーを格納し得、および／または計算の結果を格納し得る。ウェブに基づくキャッシングはまた一般的であり、サーバとクライアントとの間のウェブキャッシュは、データを格納する。クライアントは、ウェブキャッシュからのデータにサーバ内のデータよりも速くアクセスし得る。
【０００４】
クエリは、データベースから特定されたデータをフェッチする。一般的に、データは、リレーショナルデータベース内に格納される。リレーショナルデータベースは、データを１つまたは複数のテーブル内に格納する。テーブルは、フィールドまたは列へと組織化されたデータの行で構成される。たとえば”FirstName”および”LastName”は、データテーブルのフィールドであり、その内部の行の数は、テーブルに格納された名前の数である。
【０００５】
Structured Query Language（ＳＱＬ）は、リレーショナルデータベース内のデータを管理するための言語である。ＳＱＬクエリは、特定された条件に基づきデータを取得する。多くのＳＱＬクエリは、データを取得するＳＥＬＥＣＴステートメントを使用する。ＳＱＬクエリはそして、ＦＲＯＭ−どのテーブルがデータを包含するか、ＪＯＩＮ−テーブルを結合するためのルールを特定する、ＷＨＥＲＥ−クエリによって返された行を制限する、ＧＲＯＵＰ  ＢＹ−重複行を集約する、Ｏｒｄｅｒ  ＢＹ−データをソートするための順序を特定する、といった条件を特定する。たとえば、”SELECT breed, age, Name FROM Dogs WHERE age < 3 ORDER BY breed”というＳＱＬクエリは、”Dogs”というテーブルから３歳未満の犬のリストを、品種ごとにアルファベット順に、各犬の品種、年齢、名前を取得して返却する。出力は、”Bulldog 1 Max | Cocker Spaniel 2 Joey | Golden Retriever 1.5 Belinda”のようになる。
【０００６】
ますます、データベースは、マルチテナントクラウドアーキテクチャを使用して格納される。マルチテナントクラウドアーキテクチャでは、異なるテナントからのデータは、共有されたリソースを使用して格納される。共有されたリソースは、サーバ、データベース、および／またはテーブルのうちのいくつかの全体的なまたは部分的な組み合わせであり得る。マルチテナント化は、データを格納するために必要とされたリソース量を減らし、コストを削減する。
【０００７】
このセクションにおいて記載されたアプローチは、特許請求可能なアプローチであり、既知のまたは特許請求されたアプローチとはかぎらない。したがって、特に明記しない限り、このセクションに記載されたアプローチのいずれかが、単にこのセクションに含まれているという理由だけで、先行技術として認められると想定されるべきではない。
【０００８】
図面の簡単な説明
実施形態は、添付の図面の図において限定ではなく例として示される。本開示における「ある」または「１つ」の実施形態への言及は、必ずしも同じ実施形態への言及ではなく、少なくとも１つを意味することに留意されたい。
【図面の簡単な説明】
【０００９】
【図１】１つまたは複数の実施形態に従うリソースキャッシングシステムを示す。
【図２】１つまたは複数の実施形態に従うクエリによる選択的キャッシングのための例示的な動作の組を示す。
【図３】１つまたは複数の実施形態に従うリソースによる選択的キャッシングのための例示的な動作の組を示す。
【図４】１つまたは複数の実施形態に従うＪＯＩＮによる選択的キャッシングのための例示的な動作の組を示す。
【図５】１つまたは複数の実施形態に従うシステムのブロック図を示す。
【発明を実施するための形態】
【００１０】
詳細な説明
以下の説明では、説明の目的で、完全な理解を提供するために多くの特定の詳細が述べられる。１つまたは複数の実施形態は、これらの特定の詳細なしで、実施されることができる。１つの実施形態で説明される特徴は、異なる実施形態で説明される特徴と組み合わせることができる。いくつかの例では、本発明を不必要に不明瞭にすることを避けるために、ブロック図形式を参照して既知の構造およびデバイスを説明する。
【００１１】
１．  一般概要
２．  リソースキャッシングシステム
３．  クエリに基づくリソースキャッシング
４．  リソース使用に基づくリソースキャッシング
５．  動作に基づくリソースキャッシング
６．  例示的実施形態−集約クエリ
７．  その他、拡張
８．  ハードウェア概要
【００１２】
１．  一般概要
１つまたは複数の実施形態は、クエリによってアクセスされたリソースを選択的にキャッシングすることを含む。キャッシュされたリソースは、更新されているリソースの元のコピーに応答して継続的または定期的に更新され得る。キャッシュ内に最新のリソースを維持することは、ディスクまたは他のプライマリストレージからリソースにアクセスする代わりに、キャッシュ内のリソースにアクセスすることによりクエリの実行を可能とする。リソースは、対応するクエリの実行時間に少なくとも基づくキャッシングのために選択され得る。例では、クエリの実行の実行時間が閾値を超える場合、クエリによってアクセスされたリソースは、同じクエリの将来の実行のためにキャッシュされる。
【００１３】
１つまたは複数の実施形態は、クエリの実行の累積実行時間に基づきクエリによってアクセスされたリソースをキャッシングすることを含む。キャッシングエンジンは、初期期間中のクエリの実行のための累積実行時間を決定し得る。キャッシングエンジンは、クエリの実行のための累積実行時間に基づき、クエリの実行中にアクセスされるべきリソースがキャッシュされるべきかどうかをさらに決定する。リソースは、初期期間の後の別の時間の間キャッシュされ得る。
【００１４】
キャッシングエンジンは、どのリソースをキャッシュするかを対応するクエリの累積実行時間に基づき決定するために任意の方法論を使用し得る。ある例では、初期期間中のクエリのための累積実行時間が閾値を超える場合、クエリによってアクセスされたリソースは、その後の期間キャッシュされる。別の例では、クエリは、累積実行時間に基づきランク付けされる。最も長い累積実行時間を有するｎ個のクエリのためのリソースは、キャッシュされる。
【００１５】
１つまたは複数の実施形態は、クエリの実行のサブセットの実行時間に少なくとも基づき、クエリによってアクセスされたリソースをキャッシングすることを含む。初期期間中のクエリの各実行のための実行時間は、閾値と比較される。任意の特定の実行のための実行時間が閾値を超える場合、特定の実行は、計算コストが高い実行と決定される。計算コストが高いクエリの実行の数が閾値を超える場合、クエリのためのリソースは、その後の期間キャッシュされる。
【００１６】
本明細書に記載されおよび／または特許請求の範囲に記載される１つまたは複数の実施形態は、この一般概要セクションに含まれていない場合がある。
【００１７】
２．  リソースキャッシングシステム
図１は、１つまたは複数の実施形態に従うリソースキャッシングシステム１００を示す。リソースキャッシングシステム１００は、クエリの実行のためにアクセスされるリソース（ここではクエリによってアクセスされたリソースとも称され得る）を選択しキャッシングするためのシステムである。リソースキャッシングシステム１００は、クエリインターフェース１０２、キャッシングエンジン１０４、キャッシュ１２４、クエリ実行エンジン１２２、およびデータリポジトリ１１０を含む。１つまたは複数の実施形態では、リソースキャッシングシステム１００は、図１において示されたコンポーネントよりも多いまたは少ないコンポーネントを含み得る。図１において示されたコンポーネントは、互いにローカルまたは互いからリモートにあり得る。図１に示されたコンポーネントは、ソフトウェアおよび／またはハードウェア内に実装され得る。各コンポーネントは、複数のアプリケーションおよび／またはマシンにわたって分散され得る。複数のコンポーネントは、１つのアプリケーションおよび／またはマシンへと組み合わされ得る。１つのコンポーネントに対して記載された動作は、代わりに別のコンポーネントによって行われ得る。
【００１８】
１つまたは複数の実施形態では、クエリインターフェース１０２は、クエリを規定する入力を受け入れる機能を含むインターフェイスである。クエリインターフェース１０２は、グラフィカルユーザインターフェース（ＧＵＩ）といったユーザインターフェース（ＵＩ）であり得る。クエリインターフェースは、クエリを記述するクエリプロファイルを受け入れる、ユーザが変更可能なフィールドを提示し得る。クエリインターフェース１０２は、１つまたは複数のクエリを規定するファイルを受け入れパースするための機能を含む。クエリインターフェースは、クエリの実行の後のクエリ出力データを表示し得る。
【００１９】
実施形態では、クエリ実行エンジン１２２は、クエリを実行するためのハードウェアおよび／またはソフトウェアコンポーネントを含む。クエリ実行エンジン１２２は、クエリインターフェースから取得されたクエリプロファイルをパースし得る。クエリ実行エンジン１２２は、パースされたクエリプロファイルをＳＱＬクエリにマッピングし得る。クエリ実行エンジン１２２は、クエリ結果を取得するためにＳＱＬクエリを適切なデータベース（複数可）に送信し得る。クエリ実行エンジン１２２は、データを合計し、データを平均し、テーブル全体または一部を結合し得る。
【００２０】
実施形態では、キャッシュ１２４は、データを格納するハードウェアおよび／またはソフトウェアコンポーネントに対応する。キャッシュ１２４内に格納されたデータは典型的に、ディスク上に、メインメモリ上に、または実行環境からリモートに格納されたデータよりも速くアクセスされ得る。ある例では、キャッシュ１２４は、クエリの実行のために、ディスクおよび／またはメインメモリから以前に取得された（ここで「キャッシュされたリソース１２６」とも称される）リソースを格納する。キャッシュ内にリソースを格納することは、ディスクからリソースにアクセスすることなく同じクエリの追加的な実行を可能とする。具体的には、クエリによって必要とされるリソースは、ディスクからの代わりにキャッシュからアクセスされる。キャッシュは、ディスク内に格納されたデータの元のコピーが更新されていることに応答して継続的または定期的に更新され得る。キャッシュ１２４内の各データセットまたはリソースは、データが最新のものであるか古いものであるかを示すフラグを用いて維持され得る。キャッシュされたリソースは、たとえば、データテーブル、データフィールド、および／または計算の結果であり得る。例として、キャッシュされたリソース１２６は、２つの既存のテーブル上のＪＯＩＮ動作を介して作成された新たなテーブルであり得る。
【００２１】
実施形態では、データリポジトリ１１０は、データを格納するための任意の種類のストレージユニットおよび／またはデバイス（たとえば、ファイルシステム、データベース、テーブルの集合、または任意の他のストレージ機構）である。さらに、データリポジトリ１１０は、多数の異なるストレージユニットおよび／またはデバイスを含み得る。多数の異なるストレージユニットおよび／またはデバイスは、同じ種類であってもなくても、同じ物理サイトにあってもなくてもよい。 さらに、データリポジトリ１１０は、キャッシングエンジン１０４、キャッシュ１２４、クエリインターフェース１０２、およびクエリ実行エンジン１２２と同じ計算システム上で実装されまたは実行し得る。代替的にまたは追加的に、データリポジトリ１１０は、キャッシングエンジン１０４、キャッシュ１２４、クエリインターフェース１０２、およびクエリ実行エンジン１２２とは別個の計算システム上で実装されまたは実行し得る。データリポジトリ１１０は、キャッシングエンジン１０４、キャッシュ１２４、クエリインターフェース１０２、およびクエリ実行エンジン１２２と直接接続を介してまたはネットワークを介して通信可能に結合され得る。
【００２２】
実施形態では、データリポジトリ１１０は、クエリプロファイル１１２を格納する。クエリプロファイル１１２は、クエリについての情報を備える。クエリプロファイルは、クエリ属性１１４、クエリ実行時間１１６、およびクエリリソース１１８を含むがこれに限定されない。クエリプロファイルは、クエリパフォーマンスに基づき選択され得る。クエリプロファイル１１２は、ある個々の閾値を上回る個々の実行時間を有する選択されたクエリのために格納され得る。
【００２３】
実施形態では、クエリ属性１１４は、クエリ内で実行されたまたは実行されるべき１つまたは複数の動作を含み得る。たとえば、”SELECT Customers.CustomerName, Customers.CustomerID FROM Customers”というクエリにおいて、ＳＥＬＥＣＴ動作は、クエリ属性１１４である。クエリ属性１１４のその他の例は、一連の動作が実行される順序、クエリが実行される時刻を含む。
【００２４】
実施形態では、クエリのためのクエリプロファイル内部のクエリリソース１１８は、対応するクエリの実行のために使用される１つまたは複数のリソース１２０を識別する。クエリリソース１１８は、クエリ内で特定された任意のデータセットを含み得る。クエリリソースは、フィールドに対応し得る。たとえば、”SELECT Customers.CustomerName, Customers.CustomerID FROM Customers”というクエリにおいて、クエリリソース１１４は、CustomerNameおよびCustomerID というフィールドを含む。CustomerNameおよびCustomerID というフィールドは、クエリリソース１１８の例である。クエリリソース１１８は、データを取得するために使用されるクエリ内でリクエストされたデータベース内のテーブルを含み得る。たとえば、上述のクエリでは、Customersというテーブルは、クエリリソース１１８である。クエリリソース１１８は、上記のキャッシュ１２４内にキャッシュされ得、キャッシュされたリソース１２６とも称される。
【００２５】
実施形態では、クエリ実行時間１１６は、クエリの特定の実行に対応する時間である。クエリ実行時間１１６は、特定のクエリを実行するためにリクエストを送信することと特定のクエリの実行から結果を受信することとの間の期間であり得る。クエリ実行時間の例は、１ｍ秒、１０秒、１６分、および６時間を含む。同じクエリの実行時間は、異なる時間において実行される異なる実行に対して異なり得る。たとえば、他の同時アクセス動作による入力／出力時間遅延は、他の同時アクセス動作が無かった間の同じクエリの以前の実行の実行時間を大きく超える１つのクエリの実行の実行時間を引き起こし得る。クエリは、多数のユーザをサポートするマルチテナントクラウドアーキテクチャ上で実行され得る。システムは、システムリソースが多数のユーザからリクエストを受信するピーク時間中にオーバーロードされ得る。クエリは、システムがオーバーロードされないピーク時間外よりもピーク時間中に実行するためにより長い時間を費やす。クエリ実行時間はまた、クエリ内の動作およびクエリのためのデータを取得するために使用されるデータテーブルの数といった要因に依存し得る。
【００２６】
１つまたは複数の実施形態では、キャッシングエンジン１０４は、リソースをキャッシングするためのハードウェアおよび／またはソフトウェアコンポーネントを含む。キャッシングエンジンは、データのコピーおよび／または計算の結果をキャッシュ１２４に格納する機能を含む。キャッシングエンジン１０４は、対応するクエリの実行時間に基づきリソースを選択的にキャッシュし得る。キャッシングエンジン１０４は、最近使用されたデータをキャッシングすることによって等、標準的なキャッシング技法に従いリソースをキャッシュし得る。
【００２７】
実施形態では、クエリアナライザ１０６は、クエリを分析するためのハードウェアおよび／またはソフトウェアコンポーネントを含む。クエリアナライザ１０６は、クエリ実行時間、クエリ属性、および／またはクエリリソースを分析して、特定のクエリについての情報を識別し得る。
【００２８】
クエリアナライザ１０６は、クエリをパースしてクエリ内に含まれたデータフィールド、クエリ内に含まれたＳＱＬ動作、および／またはリクエストされたデータを取得する際に使用されたストレージシステム内のデータテーブルを分離するための機能を含む。クエリアナライザ１０６は、クエリの組を分析して１または複数のクエリ実行が同じクエリを構成するかどうかを決定するための機能を含む。たとえば、時間１において、システムは、ユーザ１から、クエリＱａ＝（ｆ１，ｆ２，ｆ３）を受信し、ここで、ｆｉは、クエリ内で取得されるべきデータフィールドである。時間２において、システムは、ユーザ２からクエリＱｂ＝（ｆ２，ｆ１，ｆ３）を受信する。要素は、異なる時間において異なる順序であるが、ＱａおよびＱｂは、取得されたデータの面では同じである。クエリ属性１１４およびクエリリソース１１８を分析することによって、リソースキャッシングシステム１００は、同じクエリの多数の実行を識別することができる。
【００２９】
クエリアナライザ１０６は、クエリの実行時間を計算する機能を含み得る。クエリアナライザは、クエリの単一の実行のための実行時間を計算し得る。クエリアナライザは、特定の期間中の同じクエリの多数の実行のための累積実行時間を計算し得る。クエリアナライザ１０６は、各個々のクエリの実行のための実行時間を集計することによって同じクエリの多数の実行のための累積実行時間を計算し得る。
【００３０】
実施形態では、リソースアナライザ１０８は、リソースを分析するためのハードウェアおよび／またはソフトウェアコンポーネントを含む。リソースアナライザ１０８は、クエリ実行時間、クエリ属性、および／またはクエリリソースを分析して、特定のリソースについての情報を識別し得る。
【００３１】
リソースアナライザ１０８は、クエリをパースして、クエリ内に含まれたデータフィールド、クエリ内に含まれたＳＱＬ動作、および／またはリクエストされたデータを取得する際に使用されたストレージシステム内のデータテーブルを分離するための機能を含む。クエリアナライザ１０６は、クエリを分析して１つまたは複数のクエリ実行が同じリソースを使用するかどうかを決定するためのするための機能を含む。たとえば、時間１において、システムは、ユーザ１から”SELECT Dog.  Breed, Dog. Age FROM Dogs”というクエリＱ１を受信する。時間２において、システムは、ユーザ２から”SELECT Dog.Name, Dog.Breed Name, DogAquisitionDate FROM Dogs”というクエリＱ２を受信する。リソースアナライザは、Ｑ１およびＱ２の両方がDogsというテーブルをクエリすると決定することができる。
【００３２】
リソースアナライザ１０８は、期間中に特定のリソースへのアクセスが必要とされる時間量を計算する機能を含み得る。リソースアナライザ１０８は、期間中に特定のリソースを使用するクエリの各々の実行時間を決定し得る。リソースアナライザ１０８は、各個々のクエリのための実行時間を集計することによって特定のリソースを使用する多数のクエリのための累積実行時間を計算し得る。
【００３３】
３．  クエリに基づくリソースキャッシング
図２は、１つまたは複数の実施形態に従い同じクエリに基づき１つまたは複数のリソースを選択的にキャッシングするための例示的動作の組を示す。図２において示された１つまたは複数の動作は、変更、再配置、または完全に省略され得る。従って、図２において示された特定の動作のシーケンスは、１つまたは複数の実施形態の範囲を限定するものと解釈されるべきではない。
【００３４】
実施形態では、クエリアナライザは、個々の閾値を上回る実行時間を有するクエリを識別する（動作２０２）。クエリアナライザは、個々のクエリの実行時間との比較のための個々の閾値Ｋ１を確立し得る。Ｋ１の値は、たとえば、クエリの複雑性、ユーザプリファレンス、および利用できるシステムリソースに基づき確立され得る。クエリアナライザは、クエリの実行時間をＫ１と比較して、クエリの実行時間がＫ１を超えるかどうかを決定する。
【００３５】
リソースキャッシングシステムは、個々の閾値を上回る実行時間を有するクエリのためのクエリログを格納し得る。リソースキャッシングシステムは、ＳＥＬＥＣＴクエリ動作を含むクエリといった個々の閾値を上回る実行時間を有するクエリのサブセットのためのクエリログを格納し得る。
【００３６】
動作２０２は、動作２０４において分析されるべき候補のクエリを識別するために使用され得る。代替的に、動作２０２は、とばされ得、すべてのクエリは、動作２０４において分析され得る。
【００３７】
実施形態では、リソースキャッシングシステムは、初期期間中の同じクエリの１つまたは複数の実行を識別する（動作２０４）。クエリアナライザは、多数のクエリのクエリ属性を比較して、クエリが同じかどうかを決定し得る。たとえば、クエリ実行エンジンは、ＳＥＬＥＣＴクエリ動作を使用して１ヶ月の間に以下のクエリＱ１−Ｑ６を実行した。
【００３８】
【数１】
0006929388.tif 000002
【００３９】
フィールドｆ１−ｆ９は、クエリ内で選択されたデータフィールドである。クエリアナライザは、データフィールド値を比較して同じクエリを識別する。同じクエリは、同じデータフィールドを選択するが、必ずしも同じ順序ではない。リソースキャッシングシステムは、Ｑ１＝Ｑ２＝Ｑ４が月間に発生した同じクエリの３つの実行であると識別する。
【００４０】
実施形態では、特定の格納されたクエリの実行は、ログを介して決定される。具体的には、キャッシングシステムは、ログを維持して、格納されたクエリのすべての実行を追跡する。各クエリは、プロファイルと関連付けられる。プロファイルは、各クエリの実行の特徴を含む。プロファイルは、各クエリの実行のための実行時間を格納し得る。
【００４１】
実施形態では、キャッシングエンジンは、多数のクエリの実行の実行時間を集約して、初期期間中のクエリのための累積実行時間を計算する（動作２０６）。たとえば、クエリは、１日６時間実行されている。システムは、６個の対応する実行時間、Ｔ１＝２分、Ｔ２＝１時間、Ｔ３＝２０分、Ｔ４＝５分、Ｔ５＝１時間２２分、およびＴ６＝３０秒を格納した。システムは、期間中のクエリのための累積実行時間を計算する。
【００４２】
Ｔｔｏｔ＝Ｔ１＋Ｔ２＋Ｔ３＋Ｔ４＋Ｔ５＋Ｔ６
＝２分＋１時間＋２０分＋５分＋１時間２２分＋３０秒
＝２時間４９分３０秒
１日間のクエリのための累積実行時間は、Ｔｔｏｔ＝２時間４９分３０秒である。
【００４３】
クエリアナライザは、上述のように、期間中に発生した同じクエリの実行を使用して累積実行時間を計算し得る。代替的に、クエリアナライザは、期間中に発生した同じクエリの実行のサブセットを使用して累積実行時間を計算し得る。たとえば、クエリアナライザは、閾値クエリ実行時間Ｋ１を超える実行時間を有するクエリを含むようにクエリ実行をフィルタする。Ｋ１＝１５分を用いて、システムは、１５分を超えるクエリ時間を有する実行インスタンスＴ２、Ｔ３、およびＴ５を格納する。システムはそして、フィルタされたクエリを使用して累積クエリ時間を計算する。
【００４４】
ＴＫ１＝Ｔ２＋Ｔ３＋Ｔ５
＝１時間＋２０分＋１時間２２分
＝２時間４４分
１日間の対象のクエリのための累積実行時間は、ΤＫ１＝２時間４４分である。
【００４５】
実施形態では、キャッシングエンジンは、累積実行時間が累積閾値を超えるかどうかを決定する（動作２０８）。たとえば、累積閾値は、Ｋ２＝２時間である。上述のΤＫ１に対して、累積実行時間は、２時間４４分である。この場合では、ＴＫ１＞Ｋ２であり累積実行時間は、累積閾値を超える。
【００４６】
累積実行時間が閾値を超える場合、キャッシングエンジンは、初期期間の後の別の期間の間にクエリによって必要とされるリソース（複数可）をキャッシュする（動作２１０）。たとえば、キャッシングエンジンは、クエリ内で選択されたフィールドを包含するすべてのテーブルをキャッシュし得る。キャッシングエンジンは、クエリの出力をキャッシュし得る。たとえば、クエリは、テーブルから４つのフィールドを選択する。キャッシングエンジンは、４つの選択されたフィールド内のデータをキャッシュし得る。キャッシングエンジンは、特定の時間量の間リソース（複数可）を保持し得、または特定のイベントの発生を検出することに応答してリソース（複数可）を上書きし得る。
【００４７】
累積実行時間が閾値を超えない場合、キャッシングエンジンは、クエリによって必要とされるリソース（複数可）のキャッシングを控え得る（動作２１２）。高速で実行するクエリによって必要とされるリソースをキャッシングすることを控えることによって、リソースキャッシングシステムは、キャッシュ内のメモリを節約し不要な動作を避ける。
【００４８】
実施形態では、動作２１２は、動作のシーケンスから省略され得る。たとえば、特定のリソースが上述のリソースキャッシングシステムによるキャッシングのために選択されなくとも、システムは、別のキャッシング手法論に基づきリソースをキャッシュし得る。システムは、最後の３０秒間に使用されたリソースのキャッシングを含む標準的キャッシング技法に従って使用直後にリソースをキャッシュし得る。
【００４９】
例として、リソースキャッシングシステムは、ＳＥＬＥＣＴ動作および１分を上回る実行時間を有する１年間に実行されたクエリを識別する。年間に実行された１０，０００個のクエリのうち、１０個は、ＳＥＬＥＣＴ動作を含み、実行するために１分以上かかる。これら１０個のクエリのためのクエリログは、テーブル１というテーブル内に捕捉される。
【００５０】
テーブル１内の各クエリに対して、リソースキャッシングシステムは、ＳＥＬＥＣＴクエリ動作を使用して選択されたデータフィールドを捕捉する。これらのフィールドは、ｆｉであり、ここでｉ＝１、．．．、ｎであり、ｎは、テーブル１からのクエリ内に少なくとも１度出現したデータフィールドの総数である。ここで、テーブル１は、以下の１０個のクエリのためのクエリログを格納する。
【００５１】
【数２】
0006929388.tif 000003
【００５２】
リソースキャッシングシステムは、テーブル１内の少なくとも１つのクエリに対応するＱｋ＝（ｆｋ１，．．． ，ｆｋｌ）という固有の組み合わせを識別する。リソースキャッシングシステムは、Ｑｋ＝（ｆｋ１、．．．ｆｋｌ）というデータフィールドの同じ組み合わせを包含するクエリの組Ｓｋを識別する。テーブル１は、６個の固有の組み合わせを包含する。
【００５３】
【数３】
0006929388.tif 000004
【００５４】
組１は、Ｑ１、Ｑ４、Ｑ７、およびＱ９を含み、その理由は、これらのクエリが、同じ５つのデータフィールドを選択するが必ずしも同じ順序ではないためである。組２は、クエリＱ２およびＱ６を含み、その理由は、これらのクエリが、同じ３つのデータフィールドを選択するためである。組Ｓ３−Ｓ６は各々、１つの固有のクエリを包含し、対象の１年の間にＱ３、Ｑ５、Ｑ８、またはＱ１０の繰り返しは存在しなかった。
【００５５】
各組Ｓｋについて、リソースキャッシングシステムは、組Ｓｋからのクエリの累積実行時間を計算する。Ｓ１について、実行時間は、以下の通りである。
【００５６】
Ｑ１：ｔ１＝２分
Ｑ４：ｔ４＝１時間
Ｑ７：ｔ７＝３０分
Ｑ９：ｔ９＝３分
リソースキャッシングシステムは、組Ｓ１のための累積実行時間を計算する。
【００５７】
Ｔ１＝ｔ１＋ｔ４＋ｔ７＋ｔ９
＝２分＋１時間＋３０分＋３分
＝１時間３５分
同様に、リソースキャッシングシステムは、組Ｓ２−Ｓ６のための累積実行時間を計算する。
【００５８】
次に、リソースキャッシングシステムは、特定のクエリ組のための累積実行時間が累積閾値Ｋ２＝１時間を超えるかどうかを決定する。Ｓ１について、累積実行時間は、１時間３５分であり、これは、１時間の累積閾値を超える。
【００５９】
累積実行時間がＳ１のための閾値を超えると決定すると、キャッシングエンジンは、クエリによって必要とされるリソースをキャッシュする。キャッシングエンジンは、キャッシュテーブルＡ１をキャッシュ内に作成し” SELECT f1, f2, f3, f4, f5. FROM Ζ1”というＳＱＬコマンドの実行のために必要とされるリソースをキャッシングする。リソースキャッシングシステムは、すべての固有の組み合わせＱｋおよびそれらの対応する組Ｓｋのについて、組内の総実行時間に基づきリソースを選択的にキャッシングするプロセスを繰り返す。
【００６０】
４．  リソース使用に基づくリソースキャッシング
図３は、１つまたは複数の実施形態に従いリソースの使用に基づきリソースを選択的にキャッシングするための例示的動作の組を示す。図２において示された１つまたは複数の動作は、変形され、再配置され、またはすべて削除され得る。従って、図２に示される特定の動作シーケンスは、１つまたは複数の実施形態の範囲を限定するものとして解釈されるべきではない。
【００６１】
実施形態では、リソースアナライザは、初期期間中の同じリソース上のクエリの実行を識別する（動作３０２）。リソースアナライザは、初期期間にクエリ実行エンジンによって実行されたクエリを監視し得る。リソースアナライザは、クエリ実行エンジンからデータをプルするためのプル方法を使用して、クエリの実行を識別し得る。クエリ実行エンジンは、クエリ実行エンジンからリソースアナライザへとデータをプッシュするためにプッシュ方法を使用し得る。リソースアナライザは、初期期間中にアクセスされた各リソースを、初期期間中に実行された１つまたは複数のクエリにマッピングし得る。
【００６２】
実施形態では、リソースアナライザは、期間中の各特定のリソースを使用してクエリのための実行時間を集約して、期間中の各特定のリソースのための累積実行時間を計算する（動作３０４）。たとえば、特定の日に、１００個のクエリが実行された。これらのクエリのうちの５つは、特定のテーブルから情報をリクエストする。システムは、５つのクエリに対応する５つの実行時間、ｔ１＝２分、ｔ２＝１時間、ｔ３＝２０分、ｔ４＝５分、およびｔ５＝１時間２２分を格納した。システムは、初期期間中にリソースを使用したクエリのための累積実行時間を計算する。
【００６３】
Ｔｔｏｔ＝Ｔ１＋Ｔ２＋Ｔ３＋Ｔ４＋Ｔ５
＝２分＋１時間＋２０分＋５分＋１時間２２分
＝２時間４９分
１日間にリソースを使用したクエリのための累積実行時間は、Ｔｔｏｔ＝２時間４９分である。
【００６４】
上述のように、リソースアナライザは、初期期間中のすべての同じリソース上のクエリの実行の累積実行時間を計算し得る。代替的に、リソースアナライザは、期間中の同じリソース上のクエリの実行のサブセットを使用して累積実行時間を計算し得る。たとえば、リソースアナライザは、個々の閾値Ｋ１を超える実行時間を有する実行を含むように、クエリ実行をフィルタする。
【００６５】
実施形態では、リソースアナライザは、累積実行時間が累積閾値を超えるかどうかを決定する（動作３０６）。累積実行時間が閾値を超える場合、キャッシングエンジンは、リソースをキャッシュする（動作３０８）。累積実行時間が閾値を超えない場合、キャッシングエンジンは、リソースのキャッシングを控え得る（動作３１０）。動作３０６、３０８、および３１０は、上述の動作２０８、２１０、および２１２それぞれと同様である。
【００６６】
例として、リソースキャッシングシステムは、２４時間の間にクエリ実行エンジンによって実行されたクエリを監視する。リソースキャッシングシステムは、テーブル２というテーブルを作成し、その中にそれは”Ingredients”というテーブルにアクセスするクエリの記録を格納する。リソースキャッシングシステムは、６つのクエリが対象の２４時間の間にIngredientsというテーブルにアクセスしたと決定する。リソースキャッシングシステムは、６つのクエリの記録を、６つのクエリの各々のためのそれぞれの実行時間とともに、テーブル２に格納する。Ｑ１，ｔ１＝１０分、Ｑ１２，ｔ１２＝１分、Ｑ３０，ｔ３０＝４分、Ｑ１６，ｔ１６＝８分、Ｑ２７，ｔ２７＝８０分、Ｑ５，ｔ５＝５分。
【００６７】
次に、リソースキャッシングシステムは、２４時間の間にIngredientsというリソースを使用したテーブル２内の６つのクエリのための実行時間を集約する。６つの実行時間を加算することで、システムは、期間中のIngredientsのための累積実行時間を計算する。ｔ１＋ｔ１２＋ｔ３０＋ｔ１６＋ｔ２７＋ｔ５＝１０分＋１分＋４分＋８分＋８０分＋５分＝１０８分
リソースキャッシングシステムは、累積実行時間を６０分の累積閾値と比較する。１０８分の累積実行時間が６０分の累積閾値を超えるので、リソースキャッシングシステムは、リソースをキャッシュする。キャッシングエンジンは、Ingredientsというテーブルをキャッシュにキャッシュする。
【００６８】
５．  動作に基づくリソースキャッシング
図４は、１つまたは複数の実施形態に従う動作の結果を選択的にキャッシングするための例示的動作の組を示す。特に、図４は、ＪＯＩＮ動作の結果がキャッシュされる例を示す。しかし他の実施形態は、別の動作の結果をキャッシングすることに同様に適用可能であり得る。図４において示された１つまたは複数の動作は、変更、再配置、または完全に省略され得る。従って、図４において示された特定の動作のシーケンスは、１つまたは複数の実施形態の範囲を限定するものと解釈されるべきではない。
【００６９】
実施形態では、キャッシングエンジンは、初期期間中にリソースの特定の組のＪＯＩＮを必要とするクエリの実行を識別する（動作４０２）。キャッシングエンジンは、実行されたＪＯＩＮ動作において使用されたデータフィールドを比較して、データの同じ特定の組をＪＯＩＮするすべてのクエリの実行を識別し得る。
【００７０】
実施形態では、リソースキャッシングシステムは、動作４０２において識別された実行の実行時間を集約して、リソースの同じ特定の組のＪＯＩＮを要するクエリの累積実行時間を計算する（動作４０４）。リソースキャッシングシステムは、初期期間中に実行されたクエリの実行時間ｔｉを集約し得る。代替的に、リソースキャッシングシステムは、期間中のリソースの組のＪＯＩＮについてのクエリのサブセットの実行時間ｔｉを集約し得る。たとえば、リソースキャッシングシステムは、個々の閾値Ｋ１を超える実行時間ｔｉを集約し得る。
【００７１】
実施形態では、キャッシングエンジンは、累積実行時間が累積閾値を超えるかどうかを決定する（動作４０６）。累積閾値は、たとえば、Ｋ２＝３０分であり得る。リソースキャッシングシステムは、計算された累積実行時間を累積閾値Ｋ２と比較する。
【００７２】
累積実行時間が閾値を超える場合、キャッシングエンジンは、リソースの組のＪＯＩＮをキャッシュする、またはリソースの組の各々をキャッシュする（動作４０８）。キャッシングエンジンは、キャッシュテーブルを作成し得、２つのテーブルのＪＯＩＮをキャッシュし得る。たとえば、リソースキャッシングシステムは、キャッシュテーブルを作成し得、および”SELECTf1, f2, f3, FROM Z1, INNER JOIN Z2 ON g1=g2”というＳＱＬロジックをキャッシュして、ＳＱＬクエリの結果をキャッシングし得る。代替的に、リソースキャッシングシステムは、クエリ内のＪＯＩＮ動作において使用されたリソースをキャッシュし得る。たとえば、システムは、テーブルＺ１およびＺ２をキャッシュする。
【００７３】
累積実行時間が閾値を超えない場合、キャッシングエンジンは、リソースの組のＪＯＩＮのキャッシングを控え得、リソースの特定の組の各々のキャッシングを控え得る（動作４１０）。リソースをキャッシングすることを控えることによって、リソースキャッシングシステムは、キャッシュ内のメモリを節約しおよび不要な動作を避ける。
【００７４】
実施形態では、動作４１０は、動作のシーケンスから省略され得る。たとえば、リソースは、リソースキャッシングシステムによるキャッシングのために選択されないが、システムは、それでもリソースをキャッシュし得る。システムは、最後の３０秒間に使用されたリソースのキャッシュなど標準的キャッシング手法に従いリソースをキャッシュし得る。
【００７５】
例として、リソースキャッシングシステムは、ＳＥＬＥＣＴクエリ動作を要し、５分を上回る実行時間を有する、１週間に実行されたクエリの実行を識別する。週間に実行された１，０００個のクエリのうち、１０個は、ＳＥＬＥＣＴクエリ動作を必要とし、実行するために５分以上を費やした。これら１０個のクエリのためのクエリログは、テーブル３というテーブルに捕捉される。
【００７６】
テーブル３内の各クエリに対して、リソースキャッシングシステムは、ＳＥＬＥＣＴクエリ動作を使用して選択されたデータフィールドを捕捉する。これらのフィールドは、ｆｉであり、ここでｉ＝１、．．．、ｎ、であり、ｎは、テーブル３からのクエリ内に少なくとも１度出現したデータフィールドの総数である。テーブル３内の各クエリに対して、リソースキャッシングシステムはまた、ＪＯＩＮ動作ｇｋ１およびｇｋ２において使用された２つのデータフィールドを捕捉する。テーブル３からの各クエリは、記録Ｑｋ＝（ｆｋ１．．．ｆｋｌ，ｇｋ１，ｇｋ２）として表される。リソースキャッシングシステムはまた、各クエリのための実行時間ｔｋを格納する。
【００７７】
クエリ実行エンジンは”SELECT Customers. CustomerName, Orders. OrderID from Customers INNER JOIN Orders ON Customers. CustomerID = Orders. CustomerID ORDER BY Customers. CustomerName”というクエリを実行する。リソースキャッシングシステムは、上記のクエリを組み合わせ（ｆｋ１，ｆｋ２，ｇｋ１，ｇｋ２）として提示し、ここで、ｆｋ１＝Customers.CustomerName、ｆｋ２＝Orders.OrderID、ｇｋ１＝Customers.CustomerIDであり、ｇｋ２＝Orders.CustomerIDである。
【００７８】
リソースキャッシングシステムは、テーブル３から同じ固有の組み合わせ（ｆｋ１，ｆｋ２，ｇｋ１，ｇｋ２）を包含するクエリＱ１、Ｑ１０、Ｑ１７、およびＱ２６を識別する。リソースキャッシングシステムは、テーブル３から同じ固有の組み合わせである組Ｓ１＝｛Ｑ１、Ｑ１０、Ｑ１７、Ｑ２６｝を包含するクエリの組を識別する。リソースキャッシングシステムは、組Ｓ１内の各クエリのための対応する実行時間、ｔ１＝１０分、ｔ１０＝１５分、ｔ１７＝２０分、およびｔ２６＝１０分を識別する。
【００７９】
リソースキャッシングシステムは、組Ｓ１内のクエリのための実行時間を集約して、累積実行時間を計算する。Ｔ１＝ｔ１＋ｔ１０＋ｔ１７＋ｔ２６＝１０分＋１５分＋２０分＋１０分＝５５分。
【００８０】
次に、リソースキャッシングシステムは、計算された累積実行時間が累積閾値Ｋ２＝３０分を超えるかどうかを決定する。Ｓ１について、累積実行時間は、５５分であり、これは、累積閾値Ｋ２＝３０分を超える。
【００８１】
累積実行時間がＳ1のための閾値を超えると決定すると、キャッシングエンジンは、リソースの組のジョインをキャッシュする。キャッシングエンジンは、キャッシュテーブルＣ１をキャッシュ内に作成し”SELECT Customers. CustomerName, Orders. OrderID from Customers INNER JOIN Orders ON Customers. CustomerID = Orders. CustomerID ORDER BY Customers. CustomerName”というＳＱＬロジックをキャッシングする。リソースキャッシングシステムは今度は、キャッシュテーブルＣ１からの結果を使用して、上述のＳＱＬロジックステップをこのロジックを包含する将来のクエリに対して完了することができる。
【００８２】
６．  例示的実施形態−集約クエリ
実施形態では、リソースキャッシングシステムは、個々の閾値Ｋ１＝１分を超える実行時間クエリを有するクエリのためのクエリログを格納する。クエリログを格納するための他の基準は、クエリが、ＧＲＯＵＰ  ＢＹ動作の結果として取得されたデータに適用された集約動作を必要とすることである。ＳＱＬ集約動作の例は、ＡＶＧ、ＭＡＸ、およびＭＵＳＴを含む。システムは、テーブル４というテーブルに１分を超える実行時間を有する集約動作のためのクエリログを格納し得る。
【００８３】
テーブル４内のクエリについて、システムは、ＳＥＬＥＣＴクエリ動作を使用して選択されたデータフィールド（ｆｉ）およびＧＲＯＵＰ  ＢＹクエリ動作（ｇｊ）によって使用されたデータフィールドを捕捉する。インデックスは、ｉ＝１、．．．、ｎのように規定され、ｎは、テーブル４からのクエリ内に少なくとも１度出現したデータフィールドの総数であり、ｊ＝１、．．、ｍであり、ｍは、テーブル４からのＧＲＯＵＰ  ＢＹクエリ内に少なくとも１度出現したデータフィールドの総数である。たとえば、テーブル４は、クエリ１を提示する記録Ｑ１＝（ｆ１，ｆ２，ｆ３，ｇ１，ｇ２）を含む。記録Ｑ１は、クエリ１において”SELECT f1，f2，f3 GROUPBY g1，g2”というＳＱＬロジックが適用されたということを意味する。テーブル４内の各クエリに対して、システムは、記録Ｑｋ＝（ｆｋ１，．．ｆｋｌ，ｇｋ１．．．ｇｋｍ）を、クエリＱｋの実行時間ｔｋとともに提示する。別の閾値Ｋ２は、規定される。Ｋ２は、３０分の累積クエリ閾値である。
【００８４】
クエリ実行エンジンは”SELECT f1，f2，f3，GROUPBY f2，f3”というＳＱＬロジックを用いてクエリＱ１＝（ｆ１，ｆ２，ｆ３，ｇ１＝ｆ２，ｇ２＝ｆ３）を実行する。リソースキャッシングシステムは、テーブル４からのクエリＱ１、Ｑ１２、Ｑ１５およびＱ２３が固有の組み合わせ（ｆ１，ｆ２，ｆ３，ｇ１＝ｆ２，ｇ２＝ｆ３）を包含すると識別する。リソースキャッシングシステムは、クエリの組、Ｓｉ＝｛Ｑ１，Ｑ１２，Ｑ１５，Ｑ２３｝を識別する。Ｓ１内のクエリのための実行時間は、ｔ１＝２０分、ｔ１２＝１０分、ｔ１５＝２５分、およびｔ２３＝１５分である。
【００８５】
リソースキャッシングシステムは、Ｓ1内のクエリの累積実行時間を計算する。Ｔ１＝ｔ１＋ｔ１２＋ｔ１５＋ｔ２３＝２０分＋１０分＋２５分＋１５分＝７０分。リソースキャッシングシステムは、累積実行時間が３０分を超えるのでＴ１＞Ｋ２であると決定する。したがって、リソースキャッシングシステムは、キャッシュテーブルＤ１を作成して”SELECT f1, f2, f3, GROUPBY f2, f3”というＳＱＬロジックに従いデータを補足する。システムは、キャッシュテーブルＤ１からの結果を使用して、将来のクエリにおいて” SELECT f1, f2, f3, GROUPBY f2, f3”というＳＱＬロジックステップを完了する。たとえば、ｆ１＝”revenue”、ｆ２＝ｇ１＝”region”、ｆ３＝ｇ２＝”vertical”である。キャッシングエンジンは、”SELECT revenue, region, vertical GROUP BY region vertical”というクエリの結果をキャッシュする。システムが上述のＳＱＬロジックを要するクエリを次回実行するとき、クエリ実行エンジンは、キャッシュされたテーブルＤ１からの結果を使用して、必要とされるＳＱＬロジックを実行し、結果を迅速にもたらす。
【００８６】
５．  その他、拡張
実施形態は、ハードウェアプロセッサを含み、本明細書に記載および／または添付の特許請求の範囲のいずれかに列挙される動作のいずれかを実行するように構成される１つまたは複数のデバイスを有するシステムに向けられる。
【００８７】
実施形態では、非一時的なコンピュータ可読記憶媒体は、１つまたは複数のハードウェアプロセッサによって実行されると、本明細書に記載されたおよび／または請求項のいずれかに記載された動作を実行させる命令を含む。
【００８８】
本明細書で説明される特徴および機能の任意の組み合わせは、１つまたは複数の実施形態に従って使用され得る。上述の明細書において、実施形態は、実装ごとに異なり得る多数の特定の詳細を参照して説明されてきた。したがって、明細書および図面は、限定的な意味ではなく、例示的な意味で考えられるべきである。本発明の範囲の唯一かつ排他的な指標および本出願人が本発明の範囲とすることを意図するものは、本出願から発行される特許請求の範囲の文言通りおよび均等の範囲であり、そのような特許請求の範囲は、特定の形式において後の訂正を含む。
【００８９】
６．ハードウェア概要
１つの実施形態に従って、ここで説明される技法は、１つまたは複数の特定用途のコンピューティングデバイスによって実装される。特定用途コンピューティングデバイスは、技法を実行するために有ラインであり得、または技法を実行するために永続的にプログラムされた１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、またはネットワーク処理ユニット（ＮＰＵ）といったデジタル電子デバイスを含み得、またはファームウェア、メモリ、他のストレージ、または組み合わせにおけるプログラム命令に従って技法を実行するようにプログラムされた１つまたは複数の汎用ハードウェアプロセッサを含み得る。そのような特定用途コンピューティングデバイスは、カスタム有ラインロジック、ＡＳＩＣ、ＦＰＧＡ、またはＮＰＵをカスタムプログラミングと組み合わせて、技法を実現し得る。特定用途コンピューティングデバイスは、であるクトップコンピュータシステム、ポータブルコンピューターシステム、ハンドヘルドデバイス、ネットワークデバイス、または技法を実装するための有ラインおよび／またはプログラムロジックを組み込んだ任意の他のデバイスであり得る。
【００９０】
たとえば、図５は、本発明の実施形態がその上に実装され得るコンピュータシステム５００を示すブロックダイアグラムである。コンピュータシステム５００は、情報を通信するためのバス５０２または他の通信機構、および情報を処理するためにバス５０２と結合されたハードウェアプロセッサ５０４を含む。ハードウェアプロセッサ５０４は、たとえば、汎用マイクロプロセッサであり得る。
【００９１】
コンピュータシステム５００はまた、プロセッサ５０４によって実行される情報および命令を格納するためにバス５０２に結合されたランダムアクセスメモリ（ＲＡＭ）または他の動的ストレージデバイスなどのメインメモリ５０６を含む。メインメモリ５０６はまた、プロセッサ５０４によって実行される命令の実行中に一時変数または他の中間情報を格納するために使用され得る。そのような命令は、プロセッサ５０４がアクセス可能な非一時的記憶媒体に格納されると、コンピュータシステム５００を、命令において特定された動作を実行するようにカスタマイズされた特定用途マシンにする。コンピュータシステム５００は、プロセッサ５０４に対する静的情報および命令を格納するためにバス５０２に結合された読み出し専用メモリ（ＲＯＭ）５０８または他の静的ストレージデバイスをさらに含む。磁気ディスクまたは光ディスクなどの記憶装置５１０が提供され、情報および命令を格納するためにバス５０２に結合される。
【００９２】
コンピュータシステム５００は、情報をコンピュータユーザに表示するために、バス５０２を介して陰極ライン管（ＣＲＴ）などのディスプレイ５１２に結合され得る。英数字および他のキーを含む入力デバイス５１４は、情報およびコマンド選択をプロセッサ５０４に伝達するためにバス５０２に結合される。別の種類のユーザ入力デバイスは、方向情報およびコマンド選択をプロセッサ５０４に伝達し、ディスプレイ５１２上のカーソル移動を制御するためのマウス、トラックボール、またはカーソル方向キーなどのカーソル制御５１６である。この入力デバイスは典型的に、第１軸（ｘなど）および第２軸（ｙなど）の２つの軸において２つの自由度があり、デバイスが平面内の位置を特定可能にする。
【００９３】
コンピュータシステム５００は、カスタマイズされた有ラインロジック、１つまたは複数のＡＳＩＣまたはＦＰＧＡ、ファームウェアおよび／またはプログラムロジックを使用して本明細書に記載の技法を実装し、これらはコンピュータシステムと組み合わせてコンピュータシステム５００を特定用途マシンにするまたはプログラムする。一実施形態によれば、本明細書の技法は、プロセッサ５０４がメインメモリ５０６に含まれる１つまたは複数の命令の１つまたは複数のシーケンスを実行したことに応答して、コンピュータシステム５００によって実行される。そのような命令は、ストレージデバイス５１０などの別の記憶媒体からメインメモリ５０６に読み込まれ得る。メインメモリ５０６に含まれる命令のシーケンスの実行により、プロセッサ５０４は本明細書に記載の処理ステップを実行する。代替実施形態では、ソフトウェア命令の代わりに、またはそれと組み合わせて、有ライン回路を使用することができる。
【００９４】
本明細書で使用される「記憶媒体」という用語は、マシンを特定の方法で動作させるデータおよび／または命令を記憶する任意の非一時的媒体を指す。そのような記憶媒体は、不揮発性媒体および／または揮発性媒体を含み得る。不揮発性媒体は、たとえば、ストレージデバイス５１０などの光ディスクまたは磁気ディスクが含まれる。揮発性媒体は、メインメモリ５０６などの動的メモリを含む。記憶媒体の一般的な形態は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、または他の磁気データ記憶媒体、ＣＤ−ＲＯＭ、その他の光学データ記憶媒体、穴のパターンを備えた物理媒体、ＲＡＭ、ＰＲＯＭ、およびＥＰＲＯＭ、フラッシュＥＰＲＯＭ、ＮＶＲＡＭ、その他のメモリチップまたはカートリッジ、連想メモリ（ＣＡＭ）、およびＴｅｒｎａｒｙ  Ｃｏｎｔｅｎｔ−ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ（ＴＣＡＭ）を含む。
【００９５】
記憶媒体は、伝送媒体と別のものであるが、これと組み合わせて使用されることができる。伝送メディアは、記憶媒体間の情報の送信に関与する。たとえば、伝送媒体は、バス５０２を構成するワイヤを含む同軸ケーブル、銅ライン、光ファイバーを含む。伝送媒体は、電波および赤外ラインデータ通信中に生成される音波などの音響波または光波の形態を取ることができる。
【００９６】
さまざまな形態の媒体が、実行のためにプロセッサ５０４に１つまたは複数の命令の１つまたは複数のシーケンスを運ぶことに関与し得る。たとえば、命令は、初期的にリモートディスクの磁気ディスクまたはソリッドステートドライブで実行されることができる。リモートコンピュータは、命令を動的メモリにロードし、モデムを使用して電話回線で命令を送信することができる。コンピュータシステム５００に対してローカルなモデムは、電話ラインでデータを受信し、赤外ライン送信機を使用してデータを赤外ライン信号に変換することができる。赤外ライン検出器は、赤外ライン信号で運ばれるデータを受信でき、適切な回路は、データをバス５０２に配置することができる。バス５０２は、データをメインメモリ５０６に運び、プロセッサ５０４は、そこから命令を取り出して実行する。メインメモリ５０６によって受信された命令は、プロセッサ５０４による実行の前または後のいずれかに、ストレージデバイス５１０に任意に格納され得る。
【００９７】
コンピュータシステム５００はまた、バス５０２に結合された通信インターフェイス５１８を含む。通信インターフェイス５１８は、ローカルネットワーク５２２に接続されたネットワークリンク５２０に結合する双方向データ通信を提供する。例えば、通信インターフェイス５１８は、統合サービスデジタルネットワーク（ＩＳＤＮ）カード、ケーブルモデム、衛星モデム、または対応する種類の電話回線へのデータ通信接続を提供するモデムであり得る。別の例として、通信インターフェイス５１８は、互換性のあるＬＡＮへのデータ通信接続を提供するローカルエリアネットワーク（ＬＡＮ）カードであり得る。無ラインはまた、実装され得る。そのような実装では、通信インターフェイス５１８は、さまざまな種類の情報を表すデジタルデータストリームを運ぶ電気信号、電磁信号、または光信号を送受信する。
【００９８】
ネットワークリンク５２０は、典型的に、１つまたは複数のネットワークを介して他のデータデバイスへのデータ通信を提供する。たとえば、ネットワークリンク５２０は、ローカルネットワーク５２２を介してホストコンピューター５２４またはインターネットサービスプロバイダ（ＩＳＰ）５２６によって運営されるデータ機器への接続を提供することができる。ＩＳＰ５２６は、今日一般に「インターネット」５２８と呼ばれる世界規模のパケットデータ通信ネットワークを通じてデータ通信サービスを次いで提供する。ローカルネットワーク５２２およびインターネット５２８は両方とも、デジタルデータストリームを運ぶ電気信号、電磁信号または光信号を使用する。コンピュータシステム５００へとまたはそこへとデジタルデータを搬送する、さまざまなネットワークを介した信号、およびネットワークリンク５２０および通信インターフェイス５１８を介した信号は、伝送媒体の例示的な形態である。
【００９９】
コンピュータシステム５００は、ネットワーク（複数可）、ネットワークリンク５２０、および通信インターフェイス５１８を通じて、メッセージを送信し、プログラムコードを含むデータを受信することができる。インターネットの例では、サーバ５３０は、インターネット５２８、ＩＳＰ５２６、ローカルネットワーク５２２、および通信インターフェイス５１８を介して、アプリケーションプログラムにリクエストされたコードを送信する。
【０１００】
受信されたコードは、プロセッサ５０４が受信されたときにそれによって実行され、および／または後で実行するためにストレージデバイス５１０または他の不揮発性ストレージに格納され得る。
【０１０１】
上述の明細書では、本発明の実施形態は、実装ごとに異なり得る多数の特定の詳細を参照して説明されてきた。したがって、明細書と図面は、限定的な意味ではなく、例示的な意味で考えられるべきである。本発明の範囲の唯一かつ排他的な指標および本出願人が本発明の範囲とすることを意図するものは、本出願から発行される特許請求の範囲の文言通りおよび均等の範囲であり、そのような特許請求の範囲は、特定の形式において後の訂正を含む。
【図１】
0006929388.tif 000005
【図２】
0006929388.tif 000006
【図３】
0006929388.tif 000007
【図４】
0006929388.tif 000008
【図５】
0006929388.tif 000009