以下に、開示するデータベースシステム及び制御方法の実施例について、図面に基づいて詳細に説明する。なお、本実施例により開示する発明が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
[実施例1における全体構成]
図1を用いて、実施例1におけるデータベースシステムの像を簡単に説明する。図1は、実施例1におけるデータベースシステムの全体像の一例を示す図である。図1に示すように、データベースシステムは、クライアント100と、データベースサーバ200と、キャッシュサーバ300とを有する。クライアント100と、データベースサーバ200と、キャッシュサーバ300とは、ネットワークを介して接続される。なお、図1に示す例では、クライアント100が1つあり、データベースサーバ200が1つあり、キャッシュサーバ300が2つある場合を示したが、これに限定されるものではなく、各装置は任意の数あって良い。
クライアント100は、キャッシュサーバ300又はデータベースサーバ200に格納されているデータを要求するデータ要求をキャッシュサーバ300に送信する。また、クライアント100は、キャッシュサーバ300又はキャッシュサーバ300からのデータ応答を受信する。その後、例えば、クライアント100は、データ応答に含まれるデータを用いて、各種サービスを実行する。クライアント100は、例えば、利用者により用いられる情報処理端末が該当する。
データベースサーバ200は、大容量の記憶部を有する。データベースサーバ200は、クライアント100により参照されるデータを記憶部に記憶する。具体的には、データベースサーバ200は、データごとに、データを特定するための特定情報と、特定情報の複数の種類のうちデータを特定する際に用いられない種類である非特定種類を示す非特定種類情報との組み合わせを記憶部に記憶する。
また、データベースサーバ200は、図1の(i)に示すように、データが更新されると、Invalidation Report技術を用い、データベース上で変更となった情報(IR情報)を生成する。なお、以下に説明するように、データベースサーバ200とキャッシュサーバ300とは、IR情報を用いて、データベースサーバ200に記憶された情報のうち更新された情報を共有する。ただし、これに限定されるものではなく、IR情報を用いるのではなく、任意の手法を用いてデータベースサーバ200とキャッシュサーバ300とが共有しても良い。
キャッシュサーバ300は、データベースサーバ200に記憶されたデータのうち、過去にキャッシュサーバ300が使用したデータをキャッシュ311に記憶する。具体的には、キャッシュサーバ300は、データベースサーバ200に記憶されたデータの少なくとも一部について、特定情報と非特定種類情報との組み合わせと、複数種類の特定情報の組み合わせとのうち少なくとも一つと対応付けてキャッシュ311に記憶する。キャッシュサーバ300は、過去に使用したデータをキャッシュ311に記憶して用いることで、高速なアクセスを実現する。
キャッシュサーバ300は、クライアント100からデータ要求を受信すると、データ要求により要求されたデータを自装置のキャッシュ311に記憶している場合には、図1の(4)に示すように、キャッシュ311に記憶されたデータをデータ応答として送信する。一方、キャッシュサーバ300は、データ要求により要求されたデータを自装置のキャッシュ311に記憶していない場合には、図1の(2)に示すように、データ検索要求をデータベースサーバ200に送信する。その後、キャッシュサーバ300は、図1の(3)に示すように、データ検索要求に対する応答となるデータ応答をデータベースサーバ200から受信することで、データ要求により要求されたデータをデータベースサーバ200から取得する。キャッシュサーバ300は、受信したデータを自装置のキャッシュ311に格納した上で、図1の(4)に示すように、クライアント100にデータ応答として送信する。
つまり、キャッシュサーバ300は、データ要求を受信すると、データ要求に含まれる複数種類の特定情報各々の組み合わせがキャッシュ311に記憶されているかを判定する。ここで、キャッシュサーバ300は、記憶されていないと判定した場合に、データ要求に含まれる組み合わせをデータベースサーバ200に送信する。その後、データベースサーバ200は、キャッシュサーバ300により送信された組み合わせである組み合わせを受信すると、受信した組み合わせである受信組み合わせに相当する特定情報と非特定種類情報との組み合わせと、特定情報と非特定種類情報との組み合わせに対応付けられたデータとを記憶部から取得し、キャッシュサーバ300に応答する。その後、キャッシュサーバ300は、データベースサーバ200により送信された特定情報と非特定種類情報との組み合わせがキャッシュ311に記憶されている場合には、記憶されていた特定情報と非特定種類情報との組み合わせに対応付けられるデータと対応付けて、受信組み合わせをキャッシュに格納する。また、キャッシュサーバ300は、キャッシュ311に記憶されていない場合には、データベースサーバ200により送信されたデータと対応付けて、データベースサーバ200により送信された特定情報と非特定種類情報との組み合わせと、受信組み合わせとをキャッシュ311に格納する。また、キャッシュサーバ300は、キャッシュ311に記憶されていると判定した場合には、キャッシュ311からデータを取得してデータ要求の送信元に送信し、キャッシュ311に記憶されていないと判定された場合には、データベースサーバ200により送信されたデータをデータ要求の送信元に送信する。
また、キャッシュサーバ300は、図1の(a)に示すように、IR情報を要求するIR情報要求をデータベースサーバ200に送信し、図1の(b)に示すように、IR情報要求に対する応答であるIR情報応答を受信する。すなわち、キャッシュサーバ300は、自装置に対するIR情報の有無を確認する。ここで、自装置に対するIR情報がある場合とは、データベースサーバ200に記憶されたデータが更新され、キャッシュサーバ300のキャッシュ311に記憶されたデータが過去のデータとなっていることを示す。キャッシュサーバ300は、IR情報がデータベースサーバ200に存在する場合には、自装置のキャッシュ311に記憶された過去のデータをクライアント100に送信しないよう、キャッシュ311に記憶されているデータを削除する。
また、キャッシュサーバ300は、IR情報が自装置のキャッシュ311に適用された場合には、図1の(c)に示すように、IR情報を削除する要求であるIR情報削除要求をデータベースサーバ200に送信する。その後、データベースサーバ200では、キャッシュサーバ300に適用されたIR情報が削除され、キャッシュサーバ300が、図1の(d)に示すように、IR情報削除要求に対する応答であるIR情報削除応答をデータベースサーバ200から受信する。
[実施例1におけるデータベースサーバの構成]
図2は、実施例1におけるデータベースサーバの構成の一例を示すブロック図である。図2に示すように、データベースサーバ200は、通信制御I/F部201と、記憶部210と、制御部220とを有する。
通信制御I/F部201は、制御部220と接続される。通信制御I/F部201は、キャッシュサーバ300との間でやりとりする各種情報に関する通信を制御する。具体的には、通信制御I/F部201は、制御部220による制御に基づき、データ要求やIR情報要求、IR情報削除要求をキャッシュサーバ300に送信する。また、通信制御I/F部201は、制御部220による制御に基づき、キャッシュ311応答やIR情報応答、IR情報削除応答をキャッシュサーバ300に送信する。
記憶部210は、制御部220と接続される。記憶部210は、制御部220による各種処理に用いるデータを記憶する。記憶部210は、例えば、RAM(Random Access Memory)やROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、又は、ハードディスクや光ディスクなどである。図2に示す例では、記憶部210は、ユーザ情報DB211と、IR情報DB212とを有する。
ユーザ情報DB211は、少なくとも1種類の特定情報により特定されるデータごとに、該データを特定するための特定情報と、複数ある特定情報の種類のうちデータを特定する際に用いられない種類である非特定種類を示す非特定種類情報との組み合わせを記憶する。例えば、ユーザ情報DB211は、データごとに、データを特定する際に用いられる特定情報種類に属する特定情報と、非特定種類情報との組み合わせを記憶する。
例えば、ユーザ情報DB211は、キー情報と属性値とを対応付けて記憶する。属性値とは、クライアント100により参照されるデータである。言い換えると、データ要求により要求される対象となるデータである。キー情報とは、属性値を一意に特定するための情報である。キー情報は、一つ又は複数の特定要素を含む。キー情報を「サービス特定情報」とも記載し、キー情報に含まれる要素各々を「サービス特定情報要素」や「特定情報」とも記載する。キー情報は、クライアント100により送信されるデータ要求に含まれる。なお、データ要求には、複数の種類の特定情報が含まれており、データ要求に含まれる特定情報の全てがキー情報として用いられない場合もある。言い換えると、データ要求には、データを特定する際に用いられない種類である非特定種類に属する特定情報が含まれる場合もある。
なお、データ要求に含まれるキー情報に、N個の要素が含まれる場合を例に用いて、属性値とキー情報との関係について簡単に説明する。属性値には、N個の要素のうちN個の要素全てによって特定される属性値もあれば、N個の要素のうち一部の要素により特定される属性値もある。
図3は、実施例1におけるユーザ情報DBに記憶された情報の一例を示す図である。図3に示すように、ユーザ情報DB211は、キー情報と属性値とを対応付けて記憶する。なお、図3に示す例では、キー情報に3つの要素が含まれる場合を示したが、これに限定されるものではなく、要素の数は任意であって良い。図3に示す例では、キー情報に含まれる3つの要素をそれぞれ「K1」「K2」「K3」と示した。なお、図3における「ANY」は、任意の要素に合致することを示す。言い換えると、非特定種類であることを示す。「ANY」を「ANY要素」「非特定種類情報」とも記載する。同様に、図3に示す例では、キー情報ごとに一つの属性値が対応付けられた場合を示したが、これに限定されるものではなく、属性値の数は任意であって良い。
図3に示す例では、ユーザ情報DB211は、K1「ServiceName−001」とK2「ANY」とK3「ANY」とを含むキー情報と、属性値「データ1」とを対応付けて記憶する。すなわち、ユーザ情報DB211は、キー情報が「ServiceName−001、UserType−001、AccountType−001」や、「ServiceName−001、UserType−002、AccountType−002」である場合には、属性値「データ1」が特定されることを記憶する。言い換えると、「ServiceName−001、UserType−001、AccountType−001」や、「ServiceName−001、UserType−002、AccountType−002」がキー情報に含まれるデータ要求がクライアント100により送信された場合には、クライアント100に属性値「データ1」が送信されることを記憶する。
また、図3に示す例では、ユーザ情報DB211は、K1「ServiceName−002」とK2「UserType−001」とK3「AccountType−001」とを含むキー情報と、属性値「データ100」とを対応付けて記憶する。言い換えると、ユーザ情報DB211は、「ANY」が含まれないキー情報に対応づけて属性値を記憶する。この場合、「ServiceName−002」と「UserType−001」と「AccountType−001」とをキー情報にデータ要求がクライアント100により送信された場合に、クライアント100に属性値「データ100」が送信されることを記憶する。
IR情報DB212は、IR情報を記憶する。具体的には、IR情報DB212は、IR情報の適用先となるキャッシュサーバ300を識別するキャッシュサーバ名と、更新された属性値を特定するキー情報とを含むIR情報を記憶する。
図4は、実施例1におけるIR情報DBに記憶された情報の一例を示す図である。図4に示すように、IR情報DB212は、キャッシュサーバ名「キャッシュサーバA」と、K1「ServiceName−001」とK2「ANY」とK3「ANY」とを含むキー情報とを含むIR情報を記憶する。すなわち、IR情報DB212は、K1「ServiceName−001」とK2「ANY」とK3「ANY」とにより特定される属性値が更新されたことを示し、キャッシュサーバAに適用されるIR情報を記憶する。
IR情報DB212に記憶されるIR情報は、ユーザ情報DB211が更新される際に格納され、キャッシュサーバ300に適用された後に削除される。
制御部220は、通信制御I/F部201及び記憶部210と接続される。制御部220は、OS(Operating System)などの制御プログラム、各種の処理手順などを規定したプログラム及び所要データなどを格納するための内部メモリを有し、種々の処理を制御する。制御部220は、例えば、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)、CPU(Central Processing Unit)、MPU(Micro Processing Unit)などである。図2に示す例では、制御部220は、キャッシュ応答部221と、IR情報応答部222と、IR情報削除部223と、ユーザ情報更新部224とを有する。
キャッシュ応答部221は、キャッシュサーバ300からデータ検索要求を受信すると、データ検索要求に含まれるキー情報が、ユーザ情報DB211に記憶されているか否かを判定する。言い換えると、キャッシュ応答部221は、ユーザ情報DB211を検索することで、データ検索要求に含まれるキー情報と一致するレコードを検索結果として取得する。
例えば、キー情報にサービス特定情報要素(E1、E2、E3)が含まれる場合には、キャッシュ応答部221は、ユーザ情報DB211を検索することで、サービス特定情報要素(E1、E2、E3)に相当するキー情報を含むレコードを検索結果とする。
なお、ユーザ情報DB211は、特定情報として「ANY」を記憶する場合がある。この結果、サービス特定情報要素(E1、E2、E3)に相当するキー情報を含むレコードが複数ある場合がある。このことを踏まえ、キャッシュ応答部221は、複数のレコードのうち優先するレコードを決定するための判定表である応答データ判定表を生成し、生成した応答データ判定表と合致するレコード全てをユーザ情報DB211から検索した上で、最も優先度の高いレコードを一つ検索結果として選択する。
図5は、実施例1におけるキャッシュ応答部により用いられる応答データ判定表の一例を示す図である。図5に示す例では、サービス特定情報要素として、「K1」「K2」「K3」とがキー情報に含まれる場合を例に示した。言い換えると、例えば、ユーザ情報DB211に記憶されているデータのうち、「K1」「K2」「K3」をキー情報として含むレコードだけでなく、「K1」「K2」「ANY」をキー情報として含むレコードや、「K1」「ANY」「K3」をキー情報として含むレコード、「K1」「ANY」「ANY」をキー情報として含むレコードなどについても検索結果となる場合を例に示した。図5に示す例では、応答データ判定表に記憶されたサービス特定情報要素の組み合わせのうち検索結果となり得る組み合わせと、優先度とが対応付けられた表となる。図5に示す例では、優先度の数字が大きければ大きい程、優先して検索結果とする場合を示した。すなわち、図5に示す例では、「K1」「K2」「K3」をキー情報として含むレコードが検索結果となる場合には、かかるレコードが検索結果とされることを示す。次に、「K1」「K2」「ANY」をキー情報として含むレコードが検索結果となる場合には、かかるレコードが検索結果とされることを示す。
なお、図5に示す例では、キャッシュ応答部221が、応答データ判定表を用いて検索結果を一つ選択する場合を示したが、キャッシュ応答部221による処理はこれに限定されるものではなく、任意の手法を用いて良い。例えば、データ問い合わせ言語などで実現しても良い。
ここで、図3に示すユーザ情報DB211と図5に示す応答データ判定表とを用いて、詳細な一例を説明する。また、キャッシュサーバ300からのデータ検索要求に含まれるキー情報が、「ServiceName−003、UserType−001、AccounType−003」である場合を用いて説明する。この場合、キャッシュ応答部221は、図5の応答データ判定表を用いてユーザ情報DB211を検索することで、優先度「4」の「ServiceName−003、UserType−001、AccounType−003、データ105」を含むレコードと、優先度「3」の「ServiceName−003、UserType−001、ANY、データ10」を含むレコードとが得られる。ここで、図5に示す応答データ判定表では、優先度「4」は優先度「3」と比較して高優先として扱われることとなり、キャッシュ応答部221は、検索結果として、「ServiceName−003、UserType−001、AccounType−003、データ105」を含むレコードを選択する。
キャッシュ応答部221は、キャッシュサーバ300から受信したデータ検索要求に含まれるキー情報に相当するレコードをユーザ情報DB211が記憶している場合には、ユーザ情報DB211に記憶されたレコードを取得し、キャッシュサーバ300にデータ応答として送信する。例えば、キャッシュ応答部221は、検索結果となるレコードのキー情報と属性値とをユーザ情報DB211から取得し、データ応答をキャッシュサーバ300に送信する。また、キャッシュ応答部221は、キャッシュサーバ300から受信したデータ検索要求に含まれるキー情報を含むレコードをユーザ情報DB211が記憶していない場合には、「キー情報なし」をキャッシュサーバ300に応答する。
なお、キャッシュ応答部221により送信されるデータ応答に含まれるキー情報は、データ検索要求に含まれるキー情報とは異なるキー情報と同一とはならない場合がある。例えば、キャッシュ応答部221が、ユーザ情報DB211から「ANY」を含むレコードを検索結果として選択した場合には、データ検索要求に含まれるキー情報と同一とはならない。データ検索要求に含まれるキー情報には「ANY」は含まれないからである。このことを踏まえ、以下では、データ応答に含まれるキー情報に含まれる特定情報各々について、「部分特定情報要素」「D1」「D2」「D3」などと記載する。
上述したように、キャッシュ応答部221は、キャッシュサーバ300により送信されたデータ検索要求に含まれる特定情報の組み合わせを受信すると、受信した組み合わせである受信組み合わせに相当する特定情報と非特定種類情報との組み合わせと、特定情報と非特定種類情報との組み合わせに対応付けられたデータとをユーザ情報DB211から取得し、キャッシュサーバ300に応答する。より詳細には、キャッシュ応答部221は、キャッシュサーバ300により送信された受信組み合わせを受信すると、組み合わせに相当する特定情報と非特定種類情報との組み合わせ各々のうち一つを選択し、選択した特定情報と非特定種類情報との組み合わせと、選択した組み合わせに対応付けて記憶されたデータとを送信する。
IR情報応答部222は、キャッシュサーバ300からIR情報要求を受信すると、IR情報要求の送信元となるキャッシュサーバ300のキャッシュサーバ名を含むIR情報がIR情報DB212に記憶されているか否かを判定する。そして、IR情報応答部222は、IR情報DB212に記憶されていると判定した場合には、送信元となるキャッシュサーバ名を含む全てのIR情報から、キー情報を取得し、取得したキー情報を含むIR情報応答をキャッシュサーバ300に送信する。ここで、IR情報応答に含まれるキー情報は、ユーザ情報DB211において更新された属性値を特定するキー情報となる。また、IR情報応答部222は、IR情報DB212に記憶されていないと判定した場合には、「IR情報なし」をキャッシュサーバ300に応答する。
IR情報削除部223は、キャッシュサーバ300からIR情報削除要求を受信すると、IR情報削除要求の送信元となるキャッシュサーバ300のキャッシュサーバ名を含むIR情報をIR情報DB212から削除し、削除結果をキャッシュサーバ300に応答する。
ユーザ情報更新部224は、ユーザ情報DB211が更新されるごとに、更新されたレコードを示すキー情報と、データベースサーバ200に接続されたキャッシュサーバ300のキャッシュサーバ名とを含むIR情報を生成してIR情報DB212に格納する。ユーザ情報DB211が更新される場合とは、例えば、利用者によって、ユーザ情報DB211に記憶されたレコードが更新された場合や、ユーザ情報DB211に新たなレコードが追加された場合や、ユーザ情報DB211に記憶されたレコードが削除された場合などが該当する。
[実施例1におけるキャッシュサーバの構成]
図6は、実施例1におけるキャッシュサーバの構成の一例を示す図である。図6に示す例では、キャッシュサーバ300は、通信制御I/F部301と、記憶部310と、制御部320を有する。
通信制御I/F部301は、制御部320と接続される。通信制御I/F部301は、データベースサーバ200、クライアント100との間でやりとりする各種情報に関する通信を制御する。具体的には、通信制御I/F部301は、制御部320による制御に基づき、クライアント100からデータ要求を受信し、データ応答をクライアント100に送信する。また、通信制御I/F部301は、制御部320による制御に基づき、データベースサーバ200にデータ検索要求やIR情報要求、IR情報削除要求を送信しデータ応答やIR情報応答、IR情報削除応答を受信する。
記憶部310は、制御部320と接続される。記憶部310は、制御部320による各種処理に必要なデータ及びプログラムを格納する。記憶部310は、例えば、キャッシュ311が該当する。図6に示す例では、記憶部310は、キャッシュ311を有する。
キャッシュ311は、データベースサーバ200のユーザ情報DB211に記憶された情報のうち一部を記憶する。つまり、キャッシュ311は、データベースに記憶されたデータの少なくとも一部について、特定情報と非特定種類情報との組み合わせと、複数種類の特定情報の組み合わせとのうち少なくとも一つと対応付けて記憶する。具体的には、ユーザ情報DB211に記憶された情報のうち、キャッシュサーバ300により用いられたデータのキャッシュを記憶する。以下では、オープンハッシュ法によるデータ構造を例に説明する。
図7−1〜図7−3は、実施例1におけるキャッシュに記憶された情報の一例を示す図である。図7に示す例では、キャッシュ311が、ハッシュテーブルと、レコードテーブルと、属性情報テーブルとを有する場合を示した。図7−1〜図7−3は、ハッシュテーブルと、レコードテーブルと、属性情報テーブルとの一例を示す。それぞれ、図7−1〜図7−3に示すように、ハッシュテーブルと、レコードテーブルと、属性情報テーブルとは、「レコードID」と「属性情報ID」とによって連結される。言い換えると、図7−1〜図7−3に示す例では、キャッシュ311において、「レコードID」と「属性情報ID」とは、キャッシュ311に記憶されたデータを識別するためのデータとして用いられる。ただし、これに限定されるものではなく、任意の手法を用いて良く、例えば、レコードごとのメモリ上のアドレスなどを用いても良い。
図7−1に示す例では、ハッシュテーブルは、「ハッシュ値」と「レコードID」とを対応付けて記憶する。ここで、ハッシュテーブルに記憶されたハッシュ値は、キー情報を所定のハッシュ関数を用いて変換した値である。ハッシュテーブルに記憶されたレコードIDは、ハッシュテーブルとレコードテーブルとの連結に用いられる。図7−1に示す例では、ハッシュテーブルは、ハッシュ値「0」に対応付けてレコードID「0」を記憶する。また、同様に、ハッシュテーブルは、ハッシュ値「1」に対応付けてレコードID「1」を記憶する。
図7−2に示すように、レコードテーブルは、「レコードID」とキー情報と「属性情報ID」とを対応付けて記憶する。レコードテーブルに記憶されたレコードIDは、ハッシュテーブルに記憶されたレコードIDと対応する。「属性情報ID」は、レコードテーブルと属性情報テーブルとの連結に用いられる。図7−2に示す例では、レコードテーブルは、レコードID「0」と、K1「ServiceName−001」とK2「ANY」とK3「ANY」とを含むキー情報と、属性情報ID「0」とを対応付けて記憶する。
図7−3に示すように、属性情報テーブルは、「属性情報ID」と、「属性値」と、属性値の有効期限を示す「有効期限」と「参照元レコード一覧」とを対応付けて記憶する。ここで、「参照元レコード一覧」は、同一の属性情報IDに対応付けられたレコードテーブルに含まれるレコードのレコードIDの一覧を示す。参照元レコード一覧は、可変長配列のような、複数の要素を含むことのできる構造をとる。図7−3に示す例では、属性情報テーブルは、属性情報ID「0」と属性値「1」と有効期限「2011/1/1」と参照元レコード一覧「0、1」とを対応付けて記憶する。なお、有効期限は、例えば、キャッシュ311にレコードが追加される時点から一定期間後の期日が用いられる。ただし、これに限定されるものではなく、任意の期日を用いて良い。
なお、図7では、ハッシュテーブルの構造として、オープンハッシュ法を用いて記憶させる例を示したが、データ構造はこれに限るものではない。例えば、クローズドハッシュ法を用いても良い。また、図7に示す例では、キー情報が3個、属性値が1個の情報である場合を図示しているが、これに限定されるものではなく、任意の数の情報によって構成されても良い。
制御部320は、通信制御I/F部301及び記憶部310と接続される。制御部320は、OSなどの制御プログラム、各種の処理手順などを規定したプログラム及び所要データを格納するための内部メモリを有し、種々の処理を制御する。制御部320は、例えば、ASIC、FPGA、CPU、MPUなどである。また、図6に示す例では、制御部320は、キャッシュ判定部321と、IR情報判定部322と、応答処理部323とを有する。
キャッシュ判定部321は、クライアント100からデータ要求を受信すると、受信したデータ要求に含まれるサービス特定情報要素を取得し、取得したサービス特定情報要素をキー情報としてキャッシュ311を検索する。つまり、キャッシュ判定部321は、データ要求を受信すると、データ要求に含まれる複数種類の特定情報各々の組み合わせがキャッシュ311に記憶されているかを判定する。
また、キャッシュ判定部321は、判定結果に応じて、以下に説明する処理を実行する。具体的には、キャッシュ判定部321は、キャッシュ311に記憶されていないと判定した場合に、データ要求に含まれる組み合わせをデータベースサーバ200に送信する。その後、キャッシュ判定部321は、データベースサーバ200により送信された特定情報と非特定種類情報との組み合わせを受信する。ここで、キャッシュ判定部321は、データベースサーバ200により送信された特定情報と非特定種類情報との組み合わせがキャッシュ311に記憶されている場合には、記憶されていた特定情報と非特定種類情報との組み合わせに対応付けられるデータと対応付けて、受信組み合わせをキャッシュ311に格納する。一方、キャッシュ判定部321は、キャッシュに記憶されていない場合には、データベースサーバ200により送信されたデータと対応付けて、データベースサーバ200により送信された特定情報と非特定種類情報との組み合わせと、受信組み合わせとをキャッシュ311に格納する。
また、キャッシュ判定部321は、キャッシュ311に記憶されていると判定した場合には、キャッシュ311からデータを取得してデータ要求の送信元に送信する。また、キャッシュ判定部321は、キャッシュ311に記憶されていないと判定した場合には、データベースサーバ200により送信されたデータをデータ要求の送信元に送信する。なお、キャッシュ判定部321は、「判定部」や「特定情報送信部」、「格納部」「データ送信部」とも称する。
ここで、キャッシュ判定部321は、キャッシュ311の検索結果に応じて実行する一連の処理について、場合分けした上で、更に具体的に説明する。
以下では、まず、キャッシュ311にキー情報が記憶されていた場合における処理について説明する。次に、キャッシュ判定部321による処理のうち、キャッシュ311にキー情報が記憶されておらず、データベースサーバ200から属性情報を取得できた場合における処理について説明する。続いて、キャッシュ判定部321による処理のうち、キャッシュ311にキー情報が記憶されておらず、データベースサーバ200から属性情報を取得できなかった場合における処理について説明する。
キャッシュ判定部321による処理のうち、キャッシュ311にキー情報が記憶されていた場合における処理について説明する。この場合、キャッシュ判定部321は、キャッシュ311に記憶されていたキー情報に対応する属性値をキャッシュ311から取得し、データ応答をクライアント100に送信する。
なお、ここで、キャッシュ判定部321は、取得した属性値に対応付けられた有効期限が有効期限切れとなっている場合には、データ応答を実行することなく、該当するレコードを削除する処理を実行する。キャッシュ判定部321は、取得した属性値に対応付けられたキー情報全てをキャッシュ311から特定し、特定したキー情報と属性値とを削除する。例えば、キャッシュ判定部321は、属性情報ID「2」に対応付けられた参照元レコード一覧に含まれるレコードID「3」を取得し、取得したレコードIDを含むレコードをキャッシュ311のレコードテーブルから削除する。この場合、その後、後述するキャッシュ311にキー情報が記憶されていない場合の処理を行う。
図3と図7を用いて具体的に説明する。また、クライアント100から受信したデータ要求にK1「ServiceName−002」とK2「UserType−001」とK3「AccountType−002」とが含まれていた場合を用いて説明する。この場合、キャッシュ判定部321は、キー情報となる「ServiceName−002、UserType−001、AccountType−002」からハッシュ値を算出する。以下では、ハッシュ値「B−1」が算出されたものとして説明する。キャッシュ判定部321は、ハッシュ値「B−1」を用いてキャッシュ311のハッシュテーブルを検索することで、レコードID「3」を取得する。そして、キャッシュ判定部321は、レコードID「3」を用いてキャッシュ311のレコードテーブルを検索し、検索結果となるレコードに含まれるキー情報と、クライアント100からのデータ要求から取得したキー情報とを比較し、検索対象となるキー情報が既に記憶されていると判定する。その後、キャッシュ判定部321は、キャッシュ311のレコードテーブルに記憶されたレコードのうち、レコードID「3」を含むレコードから属性情報ID「2」を取得し、キャッシュ311の属性情報テーブルから属性情報ID「2」に対応付けられた属性値「データ101」を取得する。また、キャッシュ判定部321は、取得した属性値「データ101」を応答処理部323に出力する。
なお、ここで、キャッシュ判定部321は、属性情報ID「2」に対応付けられた有効期限が有効期限切れとなっていた場合には、キャッシュを削除する処理を実行する。その後、後述するキャッシュ311にキー情報が記憶されていない場合の処理を行う。
次に、キャッシュ判定部321による処理のうち、キャッシュ311にキー情報が記憶されておらず、データベースサーバ200から属性情報を取得できた場合における処理について説明する。すなわち、例えば、キャッシュ311にキー情報が記憶されていた場合における処理において説明したように、キャッシュ判定部321は、検索対象となるキー情報が既に記憶されていると判定する。この際、クライアント100からのデータ要求から取得したキー情報が記憶されていないと判定する場合が該当する。
この場合、キャッシュ判定部321は、データ要求から取得したキー情報を含むデータ検索要求をデータベースサーバ200に送信する。例えば、キャッシュ判定部321は、サービス特定情報要素(E1、E2、E3)を含むデータ検索要求をデータベースサーバ200に送信する。その後、キャッシュ判定部321は、データベースサーバ200から、データ検索結果として、部分特定情報要素(D1、D2、D3)と属性値とを含むデータ応答を受信する。
ここで、受信したデータ応答に含まれる部分特定情報要素(D1、D2、D3)が、自装置のキャッシュ311にキー情報として既に記憶されている場合について説明する。この場合、キャッシュ判定部321は、データ要求から取得したサービス特定情報要素(E1、E2、E3)を、部分特定情報要素(D1、D2、D3)に対応付けて既に記憶されていた属性値に対応付けてキャッシュ311に格納する。より詳細な一例をあげて説明すると、キャッシュ判定部321は、データ要求から取得したサービス特定情報要素(E1、E2、E3)をキー情報とし、部分特定情報要素(D1、D2、D3)に対応付けて既に記憶されていた属性値と、新たに付与したレコードIDとを含むレコードをキャッシュ311のレコードテーブルに格納する。また、キャッシュ判定部321は、新たに付与したレコードIDを、サービス特定情報要素(E1、E2、E3)から算出したハッシュ値に対応付けてハッシュテーブルに格納する。また、キャッシュ判定部321は、キャッシュ311の属性情報テーブルに記憶されたレコードのうち、部分特定情報要素(D1、D2、D3)に対応付けて既に記憶されていた属性値を含むレコードについて、「参照元レコード一覧」に、新たに付与したレコードIDを追加する。そして、キャッシュ判定部321は、部分特定情報要素(D1、D2、D3)に対応付けて既に記憶されていた属性値を応答処理部323に出力する。
図3と図7を用いて具体的に説明する。また、クライアント100から受信したデータ要求にK1「ServiceName−001」とK2「UserType−001」とK3「AccountType−002」とが含まれていた場合を用いて説明する。この場合、キャッシュ判定部321は、キー情報となるK1「ServiceName−001」とK2「UserType−001」とK3「AccountType−002」とからハッシュ値を算出する。以下では、ハッシュ値「2」が算出されたものとして説明する。今回の場合、キャッシュ311のハッシュテーブルは、ハッシュ値「2」に対応付けられたレコードIDを記憶していないため、キャッシュ判定部321は、K1「ServiceName−001」とK2「UserType−001」とK3「AccountType−002」とを含めた上でデータ検索要求をデータベースサーバ200に送信する。その後、例えば、キャッシュ判定部321は、データベースサーバ200から、部分特定情報要素(D1、D2、D3)として、「ServiceName−001、ANY、ANY」とを含み、属性値「データ1」とを含むデータ応答を受信する。その後、キャッシュ判定部321は、部分特定要素(D1、D2、D3)からハッシュ値をキー情報として、自装置のキャッシュ311のハッシュテーブルを検索する。ここで、キャッシュ判定部321は、レコードID「0」が得られた場合には、部分特定要素(D1、D2、D3)がキー情報として既に記憶されていると判定することとなる。この結果、キャッシュ判定部321は、例えば、レコードID「0」を用いて、キャッシュ311のレコードテーブルから属性情報ID「0」を取得する。そして、キャッシュ判定部321は、キャッシュ311のレコードテーブルに、新たに付与したレコードID「4」と、K1「ServiceName−001」とK2「UserType−001」とK3「AccountType−002」と、属性情報ID「0」とを含む新たなレコードをキャッシュ311のレコードテーブルに格納する。また、キャッシュ判定部321は、K1「ServiceName−001」とK2「UserType−001」とK3「AccountType−002」により算出されるハッシュ値が「2」である場合には、キャッシュ311のハッシュテーブルに対して、ハッシュ値「2」に対応付けてレコードID「4」を格納する。また、キャッシュ判定部321は、キャッシュ311の属性情報テーブルのうち、属性情報ID「0」を含むレコードの参照元レコード一覧にレコードID「4」を追加する。その後、キャッシュ判定部321は、属性情報ID「0」に対応付けられた属性値「データ1」を取得し、応答処理部323に出力する。
図8−1〜図8−3は、実施例1におけるキャッシュ判定部によりレコードが追加された後のキャッシュに記憶された情報の一例を示す図である。図8−1〜図8−3は、それぞれ、図7−1〜図7−3に対応する。なお、図8−1〜図8−3に示す例では、レコードID「4」に加えて、レコードID「5」「6」についても追加されている場合を示した。
なお、属性情報ID「2」に対応付けられた有効期限が有効期限切れとなっていた場合には、参照元レコード一覧に含まれるレコードID「0」「1」「3」に対応するレコードを、キャッシュ311のレコードテーブルやハッシュテーブルから削除し、属性情報ID「2」を含むレコードを属性情報テーブルから削除する。
ここで、受信したデータ応答に含まれる部分特定情報要素(D1、D2、D3)が、自装置のキャッシュ311にキー情報として既に記憶されていなかった場合について説明する。この場合、キャッシュ判定部321は、部分特定情報要素(D1、D2、D3)と、データベースサーバ200から取得した属性値を対応付けて、自装置のキャッシュ311に格納する。その後、キャッシュ判定部321は、部分特定情報要素(D1、D2、D3)に対応付けて格納した属性値を、サービス特定情報要素(E1、E2、E3)に対応させてキャッシュ311にレコードを格納し、属性値を応答処理部323に出力する。
図3と図8を用いて具体的に説明する。また、クライアント100から受信したデータ要求にK1「ServiceName−003」とK2「UserType−001」とK3「AccountType−001」とが含まれていた場合を用いて説明する。この場合、キャッシュ判定部321は、キー情報となるK1「ServiceName−003」とK2「UserType−001」とK3「AccountType−001」とからハッシュ値を算出する。以下では、ハッシュ値「3」が算出されたものとして説明する。今回の場合、キャッシュ311のハッシュテーブルは、ハッシュ値「3」に対応付けられたレコードIDを記憶していないため、キャッシュ判定部321は、K1「ServiceName−003」とK2「UserType−001」とK3「AccountType−001」とを含めた上でデータ検索要求をデータベースサーバ200に送信する。その後、例えば、キャッシュ判定部321は、データベースサーバ200から、部分特定情報要素(D1、D2、D3)として、「ServiceName−003、UserType−001、ANY」を含み、属性値「データ10」を含むデータ応答を受信する。その後、キャッシュ判定部321は、部分特定要素(D1、D2、D3)からハッシュ値をキー情報として、自装置のキャッシュ311のハッシュテーブルを検索する。ここで、キャッシュ判定部321は、レコードID「3」が得られない場合には、部分特定要素(D1、D2、D3)がキー情報として既に記憶されていないと判定することとなる。この結果、キャッシュ判定部321は、新たに付与した属性情報ID「3」と属性値「データ10」とを含むレコードをキャッシュ311の属性情報テーブルに格納する。また、キャッシュ判定部321は、キャッシュ311のレコードテーブルに対して、新たに付与したレコード「5」と、キー情報として部分特定情報要素(D1、D2、D3)「ServiceName−003、UserType−001、ANY」と、属性情報ID「3」とを含むレコードを新たに格納する。また、キャッシュ判定部321は、キャッシュ311のハッシュテーブルに対して、新たに格納したレコードID「5」をハッシュ値「4」に対応付けて格納する。その後、キャッシュ判定部321は、キャッシュ311のレコードテーブルに対して、新たに付与したレコード「5」と、データ要求に含まれるキー情報(K1、K2、K3)「ServiceName−003、UserType−001、AccountType−001」、属性情報ID「3」とを含むレコードを格納する。また、キャッシュ判定部321は、キャッシュ311のハッシュテーブルに対して、データ要求に含まれるキー情報(K1、K2、K3)から算出されたハッシュ値が「3」である場合には、ハッシュ値「3」に対応付けてレコードID「6」を対応付けて格納する。その後、キャッシュ判定部321は、属性情報ID「3」の属性情報から、属性値「データ10」を取得し、応答処理部323に出力する。
最後に、キャッシュ判定部321による処理のうち、キャッシュ311にキー情報が記憶されておらず、データベースサーバ200から属性情報を取得できなかった場合における処理について説明する。この場合、キャッシュ判定部321は、「データなし」をクライアント100に送信する。
IR情報判定部322は、データベースサーバ200にIR情報要求を送信する。例えば、IR情報判定部322は、定期的にIR情報要求を送信したり、任意のタイミングにてIR情報要求を送信したりする。また、IR情報判定部322は、IR情報要求に対するIR情報をデータベースサーバ200から受信することで、データベースサーバ200から、自キャッシュサーバ300向けのIR情報として、ユーザ情報DB211に記憶された属性値のうち更新された属性値を示す「キー情報(K1、K2、K3)」を取得する。
IR情報判定部322は、データベースサーバ200から受信したIR情報を用いて、キャッシュ311を更新する。つまり、IR情報判定部322は、キャッシュ311情報の最新化を行う。IR情報に含まれるキー情報が(K1、K2、K3)である場合を用いて説明する。IR情報判定部322は、IR情報の「キー情報(K1、K2、K3)」に基づき、自装置のキャッシュ311にキー情報(K1、K2、K3)と一致するキー情報が記憶されている場合には、自装置のキャッシュ311から「キー情報(K1、K2、K3)」と、「キー情報(K1、K2、K3)」に対応付けられた「属性値」とを削除する。つまり、IR情報判定部322は、後述するキャッシュ削除処理を実行したり、キャッシュ判定部321にキャッシュ削除処理を実行させたりする。
また、IR情報判定部322は、IR情報に基づいてキャッシュ311を更新すると、IR情報に含まれるキー情報を含むIR情報削除要求をデータベースサーバ200に送信することで、データベースサーバ200から受信したIR情報をデータベースサーバ200から削除する。
図8を用いて具体的に説明する。また、IR情報に含まれるキー情報(K1、K2、K3)が、「ServiceName−001、User Type−001、AccountType−001」である場合を用いて説明する。言い換えると、「ServiceName−001、User Type−001、AccountType−001」により特定される属性値が、更新されたか、新たに格納された場合を用いて説明する。この場合、例えば、IR情報判定部322は、最初に、キー情報からハッシュ値を算出する。以下では、ハッシュ値「1」が算出された場合を用いて説明する。IR情報判定部322は、ハッシュ値「1」に対応するレコードID「1」をキャッシュ311のハッシュテーブルから取得し、レコードID「1」に対応するレコードをキャッシュ311のレコードテーブルから取得する。そして、IR情報判定部322は、レコードID「1」を含むレコードをキャッシュ311のレコードテーブルから削除する。また、IR情報判定部322は、このタイミングにて、ハッシュテーブルからも、該当のレコードを削除するという動作を行う。また、IR情報判定部322は、取得したレコードID「1」を含むレコード内にある属性情報ID「0」を取得し、属性情報ID「0」を含むレコードをキャッシュ311の属性情報テーブルから取得し、参照元レコード一覧からレコードID「1」を削除する。ここで、上述した例では、属性情報テーブルから取得したレコードの参照元レコード一覧には、レコードID「0」「4」が残っており、IR情報判定部322は、属性情報テーブルから取得したレコードそのものは削除しない。ただし、IR情報判定部322は、参照元レコード一覧からレコードIDを削除することで、参照元レコードID一覧にレコードIDが存在しなくなる場合には、取得したレコードそのものを属性情報テーブルから削除する。また、IR情報判定部322は、データベースサーバ200に、キー情報として「ServiceName−001、User Type−001、AccountType−001」を含むIR情報削除要求を送信する。
ここで、キー情報(K1、K2、K3)にANY要素が含まれている場合について説明する。この場合、IR情報に含まれるキー情報により示される属性値に、複数のレコードが対応付けられていることがある。このことを踏まえ、IR情報判定部322は、削除対象の属性値の参照元レコード一覧を用いて、IR情報に含まれるキー情報により示される属性値を参照する全てのキー情報を削除する。
例えば、IR情報に含まれるキー情報(K1、K2、K3)が、「ServiceName−003、User Type−001、ANY」である場合を用いて説明する。言い換えると、「ServiceName−003、User Type−001、ANY」により特定される属性値が、更新されたか、新たに格納された場合を用いて説明する。この場合、IR情報判定部322は、最初に、キー情報からハッシュ値を算出する。以下では、ハッシュ値「4」が算出された場合を用いて説明する。IR情報判定部322は、ハッシュ値「4」に対応するレコードID「5」をキャッシュ311のハッシュテーブルから取得し、レコードID「5」に対応するレコードをキャッシュ311のレコードテーブルから取得する。そして、IR情報判定部322は、取得したレコードに含まれる属性情報ID「3」を取得し、属性情報ID「3」を含むレコードをキャッシュ311の属性情報テーブルから取得する。そして、IR情報判定部322は、属性情報テーブルから取得したレコードの参照元レコード一覧に含まれるレコードID「5」「6」のレコードを、キャッシュ311のレコードテーブルから削除する。また、IR情報判定部322は、このタイミングにて、ハッシュテーブルからも、該当のレコード(レコードID「5」「6」のレコード)を削除するという動作を行う。また、IR情報判定部322は、属性情報テーブルから、属性情報ID「3」のレコードを削除する。その後、IR情報判定部322は、データベースサーバ200に、キー情報として「ServiceName−003、User Type−001、ANY」を含むIR情報削除要求を送信する。
応答処理部323は、キャッシュ判定部321から受信した属性値をクライアント100に送信する。具体的には、応答処理部323は、キャッシュ判定部321から受信した属性値と、クライアント100から受信したデータ要求に含まれるキー情報とを含むデータ応答をクライアント100に送信する。なお、上述した説明では、応答処理部323が、クライアント100から受信したデータ要求に含まれるキー情報を含むデータ応答を送信する場合を例に示したが、これに限定されるものではなく、キー情報を含めなくても良い。
[データベースサーバのキャッシュ応答部による処理の流れ]
図9は、実施例1におけるデータベースサーバのキャッシュ応答処理による処理の流れの一例を示すフローチャートである。
図9に示すように、キャッシュ応答部221は、キャッシュサーバ300からデータ検索要求を受信すると(ステップS101)、受信したデータ検索要求から、キー情報K1〜KNを取得する(ステップS102)。
そして、キャッシュ応答部221は、キー情報から、応答データ判定表を得る(ステップS103)。具体的には、キャッシュ応答部221は、取得したキー情報をもとに、図5に示すような応答データ判定表を作成する。そして、キャッシュ応答部221は、ユーザ情報DB211から、応答データ判定表に合致するデータを全て取得する(ステップS104)。具体的には、キャッシュ応答部221は、応答データ判定表に記載されたキー情報と合致するデータが自装置内のユーザ情報DB211に存在するかを検索し、合致したデータ全てを取得する。
ここで、キャッシュ応答部221は、データが存在する場合には(ステップS105肯定)、検索結果のうち、応答データ判定表の最も優先度が高いデータをデータ応答とする(ステップS106)。具体的には、キャッシュ応答部221は、応答データ判定表の優先度が最も高いデータとなる属性値を検索結果として選択し、検索結果として属性値を選択した際に用いられた応答データ判定表のキー情報を部分特定情報要素(D1〜DN)として含むデータ応答であって、検索結果として取得した属性値を含むデータ応答をキャッシュサーバ300に送信する。一方、キャッシュ応答部221は、データが存在しない場合には(ステップS105否定)、キー情報なしを応答する(ステップS107)。つまり、キャッシュ応答部221は、データ検索要求に含まれるキー情報が自装置のユーザ情報DB211に存在しない旨を示すデータ応答をキャッシュサーバ300に送信する。
[データベースサーバのIR情報応答部による処理の流れ]
図10は、実施例1におけるIR情報応答部による処理の流れの一例を示すフローチャートである。
図10に示すように、IR情報応答部222は、キャッシュサーバ300からIR情報要求を受信すると(ステップS201)と、受信したIR情報要求から、要求元のキャッシュサーバ名を取得する(ステップS202)。つまり、IR情報応答部222は、IR情報要求の送信元となるキャッシュサーバ300のキャッシュサーバ名を取得する。
そして、IR情報応答部222は、自装置のIR情報DB212から、IR情報一覧を取得する(ステップS203)。つまり、IR情報応答部222は、取得したキャッシュサーバ名に対応するIR情報を全て取得する。
ここで、IR情報応答部222は、自装置のIR情報DB212に該当のデータが存在する場合には(ステップS204肯定)、つまり、取得したキャッシュサーバ名を含むIR情報がIR情報DB212に記憶されており、IR情報を取得した場合には、IR情報応答部222は、キャッシュサーバ名に対応するIR情報の一覧をIR情報応答としてキャッシュサーバ300に送信する(ステップS205)。言い換えると、IR情報応答部222は、IR情報要求の送信元となるキャッシュサーバ300に適用されるIR情報の一覧を送信する。一方、自装置のIR情報DB212に該当のデータが存在しない場合には(ステップS204否定)、IR情報応答部222は、「IR情報なし」を、キャッシュサーバ300に応答する(ステップS206)。つまり、IR情報がないことを示すIR情報応答をキャッシュサーバ300に送信する。
[データベースサーバのIR情報削除部による流れ]
図11は、実施例1におけるデータベースサーバのIR情報削除部による流れの一例を示すフローチャートである。
図11に示すように、IR情報削除部223は、キャッシュサーバ300からIR情報削除要求を受信すると(ステップS301)、受信したIR情報削除要求から、要求元キャッシュサーバ名と、削除対象となるキー情報(K1〜KN)を取得する(ステップS302)。
そして、IR情報削除部223は、自装置のIR情報DB212から、取得したキャッシュサーバ名とキー情報(K1〜KN)とに該当するレコードを削除する(ステップS303)。つまり、IR情報削除部223は、取得した「キャッシュサーバ名」及び「キー情報」に対応するIR情報がIR情報DB212に記憶されている場合には、IR情報DB212から該当のIR情報を削除する。そして、IR情報応答部222はIR削除応答をキャッシュサーバ300に送信する(ステップS304)。
[データベースサーバのユーザ情報更新部による処理]
図12は、実施例1におけるデータベースサーバのユーザ情報更新部による処理の流れの一例を示すフローチャートである。
図12に示すように、ユーザ情報更新部224は、登録対象データを受信すると(ステップS401)、受信した登録対象データから、対象データの操作(追加、更新、削除等)、操作対象となるレコードの「キー情報(K1〜KN)」及び「属性値」を取得する(ステップS402)。例えば、ユーザ情報更新部224は、利用者から登録対象データを受信する。なお、登録対象データには、例えば、操作内容を特定するための情報や、キー情報、属性値などが含まれる。
そして、ユーザ情報更新部224は、ユーザ情報DB211の「キー情報(K1〜KN)」のレコードを編集する(ステップS403)。具体的には、操作内容が「追加」である場合には、ユーザ情報更新部224は、登録対象データから取得した「キー情報」と「属性値」とを対応付けてユーザ情報DB211に格納する。また、操作内容が「更新」である場合には、ユーザ情報更新部224は、ユーザ情報DB211に記憶されたレコードのうち更新対象となるレコードの属性値を更新する。また、操作内容が「削除」である場合には、ユーザ情報更新部224は、登録対象データから取得したキー情報により特定されるレコードをユーザ情報DB211から削除する。
そして、ユーザ情報更新部224は、自装置に接続されるキャッシュサーバ名の一覧を取得する(ステップS404)。そして、ユーザ情報更新部224は、キャッシュサーバ名の一覧の先頭のキャッシュサーバ名を取得する(ステップS405)。そして、ユーザ情報更新部224は、IR情報DB212へ、ユーザ情報DB211へ格納した情報のキー情報部分を格納する(ステップS406)。つまり、ユーザ情報DB211は、取得したキャッシュサーバ名と、ユーザ情報DB211に対する操作対象となったレコードを特定するキー情報とを含むIR情報を生成し、IR情報DB212に格納する。例えば、ユーザ情報更新部224は、レコードを削除した場合には、削除されたレコードに含まれていたキー情報とキャッシュサーバ名とを含むIR情報を生成して格納する。
そして、ユーザ情報更新部224は、キャッシュサーバ名の一覧を全て処理したかを判定し、処理していない場合には(ステップS407否定)、キャッシュサーバ名の一覧から次のキャッシュサーバ名を取得し(ステップS408)、上述したステップS406に戻り、処理を繰り返す。一方、ユーザ情報更新部224は、キャッシュサーバ名の一覧を全て処理した場合には(ステップS407肯定)、処理を終了する。
[キャッシュサーバのキャッシュ判定部による処理の流れ]
図13は、実施例1におけるキャッシュサーバのキャッシュ判定部による処理の流れの一例を示すフローチャートである。
図13に示すように、キャッシュ判定部321は、クライアント100からデータ要求を受信すると(ステップS501)、受信したデータ要求からサービス特定情報要素(E1〜EN)を取得し、取得したサービス特定情報要素をキー情報として、キャッシュ311のハッシュテーブルを検索する(ステップS502)。例えば、キャッシュ判定部321は、データ要求から取得したサービス特定情報要素(E1〜EN)各々を事前に決定しておいた手法にて連結し、連結した値をxとして、ハッシュ関数h(x)の入力とする。そして、キャッシュ判定部321は、ハッシュ関数h(x)で計算されたハッシュ値を用いて、キャッシュ311のハッシュテーブルに記憶されたレコードを絞り込む。そして、キャッシュ判定部321は、絞り込んだレコードのリストにおいて、サービス特定要素(E1〜EN)と一致するキー情報(K1〜KN)を有するレコードを検索する。なお、キャッシュ判定部321は、「x」として、「E1〜EN」の連結を用いる場合を用いて説明したが、これに限定されるものではなく、任意の手法を用いて良い。例えば、キャッシュ判定部321は、「E1〜EN」に対する特定の演算により「x」を導出して用いても良く、「E1〜EN」までのN個の値をパラメータとする関数を、ハッシュ関数として用いても良い。
ここで、キャッシュ311のハッシュテーブルにキー情報として「E1〜EN」を持つレコードが存在しない場合には(ステップS503否定)、キャッシュ判定部321は、サービス特定情報要素(E1〜EN)をキー情報として含むデータ検索要求をデータベースサーバ200に送信する(ステップS504)。そして、キャッシュ判定部321は、データベースサーバ200から、データ検索要求に対するデータ応答として、部分特定情報要素(D1〜DN)と、属性値を受信する(ステップS505)。ここで、データベースサーバ200からのデータ応答が、検索結果なしの場合には(ステップS506否定)、キャッシュ判定部321は、キー情報なしとし(ステップS509)、応答処理部323に結果を出力する(ステップS514)。
一方、上述したステップS506に戻り、データベースサーバ200からの検索結果が検索結果ありの場合には(ステップS506肯定)、キャッシュ判定部321は、サービス特定情報要素(E1〜EN)、データベースサーバ200からのデータ応答に含まれる部分特定情報要素(D1〜DN)、データベースサーバ200からのデータ応答に含まれる属性値、有効期限情報として、事前に決定しておく有効期限情報計算方法の結果を用いて、キャッシュ登録処理を行う(ステップS507)。なお、キャッシュ登録処理の流れについては、図14を用いて後述する。
キャッシュ登録処理が完了すると、キャッシュ判定部321は、キャッシュ登録処理の結果としてキャッシュ311に登録されたレコードを取得し、取得したレコードに含まれる属性情報IDから属性情報を取得(ステップS508)し、属性情報から属性値を取得する(ステップS513)。つまり、キャッシュ判定部321は、取得したレコードに含まれる属性情報IDを含むレコードをキャッシュ311の属性情報テーブルから取得し、取得したレコードに含まれる属性値を取得する。そして、キャッシュ判定部321は、応答処理部323へ結果を出力する(ステップS514)。つまり、キャッシュ判定部321は、取得した属性値を応答処理部323に出力する。
また、上述したステップS503に戻り、キャッシュ311のハッシュテーブルにキー情報としてE1〜ENを持つレコードが存在する場合には(ステップS503肯定)、キャッシュ判定部321は、レコード内の属性情報IDから属性情報を取得し、属性情報から有効期限情報を取得する(ステップS510)。ここで、属性情報の有効期限が切れていない場合(ステップS511否定)、キャッシュ判定部321は、属性情報から属性値を取得(ステップS513)し、取得した属性値を用いて、応答処理部323へ属性値を出力する(ステップS514)。
また、上述したステップS511に戻り、属性情報の有効期限が切れていた場合には(ステップS511肯定)、キャッシュ判定部321は、サービス特定情報要素(E1〜EN)を、キー情報として、キャッシュ削除処理を行う(ステップS512)。なお、キャッシュ削除処理については、図15を用いて後述する。キャッシュ削除処理では、指定されたキー情報のレコードがキャッシュ311のハッシュテーブルに存在する場合、該当するレコードをハッシュテーブルから削除する。その後、キャッシュ判定部321は、キャッシュ削除処理が完了すると、ステップS504以降の処理を継続する。
[キャッシュ登録処理の流れ]
図14は、実施例1におけるキャッシュ登録処理の流れの一例を示すフローチャートである。
図14に示すように、キャッシュ判定部321は、サービス特定情報要素(E1〜EN)、部分特定情報要素(D1〜DN)、属性値、有効期限情報を取得する(ステップS601)。そして、キャッシュ判定部321は、部分特定情報要素(D1〜DN)をキー情報としてハッシュ値を算出し、キャッシュ311のハッシュテーブルを検索する(ステップS602)。
ここで、キャッシュ311のハッシュテーブルにレコードが存在しない場合には(ステップS603否定)、キャッシュ判定部321は、属性値、有効期限情報を用いて新たな属性情報を作成する(ステップS604)。例えば、キャッシュ判定部321は、取得した属性値と有効期限情報に加えて、新たに付与した属性情報IDを含むレコードをキャッシュ311の属性情報テーブルに格納する。そして、作成した属性情報の属性情報IDを取得(ステップS605)し、キャッシュ311のレコードテーブルに、新たなレコードIDを付与した上で、キー情報(D1〜DN)と作成した属性情報IDとを対応付けてレコードを追加するとともに、新たに付与したレコードIDをハッシュテーブルに追加する(ステップS606)。
具体的には、キャッシュ判定部321は、部分特定情報要素(D1〜DN)を、事前に決定しておいた方法を用いて連結し、連結した値をxとして、ハッシュ関数h(x)の入力とする。そして、キャッシュ判定部321は、ハッシュ関数h(x)で計算されたハッシュ値を用いて、ハッシュテーブルのレコードを絞り込み、絞り込んだレコードのリストに、レコードのキー情報としてD1〜DN、属性情報IDを設定したレコードを追加する。また、キャッシュ判定部321は、新たなレコードIDをハッシュテーブルに追加する。
そして、キャッシュ判定部321は、キャッシュ311のレコードテーブルに追加したレコードのレコードIDを取得し(ステップS607)、属性情報の参照元レコード一覧に、レコードIDを追加する(ステップS608)。つまり、キャッシュ判定部321は、上述したステップS604にて属性情報テーブルに格納したレコードの参照元レコード一覧に対して、上述したステップS606にてレコードテーブルに格納したレコードのレコードIDを追加する。
そして、キャッシュ判定部321は、ステップS601にて取得しているサービス特定情報要素(E1〜EN)と、部分特定情報要素(D1〜DN)の各要素をそれぞれ比較し、各要素が全て等しい場合には(ステップS613肯定)、ハッシュテーブルに新たに追加したレコードを返却(ステップS617)し、処理を終了する。
また、ステップS613に戻り、サービス特定情報要素(E1〜EN)と、部分特定情報要素(D1〜DN)の各要素が異なった場合には(ステップS613否定)、キャッシュ判定部321は、レコードテーブルに、新たにレコードIDを付与した上で、キー情報としてサービス特定情報要素(E1〜EN)と、属性情報IDとを対応付けてレコードを追加し、新たに付与したレコードIDをハッシュテーブルに追加する(ステップS614)。
そして、キャッシュ判定部321は、キャッシュ311のレコードテーブルに追加したレコードのレコードIDを取得し(ステップS615)、属性情報の参照元レコード一覧に、レコードIDを追加する(ステップS616)。その後、ハッシュテーブルに新たに追加したレコードを返却(ステップS617)し、処理を終了する。
また、ステップS603に戻り、レコードテーブルにレコードが存在する場合には(ステップS603肯定)、キャッシュ判定部321は、該当するレコード内の属性情報IDから、属性情報を取得し、属性情報に含まれる有効期限情報を取得する(ステップS609)。そして、キャッシュ判定部321は、属性情報の有効期限情報が、有効期限切れでない場合には(ステップS610否定)、該当するレコードの属性情報IDから、属性情報を取得し(ステップS611)、ステップS613以降の処理を継続する。
一方、ステップS610に戻り、属性情報の有効期限情報が有効期限切れであった場合には(ステップS610肯定)、部分特定情報要素(D1〜DN)をキー情報として、キャッシュ削除処理を行う。キャッシュ削除処理では、キャッシュ判定部321は、指定されたキー情報のレコードがハッシュテーブルに存在する場合、そのレコードをハッシュテーブルから削除する。その後、キャッシュ判定部321は、キャッシュ削除処理が完了すると、ステップS604以降の処理を継続する。
[キャッシュ削除処理の流れ]
図15には、実施例1におけるキャッシュ削除処理の流れの一例を示すフローチャートである。以下では、サービス特定情報要素(K1〜KN)をキー情報として、キャッシュ削除処理を行う場合を例に説明する。以下では、キャッシュ判定部321を例に説明するが、これに限定されるものではなく、IR情報判定部322が実行しても良い。
図15に示すように、キャッシュ判定部321は、削除対象を示すキー情報であるサービス特定情報要素(K1〜KN)を取得する(ステップS701)。そして、キャッシュ判定部321は、サービス特定情報要素(K1〜KN)をキー情報としてハッシュ値を算出し、キャッシュ311のハッシュテーブルを検索する(ステップS702)。そして、キャッシュ判定部321は、ハッシュテーブルにレコードが存在しない場合には(ステップS703否定)、削除対象のレコードは存在しないため、処理を終了する。
一方、ハッシュテーブルにレコードが存在する場合には(ステップS703肯定)、キャッシュ判定部321は、有効期限切れに基づく削除として呼び出されたものかを判定する(ステップS704)。ここで、有効期限切れによる削除ではない場合には(ステップS704否定)、キャッシュ判定部321は、キー情報K1〜KN対応するレコードの中に、ANY要素があるかを判定する(ステップS705)。ここで、キー情報K1〜KNにANY要素がない場合には(ステップS705否定)、キャッシュ判定部321は、キー情報K1〜KNに対応するレコードから属性情報IDを取得し(ステップS706)、属性情報IDで示される属性情報から、参照元レコード一覧を取得する(ステップS707)。つまり、キャッシュ判定部321は、属性情報IDを含むレコードを属性情報テーブルから取得し、取得したレコードに含まれる参照元レコード一覧を取得する。
そして、キャッシュ判定部321は、参照元レコード一覧からレコードを削除する(ステップS708)。つまり、キャッシュ判定部321は、参照元レコード一覧に存在するレコードIDから、キー情報K1〜KNに対応するレコードIDを削除する。ここで、ステップS708の結果、参照元レコード一覧が空のリストとなった場合には(ステップS709肯定)、キャッシュ判定部321は、参照元レコード一覧が空となった属性情報を削除する(ステップS710)。つまり、キャッシュ判定部321は、参照元レコード一覧が空となったレコードを属性情報テーブルから削除する。そして、キャッシュ判定部321は、キー情報K1〜KNを用いて、レコードテーブルからレコードを削除するとともに、ハッシュテーブルからレコードIDを削除する(ステップS711)。一方、ステップS709に戻り、参照元レコード一覧が空のリストとならなかった場合(ステップS709否定)、ステップS711からの処理を継続する。
次に、ステップS704に戻り、有効期限切れによる削除の場合(ステップS704肯定)、又は、ステップS705に戻り、キー情報の中にANY要素がある場合(ステップS705肯定)について説明する。なお、有効期限切れによる削除の場合とは、例えば、図13のステップS511において、有効期限切れであるとしてキャッシュ削除処理が実行される場合が該当する。
この場合、キャッシュ判定部321は、該当のレコードから属性情報IDを取得(ステップS712)し、属性情報IDで示される属性情報から参照元レコード一覧を取得する(ステップS713)。そして、キャッシュ判定部321は、参照元レコード一覧の最初のレコードIDを取得する(ステップS714)。その後、キャッシュ判定部321は、取得したレコードIDで示されるレコードをキャッシュ311のレコードテーブルから取得し、取得したレコードのキー情報がキー情報K1〜KNと合致する場合に取得したレコードをレコードテーブルから削除するとともに、ハッシュテーブルからレコードIDを削除する(ステップS715)。
そして、キャッシュ判定部321は、参照元レコード一覧の全てのレコードIDをハッシュテーブルから削除していない場合には(ステップS716否定)、参照元レコード一覧の次のレコードIDを取得し(ステップS717)、ステップS715の処理を継続する。
また、ステップS716に戻り、参照元レコードの全てのレコードIDで示されるレコードをハッシュテーブルから削除した場合には(ステップS716肯定)、キャッシュ判定部321は、属性情報を削除し(ステップS718)、処理を終了する。つまり、キャッシュ判定部321は、ステップS712にて取得した属性情報IDを含むレコードを属性情報テーブルから削除する。
[キャッシュサーバのIR情報判定部による処理の流れ]
図16は、実施例1におけるキャッシュサーバのIR情報判定部による処理の流れの一例を示すフローチャートである。
図16に示すように、IR情報判定部322は、定期的にデータベースサーバ200へIR情報要求を送信し(ステップS801)、データベースサーバ200からIR情報の一覧を受信する(ステップS802)。
そして、IR情報判定部322は、受信したIR情報一覧が存在する場合(ステップS803肯定)、つまり、データベースサーバ200からIR情報を受信したIR情報応答にIR情報が含まれている場合には、IR情報の一覧の先頭のIR情報を取得し(ステップS804)、IR情報から、キー情報K1〜KNを取得する(ステップS805)。そして、IR情報判定部322は、キー情報K1〜KNを用いて、図15で示されるキャッシュ削除処理を行い(ステップS806)、キャッシュ削除処理終了後、データベースサーバ200に該当のIR情報について、IR情報削除要求を送信する(ステップS807)。つまり、IR情報判定部322は、キャッシュサーバ300においてキー情報K1〜KNを含むレコードについて削除されたことを踏まえ、キャッシュサーバ300に適用済みとなったIR情報を削除する旨の指示をデータベースサーバ200に送信する。
その後、全てのIR情報を処理していない場合には(ステップS808否定)、IR情報判定部322は、IR情報の一覧から次のIR情報を取得し(ステップS809)、ステップS805からの処理を繰り返す。
一方、ステップS803に戻り、IR情報の一覧が存在しない場合には(ステップS803否定)、又は、ステップS808に戻り、全てのIR情報を処理した場合には(ステップS808肯定)、IR情報判定部322は、処理を終了する。
[キャッシュサーバの応答部による処理の流れ]
図17は、実施例1におけるキャッシュサーバの応答部による処理の流れの一例を示すフローチャートである。
図17に示すように、応答処理部323は、キャッシュ判定部321から指定された属性情報をクライアントへの応答として組み立てる(ステップS901)。つまり、応答処理部323は、キャッシュ判定部321から受信した属性値と、クライアント100から受信したデータ要求に含まれるキー情報とを含むデータ応答を生成したり、キー情報がないことを示すデータ応答を生成したりする。なお、上述した説明では、応答処理部323が、クライアント100から受信したデータ要求に含まれるキー情報を含むデータ応答を送信する場合を例に示したが、これに限定されるものではなく、キー情報を含めなくても良い。
そして、応答処理部323は、生成したデータ応答をクライアント100に送信し(ステップS902)、処理を終了する。
[実施例1による効果]
少なくとも1種類の特定情報により特定されるデータごとに、データを特定するための特定情報と、複数ある特定情報の種類のうちデータを特定する際に用いられない種類である非特定種類を示す非特定種類情報との組み合わせと対応付けて記憶する。また、キャッシュサーバ300は、データベースサーバ200に記憶されたデータの少なくとも一部について、特定情報と非特定種類情報との組み合わせと、複数種類の特定情報の組み合わせとのうち少なくとも一つと対応付けて記憶するキャッシュ311を有する。ここで、キャッシュサーバ300は、データ要求を受信すると、データ要求に含まれる複数種類の特定情報各々の組み合わせがキャッシュに記憶されているかを判定し、記憶されていないと判定した場合に、データ要求に含まれる組み合わせをデータベースサーバ200に送信する。また、データベースサーバ200は、キャッシュサーバ300により送信された組み合わせである組み合わせを受信すると、受信した組み合わせである受信組み合わせに相当する特定情報と非特定種類情報との組み合わせと、特定情報と非特定種類情報との組み合わせに対応付けられたデータとを記憶部から取得し、キャッシュサーバ300に応答する。また、キャッシュサーバ300は、データベースサーバ200により送信された特定情報と非特定種類情報との組み合わせがキャッシュ311に記憶されている場合には、記憶されていた特定情報と非特定種類情報との組み合わせに対応付けられるデータと対応付けて、受信組み合わせをキャッシュ311に格納する。また、データベースサーバ200は、キャッシュ311に記憶されていない場合には、データベースサーバ200により送信されたデータと対応付けて、データベースサーバ200により送信された特定情報と非特定種類情報との組み合わせと、受信組み合わせとをキャッシュ311に格納する。また、キャッシュサーバ300は、キャッシュ311に記憶されていると判定された場合には、キャッシュ311からデータを取得してデータ要求の送信元に送信し、記憶されていないと判定した場合には、データベースサーバ200により送信されたデータをデータ要求の送信元に送信する。この結果、適切に検索可能となる。
具体的には、ANY要素を有するデータ構造のデータベースサーバとキャッシュサーバとを組み合わせ可能となる。また、データベースサーバからデータを抽出する上で必要となる特定情報の集合が受信時点において不明である場合が想定される状況下においても、キャッシュの容量を節約することが可能であり、一度の検索で抽出できることで検索性能の低下を防止可能となる。
すなわち、例えば、キャッシュ311では、データが複数のキー情報と共有される結果、キャッシュ311の容量を節約することが可能となる。また、キャッシュサーバ300は、一度の検索において、キャッシュにデータが記憶されているか否かを判定可能となり、検索性能の低下を防止可能となる。
また、データベースサーバ200では、{E1,ANY,…ANY}という1レコードで複数のキー情報を表現可能となり、データベースサーバ200の記憶装置の消費を防止可能となる。また、キャッシュサーバ300では、複数の属性値が複数のキー情報と対応付けられる結果、メモリ等の記憶装置に冗長に持つことを防止可能となる。このように、実施例1によれば、属性値が複数のキー情報にて共有される結果、キャッシュ311の容量を節約可能となる。
また、上述したように、データ要求に含まれる複数種類の特定情報各々の組み合わせがキャッシュ311に記憶されているかの判定を、ハッシュ値を用いて実行することで、キャッシュ311に記憶されているかを迅速に判定可能となる。
また、データベースサーバ200は、データごとに、データを特定する際に用いられる特定情報種類に属する特定情報と、非特定種類情報との組み合わせを対応付けて記憶する。また、データベースサーバ200は、キャッシュサーバ300により送信された受信組み合わせを受信すると、組み合わせに相当する特定情報と非特定種類情報との組み合わせ各々のうち一つを選択し、選択した特定情報と非特定種類情報との組み合わせと、選択した組み合わせに対応付けて記憶されたデータとを送信する。この結果、データベースサーバ200が、ANY要素を含むレコードを記憶することで、記憶部にて使用される容量を節約することが可能となる。
実施例1に加えて、キャッシュサーバ300が、非特定種類情報を含む組み合わせと属性値とを受信した場合に、受信した属性値を、非特定種類情報に適用される可能性がある特定情報各々に特定種類情報を置き換えた組み合わせ各々と共有する場合について説明する。
すなわち、例えば、ANY要素を含む組み合わせをキャッシュサーバ300が受信すると、受信した組み合わせに含まれるANY要素を、ANY要素に適用される可能性がある特定情報各々に置き換えた組み合わせ各々を生成し、生成した組み合わせ各々についても、受信したデータと対応付けてキャッシュ311に格納しても良い。以下では、実施例1と異なる点について説明し、その他の点については適宜説明を省略する。
[実施例2におけるキャッシュサーバの構成]
実施例2におけるキャッシュサーバでは、キャッシュ判定部321b以外については、実施例1と同様であり、説明を省略する。
実施例2において、キャッシュ判定部321bは、クライアント100から受信したデータ要求から、サービス特定情報要素(E1、E2、E3)を取得し、これを、キー情報として、キャッシュ311に記憶される属性情報を検索する。キャッシュ判定部321bはキャッシュ311検索の結果に応じた処理を行い、応答を行う。
キャッシュ311にキー情報が記憶されておらず、データベースサーバ200から属性情報を取得できた場合における処理について説明する。すなわち、クライアント100からのデータ要求から取得したキー情報がキャッシュ311に記憶されていない場合について説明する。
この場合、キャッシュ判定部321bは、データ要求から取得したキー情報を含むデータ検索要求をデータベースサーバ200に送信する。例えば、キャッシュ判定部321は、サービス特定情報要素(E1、E2、E3)を含むデータ検索要求をデータベースサーバ200に送信する。その後、キャッシュ判定部321は、データベースサーバ200から、データ検索結果として、部分特定情報要素(D1、D2、D3)と属性値とを含むデータ応答を受信する。
ここで、キャッシュ判定部321bは、部分特定情報要素(D1、D2、D3)が、自装置のキャッシュ311に既に存在する場合には、事前にキャッシュ311上に展開されるべき、サービス特定情報要素(E1、E2、E3)と、部分特定情報要素(D1、D2、D3)の対応が取れていないと判断し、部分特定情報要素(D1、D2、D3)を用いてキャッシュ311を削除した上で、部分特定情報要素(D1、D2、D3)がキャッシュ311に既に存在しない場合における処理を実行する。なお、部分特定情報要素(D1、D2、D3)がキャッシュ311に既に存在しない場合における処理については後述する。
なお、実施例2の場合には、ANY要素が得られた場合には、ANY要素に適用される可能性のある特定情報の組み合わせ各々を生成し、受信した属性値と対応付けてキャッシュ311に予め登録しておくことになる。この結果、データベースサーバ200に問い合わせる際には、キャッシュ311に対応するレコードが何も記憶されていない場合となり、データベースサーバ200に問い合わせが行われない際には、キャッシュ311に対応するレコードがすべて記憶されている場合となる。このことを踏まえ、キャッシュ判定部321bは、問い合わせたにもかかわらず、データベースサーバ200から受信した部分特定情報要素(D1、D2、D3)が、自装置のキャッシュ311に既に存在する場合には、おかしいと判断し、キャッシュ311から削除した上で一連の処理を実行する。
図7を用いて具体的に説明する。データ要求から取得したキー情報(K1、K2、K3)が「ServiceName−001、UserType−001、AccountType−002」である場合を用いて説明する。キャッシュ判定部321bは、キー情報からハッシュ値を算出する。以下では、キャッシュ判定部321bにより算出されたハッシュ値が「2」である場合を用いて説明する。ここで、キャッシュ判定部321bは、キャッシュ311のハッシュテーブルには、ハッシュ値「2」に対応付けられたレコードIDが存在しないため、キー情報(K1、K2、K3)を含むデータ検索要求をデータベースサーバ200に送信する。例えば、キャッシュ判定部321bは、データベースサーバ200から、部分特定情報要素(D1、D2、D3)として、「ServiceName−001、ANY、ANY」とを含み、属性値「データ1」とを含むデータ応答を受信する。その後、キャッシュ判定部321は、部分特定要素(D1、D2、D3)をキー情報として、自装置のキャッシュ311のハッシュテーブルを検索する。ここで、キャッシュ判定部321は、レコードID「0」が得られた場合には、キャッシュ311のレコードテーブルからレコードID「0」に対応付けられる属性情報ID「0」を取得する。そして、キャッシュ判定部321bは、属性情報ID「0」を含むレコードを属性情報テーブルから取得し、取得したレコードの参照元レコード一覧に含まれるレコードID「0」「1」を取得し、レコードID「0」「1」を含むレコードをキャッシュ311のレコードテーブルから削除する。また、キャッシュ判定部321bは、属性情報ID「0」を含むレコードを属性情報テーブルから削除する。
キャッシュ311にキー情報が記憶されておらず、データベースサーバ200から受信したデータ応答に含まれる部分特定情報要素(D1、D2、D3)がキャッシュ311に存在しない場合における処理について説明する。以下では、データベースサーバ200からデータ応答を受信した後の処理について説明する。
キャッシュ判定部321bは、データベースサーバ200から受信した部分特定情報要素(D1、D2、D3)と、データベースサーバから取得した属性値とについて、キャッシュ登録処理を実行する。
また、キャッシュ判定部321bは、データベースサーバ200から受信した部分特定情報要素のうち、ANY要素となっているカラムを取得する。そして、キャッシュ判定部321bは、ANY要素が存在する各々のカラムの位置から、事前に決定されているANY要素に入る可能性があるサービス特定情報要素の値の一覧を取得する。そして、キャッシュ判定部321bは、カラム各々のサービス特定情報要素の値の一覧を組み合わせ、ANY要素を展開したサービス特定情報要素の一覧を算出する。その後、キャッシュ判定部321bは、既にキャッシュ311に格納した属性情報を、算出したサービス特定情報要素の一覧のそれぞれのサービス特定情報要素(E1、E2、E3)の組み合わせに対応させたレコードを登録する。すなわち、キャッシュ判定部321bは、算出したサービス特定情報要素の一覧各々と、データベースサーバ200から取得した属性値とについて、キャッシュ登録処理を実行する。また、この際、キャッシュ判定部321bは、キャッシュ311の属性情報テーブルの参照元レコード一覧に、算出したサービス特定情報要素の一覧各々に対応するレコードIDを追加する。その後、キャッシュ判定部321bは、データベースサーバ200から受信した属性値を応答処理部323に出力する。
図18−1〜図18−3を用いて具体的に説明する。図18−1〜図18−3は、実施例2におけるキャッシュに記憶された情報の一例を示す図である。図18−1〜図18−3に示す例では、キャッシュ311が、ハッシュテーブルと、レコードテーブルと、属性情報テーブルとを有する場合を示した。図18−1〜図18−3は、実施例2におけるハッシュテーブルと、レコードテーブルと、属性情報テーブルとの一例を示す。また、以下では、キャッシュ判定部321bが、クライアント100から受信したデータ要求にキー情報(K1、K2、K3)が「ServiceName−001、UserType−001、AccountType−001」が含まれていた場合を用いて説明する。また、以下では、キャッシュ判定部321bが、データベースサーバ200から、部分特定情報要素(D1、D2、D3)として、「ServiceName−001、ANY、ANY」を含み、属性値「データ1」を含むデータ応答を受信した場合を用いて説明する。
この場合、キャッシュ判定部321bは、データベースサーバ200からのデータ応答に含まれる部分特定要素(D1、D2、D3)をキー情報として、自装置のキャッシュ311を確認する。つまり、キャッシュ判定部321bは、部分特定要素(D1、D2、D3)からハッシュ値を算出し、算出したハッシュ値を用いてキャッシュ311のハッシュテーブルを検索する。以下では、算出されたハッシュ値が「0」であるものとして説明する。図18−1に示す例では、ハッシュテーブルのハッシュ値「0」にはレコードIDが存在しない。この場合、キャッシュ判定部321bは、新たに付与した属性情報ID「0」と属性値「データ1」とを含むレコードをキャッシュ311の属性情報テーブルに格納する。そして、キャッシュ判定部321bは、新たに付与したレコードID「0」と、キー情報として部分特定情報要素(D1、D2、D3)「ServiceName−001、ANY、ANY」と、属性情報ID「0」とを含むレコードをキャッシュ311のレコードテーブルに格納する。また、キャッシュ判定部321bは、属性情報ID「0」を含む属性情報テーブルに記憶されたレコードの参照元レコード一覧に対して、レコードID「0」を追加し、キャッシュ311のハッシュテーブルのハッシュ値「0」に対応付けてレコードID「0」を格納する。
また、キャッシュ判定部321bは、部分特定要素(D1、D2、D3)のうち、ANYとなっている要素である、D2、D3の要素の、事前に決定されているサービス特定要素の値の一覧をそれぞれ得る。図19は、実施例2における事前に決定されているサービス特定要素の値の一覧の例である。図19に示す例では、部分特定要素「D2」がANYであった場合には、「UserType−001」又は、「UserType−002」を取りうることを示し、D3がANYであった場合には、「AccountType−001」又は、「AccountType−002」を取りうることを示す。図19に示す一覧は、例えば、予め生成されたり、キャッシュ判定部321bにより適宜生成されたりする。ここで、キャッシュ判定部321bは、ANYとなっているカラムの全ての組み合わせをサービス特定要素の一覧として算出する。例えば、ANYではない要素(D1)の値である「ServiceName−001」と、図19により示されるD2及びD3のサービス特定要素の値の一覧から、以下に記載する組み合わせ各々を算出する。なお、図19に示す一覧は、データベースシステム一意の情報であり、キャッシュサーバ内に格納されている。
組み合わせ(1){ServiceName−001, UserType−001, AccountType−001},
組み合わせ(2){ServiceName−001, UserType−001, AccountType−002},
組み合わせ(3){ServiceName−001, UserType−002, AccountType−001},
組み合わせ(4){ServiceName−001, UserType−002, AccountType−002}
以下では、上述した組み合わせ(1)〜組み合わせ(4)から算出されるハッシュ値が、それぞれ「1」〜「4」であるものとして説明する。この場合、例えば、キャッシュ判定部321bは、キャッシュ311のレコードテーブルに対して、レコードID「1」と、キー情報として組み合わせ(1)と、属性情報ID「0」とを含むレコードを追加し、属性情報ID「0」を含む属性情報テーブルに格納されたレコードの参照元レコード一覧にレコードID「1」を追加し、ハッシュテーブルのハッシュ値「1」に対応付けてレコードID「1」を格納する。また、同様に、キャッシュ判定部321bは、他の組み合わせについても処理を実行する。図20−1〜図20−3は、実施例2におけるキャッシュ判定部によるレコード登録処理後のキャッシュに記憶された情報の一例を示す図である。図20−1〜図20−3は、それぞれ、キャッシュ311のハッシュテーブルと、レコードテーブルと、属性情報テーブルとに対応する。
[キャッシュ登録処理の流れ]
図21は、実施例2におけるキャッシュ登録処理の一例を示すフローチャートである。なお、図21に示す一連の処理のうち、S1001〜S1003、S1005〜S1010、S1019は、それぞれ、図14におけるステップS601〜S603、S604〜S608、S613、S617に対応する。以下では、図14に示す一連の処理と異なる点について説明し、同様の点については適宜省略する。
図21に示すように、キャッシュ判定部321bは、サービス特定情報要素(E1〜EN)、部分特定情報要素(D1〜DN)、属性値、有効期限情報を取得し(ステップS1001)。部分特定情報要素(D1〜DN)をキー情報としてキャッシュ311のハッシュテーブルを検索する(ステップS1002)。
ここで、キャッシュ311のハッシュテーブルにレコードが存在しない場合には(ステップS1003否定)、キャッシュ311のレコードテーブルや属性情報テーブルにレコードを格納する(ステップS1005〜S1009)。その後、キャッシュ判定部321bは、サービス特定情報要素(E1〜EN)と、部分特定情報要素(D1〜DN)の各要素をそれぞれ比較し、各要素が全て等しい場合には(ステップS1010肯定)、ハッシュテーブルに新たに追加したレコードを返却し(ステップS1019)、処理を終了する。
一方、ステップS1010に戻り、キャッシュ判定部321bは、サービス特定情報要素(E1〜EN)と、部分特定情報要素(D1〜DN)の各要素が異なった場合について説明する(ステップS1010否定)。キャッシュ判定部321bは、部分特定情報要素(D1〜DN)の中で、ANYとなっているカラムに対応したサービス特定情報要素の値の一覧を取得する(ステップS1011)。例えば、キャッシュ判定部321bは、予め生成された図19に示す表に基づいて、サービス特定情報要素の一覧を取得する。
そして、キャッシュ判定部321bは、ANY要素となっている全てのカラムのサービス特定情報要素の値の一覧と、非ANY要素となっているカラムのサービス特定情報をもとに、ANY要素が示す、サービス特定情報要素の全ての組み合わせの一覧を取得する(ステップS1012)。そして、キャッシュ判定部321bは、サービス特定情報要素の全ての組み合わせの一覧の最初のサービス特定情報要素を取得する(ステップS1013)。
そして、キャッシュ判定部321bは、キャッシュ311のハッシュテーブルに、キー情報としてサービス特定情報要素(E1〜EN)と、属性情報IDを対応付けてレコードを追加する(ステップS1014)。つまり、キャッシュ判定部321bは、取得した組み合わせをキー情報として含み、ステップS1005にて付与した属性情報IDを含み、新たに付与したレコードIDを含むレコードをキャッシュ311のレコードテーブルに格納する。
そして、キャッシュ判定部321bは、キャッシュ311のレコードテーブルに追加したレコードのレコードIDを取得し(ステップS1015)、属性情報の参照元レコード一覧に、レコードIDを追加する(ステップS1016)。
そして、サービス特定情報要素の全ての組み合わせの一覧を全て処理した場合には(ステップS1017肯定)、キャッシュ判定部321bは、ハッシュテーブルに新たに追加したサービス特定情報要素(E1〜EN)に対応したレコードを返却(ステップS1019)し、処理を終了する。一方、ステップS1017に戻り、サービス特定情報要素の全ての組み合わせの一覧を全て処理していない場合には(ステップS1017否定)、キャッシュ判定部321bは、サービス特定情報要素の全ての組み合わせの一覧から、次のサービス特定情報要素を取得し、ステップS1014以降を継続する(ステップS1018)。
ステップS1003に戻り、ハッシュテーブルにレコードが存在する場合(ステップS1003肯定)について説明する。この場合、キャッシュ判定部321bは、部分特定情報要素(D1〜DN)をキー情報として、キャッシュ削除処理を行う(ステップS1004)。なお、キャッシュ削除処理の流れは、実施例1と同様であり、説明を省略する。そして、キャッシュ削除処理が完了すると、キャッシュ判定部321bは、ステップS1005以降の処理を継続する。
[実施例2の効果]
上述したように、実施例2によれば、キャッシュサーバ300は、組み合わせに含まれる非特定種類情報を、非特定種類情報に適用される可能性がある特定情報各々に置き換えた組み合わせ各々を生成し、生成した組み合わせ各々についても、データベースサーバ200により送信されたデータと対応付けてキャッシュ311に格納しておく。この結果、その後、キャッシュサーバ300には、ANY要素に対応する特定情報の組み合わせ各々が予めキャッシュ311に格納されることになり、キャッシュ311のヒット率を向上することが可能となる。