(57)【要約】      （修正有）【課題】レイテンシの異なる複数のメモリデバイスを用いて、データを保管するコンピュータにおけるデータアクセスを高速化する。【解決手段】データアクセス方法は、レイテンシが小さい第１メモリデバイスとレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域を有し、アドレスとキーとを対応付ける記録を記憶するコンピュータにより実行される。新しいキーで識別される追加データの保存要求を受け付けた場合に、第１メモリデバイスの空き容量が不足しているか否かを判定する。空き容量が不足している場合に、当該データ格納領域の一部のデータを第２メモリデバイスに移動させ、移動させた一部のデータに関する記録におけるアドレスを更新し、第１メモリデバイスに、追加データを格納し、追加データが格納されたアドレスと、新たなキーとを対応付ける記録を設定する。【選択図】図９
2017228211.tif 000002
【特許請求の範囲】
【請求項１】
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータに、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する判定処理と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる処理と、
移動させた前記一部のデータに関する前記記録における前記アドレスを更新する処理と、
前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する処理と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する処理と
を実行させるアクセスプログラム。
【請求項２】
前記判定処理において、前記追加データのサイズを基準として、前記空き容量が不足しているか否かを判定する
請求項１記載のアクセスプログラム。
【請求項３】
更に、
前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち、アクセス時点が古いデータを優先して移動対象として選択する処理
を含む請求項１又は２記載のアクセスプログラム。
【請求項４】
更に、
前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち、書き込み時点が古いデータを優先して移動対象として選択する処理
を含む請求項１又は２記載のアクセスプログラム。
【請求項５】
更に、
前記第２メモリデバイスの前記データ格納領域における空き容量が不足していると判定した場合に、当該データ格納領域に格納されているデータのうち一部のデータに関する前記記録をクリアする処理
を含む請求項１乃至４のうち１つ記載のアクセスプログラム。
【請求項６】
更に、
前記第２メモリデバイスの前記データ格納領域に格納されているデータのうち、アクセス時点が新しい一部のデータを復帰対象として選択する処理と、
前記復帰対象として選択された前記一部のデータを前記第１メモリデバイスの前記データ格納領域に移動させる処理と、
前記第１メモリデバイスの前記データ格納領域に移動させた前記一部のデータに関する前記記録における前記アドレスを更新する処理と
を含む請求項１乃至５のうち１つ記載のアクセスプログラム。
【請求項７】
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータに、
前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する処理と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる処理と、
移動させた前記一部のデータに関する前記記録における前記アドレスを更新する処理と
を含む第１ルーチン処理と、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記空き容量が充足されるタイミングを待って、前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する処理と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する処理と
を含む第２ルーチン処理と
を並行に実行させるアクセスプログラム。
【請求項８】
前記第１ルーチン処理は、更に、
前記第２メモリデバイスの前記データ格納領域における空き容量が不足していると判定した場合に、当該データ格納領域に格納されているデータのうち一部のデータに関する前記記録をクリアする処理
を含む請求項７記載のアクセスプログラム。
【請求項９】
前記コンピュータは、キャッシュサーバであり、
前記記録は、前記キーのハッシュ値をインデックスとするハッシュテーブルに設定され、
前記データ格納領域は、キャッシュ領域である
請求項１乃至８のうち１つ記載のアクセスプログラム。
【請求項１０】
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータにより実行されるデータアクセス方法であって、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する判定処理と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる処理と、
移動させた前記一部のデータに関する前記記録における前記アドレスを更新する処理と、
前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する処理と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する処理と
を含むデータアクセス方法。
【請求項１１】
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部と、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する判定部と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる移動部と、
移動させた前記一部のデータに関する前記記録における前記アドレスを更新する更新部と、
前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する格納処理部と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する設定部と
を含む情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の種類に係るメモリデバイスを用いてデータを保管する技術に関する。
【背景技術】
【０００２】
例えばＳＮＳ（Social Networking Service）のように、大量のユーザがアクセスするようなサービスにおいて、アクセスがＤＢＭＳ（Data Base Management System）に集中することがある。一般的にＤＢＭＳは低速なディスクが用いられているので、ＤＢＭＳにアクセスが集中するとレスポンスが悪化する。その結果、ユーザーエクスペリエンスの低下を招き、アクセス障害が生じることもある。
【０００３】
このような事態を回避するため、複数のサーバによる分散処理を行うキャッシュサービスが適用されることがある。この場合、複数のサーバは、それぞれレイテンシの小さいＤＲＡＭ（Dynamic Random Access Memory）を用いてデータをキャッシュする。
【０００４】
しかし、ＤＲＡＭは高価であるので、キャッシュサーバのコストは高い。これに対して、低価格のメモリデバイスを用いると、キャッシュサーバの処理性能が低くなるという問題がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−２００８８９号公報
【特許文献２】特表２０１５−５２２８８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、一側面では、レイテンシの異なる複数のメモリデバイスを用いてデータを保管するコンピュータにおけるデータアクセスを、より早めることである。
【課題を解決するための手段】
【０００７】
一態様に係るデータアクセス方法は、（Ａ）第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータにより実行されるデータアクセス方法であって、（Ｂ）新たなキーで識別される追加データの保存要求を受け付けた場合に、第１メモリデバイスのデータ格納領域における空き容量が不足しているか否かを判定する判定処理と、（Ｃ）上記空き容量が不足していると判定した場合に、第１メモリデバイスのデータ格納領域に格納されているデータのうち一部のデータを第２メモリデバイスのデータ格納領域に移動させる処理と、（Ｄ）移動させた一部のデータに関する記録におけるアドレスを更新する処理と、（Ｅ）第１メモリデバイスのデータ格納領域に、追加データを格納する処理と、（Ｆ）追加データが格納されたアドレスと、新たなキーとを対応付ける記録を設定する処理とを含む。
【０００８】
一態様に係るデータアクセス方法は、（Ｇ）第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータにより実行されるデータアクセス方法であって、（Ｈ）第１メモリデバイスのデータ格納領域における空き容量が不足しているか否かを判定する処理と、（Ｉ）上記空き容量が不足していると判定した場合に、第１メモリデバイスのデータ格納領域に格納されているデータのうち一部のデータを第２メモリデバイスのデータ格納領域に移動させる処理と、（Ｊ）移動させた一部のデータに関する記録におけるアドレスを更新する処理とを含む第１ルーチン処理と、（Ｋ）新たなキーで識別される追加データの保存要求を受け付けた場合に、上記空き容量が充足されるタイミングを待って、第１メモリデバイスのデータ格納領域に、追加データを格納する処理と、（Ｌ）追加データが格納されたアドレスと、新たなキーとを対応付ける記録を設定する処理とを含む第２ルーチン処理とを並行に実行する。
【発明の効果】
【０００９】
一側面としては、レイテンシの異なる複数のメモリデバイスを用いてデータを保管するコンピュータにおけるデータアクセスを、より早めることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、コンピュータシステムの動作概要を示す図である。
【図２】図２は、コンピュータシステムの動作概要を示す図である。
【図３】図３は、アイテム保存のシーケンスを示す図である。
【図４】図４は、アイテム取得のシーケンスを示す図である。
【図５】図５は、アイテム取得のシーケンスを示す図である。
【図６】図６は、キャッシュサーバのハードウエア構成例を示す図である。
【図７】図７は、メモリデバイスに対するキャッシュ領域の割り当ての例を示す図である。
【図８】図８は、アイテム保存の処理概要を示す図である。
【図９】図９は、アイテム保存の処理概要を示す図である。
【図１０】図１０は、アイテム保存の処理概要を示す図である。
【図１１】図１１は、アイテム保存の処理概要を示す図である。
【図１２】図１２は、アイテム取得の処理概要を示す図である。
【図１３】図１３は、キャッシュサーバのモジュール構成例を示す図である。
【図１４】図１４は、ハッシュテーブルの例を示す図である。
【図１５】図１５は、メイン処理フローを示す図である。
【図１６】図１６は、第１サブルーチン処理フローを示す図である。
【図１７】図１７は、アイテム追加処理（Ａ）フローを示す図である。
【図１８】図１８は、格納処理（Ａ）フローを示す図である。
【図１９】図１９は、第１移動処理フローを示す図である。
【図２０】図２０は、削除処理（Ａ）フローを示す図である。
【図２１】図２１は、第２サブルーチン処理（Ａ）フローを示す図である。
【図２２】図２２は、実施の形態２におけるハッシュテーブルの例を示す図である。
【図２３】図２３は、アイテム追加処理（Ｂ）フローを示す図である。
【図２４】図２４は、格納処理（Ｂ）フローを示す図である。
【図２５】図２５は、削除処理（Ｂ）フローを示す図である。
【図２６】図２６は、第２サブルーチン処理（Ｂ）フローを示す図である。
【図２７】図２７は、実施の形態３におけるアイテム保存の処理概要を示す図である。
【図２８】図２８は、アイテム追加処理（Ｃ）フローを示す図である。
【図２９】図２９は、削除処理（Ｃ）フローを示す図である。
【図３０】図３０は、第２移動処理フローを示す図である。
【図３１】図３１は、実施の形態４におけるキャッシュサーバのモジュール構成例を示す図である。
【図３２】図３２は、アイテム追加処理（Ｄ）フローを示す図である。
【図３３】図３３は、調整処理フローを示す図である。
【図３４】図３４は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１１】
［実施の形態１］
図１に、コンピュータシステムの動作概要を示す。この例におけるコンピュータシステムは、Ｗｅｂサーバ１０１、キャッシュサーバ１０３及びデータベースサーバ１０５を含む。Ｗｅｂサーバ１０１、キャッシュサーバ１０３及びデータベースサーバ１０５は、それぞれネットワーク（例えば、ＬＡＮ（Local Area Network））に接続している。
【００１２】
Ｗｅｂサーバ１０１が、所定データを取得しようとする場合のデータフローについて説明する。まず、Ｗｅｂサーバ１０１は、所定データの取得要求（Ｇｅｔ要求）をキャッシュサーバ１０３へ送信する（Ｓ１１１）。
【００１３】
このとき、キャッシュサーバ１０３に所定データがキャッシュされていれば、キャッシュサーバ１０３は、所定データをＷｅｂサーバ１０１へ返信する（Ｓ１１３）。
【００１４】
一方、キャッシュサーバ１０３に所定データがキャッシュされていない場合の流れについて、図２を用いて説明する。Ｓ１１１の場合と同様に、Ｗｅｂサーバ１０１は、所定データの取得要求をキャッシュサーバ１０３へ送信する（Ｓ２０１）。キャッシュサーバ１０３は、所定データがキャッシュされていないと判断した場合、「キャッシュなし」の旨を示す通知をＷｅｂサーバ１０１へ返信する（Ｓ２０３）。
【００１５】
Ｗｅｂサーバ１０１は、「キャッシュなし」の旨を示す通知を受信すると、改めてデータベースサーバ１０５へ所定データの取得要求を送信する（Ｓ２０５）。
【００１６】
データベースサーバ１０５は、所定データをデータベースから取得して、Ｗｅｂサーバ１０１へ返信する（Ｓ２０７）。
【００１７】
所定データを受信したＷｅｂサーバ１０１は、所定データの保存要求（Ｓｅｔ要求）をキャッシュサーバ１０３に送信する（Ｓ２０９）。
【００１８】
キャッシュサーバ１０３は、所定データの保存要求を受信すると、所定データをキャッシュする。この後、当該所定データの取得要求をＷｅｂサーバ１０１から受信した場合に、キャッシュサーバ１０３は、図１に示したように動作する。
【００１９】
続いて、Ｗｅｂサーバ１０１とキャッシュサーバ１０３との通信に係るシーケンスについて説明する。まず、アイテム保存のシーケンスについて図３を用いて説明する。アイテムは、キャッシュサーバ１０３において保管されるデータの単位である。Ｗｅｂサーバ１０１は、アイテムの保存要求をキャッシュサーバ１０３へ送信する（Ｓ３０１）。アイテムの保存要求は、キー及び値を含んでいる。値は、アイテムとして保存されるデータを表す。キーは、値を一意に識別するデータである。
【００２０】
保存対象のアイテムのキーが新規である場合には、キャッシュサーバ１０３は、当該アイテムを追加する。一方、保存対象のアイテムのキーが新規ではない場合、つまり既に保存しているアイテムのキーと一致する場合には、キャッシュサーバ１０３は、既に保存しているアイテムを更新する（Ｓ３０３）。
【００２１】
そして、キャッシュサーバ１０３は、成功の旨をＷｅｂサーバ１０１へ通知する（Ｓ３０５）。
【００２２】
次に、アイテム取得のシーケンスについて、図４及び図５を用いて説明する。図４は、取得対象のアイテムがキャッシュサーバ１０３に存在する場合のシーケンスである。Ｗｅｂサーバ１０１は、アイテムの取得要求をキャッシュサーバ１０３へ送る（Ｓ４０１）。アイテムの取得要求は、取得対象のアイテムを特定するためのキーを含んでいる。
【００２３】
キャッシュサーバ１０３は、当該キーで識別されるアイテムが存在すると判定し（Ｓ４０３）、アイテムを提供する。具体的には、キャッシュサーバ１０３は、当該キーに対応する値を特定し、当該値をＷｅｂサーバ１０１へ送信する（Ｓ４０５）。
【００２４】
一方、図５は、取得対象のアイテムがキャッシュサーバ１０３に存在しない場合のシーケンスである。Ｓ５０１において、図４のＳ４０１の場合と同様に、Ｗｅｂサーバ１０１からキャッシュサーバ１０３へアイテムの取得要求が送られる。
【００２５】
キャッシュサーバ１０３は、当該キーで識別されるアイテムが存在しないと判定し（Ｓ５０３）、「キャッシュなし」の旨の通知をＷｅｂサーバ１０１へ送る（Ｓ５０５）。以上で、シーケンスについての説明を終える。
【００２６】
図６に、キャッシュサーバ１０３のハードウエア構成例を示す。ＣＰＵ（Central Processing Unit）６０１は、ＤＲＡＭ制御回路６０３、ＮＶＲＡＭ（Non-Volatile Random Access Memory）制御回路６０７及び通信制御回路６１１と接続している。ＤＲＡＭ制御回路６０３は、ＤＲＡＭ６０５と接続している。ＤＲＡＭ制御回路６０３は、ＤＲＡＭ６０５を制御する。ＮＶＲＡＭ制御回路６０７は、ＮＶＲＡＭ６０９と接続している。ＮＶＲＡＭ制御回路６０７は、ＮＶＲＡＭ６０９を制御する。ＤＲＡＭ６０５及びＮＶＲＡＭ６０９は、主記憶装置として用いられる。通信制御回路６１１は、ネットワーク通信を制御する。尚、ＮＶＲＡＭ６０９は、ＤＲＡＭ６０５よりもレイテンシが大きい。ＮＶＲＡＭ６０９は、例えばＰＣＭ（Phase Change Memory）、ＲｅＲＡＭ（Resistive Random Access Memory）及びＭＲＡＭ（Magnetoresistive Random Access Memory）である。
【００２７】
図７に、メモリデバイスに対するキャッシュ領域の割り当ての例を示す。キャッシュ領域の一部は、ＤＲＡＭ６０５に割り当てられ、キャッシュ領域の残りの部分は、ＮＶＲＡＭ６０９に割り当てられている。つまり、キャッシュ領域は、ＤＲＡＭ６０５とＮＶＲＡＭ６０９との両方を用いている。尚、この例で、ハッシュテーブルもＤＲＡＭ６０５に割り当てられている。
【００２８】
本実施の形態におけるアイテム保存の処理概要について説明する。まず、新たなアイテムを追加する場合について説明する。図８に示すように、ＤＲＡＭ６０５のキャッシュ領域における空き容量が、保存対象のアイテムのサイズ以上である場合、キャッシュサーバ１０３は、当該アイテムをＤＲＡＭ６０５のキャッシュ領域に追加する。
【００２９】
一方、図９に示すように、ＤＲＡＭ６０５のキャッシュ領域における空き容量が、保存対象のアイテムのサイズ未満である場合、キャッシュサーバ１０３は、ＤＲＡＭ６０５のキャッシュ領域における空き容量を増やす処理を行う。具体的には、キャッシュサーバ１０３は、ＤＲＡＭ６０５のキャッシュ領域に格納されているアイテムの一部をＮＶＲＡＭ６０９のキャッシュ領域に移す。そして、キャッシュサーバ１０３は、ＤＲＡＭ６０５のキャッシュ領域における空き容量を増やした後に、保存対象のアイテムをＤＲＡＭ６０５のキャッシュ領域に追加する。本実施の形態では、キャッシュサーバ１０３は、ＤＲＡＭ６０５のキャッシュ領域に格納されているアイテムのうち、アクセス日時が古いものを優先的に移動させる。アクセス日時は、当該アイテムを書き込んだ日時及び読み取った日時のうち最近の日時である。後述する実施の形態では、キャッシュサーバ１０３は、ＤＲＡＭ６０５のキャッシュ領域に格納されているアイテムのうち、書き込み日時が古いものを優先的に移動させる。
【００３０】
尚、図９に示すように、ＮＶＲＡＭ６０９のキャッシュ領域へアイテムを移動させるためには、ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズ以上であることが条件となる。基準サイズについては、後に述べる。
【００３１】
ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズに満たない場合には、図１０に示すように、まず、キャッシュサーバ１０３は、ＮＶＲＡＭ６０９のキャッシュ領域に格納されているアイテムの一部を削除する。その後、キャッシュサーバ１０３は、図９の場合と同様にアイテムを移動させ、新たなアイテムを追加する。
【００３２】
続いて、既存のアイテムを更新する場合について説明する。図１１は、アイテムの保存要求に含まれるキーに対応する値が既に記憶されている状態を示している。このような場合には、値が書き換えられる。保存対象のアイテムがＮＶＲＡＭ６０９のキャッシュ領域に存在する場合も、同様である。
【００３３】
最後に、図１２を用いてアイテム取得の処理について説明する。アイテムの取得要求に含まれるキーに対応するアイテムの値が既に記憶されているものとする。当該値が読み出されて、Ｗｅｂサーバ１０１へ返信される。取得対象のアイテムがＮＶＲＡＭ６０９のキャッシュ領域に存在する場合も、同様である。
【００３４】
尚、図８乃至図１２において、移動元のアイテム、移動先のアイテム及び削除対象のアイテムを便宜的に１つのブロックで示した。実際には、移動対象のアイテムが複数であれば、各移動対象のアイテムが連続する範囲に格納されているとは限らない。従って、図示した移動元のアイテムは、複数のブロックに分かれていることがある。また、図示した移動先のアイテムは、複数のブロックに分かれていることがある。同様に、削除対象のアイテムが複数であれば、各削除対象のアイテムが連続する範囲に格納されているとは限らない。図示した削除対象のアイテムは、複数のブロックに分かれていることがある。尚、アイテムの大きさは、図８乃至図１２に示した通りであるとは限らない。以上で本実施の形態における処理概要の説明を終える。
【００３５】
以下、キャッシュサーバ１０３の動作について説明する。図１３に、キャッシュサーバ１０３のソフトウェアのモジュール構成例を示す。キャッシュサーバ１０３は、メイン処理部１３００を有する。メイン処理部１３００は、メイン処理及びメイン処理が呼び出す下位ルーチンの処理を実行する。メイン処理部１３００は、受信部１３０１、送信部１３０３、探索部１３０５、第１判定部１３０７、追加部１３０９、読み取り部１３２７、書き込み部１３２９及び第２更新部１３３１を有する。
【００３６】
受信部１３０１は、クライアント（上述した例におけるＷｅｂサーバ１０１に相当する。）からアイテムの取得要求及びアイテムの保存要求を受信する。送信部１３０３は、クライアントへの応答を送信する。探索部１３０５は、ハッシュテーブルにおいて、キーに対応するレコードを探索する。第１判定部１３０７は、受信した要求の種別を判定する。追加部１３０９は、アイテムを追加する。読み取り部１３２７は、取得要求の対象となったアイテムの値をキャッシュ領域から読み取る。書き込み部１３２９は、保存要求の対象となったアイテムの値をキャッシュ領域へ書き込む。第２更新部１３３１は、アイテムに対するアクセス日時を更新する。
【００３７】
追加部１３０９は、第２判定部１３１１、格納処理部１３１３、設定部１３１５、第３判定部１３１７、第１移動部１３１９、第１更新部１３２１、削除部１３２３及び第２移動部１３２５を有する。
【００３８】
第２判定部１３１１は、ＤＲＡＭ６０５のキャッシュ領域における空き容量がアイテムのサイズ以上であるか否かを判定する。格納処理部１３１３は、アイテムをＤＲＡＭ６０５のキャッシュ領域に格納する処理を行う。設定部１３１５は、ハッシュテーブルのレコードの各フィールドにパラメータを設定する。第３判定部１３１７は、ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズ以上であるか否かを判定する。第１移動部１３１９は、ＤＲＡＭ６０５のキャッシュ領域に保持されているアイテムの一部を、ＮＶＲＡＭ６０９のキャッシュ領域に移動する。第１更新部１３２１は、アイテムの値が格納されている仮想アドレスを更新する。削除部１３２３は、アイテムの削除に相当する処理を行う。具体的には、ハッシュテーブルにおける削除対象のアイテムのレコードがクリアされる。第２移動部１３２５は、ＮＶＲＡＭ６０９のキャッシュ領域に保持されているアイテムの一部を、ＤＲＡＭ６０５のキャッシュ領域に移動する。
【００３９】
また、キャッシュサーバ１０３は、テーブル記憶部１３４１を有する。テーブル記憶部１３４１は、ハッシュテーブルを記憶する。ハッシュテーブルについては、図１４を用いて後述する。その他、キャッシュサーバ１０３は、ＯＳ（オペレーティング・システム）１３５１を有する。ＯＳ１３５１は、例えば仮想アドレスを物理アドレスに変換する処理を行う。
【００４０】
上述した受信部１３０１、送信部１３０３、探索部１３０５、第１判定部１３０７、追加部１３０９、第２判定部１３１１、格納処理部１３１３、設定部１３１５、第３判定部１３１７、第１移動部１３１９、第１更新部１３２１、削除部１３２３、第２移動部１３２５、読み取り部１３２７、書き込み部１３２９及び第２更新部１３３１は、ハードウエア資源（例えば、図３４）と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
【００４１】
上述したテーブル記憶部１３４１は、ハードウエア資源（例えば、図３４）を用いて実現される。
【００４２】
図１４に、ハッシュテーブルの例を示す。この例におけるハッシュテーブルは、アイテムに対応するレコードを有している。レコードは、インデックスが格納されるフィールドと、キーが格納されるフィールドと、仮想アドレスが格納されるフィールドと、サイズが格納されるフィールドと、アクセス日時が格納されるフィールドとを有している。
【００４３】
インデックスは、キーのハッシュ値である。第３レコード及び第４レコードに示すように、１つのインデックスに複数のキーが対応する場合もある。一方、第５レコードに示すように、１つのインデックスにキーが対応付けられていない場合もある。キーが対応付けられていない場合には、キー、仮想アドレス、サイズ及びアクセス日時の各フィールドには、未設定のコードが格納される。
【００４４】
仮想アドレスは、値が設定されているキャッシュ領域の位置を示す。サイズは、値を示すデータの大きさである。アクセス日時は、当該アイテムの追加、更新又は提供を行った時点を表す。
【００４５】
図１５に、メイン処理フローを示す。受信部１３０１が、クライアントからアイテムの取得要求又はアイテムの保存要求を受信すると（Ｓ１５０１）、探索部１３０５は、当該要求に含まれるキーを特定し（Ｓ１５０３）、当該キーに基づくハッシュ値を算出する（Ｓ１５０５）。そして、探索部１３０５は、ハッシュテーブルにおいて当該ハッシュ値と一致するインデックスのレコードを特定する（Ｓ１５０７）。そして、探索部１３０５は、当該レコードに当該キーが設定されているか否かを判定する（Ｓ１５０９）。当該レコードに当該キーが設定されていないと判定した場合、つまり当該キーが新たなキーである場合には、メイン処理部１３００は、第１サブルーチン処理を実行する（Ｓ１５１１）。第１サブルーチン処理については、図１６を用いて後述する。第１サブルーチン処理を終えると、Ｓ１５０１の処理に戻る。
【００４６】
一方、当該レコードに当該キーが設定されていると判定した場合には、メイン処理部１３００は、第２サブルーチン処理を実行する（Ｓ１５１３）。第２サブルーチン処理については、図２１を用いて後述する。第２サブルーチン処理を終えると、Ｓ１５０１の処理に戻る。
【００４７】
図１６に、第１サブルーチン処理フローを示す。第１判定部１３０７は、図１５のＳ１５０１において受信した要求が、アイテムの取得要求であるか否かを判定する（Ｓ１６０１）。当該受信した要求がアイテムの取得要求であると判定した場合には、送信部１３０３は、「キャッシュなし」の通知を、アイテムの取得要求の送信元であるクライアントに送信する（Ｓ１６０３）。第１サブルーチン処理を終えると、呼び出し元のメイン処理に復帰する。
【００４８】
一方、図１５のＳ１５０１において受信した要求が、アイテムの取得要求ではないと判定した場合、つまり当該受信した要求がアイテムの保存要求である場合には、追加部１３０９は、アイテム追加処理を実行する（Ｓ１６０５）。アイテム追加処理では、新たなアイテムをキャッシュ領域に追加する。アイテム追加処理を終えると、呼び出し元のメイン処理に復帰する。
【００４９】
ここでは、アイテム追加処理（Ａ）を実行する。図１７に、アイテム追加処理（Ａ）フローを示す。第２判定部１３１１は、ＤＲＡＭ６０５のキャッシュ領域における空き容量を算出する（Ｓ１７０１）。そして、第２判定部１３１１は、ＤＲＡＭ６０５のキャッシュ領域における空き容量が保存要求に係るアイテムのサイズ以上であるか否かを判定する（Ｓ１７０３）。アイテムのサイズは、具体的には保存要求に含まれる値のデータサイズである。
【００５０】
ＤＲＡＭ６０５のキャッシュ領域における空き容量がアイテムのサイズ以上であると判定した場合には、格納処理部１３１３は、格納処理を実行する（Ｓ１７０５）。格納処理では、ＤＲＡＭ６０５のキャッシュ領域に新たなアイテムを格納する。
【００５１】
ここでは、格納処理（Ａ）を実行する。図１８に、格納処理（Ａ）フローを示す。格納処理部１３１３は、ＤＲＡＭ６０５のキャッシュ領域において、アイテムのサイズに相当する領域を確保し（Ｓ１８０１）、保存要求に含まれる値を当該領域に書き込む（Ｓ１８０３）。
【００５２】
設定部１３１５は、ハッシュテーブルにおいて、保存要求に含まれるキーに基づくハッシュ値に該当するインデックスのレコードに、当該キー、上記値を書き込んだ領域の仮想アドレス、当該アイテムのサイズ及び現時点を示すアクセス日時を設定する（Ｓ１８０５）。格納処理（Ａ）を終えると、呼び出し元のアイテム追加処理（Ａ）に復帰する。
【００５３】
図１７の説明に戻る。格納処理を終えると、アイテム追加処理（Ａ）も終え、第１サブルーチン処理に復帰する。
【００５４】
Ｓ１７０３において、ＤＲＡＭ６０５のキャッシュ領域における空き容量が保存要求に係るアイテムのサイズ未満であると判定した場合には、第３判定部１３１７は、ＤＲＡＭ６０５のキャッシュ領域に格納されているアイテムのうち、アクセス日時が古い順にＭ個（所定数）のアイテムを選択する（Ｓ１７０７）。そして、第３判定部１３１７は、Ｍ個のアイテムの合計サイズを算出する（Ｓ１７０９）。Ｍ個のアイテムの合計サイズは、空き容量の判定における基準サイズとなる。
【００５５】
第３判定部１３１７は、ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズ以上であるか否かを判定する（Ｓ１７１１）。ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズ以上であると判定した場合には、第１移動部１３１９は、第１移動処理を実行する（Ｓ１７１３）。第１移動処理では、ＤＲＡＭ６０５のキャッシュ領域に保持されているアイテムの一部を、ＮＶＲＡＭ６０９のキャッシュ領域に移動する。尚、基準サイズは、所定の大きさであってもよい。
【００５６】
図１９に、第１移動処理フローを示す。第１移動部１３１９は、図１７のＳ１７０７で選択されたＭ個のアイテムのうち１つのアイテムを特定する（Ｓ１９０１）。
【００５７】
第１移動部１３１９は、ＮＶＲＡＭ６０９のキャッシュ領域において、当該アイテムのサイズに相当する領域を確保する（Ｓ１９０３）。第１移動部１３１９は、ＤＲＡＭ６０５のキャッシュ領域において、当該アイテムの仮想アドレスに格納されている値を読み取る（Ｓ１９０５）。そして、第１移動部１３１９は、ＮＶＲＡＭ６０９のキャッシュ領域において確保した領域に当該値を書き込む（Ｓ１９０７）。
【００５８】
第１更新部１３２１は、ハッシュテーブルにおいて、当該アイテムのレコードにおける仮想アドレスを更新する（Ｓ１９０９）。具体的には、第１更新部１３２１は、ＤＲＡＭ６０５のキャッシュ領域における移動元の仮想アドレスを、ＮＶＲＡＭ６０９のキャッシュ領域における移動先の仮想アドレスに書き換える。
【００５９】
第１移動部１３１９は、Ｍ個のアイテムのうち未特定のアイテムがあるか否かを判定する（Ｓ１９１１）。Ｍ個のアイテムのうち未特定のアイテムがあると判定した場合には、Ｓ１９０１に示した処理に戻って、上述した処理を繰り返す。一方、未特定のアイテムがないと判定した場合には、第１移動処理を終え、呼び出し元のアイテム追加処理（Ａ）に復帰する。
【００６０】
図１７の説明に戻る。Ｓ１７１３における第１移動処理を終えると、格納処理部１３１３は、格納処理を実行する（Ｓ１７１５）。格納処理は、Ｓ１７０５の場合と同様である。そして、アイテム追加処理（Ａ）を終え、第１サブルーチン処理に復帰する。
【００６１】
Ｓ１７１１において、ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズ未満であると判定した場合には、削除部１３２３は、削除処理を実行する（Ｓ１７１７）。削除処理では、ＮＶＲＡＭ６０９のキャッシュ領域に保持されている一部のアイテムを削除し、ＮＶＲＡＭ６０９のキャッシュ領域における空き容量を増加させる。
【００６２】
本実施の形態では、削除処理（Ａ）を実行する。図２０に、削除処理（Ａ）フローを示す。削除部１３２３は、ＮＶＲＡＭ６０９のキャッシュ領域に格納されているアイテムのうち、アクセス日時が古い順に、削除対象のアイテムを１つ特定する（Ｓ２００１）。
【００６３】
削除部１３２３は、ハッシュテーブルにおいて、当該削除対象のアイテムのレコードをクリアする（Ｓ２００３）。具体的には、当該レコードにおけるキー、仮想アドレス、サイズ及びアクセス日時の各フィールドに未設定のコードを格納する。このとき、削除部１３２３は、更に、ＮＶＲＡＭ６０９のキャッシュ領域に格納されている値をクリアするようにしてもよい。
【００６４】
削除部１３２３は、削除したアイテムの合計サイズを算出する（Ｓ２００５）。具体的には、削除部１３２３は、Ｓ２００３でクリアされたサイズを順次加算する。削除したアイテムの合計サイズは、新たに空き容量に加えられたサイズ、つまり解放サイズに相当する。
【００６５】
削除部１３２３は、算出した解放サイズが図１７のＳ１７０９において算出した基準サイズ以上であるか否かを判定する（Ｓ２００７）。解放サイズが基準サイズ未満であると判定した場合には、Ｓ２００１に示した処理に戻って、上述した処理を繰り返す。
【００６６】
一方、解放サイズが基準サイズ以上であると判定した場合には、削除処理（Ａ）を終え、呼び出し元のアイテム追加処理（Ａ）に復帰する。
【００６７】
図１７の説明に戻る。Ｓ１７１７における削除処理（Ａ）を終えると、第１移動部１３１９は、第１移動処理を実行する（Ｓ１７１９）。第１移動処理は、Ｓ１７１３の場合と同様である。
【００６８】
続いて、格納処理部１３１３は、格納処理を実行する（Ｓ１７２１）。格納処理は、Ｓ１７０５の場合と同様である。そして、アイテム追加処理（Ａ）を終え、第１サブルーチン処理に復帰する。
【００６９】
続いて、第２サブルーチン処理について説明する。本実施の形態では、第２サブルーチン処理（Ａ）を実行する。図２１に、第２サブルーチン処理（Ａ）フローを示す。
【００７０】
第１判定部１３０７は、図１５のＳ１５０１において受信した要求が、アイテムの取得要求であるか否かを判定する（Ｓ２１０１）。当該要求がアイテムの取得要求であると判定した場合には、読み取り部１３２７は、図１５のＳ１５０７において特定したレコードから仮想アドレスを読む（Ｓ２１０３）。読み取り部１３２７は、当該仮想アドレスに格納されている値を読み取る（Ｓ２１０５）。送信部１３０３は、取得した値を、アイテムの取得要求の送信元であるクライアントに送信する（Ｓ２１０７）。第２更新部１３３１は、当該レコードのアクセス日時を更新する（Ｓ２１０９）。具体的には、第２更新部１３３１は、アクセス日時を現時点に改める。
【００７１】
一方、Ｓ２１０１において、図１５のＳ１５０１において受信した要求が、アイテムの取得要求ではないと判定した場合、つまり当該受信した要求がアイテムの保存要求である場合には、書き込み部１３２９は、図１５のＳ１５０７において特定したレコードから仮想アドレスを読む（Ｓ２１１１）。書き込み部１３２９は、当該仮想アドレスに、アイテムの保存要求に含まれる値を書き込む（Ｓ２１１３）。そして、第２更新部１３３１は、当該レコードのアクセス日時を更新する（Ｓ２１０９）。第２サブルーチン処理（Ａ）を終えると、呼び出し元のメイン処理に復帰する。
【００７２】
本実施の形態によれば、レイテンシの異なる複数のメモリデバイスを用いてアイテムを保管するキャッシュサーバ１０３におけるデータアクセスを、より早めることができる。尚、ＮＶＲＡＭ６０９は、ＤＲＡＭ６０５よりも安価であり、消費電力も少ないので、ＮＶＲＡＭ６０９をＤＲＡＭ６０５と組み合わせることによって、キャッシュサーバ１０３が安価になり、運用コストも削減できる面がある。
【００７３】
また、追加アイテムのサイズを基準として、ＤＲＡＭ６０５のキャッシュ領域における空き容量が不足しているか否かを判定するので、レイテンシの小さいＤＲＡＭ６０５に追加データを書き込むことができる。従って、時間的局所性に鑑みて、キャッシュサーバ１０３における応答性能がよくなると期待できる。
【００７４】
また、ＤＲＡＭ６０５のキャッシュ領域に格納されているアイテムのうち、アクセス時点が古いアイテムを優先して移動対象として選択するので、アクセス頻度が高いデータをＤＲＡＭ６０５に残すことができる。
【００７５】
また、ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が不足していると判定した場合に、当該キャッシュ領域に格納されている一部のアイテムに関するレコードをクリアするので、優先度が低いと見込まれるアイテムを選択的に排除することができる。
【００７６】
［実施の形態２］
上述した実施の形態では、ＤＲＡＭ６０５のキャッシュ領域に格納されているアイテムのうち、アクセス時点が古いアイテムを優先して移動対象として選択する例について説明したが、本実施の形態では、書き込み時点が古いアイテムを優先して移動対象として選択する例について説明する。
【００７７】
図２２に、実施の形態２におけるハッシュテーブルの例を示す。本実施の形態におけるハッシュテーブルのレコードは、インデックスが格納されるフィールドと、キーが格納されるフィールドと、仮想アドレスが格納されるフィールドと、サイズが格納されるフィールドと、書き込み日時が格納されるフィールドとを有している。つまり、本実施の形態では、アクセス日時に代えて書き込み日時が格納される。その他は、実施の形態１の場合と同様である。
【００７８】
また、本実施の形態では、アイテム追加処理（Ａ）に代えてアイテム追加処理（Ｂ）を実行する。図２３に、アイテム追加処理（Ｂ）フローを示す。Ｓ１７０１乃至Ｓ１７０５における処理は、アイテム追加処理（Ａ）の場合と同様である。
【００７９】
Ｓ１７０３において、ＤＲＡＭ６０５のキャッシュ領域における空き容量が保存要求に係るアイテムのサイズ未満であると判定した場合には、第３判定部１３１７は、ＤＲＡＭ６０５のキャッシュ領域に格納されているアイテムのうち、書き込み日時が古い順にＭ個のアイテムを選択する（Ｓ２３０１）。
【００８０】
Ｓ１７０９乃至Ｓ１７２１における処理は、アイテム追加処理（Ａ）の場合と同様である。
【００８１】
また、本実施の形態では、格納処理（Ａ）に代えて格納処理（Ｂ）を実行する。図２４に、格納処理（Ｂ）フローを示す。Ｓ１８０１及びＳ１８０３における処理は、格納処理（Ａ）の場合と同様である。
【００８２】
設定部１３１５は、ハッシュテーブルにおいて、保存要求に含まれるキーに基づくハッシュ値に該当するインデックスのレコードに、当該キー、保存要求に含まれる値を書き込んだ領域の仮想アドレス、当該アイテムのサイズ及び現時点を示す書き込み日時を設定する（Ｓ２４０１）。
【００８３】
また、本実施の形態では、削除処理（Ａ）に代えて削除処理（Ｂ）を実行する。図２５に、削除処理（Ｂ）フローを示す。削除部１３２３は、ＮＶＲＡＭ６０９のキャッシュ領域に格納されているアイテムのうち、書き込み日時が古い順に、削除対象のアイテムを１つ特定する（Ｓ２５０１）。
【００８４】
Ｓ２００３乃至Ｓ２００７の処理は、削除処理（Ａ）の場合と同様である。
【００８５】
更に、本実施の形態では、第２サブルーチン処理（Ａ）に代えて第２サブルーチン処理（Ｂ）を実行する。図２６に、第２サブルーチン処理（Ｂ）フローを示す。Ｓ２１０１乃至Ｓ２１０７の処理は、第２サブルーチン処理（Ａ）の場合と同様である。尚、アイテムの取得要求に応じる処理において、書き込み日時は更新されない。
【００８６】
一方、図１５のＳ１５０１において受信した要求が、アイテムの取得要求ではないと判定した場合、つまり当該要求がアイテムの保存要求である場合におけるＳ２１１１及びＳ２１１３の処理は、第２サブルーチン処理（Ａ）の場合と同様である。
【００８７】
そして、第２更新部１３３１は、当該レコードの書き込み日時を更新する（Ｓ２６０１）。具体的には、第２更新部１３３１は、書き込み日時を現時点に改める。
【００８８】
本実施の形態によれば、より新しく書き込まれたデータを、レイテンシが小さいＤＲＡＭ６０５に残すことができる。従って、時間的局所性に鑑みて、キャッシュサーバ１０３における応答性能がよくなると期待できる。
【００８９】
［実施の形態３］
本実施の形態では、ＮＶＲＡＭ６０９のキャッシュ領域に格納されているアイテムをＤＲＡＭ６０５のキャッシュ領域に復帰させる例について説明する。
【００９０】
図２７に、実施の形態３におけるアイテム保存の処理概要を示す。ＤＲＡＭ６０５のキャッシュ領域における空き容量が保存対象のアイテムのサイズ未満であって、且つＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズ未満である場合に、図１０の場合と同様に、ＮＶＲＡＭ６０９のキャッシュ領域に格納されているアイテムを削除して、ＮＶＲＡＭ６０９のキャッシュ領域における空き容量を増やす。
【００９１】
本実施の形態では、そのときＮＶＲＡＭ６０９のキャッシュ領域に格納されているアイテムのうち、アクセス日時が新しいものをＤＲＡＭ６０５のキャッシュ領域に移動させる。つまり、ＮＶＲＡＭ６０９側のアイテムをＤＲＡＭ６０５側へ復帰させる。このときＤＲＡＭ６０５側へ復帰させるアイテムの合計サイズに関する上限を復帰サイズという。復帰サイズは、図１７のＳ１７０９で算出した基準サイズよりも小さいものとする。
【００９２】
その後、上述した実施の形態と同様に、ＤＲＡＭ６０５のキャッシュ領域に格納されているアイテムのうち、アクセス日時が古いもの（或いは書き込み日時が古いもの）をＮＶＲＡＭ６０９のキャッシュ領域へ移動させる。そして、新しいアイテムをＤＲＡＭ６０５のキャッシュ領域へ格納する。
【００９３】
本実施の形態では、アイテム追加処理（Ａ）に代えてアイテム追加処理（Ｃ）を実行する。図２８に、アイテム追加処理（Ｃ）フローを示す。Ｓ１７０１乃至Ｓ１７１５の処理は、アイテム追加処理（Ａ）の場合と同様である。
【００９４】
アイテム追加処理（Ｃ）では、Ｓ１７１７において、削除処理（Ａ）に代えて削除処理（Ｃ）を実行する。図２９に、削除処理（Ｃ）フローを示す。Ｓ２００１乃至Ｓ２００５の処理は、削除処理（Ａ）の場合と同様である。
【００９５】
削除部１３２３は、Ｓ２００５において算出した解放サイズから復帰サイズを引いた差が、図１７のＳ１７０９において算出した基準サイズ以上であるか否かを判定する（Ｓ２９０１）。この例における復帰サイズは、定数である。解放サイズから復帰サイズを引いた差が基準サイズ未満であると判定した場合には、Ｓ２００１に示した処理に戻って、上述した処理を繰り返す。
【００９６】
一方、解放サイズから復帰サイズを引いた差が基準サイズ以上であると判定した場合には、削除処理（Ｃ）を終え、呼び出し元のアイテム追加処理（Ｃ）に復帰する。
【００９７】
図２８の説明に戻る。Ｓ１７１７における削除処理に続いて、第２移動部１３２５は、第２移動処理を実行する（Ｓ２８０１）。第２移動処理では、ＮＶＲＡＭ６０９のキャッシュ領域に保持されているアイテムの一部を、ＤＲＡＭ６０５のキャッシュ領域に移動する。
【００９８】
図３０に、第２移動処理フローを示す。第２移動部１３２５は、ＮＶＲＡＭ６０９のキャッシュ領域に格納されているアイテムのうち、アクセス日時が新しい順にアイテムを１つ特定する（Ｓ３００１）。第２移動部１３２５は、既に移動したアイテムの合計サイズと、Ｓ３００１で特定したアイテムのサイズとの合計が復帰サイズを超えたか否かを判定する（Ｓ３００３）。当該合計サイズは、当初０である。
【００９９】
既に移動したアイテムの合計サイズと、Ｓ３００１で特定したアイテムのサイズとの合計が、復帰サイズを超えていないと判定した場合には、第２移動部１３２５は、ＤＲＡＭ６０５のキャッシュ領域において、当該アイテムのサイズに相当する領域を確保する（Ｓ３００５）。第２移動部１３２５は、ＮＶＲＡＭ６０９のキャッシュ領域において、当該アイテムの仮想アドレスに格納されている値を読み取る（Ｓ３００７）。第２移動部１３２５は、ＤＲＡＭ６０５のキャッシュ領域において確保した領域に当該値を書き込む（Ｓ３００９）。
【０１００】
第２移動部１３２５は、当該アイテムのレコードにおける仮想アドレスを更新する（Ｓ３０１１）。具体的には、第２移動部１３２５は、ＮＶＲＡＭ６０９のキャッシュ領域における移動元の仮想アドレスを、ＤＲＡＭ６０５のキャッシュ領域における移動先の仮想アドレスに書き換える。
【０１０１】
第２移動部１３２５は、移動したアイテムの合計サイズを算出する（Ｓ３０１３）。具体的には、第２移動部１３２５は、Ｓ３００１で特定したアイテムのレコードに格納されているサイズを順次加算する。そして、Ｓ３００１に示した処理に戻って、上述した処理を繰り返す。
【０１０２】
Ｓ３００３において、既に移動したアイテムの合計サイズと、Ｓ３００１で特定したアイテムのサイズとの合計が、復帰サイズを超えたと判定した場合には、第２移動処理を終える。そして、アイテム追加処理（Ｃ）に復帰する。
【０１０３】
図２８の説明に戻る。Ｓ１７１９及びＳ１７２１の処理は、アイテム追加処理（Ａ）の場合と同様である。
【０１０４】
本実施の形態によれば、アクセス頻度が高まったアイテムへのアクセスを早めることができる。
【０１０５】
［実施の形態４］
上述した実施の形態では、新たなアイテムを追加する際に、キャッシュ領域における空き容量の調整を行う例について説明した。本実施の形態では、キャッシュ領域における空き容量の調整をメイン処理とは別のスレッドで行う例について説明する。
【０１０６】
図３１に、実施の形態４におけるキャッシュサーバ１０３のモジュール構成例を示す。本実施の形態における追加部１３０９の構成は、上述した実施の形態の場合と異なる。実施の形態４における追加部１３０９は、第２判定部１３１１、格納処理部１３１３及び設定部１３１５を有する。
【０１０７】
また、本実施の形態におけるキャッシュサーバ１０３は、調整部３１０３を有する。調整部３１０３は、上述した第３判定部１３１７、第１移動部１３１９、第１更新部１３２１、削除部１３２３及び第２移動部１３２５の他に、第４判定部３１０５を有する。第４判定部３１０５は、ＤＲＡＭ６０５のキャッシュ領域における空き容量が所定サイズに満たないか否かを判定する。
【０１０８】
メイン処理部３１０１は、メイン処理及びメイン処理が呼び出す下位ルーチンの処理を、第１のスレッドとして実行する。調整部３１０３は、後述する調整処理及び調整処理が呼び出す下位ルーチンの処理を、第２のスレッドとして実行する。つまり、キャッシュサーバ１０３は、メイン処理部３１０１によるルーチン処理と、調整部３１０３によるルーチン処理とを並行に実行する。キャッシュサーバ１０３は、メイン処理部３１０１によるルーチン処理と調整部３１０３によるルーチン処理とを、別個のスレッドとして起動させる起動部を有するようにしてもよい。
【０１０９】
上述したメイン処理部３１０１、調整部３１０３及び第４判定部３１０５は、ハードウエア資源（例えば、図３４）と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
【０１１０】
本実施の形態では、アイテム追加処理（Ａ）に代えてアイテム追加処理（Ｄ）を実行する。図３２に、アイテム追加処理（Ｄ）フローを示す。Ｓ１７０１の処理は、アイテム追加処理（Ａ）の場合と同様である。
【０１１１】
第２判定部１３１１は、ＤＲＡＭ６０５のキャッシュ領域における空き容量が保存要求に係るアイテムのサイズ以上であるか否かを判定する（Ｓ３２０１）。
【０１１２】
ＤＲＡＭ６０５のキャッシュ領域における空き容量が保存要求に係るアイテムのサイズ以上であると判定した場合には、格納処理部１３１３は、格納処理を実行する（Ｓ３２０３）。格納処理は、格納処理（Ａ）の場合と同様である。
【０１１３】
一方、ＤＲＡＭ６０５のキャッシュ領域における空き容量がアイテムのサイズ未満であると判定した場合には、Ｓ１７０１の処理に戻って、上述した処理を繰り返す。つまり、追加部１３０９は、ＤＲＡＭ６０５のキャッシュ領域における空き容量が充足されるタイミングを待つように動作する。
【０１１４】
図３３に、調整処理フローを示す。第４判定部３１０５は、ＤＲＡＭ６０５のキャッシュ領域における空き容量を算出する（Ｓ３３０１）。そして、第４判定部３１０５は、ＤＲＡＭ６０５のキャッシュ領域における空き容量が所定サイズに満たないか否かを判定する（Ｓ３３０３）。
【０１１５】
ＤＲＡＭ６０５のキャッシュ領域における空き容量が所定サイズに満たないと判定した場合には、第３判定部１３１７は、ＤＲＡＭ６０５のキャッシュ領域に格納されているアイテムのうち、アクセス日時が古い順にＭ個（所定数）のアイテムを選択する（Ｓ３３０５）。
【０１１６】
第３判定部１３１７は、Ｍ個のアイテムの合計サイズを算出する（Ｓ３３０７）。Ｍ個のアイテムの合計サイズは、空き容量の判定における基準サイズとなる。
【０１１７】
第３判定部１３１７は、ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズ以上であるか否かを判定する（Ｓ３３０９）。ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズ以上であると判定した場合には、第１移動部１３１９は、第１移動処理を実行する（Ｓ３３１１）。第１移動処理は、図１７に示したＳ１７１３の場合と同様である。そして、Ｓ３３０１に示した処理に戻って、上述した処理を繰り返す。
【０１１８】
一方、ＮＶＲＡＭ６０９のキャッシュ領域における空き容量が基準サイズ未満であると判定した場合には、削除部１３２３は、削除処理を実行する（Ｓ３３１３）。削除処理は、図１７に示したＳ１７１７の場合と同様である。
【０１１９】
続いて、第１移動部１３１９は、第１移動処理を実行する（Ｓ３３１５）。第１移動処理は、図１７に示したＳ１７１９の場合と同様である。そして、Ｓ３３０１に示した処理に戻って、上述した処理を繰り返す。
【０１２０】
Ｓ３３０３の説明に戻る。ＤＲＡＭ６０５のキャッシュ領域における空き容量が所定サイズ以上であると判定した場合には、第４判定部３１０５は、一定時間の経過を待つ（Ｓ３３１７）。一定時間が経過すると、第４判定部３１０５は、調整処理のスレッドを停止するか否かを判定する（Ｓ３３１９）。例えば、スレッド停止の指示を受け付けているか否かを判定する。
【０１２１】
調整処理のスレッドを停止すると判定した場合には、調整処理を終える。一方、スレッドを停止しないと判定した場合には、Ｓ３３０１に示した処理に戻って、上述した処理を繰り返す。
【０１２２】
本実施の形態によれば、複数のスレッドに処理負荷が分散されるので、全体として処理が早まることが期待できる。
【０１２３】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上述の機能ブロック構成はプログラムモジュール構成に一致しない場合もある。
【０１２４】
また、上で説明した各記憶領域の構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ、処理の順番を入れ替えることや複数の処理を並列に実行させるようにしても良い。
【０１２５】
なお、上で述べたキャッシュサーバ１０３は、コンピュータ装置であって、図３４に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１２６】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【０１２７】
本実施の形態に係るデータアクセス方法は、（Ａ）第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータにより実行されるデータアクセス方法であって、（Ｂ）新たなキーで識別される追加データの保存要求を受け付けた場合に、第１メモリデバイスのデータ格納領域における空き容量が不足しているか否かを判定する判定処理と、（Ｃ）上記空き容量が不足していると判定した場合に、第１メモリデバイスのデータ格納領域に格納されているデータのうち一部のデータを第２メモリデバイスのデータ格納領域に移動させる処理と、（Ｄ）移動させた一部のデータに関する記録におけるアドレスを更新する処理と、（Ｅ）第１メモリデバイスのデータ格納領域に、追加データを格納する処理と、（Ｆ）追加データが格納されたアドレスと、新たなキーとを対応付ける記録を設定する処理とを含む。
【０１２８】
このようにすれば、レイテンシの異なる複数のメモリデバイスを用いてデータを保管するコンピュータにおけるデータアクセスを、より早めることができる。
【０１２９】
更に、上記判定処理において、追加データのサイズを基準として、上記空き容量が不足しているか否かを判定するようにしてもよい。
【０１３０】
このようにすれば、レイテンシが小さい方のメモリデバイスに、追加データを書き込むことができる。
【０１３１】
更に、第１メモリデバイスのデータ格納領域に格納されているデータのうち、アクセス時点が古いデータを優先して移動対象として選択する処理を含むようにしてもよい。
【０１３２】
このようにすれば、アクセス頻度が高いデータを、レイテンシが小さい方のメモリデバイスに残すことができる。
【０１３３】
更に、第１メモリデバイスのデータ格納領域に格納されているデータのうち、書き込み時点が古いデータを優先して移動対象として選択する処理を含むようにしてもよい。
【０１３４】
このようにすれば、より新しく書き込まれたデータを、レイテンシが小さい方のメモリデバイスに残すことができる。
【０１３５】
更に、第２メモリデバイスのデータ格納領域における空き容量が不足していると判定した場合に、当該データ格納領域に格納されているデータのうち一部のデータに関する記録をクリアする処理を含むようにしてもよい。
【０１３６】
このようにすれば、優先度が低いと見込まれるデータを排除することができる。
【０１３７】
更に、第２メモリデバイスのデータ格納領域に格納されているデータのうち、アクセス時点が新しい一部のデータを復帰対象として選択する処理と、復帰対象として選択された一部のデータを第１メモリデバイスのデータ格納領域に移動させる処理と、第１メモリデバイスのデータ格納領域に移動させた一部のデータに関する記録におけるアドレスを更新する処理とを含むようにしてもよい。
【０１３８】
このようにすれば、アクセス頻度が高まったデータへのアクセスを早めることができる。
【０１３９】
本実施の形態に係るデータアクセス方法は、（Ｇ）第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータにより実行されるデータアクセス方法であって、（Ｈ）第１メモリデバイスのデータ格納領域における空き容量が不足しているか否かを判定する処理と、（Ｉ）上記空き容量が不足していると判定した場合に、第１メモリデバイスのデータ格納領域に格納されているデータのうち一部のデータを第２メモリデバイスのデータ格納領域に移動させる処理と、（Ｊ）移動させた一部のデータに関する記録におけるアドレスを更新する処理とを含む第１ルーチン処理と、（Ｋ）新たなキーで識別される追加データの保存要求を受け付けた場合に、上記空き容量が充足されるタイミングを待って、第１メモリデバイスのデータ格納領域に、追加データを格納する処理と、（Ｌ）追加データが格納されたアドレスと、新たなキーとを対応付ける記録を設定する処理とを含む第２ルーチン処理とを並行に実行する。
【０１４０】
このようにすれば、更に、全体として処理が早まることが期待できる。
【０１４１】
上記第１ルーチン処理は、更に、第２メモリデバイスのデータ格納領域における空き容量が不足していると判定した場合に、当該データ格納領域に格納されているデータのうち一部のデータに関する記録をクリアする処理を含むようにしてもよい。
【０１４２】
このようにすれば、優先度が低いと見込まれるデータを排除することができる。
【０１４３】
更に、上記コンピュータは、キャッシュサーバであってもよい。上記記録は、キーのハッシュ値をインデックスとするハッシュテーブルに設定されるようにしてもよい。また、データ格納領域は、キャッシュ領域であってもよい。
【０１４４】
このようにすれば、レイテンシの異なるメモリデバイスを組み合わせたキャッシュサーバにおける処理性能を向上させることができる。
【０１４５】
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納されるようにしてもよい。尚、中間的な処理結果は、一般的にメインメモリ等の記憶装置に一時保管される。
【０１４６】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１４７】
（付記１）
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータに、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する判定処理と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる処理と、
移動させた前記一部のデータに関する前記記録における前記アドレスを更新する処理と、
前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する処理と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する処理と
を実行させるアクセスプログラム。
【０１４８】
（付記２）
前記判定処理において、前記追加データのサイズを基準として、前記空き容量が不足しているか否かを判定する
付記１記載のアクセスプログラム。
【０１４９】
（付記３）
更に、
前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち、アクセス時点が古いデータを優先して移動対象として選択する処理
を含む付記１又は２記載のアクセスプログラム。
【０１５０】
（付記４）
更に、
前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち、書き込み時点が古いデータを優先して移動対象として選択する処理
を含む付記１又は２記載のアクセスプログラム。
【０１５１】
（付記５）
更に、
前記第２メモリデバイスの前記データ格納領域における空き容量が不足していると判定した場合に、当該データ格納領域に格納されているデータのうち一部のデータに関する前記記録をクリアする処理
を含む付記１乃至４のうち１つ記載のアクセスプログラム。
【０１５２】
（付記６）
更に、
前記第２メモリデバイスの前記データ格納領域に格納されているデータのうち、アクセス時点が新しい一部のデータを復帰対象として選択する処理と、
前記復帰対象として選択された前記一部のデータを前記第１メモリデバイスの前記データ格納領域に移動させる処理と、
前記第１メモリデバイスの前記データ格納領域に移動させた前記一部のデータに関する前記記録における前記アドレスを更新する処理と
を含む付記１乃至５のうち１つ記載のアクセスプログラム。
【０１５３】
（付記７）
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータに、
前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する処理と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる処理と、
移動させた前記一部のデータに関する前記記録における前記アドレスを更新する処理と
を含む第１ルーチン処理と、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記空き容量が充足されるタイミングを待って、前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する処理と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する処理と
を含む第２ルーチン処理と
を並行に実行させるアクセスプログラム。
【０１５４】
（付記８）
前記第１ルーチン処理は、更に、
前記第２メモリデバイスの前記データ格納領域における空き容量が不足していると判定した場合に、当該データ格納領域に格納されているデータのうち一部のデータに関する前記記録をクリアする処理
を含む付記７記載のアクセスプログラム。
【０１５５】
（付記９）
前記コンピュータは、キャッシュサーバであり、
前記記録は、前記キーのハッシュ値をインデックスとするハッシュテーブルに設定され、
前記データ格納領域は、キャッシュ領域である
付記１乃至８のうち１つ記載のアクセスプログラム。
【０１５６】
（付記１０）
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータにより実行されるデータアクセス方法であって、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する判定処理と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる処理と、
移動させた前記一部のデータに関する前記記録におけるアドレスを更新する処理と、
前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する処理と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する処理と
を含むデータアクセス方法。
【０１５７】
（付記１１）
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有するコンピュータにより実行されるデータアクセス方法であって、
前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する処理と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる処理と、
移動させた前記一部のデータに関する前記記録における前記アドレスを更新する処理と
を含む第１ルーチン処理と、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記空き容量が充足されるタイミングを待って、前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する処理と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する処理と
を含む第２ルーチン処理と
を並行に実行するデータアクセス方法。
【０１５８】
（付記１２）
前記コンピュータは、キャッシュサーバであり、
前記記録は、前記キーのハッシュ値をインデックスとするハッシュテーブルに設定され、
前記データ格納領域は、キャッシュ領域である
付記１０又は１１に記載のデータアクセス方法。
【０１５９】
（付記１３）
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部と、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する判定部と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる移動部と、
移動させた前記一部のデータに関する前記記録における前記アドレスを更新する更新部と、
前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する格納処理部と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する設定部と
を含む情報処理装置。
【０１６０】
（付記１４）
第１メモリデバイスと、当該第１メモリデバイスよりもレイテンシが大きい第２メモリデバイスとを用いたデータ格納領域に格納されているデータに関して、当該データが格納されているアドレスと、当該データを識別するキーとを対応付ける記録を記憶する記憶部を有し、
更に、
前記第１メモリデバイスの前記データ格納領域における空き容量が不足しているか否かを判定する判定部と、
前記空き容量が不足していると判定した場合に、前記第１メモリデバイスの前記データ格納領域に格納されているデータのうち一部のデータを前記第２メモリデバイスの前記データ格納領域に移動させる移動部と、
移動させた前記一部のデータに関する前記記録における前記アドレスを更新する更新部と
を含む第１ルーチン部と、
新たなキーで識別される追加データの保存要求を受け付けた場合に、前記空き容量が充足されるタイミングを待って、前記第１メモリデバイスの前記データ格納領域に、前記追加データを格納する格納処理部と、
前記追加データが格納されたアドレスと、前記新たなキーとを対応付ける前記記録を設定する設定部と
を含む第２ルーチン部と
を有し、
前記第１ルーチン部における処理と、前記第２ルーチン部における処理とを並行に実行する情報処理装置。
【０１６１】
（付記１５）
前記情報処理装置は、キャッシュサーバであり、
前記記録は、前記キーのハッシュ値をインデックスとするハッシュテーブルに設定され、
前記データ格納領域は、キャッシュ領域である
付記１３又は１４に記載の情報処理装置。
【符号の説明】
【０１６２】
１０１  Ｗｅｂサーバ    １０３  キャッシュサーバ
１０５  データベースサーバ    ６０１  ＣＰＵ
６０３  ＤＲＡＭ制御回路    ６０５  ＤＲＡＭ
６０７  ＮＶＲＡＭ制御回路    ６０９  ＮＶＲＡＭ
６１１  通信制御回路    １３００  メイン処理部
１３０１  受信部    １３０３  送信部
１３０５  探索部    １３０７  第１判定部
１３０９  追加部    １３１１  第２判定部
１３１３  格納処理部    １３１５  設定部
１３１７  第３判定部    １３１９  第１移動部
１３２１  第１更新部    １３２３  削除部
１３２５  第２移動部    １３２７  読み取り部
１３２９  書き込み部    １３３１  第２更新部
１３４１  テーブル記憶部    １３５１  ＯＳ
３１０１  メイン処理部    ３１０３  調整部
３１０５  第４判定部
【図１】
2017228211.tif 000003
【図２】
2017228211.tif 000004
【図３】
2017228211.tif 000005
【図４】
2017228211.tif 000006
【図５】
2017228211.tif 000007
【図６】
2017228211.tif 000008
【図７】
2017228211.tif 000009
【図８】
2017228211.tif 000010
【図９】
2017228211.tif 000011
【図１０】
2017228211.tif 000012
【図１１】
2017228211.tif 000013
【図１２】
2017228211.tif 000014
【図１３】
2017228211.tif 000015
【図１４】
2017228211.tif 000016
【図１５】
2017228211.tif 000017
【図１６】
2017228211.tif 000018
【図１７】
2017228211.tif 000019
【図１８】
2017228211.tif 000020
【図１９】
2017228211.tif 000021
【図２０】
2017228211.tif 000022
【図２１】
2017228211.tif 000023
【図２２】
2017228211.tif 000024
【図２３】
2017228211.tif 000025
【図２４】
2017228211.tif 000026
【図２５】
2017228211.tif 000027
【図２６】
2017228211.tif 000028
【図２７】
2017228211.tif 000029
【図２８】
2017228211.tif 000030
【図２９】
2017228211.tif 000031
【図３０】
2017228211.tif 000032
【図３１】
2017228211.tif 000033
【図３２】
2017228211.tif 000034
【図３３】
2017228211.tif 000035
【図３４】
2017228211.tif 000036