(57)【要約】【課題】  Ｗｅｂサービスなどにおいてパフォーマンスを向上させるためキャッシュを用いる方法があるが、アプリケーションにより動的に生成されるデータは内容が変化するためキャッシュを用いることが難しい。こうした動的に生成されるデータをキャッシュすることが本発明により解決する課題である。【解決手段】  動的に生成されるデータが同一となる場合に同じ値を返す関数を利用して、この関数の結果をキーとして動的に生成されたデータをキャッシュに保存する。データが要求された時には、上記関数の実行結果の値をキーとするデータがキャッシュに存在するか確認し、存在する場合には過去の処理結果のデータを再利用する。【選択図】図１
2011154652.tif 000002
【特許請求の範囲】
【請求項１】
情報を処理することにより動的に生成されるデータについて、処理結果として同一のデータが生成される場合に同一の値を返す機能を用いることを特徴とする動的データのキャッシュ方法とこの方法によりデータをキャッシュする装置。
【請求項２】
請求項１記載の方法を用いてＷｅｂアプリケーションにより生成されるコンテンツをキャッシュする機能をもつＷＷＷサーバ。
【請求項３】
請求項２記載のＷＷＷサーバにおいて、動的に生成されるデータが同一の内容となるかどうかを判別する関数として、Ｗｅｂアプリケーション開発者あるいはＷｅｂアプリケーションの動作を理解する人が作成する関数を利用することを特徴とするＷＷＷサーバ。
【請求項４】
請求項３記載のＷＷＷサーバにおいて、動的に生成されるデータが同一の内容となるかどうかを判別する関数として、Ｗｅｂアプリケーション開発者あるいはＷｅｂアプリケーションの動作を理解する人が作成する関数を利用することに代えて、機械によりデータ生成器を解析して生成された関数を利用することを特徴とするＷＷＷサーバ。
【請求項５】
請求項１記載の方法を用いてキャッシュを制御するプロキシサーバであって、データを生成するオリジンサーバにおいて同一のデータが生成される場合に同一の値を返す関数を実行し、その値をプロキシサーバで利用してオリジンサーバにおいて生成されるデータをキャッシュすることを特徴とするプロキシサーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムなどで動的に生成されるデータのキャッシュに関するものである。
【背景技術】
【０００２】
一度利用したデータのうち再利用される可能性のあるものをキャッシュに保存して効率を向上させる方法は従来より様々な分野で利用されている。
【０００３】
ＷＷＷにおいてはサービスを効率良く提供するため、従来よりコンテンツをキャッシュする方法が多用されており、静的なコンテンツについては広く実用に共されている。
【０００４】
ところがプログラムなどで動的に生成されるコンテンツについては、ＨＴＴＰリクエストのパラメータ、データベースや外部のファイル、またセッションの状態など様々な要素に依存して内容が変化するため、キャッシュを利用することが難しく、利用は限定されている。
【０００５】
しかしながら、動的コンテンツを生成する処理でも、それが実行されるたびに常に異なる内容を生成するわけではなく、同一の内容が生成される状況が少なくないため、キャッシュを用いてデータを再利用できれば効率を向上させることができる。
【０００６】
動的データに関する従来のキャッシュ技術として、コンテンツ内の内容が変化しない部分についてはキャッシュしたデータを用い、内容が変化する部分だけを動的に生成して該当箇所に挿入する方法がある。全体が動的に変化するわけではないことに着目したこの方法を用いると、動的に生成する部分を少なくはできるが、動的に生成部分する処理が実行されることに変わりはない。
【０００７】
また、動的に生成されるデータをプロキシサーバでキャッシュする従来の技術として、転送データとそのデータにハッシュ関数を適用して得られるフィンガープリントを対応付けてキャッシュに登録しておき、転送しようとするデータがキャッシュ内に存在する場合には、データの代わりにフィンガープリントを転送する方法がある。この方法を用いると通信量を減らすことができるのでネットワーク負荷は軽減できるが、サーバにおける処理量を軽減させることはできない。
【０００８】
通信量のみならず処理量も軽減できれば、パフォーマンスの向上に加え省力化にもつながるため、繰り返される動的データの生成処理自体を軽減させるキャッシュシステムを実現することが望まれる。
【０００９】
動的に生成されるデータをキャッシュする技術はＷＷＷのサービスのみならず、時間や電力を要する処理を繰り返し行うあらゆる分野に適用でき、ネットワークで結ばれた計算機システムの様々な分野において効率を向上させることが可能となる。
【００１０】
動的に生成されるデータを保存するキャッシュを実現するためには大容量の記憶装置が必要と考えられるが、ハードウェア技術の進歩により大容量の記憶装置が低いコストで利用できるようになったため、本発明の実現および利用は現実的と考えられる。
【００１１】
また、記憶装置の使用量は増大しても、電力消費の大きいＣＰＵの使用量を減少させることができるため、システム全体として消費電力が少なくなるように調整することにより、情報機器の省力化にも貢献できる。
【００１２】
こうした要素を考えると動的に生成されるデータのパターンが多いとしても、キャッシュを用いて同じ処理の繰り返しを避けて、一度生成したデータを再利用して効率よく処理する技術は有効と考えられる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００２−１０８６７１号公報
【特許文献２】特開２００２−２６８９３５号公報
【特許文献３】特開２００３−２４２０１７号公報
【特許文献４】特開２００５−１０７６６２号公報
【非特許文献】
【００１４】
【非特許文献１】Edge Side Includes (ESI) 概要、 [online]、２００８年３月４日、[平成２２年１ 月１８ 日検索]、インターネット＜URL：http://otndnld.oracle.co.jp/products/app_server/cache/pdf/esi_overview.pdf＞
【非特許文献２】Virnish ESI Features、[online]、[平成２２年１ 月１８ 日検索]、インターネット＜URL：http://varnish.projects.linpro.no/wiki/ESIfeatures＞
【非特許文献３】ESI Language Specification 1.0、[online]、[平成２２年１ 月１８ 日検索]、インターネット＜URL：http://www.w3.org/TR/esi-lang＞
【非特許文献４】ダイナキャッシュの基本: 第1回 「ダイナキャッシュとは」、[online]、[平成２２年１ 月１９ 日検索]、インターネット＜URL：http://www.ibm.com/developerworks/jp/websphere/library/was/was51_dynacache/1.html＞
【発明の概要】
【発明が解決しようとする課題】
【００１５】
解決しようとする課題は、動的に生成される内容が変化するデータのキャッシュシステムを実現することである。
【課題を解決するための手段】
【００１６】
本発明は、動的に生成されるデータが同一となる場合に同じ値を返す関数を利用して、この関数の結果をキーとして実行結果をキャッシュに保存しておき、その後データが要求された時にキャッシュに保存されたデータを利用することを最も主要な特徴とする。
【発明の効果】
【００１７】
本発明によるキャッシュシステムを利用すると、同じデータを生成する条件下では、以前に生成されたデータを再利用するため、パフォーマンスが向上すると共に、処理量が軽減できるため電力消費を軽減できるという利点がある。
【図面の簡単な説明】
【００１８】
【図１】図１は動的に生成されるデータのキャッシュシステムの構成図である。
【図２】図２は動的データのキャッシュを利用したＷＷＷサーバの概念図である。（実施例１）
【図３】図３は動的データのキャッシュを利用したプロキシサーバの概念図である。（実施例２）
【発明を実施するための形態】
【００１９】
本発明の動的データのキャッシュシステムにおいては，データを生成するデータ生成器(Data Generator)と共に、データ同一性判別識別子(Identical ID)取得関数が必要となる。この関数は入力データやコンテキストなどを検査し、データ生成器により生成されるデータが同じになる場合には同一の値を返す関数である。
【００２０】
動的に生成されるデータが必要になると、システムはデータ同一性判別識別子(Identical ID)取得関数を呼び出し、それにより取得した識別子と、データ生成器を一意に識別するために割り当てられるデータ生成器識別子(Data Generator ID)をキーとするデータがキャッシュ内に存在するか確認する。
【００２１】
キャッシュにデータが存在する場合には、キャッシュに保存されているデータを実行結果として返す。
【００２２】
キャッシュにデータが存在しない場合には、アプリケーションのデータ生成器(Data Generator)によりデータを作成し、実行結果を返すと共に、動的データキャッシュにデータの内容を保存する。
【実施例１】
【００２３】
図２は本発明の実施例であって、動的データキャッシュを用いたＷＷＷサーバである。
【００２４】
ＷＷＷサーバにはＷｅｂアプリケーションの開発者が作成したコンテンツを生成するプログラム(Data Generator)と、それにより生成されるコンテンツに対するデータ同一性判別識別子取得関数をあらかじめ格納しておく。
【００２５】
データ同一性判別識別子取得関数はＷｅｂアプリケーションプログラム内の一つの関数として作成することができ、この関数は生成されるコンテンツが同一の場合には同一の値を返す。
【００２６】
例えば生成されるコンテンツがセッション変数id、ファイル/tmp/updatetimeの内容、およびＧＥＴパラメータのcmdに依存し、これらがすべて同じ値である時に同一のコンテンツを返す場合には、データ同一性判別識別子取得関数としてこれらの３つの値を連結した文字列を返す関数などが考えられ、ＰＨＰスクリプトで作成する場合、以下のように記述することができる。
2011154652.tif 000003
【００２７】
データ同一性判別識別子取得関数は繰り返し実行され、システムの効率に大きく影響するため、この関数を効率の良いものとすることは重要である。効率を向上させる方法としては、例えば入出力のコストが大きいデータベースではなくファイルを利用したり、データ同一性判別識別子を得るのに用いる値がデータ要求時以前に分かる場合にはあらかじめ値を求めておくなどして、この関数の実行に必要な情報の入力や処理のコストを軽減させることが考えられる。
【００２８】
Ｗｅｂアプリケーションの開発者がコンテンツの内容が同じとなる条件を効率良く判定できるようシステムを設計してデータ同一性判別識別子取得関数を作成することにより、パフォーマンスを向上させることができると考えられるが、データ生成プログラムを解析するソフトウェアで自動生成することもできる。
【００２９】
本実施例では、プログラムを一意に識別するためのデータ生成器識別子(Data Generator ID)としてＵＲＬを利用し、このＵＲＬとデータ同一性判別識別子(Identical ID)をキーとして、コンテンツを生成するプログラムにより生成されたデータをテーブルに保存することよりキャッシュを実装している。
【００３０】
本実施例のＷＷＷサーバはクライアントからＨＴＴＰリクエストを受け取ると、ＵＲＬで指定されたＷｅｂアプリケーションのプログラムに対応するデータ同一性判別識別子取得関数を呼び出し、データ同一性判別識別子(Identical ID)を取得する。
【００３１】
取得したデータ同一性判別識別子(Identical ID)とクライアントがリクエストしたＵＲＬをキーとして、動的コンテンツキャッシュに過去に生成したコンテンツのデータが保存されているかを確認し、データが存在する場合にはそのデータをレスポンスとしてクライアントに返す。
【００３２】
動的データキャッシュ内にデータが存在しない場合には、コンテンツを生成するプログラムを実行してデータを生成し、クライアントにレスポンスとして返すと共に、将来の利用のために動的データキャッシュにデータを保存する。
【００３３】
クライアントに送出されるレスポンスにはレスポンスヘッダ内にETagを含め、その値としてデータ同一性判別識別子取得関数の実行結果の値を送出することにより、クライアントがIf-None-Matchヘッダを利用して、通信に必要な帯域を節約することが可能となる。
【実施例２】
【００３４】
図３の実施例は本発明による動的データキャッシュを用いたプロキシサーバである。
【００３５】
本実施例では使用するコンテンツを生成するＷＷＷサーバとして、レスポンスを返す際にレスポンスヘッダ内のETagの値としてデータ同一性判別識別子取得関数の実行結果の値を送出するようプログラムされたサーバを利用する。
【００３６】
プロキシサーバがクライアントからのＨＴＴＰリクエストを受け取ると、ＵＲＬに対するデータ同一性判別識別子を取得するため、コンテンツを提供するＷＷＷサーバに対してＨＥＡＤリクエストを送信する。
【００３７】
プロキシサーバからのリクエストを受け取ったＷＷＷサーバは、要求されたＵＲＬに対応するデータ同一性判別識別子取得関数の実行結果の値をETagレスポンスヘッダに収めて、プロキシサーバにレスポンスを返す。
【００３８】
プロキシサーバはリクエストされたＵＲＬと得られたデータ同一性判別識別子をキーとするデータが動的データキャッシュに存在するか確認し、存在すればキャッシュされたデータからレスポンスを生成しクライアントに返す。
【００３９】
キャッシュにデータが存在しない場合にはＷＷＷサーバからコンテンツを取得し、得られた内容をレスポンスとしてクライアントに返すと共に、動的データキャッシュにコンテンツの内容を保存する。
【００４０】
通常、ETagヘッダではコンポーネントのバージョンを表す文字列が返され、新しいバージョンのコンテンツが返された場合にはプロキシサーバのキャッシュデータを破棄するのが一般的だが、本実施例のプロキシサーバでは、受け取るETagヘッダの値はデータ同一性判別識別子を表す文字列であるため、一つのＵＲＬに対して異なるETagヘッダの値を持つレスポンスを受け取った場合にも別の有効なデータとしてキャッシュ内に保存されることになる。
【符号の説明】
【００４１】
１    動的データキャッシュ
２    動的データ保存テーブル
３    データ同一性判別識別子取得関数
４    データ生成器
５    動的データ生成アプリケーション
６    動的データキャッシュ管理プログラム
【図１】
2011154652.tif 000004
【図２】
2011154652.tif 000005
【図３】
2011154652.tif 000006