(57)【要約】  本発明は、ネットワークを介してアクセスされる記憶装置及び記憶システムの応答性能が向上する情報処理装置を提供する。その情報処理装置は、アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスをそのアクセス識別子に基づいて算出する手段と、算出されたそのアドレスに基づいて読み出される、その領域のデータである、第２のデータに含まれる管理情報に基づいて、その第２のデータに含まれるその第１のデータを取得し、その第２のデータに対してその第１のデータの操作を実行する手段と、を備える。
2015118865.tif 000002
【特許請求の範囲】
【請求項１】
アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出するアドレス解決手段と、
算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行するアクセス実行手段と、を含む
情報処理装置。
【請求項２】
前記アクセス実行手段は、前記第１のデータの追加、削除及び更新のいずれかであるデータ操作を実行する際に、
前記記憶装置から前記第１のデータに対応する前記アクセス識別子に基づいて前記第２のデータを取得し、取得された前記第２のデータに対して前記データ操作を実行し、前記データ操作を実行された前記第２のデータを前記記憶装置に書き込む
請求項１記載の情報処理装置。
【請求項３】
前記アドレス解決手段は、
前記アクセス識別子に対応する数値を算出し、
算出された前記数値と、前記記憶装置上の利用可能なアドレス空間の開始アドレスと、前記領域のサイズ及び前記アドレス空間のサイズを示す情報と、に基づいて前記アドレスを算出する
ことを特徴とする請求項１または２記載の情報処理装置。
【請求項４】
前記アドレス解決手段は、前記アクセス識別子のハッシュ値を前記数値として算出する
ことを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記管理情報は、前記第２のデータに含まれる前記第１のデータに対応するアクセス識別子と、前記第１のデータの前記領域内における位置を示すポインタと、の対応を示す情報を含む
ことを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記第１のデータに対応するアクセス識別子に基づいて算出された前記アドレスに基づいて読み出された領域に含まれる前記管理情報は、前記第１のデータが前記記憶装置上の他の領域に記憶されることを示す情報、及び前記第１のデータが他の記憶装置上の領域に記憶されることを示す情報を含む
ことを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記アドレスは、前記記憶装置上の物理アドレスである
ことを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
請求項１乃至７のいずれか１項に記載の情報処理装置と、
前記記憶装置と、を含む
情報処理システム。
【請求項９】
コンピュータが、
アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出し、
算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、
前記第２のデータに対して前記第１のデータの操作を実行する
データアクセス方法。
【請求項１０】
アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出し、
算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、
前記第２のデータに対して前記第１のデータの操作を実行する処理をコンピュータに実行させる
プログラムを記録したコンピュータ読み取り可能な非一時的記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置及び記憶システムに対するデータアクセスの技術に関する。
【背景技術】
【０００２】
記憶装置及び記憶システムに対するデータアクセスの制御に関するさまざまな技術が知られている。【０００３】
例えば、単一あるいは複数の計算機によって構成されるデータストアシステム（例えば、データベースシステムやファイルシステム、キャッシュシステム）がある。近年では、分散ストレージシステムが、そのようなシステムに、しばしば適用されている。その分散ストレージシステムは、ネットワークを介して接続された複数の汎用的な計算機を含む。【０００４】
そして、その分散ストレージシステムは、それらの計算機に搭載された記憶装置を用いて、データの格納及びデータの提供を行う。その記憶装置は、例えばＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、主記憶（例えば、ＤＲＡＭ：Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などである。【０００５】
上述のような分散ストレージシステムでは、いずれの計算機にデータを配置し、いずれの計算機によってデータを処理するのかを、ソフトウェアまたは特別なハードウェアが決定する。このようなアーキテクチャは、Ｓｈａｒｅｄ  ｎｏｔｈｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅと呼ばれる。【０００６】
ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）は、例えば複数のサーバ間でＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）などのネットワークを介して、記憶装置を共有する。例えば、データストアシステムは、ＳＡＮにより共有される記憶装置を用いて実現される。【０００７】
ＳＡＮにおいて、複数の計算機間でデータを共有してシステムを実現するには、Ｓｈａｒｅｄ  Ｅｖｅｒｙｔｈｉｎｇアーキテクチャに基づくソフトウェアを用いる必要がある。例えば、ファイルシステムの場合、そのソフトウェアは、ＳＡＮファイルシステムなどである。また、データベースシステムの場合、そのソフトウェアは、Ｏｒａｃｌｅ（登録商標）  ＲＡＣ（Ｒｅａｌ  Ａｐｐｌｉｃａｔｉｏｎ  Ｃｌｕｓｔｅｒｓ）（登録商標）などがある。【０００８】
Ｓｈａｒｅｄ  Ｅｖｅｒｙｔｈｉｎｇアーキテクチャは、通常、ＦＣやｉＳＣＳＩ（ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）を用いて実現される。ＦＣやｉＳＣＳＩは、通信遅延が大きい。そのため、記憶装置としても応答性能に優れた記憶装置が使われるケースは少なく、ＨＤＤなどの応答性能に劣る記憶装置が主に使われる。【０００９】
一方、ＨＤＤは、シーケンシャルなアクセス性能に優れる。そのため、データベースなどのソフトウェアは、例えば、Ｗｒｉｔｅ  Ａｈｅａｄ  Ｌｏｇなどの方法を用いて更新情報だけをシーケンシャルに書き出すことによって、その共有される記憶装置の低い性能をカバーする。【００１０】
近年では、高速かつ汎用的なＰＣＩ−ｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ−Ｅｘｐｒｅｓｓ）インタフェースで、計算機にＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などの高速な記憶装置を接続する構成が、用いられる。このような構成は、高速な記憶装置に低遅延でアクセスすることを可能にする。従って、このような構成は、ＳＡＮ上のストレージに対するキャッシュなどの用途に用いられる。【００１１】
このような構成のＰＣＩ−ｅデバイスをＥｘｐＥｔｈｅｒ（登録商標）などにより複数ホスト間で共有する技術を用いることにより、Ｓｈａｒｅｄ  Ｅｖｅｒｙｔｈｉｎｇアーキテクチャを実現することができる。また、このような構成を取ることにより、上述のＳＡＮ上のストレージと比較して、低遅延でのストレージ共有の実現が可能になる。【００１２】
特許文献１は、分散型システムの一例を開示する。特許文献１の分散型システムは、ネットワークで接続された複数のノードにより、識別子によって特定されるレコードが分散管理される。そのノードは、レコード記憶手段とインデクス付与手段とレコード取得手段とを備える。【００１３】
そのレコード記憶手段は、そのノードが管理する複数のレコードを識別子の任意の範囲ごとに集合体として記憶する。【００１４】
そのインデクス付与手段は、その集合体に対して、その集合体の範囲に含まれる識別子を用いたインデクスを付与する。【００１５】
そのレコード取得手段は、レコード取得要求に対して、そのインデクスを参照することにより、そのレコード取得要求にて要求されたレコードをそのレコード記憶手段から取得する。【００１６】
特許文献２は、ストレージシステムの一例を開示する。特許文献２のストレージシステムは、複数のホストと、ボリューム仮想化装置と、複数のストレージと、管理クライアントと、ストレージ管理サーバとを備える。【００１７】
そのホストとそのストレージとは、ボリューム仮想化装置を挟んで、ＬＡＮ（Ｌｏｃａｌ Ａｒｅａ Ｎｅｔｗｏｒｋ）等の通信ネットワークを介して接続される。【００１８】
ボリューム仮想化装置は、そのホストに、それらの複数のストレージをひとつの仮想的なストレージ装置として認識させる。【００１９】
ストレージ管理サーバは、それらの複数のストレージ上のボリューム配置を制御する。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】特開２０１２−１６８７８１号公報
【特許文献２】特開２０１３−０３３５１５号公報
【発明の概要】
【発明が解決しようとする課題】
【００２１】
しかしながら、上述した先行技術文献に記載された技術においては、外部記憶装置の応答性能が所望の値よりも低いという問題点がある。【００２２】
その理由は、ネットワークを介してアクセスされる記憶装置（特許文献１のノード及び特許文献２のストレージ装置）は、記憶デバイスへのアクセス時間に加え、ネットワーク上のコマンド及び応答の通信による遅延が影響するからである。【００２３】
即ち、特許文献１や特許文献２の技術により、データベースやＫＶＳ（Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ）を実現した場合、所望のデータを取得するために、アクセス元の計算機、外部記憶装置及び中間装置間などで複数回の通信が必要になる場合があるからである。即ち、これらのネットワークを介してアクセスされる記憶装置は、ホスト（アクセス元）上の記憶手段と比較して、通信遅延の影響によって応答性能が劣るからである。【００２４】
本発明の目的は、上述した問題点を解決する情報処理装置、情報処理システム、データアクセス方法、及び、そのためのプログラムあるいはそのプログラムを記録したコンピュータ読み取り可能な非一時的記録媒体を提供することにある。
【課題を解決するための手段】
【００２５】
本発明の一様態における情報処理装置は、アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出するアドレス解決手段と、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行するアクセス実行手段と、を含む。【００２６】
本発明の一様態におけるデータアクセス方法は、コンピュータが、アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出し、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行する。【００２７】
本発明の一様態におけるコンピュータ読み取り可能な非一時的記録媒体は、アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出し、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行する処理をコンピュータに実行させるプログラムを記録する。【００２８】
本発明の一様態における情報処理システムは、アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する記憶装置上と、前記記憶装置の領域を特定するアドレスを前記アクセス識別子に基づいて算出するアドレス解決手段と、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行するアクセス実行手段と、を含む情報処理装置と、を含む。
【発明の効果】
【００２９】
本発明は、ネットワークを介してアクセスされる記憶装置及び記憶システムの応答性能を、向上することが可能になるという効果がある。
【図面の簡単な説明】
【００３０】
【図１】本発明の第１の実施形態に係る情報処理システムの構成を示すブロック図である。
【図２】第１の実施形態における計算機及び外部記憶装置の内部構成を示すブロック図である。
【図３】第１の実施形態に係る計算機を実現するコンピュータのハードウェア構成を示すブロック図である。
【図４】第１の実施形態における計算機及び外部記憶装置の動作を示すフローチャートである。
【図５】第１の実施形態におけるデータ記憶部のアドレス空間の一例を示す図である。
【図６】第１の実施形態におけるページの構造の一例を示す図である。
【図７】第１の実施形態における計算機及び外部記憶装置の動作を示すフローチャートである。
【図８】本発明の第２の実施形態に係る情報処理装置の構成を示すブロック図である。
【発明を実施するための形態】
【００３１】
本発明を実施するための形態について図面を参照して詳細に説明する。なお、各図面及び明細書記載の各実施形態において、同様の構成要素には同様の符号を付与し、適宜説明を省略する。
【００３２】
＜＜＜第１の実施形態＞＞＞
図１は、本発明の第１の実施形態に係る情報処理システム１０の構成の一例を示すブロック図である。
【００３３】
図１に示すように、本実施形態に係る情報処理システム１０は、計算機（情報処理装置とも呼ばれる）１００と外部記憶装置２００とネットワーク３００とを備える。図１に示す例に係わらず、計算機１００及び外部記憶装置２００のそれぞれの台数は、１及び複数の任意の台数であってよい。また、外部記憶装置２００は、情報処理装置や複数の記憶装置などを含む記憶システムであってもよい。
【００３４】
＝＝＝計算機１００＝＝＝
計算機１００は、外部記憶装置２００に対するデータアクセスを制御し、データストア機能を実現する。計算機１００は、演算装置（例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））、記憶部、ネットワーク３００に接続するためのインタフェース部などを備える、コンピュータ装置（情報処理装置とも呼ばれる）である。そのインタフェースは、例えば、ネットワークカードやホストバスアダプタ、ＥｘｐＥｔｈｅｒ機能を備えたカードなどである。
【００３５】
＝＝＝外部記憶装置２００＝＝＝
外部記憶装置２００は、計算機１００と結合するためのインタフェース手段と、記憶デバイスと、記憶デバイスへのアクセス処理を行う手段とを、少なくとも備える。その記憶デバイスは、フラッシュメモリやＤＲＡＭ、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＨＤＤなどである。
【００３６】
そのインタフェース手段は、Ｅｔｈｅｒｎｅｔ（登録商標）やＦｉｂｒｅ  Ｃｈａｎｎｅｌ、ＩｎｆｉｎｉＢａｎｄなどを制御する。例えば、外部記憶装置２００は、ＥｘｐＥｔｈｅｒによって計算機１００と結合される場合には、ＥｘｐＥｔｈｅｒ機能を備えるカード、ＰＣＩ−ｅインタフェースが搭載された記憶デバイスを搭載する。
【００３７】
ネットワーク３００は、計算機１００及び外部記憶装置２００を相互に接続する。そして、ネットワーク３００は、計算機１００及び外部記憶装置２００間の、データ、制御メッセージ及びその他のメッセージなどを媒介する。ネットワーク３００は、例えばＥｔｈｅｒｎｅｔ、ＩｎｆｉｎｉＢａｎｄ、またはこれらを利用するＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）、ＲＤＭＡ（Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）などの上位プロトコルにより実現される。また、ネットワーク３００は、Ｆｉｂｒｅ  ＣｈａｎｎｅｌやＦＣｏＥ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ）、ＥｘｐＥｔｈｅｒなどによって実現されてもよい。ネットワーク３００は、これらに限られず、任意の方法で実現されてよい。
【００３８】
図２は、計算機１００及び外部記憶装置２００の内部構成を示すブロック図である。図２に示す各構成要素は、ハードウェア単位の回路でも、コンピュータ装置の機能単位に分割された構成要素でもよい。ここでは、図２に示す構成要素は、コンピュータ装置の機能単位に分割された構成要素として説明する。
【００３９】
なお、図２では、図１に示す情報処理システム１０のネットワーク３００が省略されている。また、図２は、計算機１００及び外部記憶装置２００のそれぞれを１つずつ含む情報処理システム１０の構成を示す。
【００４０】
＝＝＝計算機１００の内部構成＝＝＝
計算機１００は、データストア機能実現部１１０とアプリケーション１２０とを含む。
【００４１】
データストア機能実現部１１０は、例えば、（データベースやＫＶＳ（Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ）など）を実現するための、演算装置（後述するＣＰＵ７０１）上で動作するソフトウェア（データストアソフトウェア）である。
【００４２】
アプリケーション１２０はデータストアを利用する任意のソフトウェアである。アプリケーション１２０は、データストア機能実現部１１０が動作する計算機１００とは別の計算機で動作してもよい。ここで、そのデータストアは、データストア機能実現部１１０により実現される。
【００４３】
データストア機能実現部１１０は、アクセス要求受信部１１１とアドレス解決部１１２とアクセス実行部１１３とを含む。
【００４４】
＝＝＝アクセス要求受信部１１１＝＝＝
アクセス要求受信部１１１は、アプリケーション１２０からのデータアクセス要求命令を受け付ける。なお、アクセス要求受信部１１１は、アドレス解決部１１２の一部として含まれてもよい。
【００４５】
そのデータアクセス要求命令は、データストアソフトウェアの機能（即ち、データストア機能実現部１１０が提供するデータストアの機能）によって異なる。例えば、そのデータストアがデータベースの場合、そのデータアクセス要求命令は、ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）で指定されるようなデータ操作命令である。また、そのデータストアがＫＶＳの場合、そのデータアクセス要求命令は、Ｋｅｙに対応するｖａｌｕｅを取得したり、登録・更新したりするような処理命令である。
【００４６】
＝＝＝アドレス解決部１１２＝＝＝
アドレス解決部１１２は、アクセス要求受信部１１１が受け付けたデータアクセス要求命令を解釈し、そのデータアクセス要求命令に対応するデータ（第１のデータ）を記憶する、ページ（領域とも呼ばれる）を特定するアドレスを算出する。そのページは、外部記憶装置２００のデータ記憶部２２０上の部分的な領域である。アドレス解決部１１２は、そのアドレスをアクセス識別子に基づいて算出する。そのアクセス識別子は、データストア機能実現部１１０が提供するデータストアの機能において、その第１のデータを特定する情報である。アドレス解決部１１２は、そのアクセス識別子を、そのデータアクセス要求命令を解釈して取得する。
【００４７】
その「ページを特定するアドレス」は、外部記憶装置２００のデータ記憶部２２０（後述）の物理アドレスであってよい。また、その「ページを特定するアドレス」は、外部記憶装置２００のアクセス処理部２１０（後述）においてデータ記憶部２２０（後述）の物理アドレスに変換可能な、論理アドレスであってもよい。その「ページを特定するアドレス」を算出する動作の詳細については後述する。
【００４８】
＝＝＝アクセス実行部１１３＝＝＝
アクセス実行部１１３は、アドレス解決部１１２によって算出されたアドレスに対して、データアクセスリクエスト（例えば、ｒｅａｄ要求やＷｒｉｔｅ要求など）を発行する。
【００４９】
即ち、アクセス実行部１１３は、アドレス解決部１１２によって算出されたアドレスを指定して、そのページのデータ（第２のデータ）を読み出す要求（ｒｅａｄ要求）、及びそのページにデータを書き込む要求（Ｗｒｉｔｅ要求）を発行する。
【００５０】
また、アクセス実行部１１３は、読み出された第２のデータに含まれる管理情報に基づいて、読み出された第２のデータに含まれる第１のデータを取得する。更に、アクセス実行部１１３は、読み出された第２のデータに含まれる管理情報に基づいて、読み出された第２のデータに対し、第１のデータの操作（追加、削除及び更新）を実行する。管理情報の詳細は、後述する。
【００５１】
＝＝＝外部記憶装置２００の内部構成＝＝＝
外部記憶装置２００は、アクセス処理部２１０とデータ記憶部２２０とを含む。
【００５２】
＝＝＝アクセス処理部２１０＝＝＝
アクセス処理部２１０は、計算機１００のアクセス実行部１１３からデータアクセスリクエストを受け取り、そのデータアクセスリクエストに含まれるアドレスに基づいて、データ記憶部２２０に記憶されるデータを取得あるいは操作し、計算機１００へ応答する。
【００５３】
また、アクセス処理部２１０は、データ記憶部２２０の記憶媒体特性に基づいた制御などを行う機能を備える。アクセス処理部２１０は、一般的には何らかの集積回路やＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）上のロジックとして実現されている。具体的には、アクセス処理部２１０は、フラッシュメモリのコントローラや、ＤＲＡＭコントローラなどである。
【００５４】
＝＝＝データ記憶部２２０＝＝＝
データ記憶部２２０は実際の記憶媒体であり、フラッシュメモリやＤＲＡＭ、ＨＤＤ、またはそれらの組み合わせなどから構成される。
【００５５】
データ記憶部２２０は、アクセス識別子に対応する第１のデータを含む第２のデータを、そのアクセス識別子に対応するアドレスで特定されるページに記憶する。
【００５６】
以上が、計算機１００及び外部記憶装置２００それぞれの機能単位の各構成要素についての説明である。
【００５７】
次に、計算機１００のハードウェア単位の構成要素について説明する。
【００５８】
図３は、本実施形態における計算機１００を実現するコンピュータ７００のハードウェア構成を示す図である。
【００５９】
図３に示すように、コンピュータ７００は、ＣＰＵ（プロセッサとも呼ばれる）７０１、記憶部７０２、記憶装置７０３、入力部７０４、出力部７０５及び通信部７０６を含む。更に、コンピュータ７００は、外部から供給される記録媒体（または記憶媒体）７０７を含む。例えば、記録媒体７０７は、情報を非一時的に記憶する不揮発性記録媒体（非一時的記録媒体）である。また、記録媒体７０７は、情報を信号として保持する、一時的記録媒体であってもよい。
【００６０】
ＣＰＵ７０１は、オペレーティングシステム（不図示）を動作させて、コンピュータ７００の全体の動作を制御する。例えば、ＣＰＵ７０１は、記憶装置７０３に装着された記録媒体７０７から、そのプログラムやデータを読み込み、読み込んだそのプログラムやそのデータを記憶部７０２に書き込む。ここで、そのプログラムは、例えば、後述の図４及び図７に示すフローチャートにおける計算機１００の動作を、コンピュータ７００に実行させるためのプログラムである。
【００６１】
そして、ＣＰＵ７０１は、その読み込んだプログラムに従って、またその読み込んだデータに基づいて、図２に示すアクセス要求受信部１１１、アドレス解決部１１２及びアクセス実行部１１３として各種の処理を実行する。
【００６２】
なお、ＣＰＵ７０１は、通信網（不図示）に接続されている外部コンピュータ（不図示）から、記憶部７０２にそのプログラムやそのデータをダウンロードしてもよい。
【００６３】
記憶部７０２は、そのプログラムやそのデータを記憶する。記憶部７０２は、外部記憶装置２００から受信するデータ及び外部記憶装置２００へ送信するデータを記憶する手段を含んでよい。
【００６４】
記憶装置７０３は、例えば、光ディスク、フレキシブルディスク、磁気光ディスク、外付けハードディスク及び半導体メモリである。記憶装置７０３は、そのプログラムをコンピュータ読み取り可能に記憶する。また、記憶装置７０３は、そのデータを記憶してもよい。記憶装置７０３は、外部記憶装置２００から受信するデータ及び外部記憶装置２００へ送信するデータを記憶する手段を含んでよい。
【００６５】
入力部７０４は、オペレータによる操作の入力や外部からの情報の入力を受け付ける。入力操作に用いられるデバイスは、例えば、マウスやキーボード、内蔵のキーボタン及びタッチパネルなどである。
【００６６】
出力部７０５は、例えばディスプレイで実現される。出力部７０５は、例えばＧＵＩ（ＧＲＡＰＨＩＣＡＬ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）による入力要求や出力などの確認をするために用いられる。
【００６７】
通信部７０６は、ネットワーク３００とのインタフェースを実現する。通信部７０６は、アクセス実行部１１３の一部として含まれる。
【００６８】
以上説明したように、図２に示す計算機１００の機能単位のブロックは、図３に示すハードウェア構成のコンピュータ７００によって実現される。但し、コンピュータ７００が備える各部の実現手段は、上記に限定されない。すなわち、コンピュータ７００は、物理的に結合した１つの装置により実現されてもよいし、物理的に分離した２つ以上の装置を有線または無線で接続し、これら複数の装置により実現されてもよい。
【００６９】
なお、上述のプログラムのコードを記録した記録媒体７０７が、コンピュータ７００に供給される場合、ＣＰＵ７０１は、記録媒体７０７に格納されたそのプログラムのコードを読み出して実行してもよい。あるいは、ＣＰＵ７０１は、記録媒体７０７に格納されたそのプログラムのコードを、記憶部７０２、記憶装置７０３またはその両方に格納してもよい。すなわち、本実施形態は、コンピュータ７００（ＣＰＵ７０１）が実行するそのプログラム（ソフトウェア）を、一時的にまたは非一時的に、記憶する記録媒体７０７の実施形態を含む。なお、情報を非一時的に記憶する記憶媒体は、不揮発性記憶媒体とも呼ばれる。
【００７０】
以上が、本実施形態における計算機１００を実現するコンピュータ７００の、ハードウェア単位の各構成要素についての説明である。
【００７１】
次に本実施形態の動作について、図面を参照して詳細に説明する。
【００７２】
図４及び後述する図７は、本実施形態の計算機１００及び外部記憶装置２００の動作を示すフローチャートである。なお、これらのフローチャートによる計算機１００の処理は、前述したＣＰＵ７０１によるプログラム制御に基づいて、実行されてもよい。また、処理のステップ名については、Ｓ１０１のように、記号で記載する。
【００７３】
ここでは、データストアは、Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅであるとする。図４は、１つのＫｅｙに対応する第１のデータを読み込むためのデータアクセス要求命令（Ｒｅａｄリクエスト）を処理する例を示す。また、図７は、１つのＫｅｙに対応する何らかの第１のデータを登録・更新するためのデータアクセス要求命令（Ｕｐｄａｔｅリクエストやｐｕｔリクエスト）を処理する例を示す。なお、リレーショナルデータベースに対するＳＱＬ処理のような場合についても、その処理は本質的に同様であり、多少の変形で実現できることは明らかである。
【００７４】
なお、ここでは説明が複雑になることを回避するために、エラー処理などへの対応を記述しない。本実施形態を実施する際には、図４及び図７に示すフローチャートに対して、物理的・論理的障害やユーザ・アプリケーションの利用ミスに対する例外的な処理が追加されてよい。
【００７５】
また、複数の計算機１００が外部記憶装置２００を共有し、複数の計算機１００間で同一のレコードを更新する場合には、本実施形態に排他制御処理が導入されてよい。また、１つの計算機１００内でも高いスループット性能を発揮するために同時並行的に処理する場合があり、そのような場合にも、本実施形態に排他制御処理が導入されてよい。
【００７６】
＝＝＝Ｒｅａｄリクエスト処理＝＝＝
図４に示すように、データストアソフトウェアを利用するアプリケーション１２０は、データアクセス要求命令（ここではＲｅａｄリクエスト）をデータストア機能実現部１１０へ発行する（ステップＳ１０１）。
【００７７】
具体的には、アプリケーション１２０は、データストア機能実現部１１０が提供するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を呼び出すことで、そのデータアクセス要求命令を発行してよい。
【００７８】
また、アプリケーション１２０は、ｈｔｔｐ（ｈｙｐｅｒｔｅｘｔ  ｔｒａｎｓｆｅｒ  ｐｒｏｔｏｃｏｌ）やＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ（登録商標）  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）などの任意のプロトコルで通信することで、そのデータアクセス要求命令を発行してよい。この場合、アクセス要求受信部１１１は、そのプロトコルに対応するサーバとして動作してよい。
【００７９】
これらの例に係わらず、そのデータアクセス要求命令は、任意の方法でアプリケーション１２０からデータストア機能実現部１１０へ発行されてよい。
【００８０】
次に、データストア機能実現部１１０のアクセス要求受信部１１１は、発行されたそのデータアクセス要求命令を受け付ける（ステップＳ１０２）。
【００８１】
次に、アドレス解決部１１２は、アクセス要求受信部１１１が受け付けたそのデータアクセス要求命令に記載されているアクセス対象の第１のデータを特定する識別子（以後、アクセス識別子と呼ぶ）を特定する（ステップＳ１０３）。
【００８２】
ここでは、そのアクセス識別子は、Ｋｅｙ  Ｖａｌｕｅ  ＳｔｏｒｅにおけるＫｅｙである。Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅの場合、例えば、データストア機能実現部１１０が提供するＡＰＩとして、ｇｅｔ命令が用意されている。そのｇｅｔ命令は、Ｋｅｙに対応するレコードを取得する場合の、「ｇｅｔ（Ｋｅｙ１）」のような「Ｋｅｙ１」を引数とするｇｅｔ命令である。この場合、この引数情報「Ｋｅｙ１」が、アクセス対象データ（Ｖａｌｕｅ）を示すアクセス識別子である。なお、アドレス解決部１１２は、上記に限らず、ｇｅｔ命令のさまざまな亜種に対応してよい。
【００８３】
また、データストアがリレーショナルデータベースであって、データアクセス要求命令がＳＱＬ命令であるような場合、アドレス解決部１１２は、そのＳＱＬ命令を解釈して、アクセス対象データやデータベース内での実行命令に変換する機構を含んでよい。例えば、その機構は、クエリパーサやクエリオプティマイザの一部などであってよい。
【００８４】
このリレーショナルデータベースの場合、アクセス識別子は、例えば、テーブルを示す情報（例えば、ＳＥＬＥＣＴ文で指定されるテーブル名）とレコードＩＤ（例えば、ＳＥＬＥＣＴ文で指定されるＩＤフィールドの値）である。なお、アクセス識別子は、上述の例に係わらず、リレーショナルデータベースの実装に依存するものであってよい。
【００８５】
次に、アドレス解決部１１２は、特定されたアクセス識別子から外部記憶装置２００のデータ記憶部２２０のアドレスを算出する（ステップＳ１０４）。
ここで、そのアドレスの算出方法について、図面を参照して詳細に説明する。
【００８６】
図５は、データ記憶部２２０のアドレス空間２２１の一例を示す図である。一般的に、論理あるいは物理アドレスを指定することで、データ記憶部２２０に含まれる記憶媒体のアクセス先を特定することができる。
【００８７】
図５に示すアドレス空間２２１は、例えば、データ記憶部２２０の全体あるいは一部の記憶領域である。なお、一部の記憶領域である理由は、例えば、複数のサービスで分割して使ったり、システム実現のための管理情報を格納する領域用に確保したりするためである。このアドレス空間２２１が、第１のデータ（即ち、第１のデータを含む第２のデータ）の格納先として、利用される。
【００８８】
本実施形態では、データ記憶部２２０のアドレス空間２２１が任意のサイズでページ（図５に示すページ２２３）に分割される。そして、アクセス処理部２１０は、ページ２２３のそれぞれに対応するＩＤ（ＩＤＥＮＴＩＦＩＥＲ）を用いて、アドレス空間２２１をアクセスする。
【００８９】
そのＩＤ（以後、ページＩＤと呼ぶ）は、例えば、各行の左端から右へ及び上の行から下の行へ向かって、開始を「０」として「１」ずつ増加する連続する数値が、ページごとに付与される。例えば、最上行、最左端のページ２２３のページＩＤは「０」、最上行、左から５番目のページ２２３のページＩＤは「４」、上から２行目、左から４番目のページ２２３のページＩＤは「１２」である。
【００９０】
ページＩＤに対応する物理アドレスは、アドレス空間２２１の最初のアドレスと、ページＩＤと、ページサイズ（例えば、バイト数で示すページ２２３の容量）とに基づいて、一意に算出可能である。即ち、データ記憶部２２０のアドレスを算出するために、計算機１００は、アドレス空間２２１の最初のアドレスと、ページＩＤと、ページサイズの情報を保持すればよい。アドレス空間２２１としては、連続したページが確保されることが望ましいが、アドレス空間２２１が不連続なページ２２３で構成されてもよい。その場合、計算機１００は、連続するページ２２３における先頭のページ２２３のページＩＤと開始アドレスとを保持してよい。
【００９１】
アドレス解決部１１２は、以下に示すように、アクセス識別子に基づいてアクセス先のページＩＤを（即ち、ページ２２３を）特定する。
【００９２】
第１に、アドレス解決部１１２は、ステップＳ１０３で特定されたアクセス識別子（例えば、Ｋｅｙの値）を数値に変換する。例えば、アドレス解決部１１２は、一般的なハッシュ関数（ｍｄ５など）を用いて、Ｋｅｙの値を数値に変換する。なお、アドレス解決部１１２は、任意の数式に基づく、数値への変換関数やその処理プログラムのソフトウェアを用いてもよい。
【００９３】
第２に、アドレス解決部１１２は、変換して得たその値（ハッシュ値）を、アドレス空間２２１の総ページ数で除算し、その剰余をページＩＤとする。なお、その総ページ数は、アドレス空間２２１の容量をページサイズで除算することでも算出できる。
【００９４】
第３に、アドレス解決部１１２は、算出したそのページＩＤに基づいて、ページＩＤ×ページサイズ＋開始アドレスの演算を実行することにより、アクセス識別子（Ｋｅｙの値）に対応するページ２２３を示すアドレスを算出する。
【００９５】
上述のアドレス解決部１１２を含むことにより、計算機１００は以下の情報を保持しているだけで、アクセス識別子に対応するページ２２３をアクセスすることができる。その情報は、外部記憶装置２００のアドレス空間２２１の開始アドレスとハッシュ関数と、ページサイズ及びアドレス空間２２１のサイズを示す情報とである。但し、そのページ２２３内の容量を使い尽くすような場合はこの限りではない。ページ２２３内の容量を使い尽くすような場合については、後述する。
【００９６】
ページサイズ及びアドレス空間２２１のサイズを示す情報は、ページサイズ及びアドレス空間２２１のサイズそのものであってよい。また、ページサイズ及びアドレス空間２２１のサイズを示す情報は、アドレス空間２２１の総ページ数及びページサイズであってもよい。ページサイズ及びアドレス空間２２１のサイズを示す情報は、アドレス空間２２１の総ページ数及びアドレス空間２２１の総容量であってもよい。
【００９７】
本実施形態のＫｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅの場合、計算機１００は、その情報に基づいて、Ｋｅｙの値（アクセス識別子）が格納されるページ２２３をアクセスすることができる。また、これらの情報はシステム開始時から基本的（障害時や、複数の外部記憶装置２００で動作したときの外部記憶装置２００の追加や削除など）に不変である。従って、例えば複数の計算機１００で外部記憶装置２００を共有する場合でも、たかだかその情報を計算機１００間で共有することで、外部記憶装置２００を共有することができる。
【００９８】
即ち、外部記憶装置２００を共有するための計算機１００間で情報のやりとりが不要であり、データストア機能実現部１１０における処理の高速化を図ることができる。
【００９９】
以上が、そのアドレスの算出方法の説明である。
【０１００】
図４に戻って、次に、アクセス実行部１１３は、ステップＳ１０４で算出されたアドレスとページサイズのデータ長とを指定して、外部記憶装置２００に対してＲｅａｄ要求（データアクセスリクエスト）を送信する（ステップＳ１０５）。
【０１０１】
次に、外部記憶装置２００のアクセス処理部２１０は、このＲｅａｄ要求を受け付け、データ記憶部２２０に対してＲｅａｄ処理を実行する（ステップＳ１０６）。
【０１０２】
次に、アクセス処理部２１０は、このＲｅａｄ処理で得られた処理結果（ここでは、Ｒｅａｄデータ、即ち、ページ２２３のデータ（第２のデータ））をアクセス実行部１１３に送信する（ステップＳ１０７）。
【０１０３】
次に、アクセス実行部１１３は、受信したそのＲｅａｄデータ（ページ２２３のデータ）から、アドレス解決部１１２によって抽出されたアクセス識別子によって指定されるデータレコード（第１のデータ）を抽出する。続けてアクセス実行部１１３は、抽出したそのデータレコードをアクセス要求受信部１１１に出力する（ステップＳ１０８）。
【０１０４】
ここで、そのＲｅａｄデータから、そのアクセス識別子に対応するそのデータレコード（ここでは、Ｋｅｙ  Ｖａｌｕｅ  ＳｔｏｒｅにおけるＶａｌｕｅ）を抽出する方法について説明する。
【０１０５】
図６は、ページ２２３の構造の一例を示す図である。図６に示すように、ページ２２３は、データレコード２２５及び管理情報２２６を含む。
【０１０６】
データレコード２２５は、「Ｋｅｙ３」に対応する「Ｖａｌｕｅ」のデータである。
【０１０７】
管理情報２２６は、ページ２２３内に格納されている「Ｋｅｙ」の情報と、そのＫｅｙに対応する「ｖａｌｕｅ」が格納されているページ２２３内の位置を示すポインタを含む。即ち、管理情報２２６は、第２のデータに含まれる第１のデータに対応するアクセス識別子と、その第１のデータのページ２２３内における位置を示すポインタと、を含む。
【０１０８】
図６では、管理情報２２６は、ページ２２３内の末尾側に格納されている。管理情報２２６は、ページ２２３の末尾側に限らず、任意のあらかじめ定められた位置に格納されてよい。
【０１０９】
図６に示すように、ページ２２３内に「Ｋｅｙ１」、「Ｋｅｙ２」及び「Ｋｅｙ３」のそれぞれに対応するｖａｌｕｅが格納されている場合、管理情報２２６は、例えば以下の情報を含む。その情報は、「Ｋｅｙ１：０：ｘｘ、Ｋｅｙ２：ａ１：ｙｙ、Ｋｅｙ３：ａ２：ｚｚ」である。なお、「ページ２２３内に「Ｋｅｙ１」、「Ｋｅｙ２」及び「Ｋｅｙ３」に対応するデータレコード２２５格納される」ことは、「「Ｋｅｙ１」、「Ｋｅｙ２」及び「Ｋｅｙ３」のそれぞれのハッシュ値に基づいて求められるページＩＤが同じである」ことを示す。
【０１１０】
即ち、管理情報２２６は、Ｋｅｙごとの「Ｋｅｙの値：ポインタ：レコードサイズ（ｂｙｔｅｓ）」を含む。
【０１１１】
例えば、アクセス実行部１１３がＫｅｙ２のｖａｌｕｅにアクセスする場合、アクセス実行部１１３は、まず管理情報２２６からＫｅｙ２のポインタ「ａ１」を取得する。次に、アクセス実行部１１３は、「ａ１」の位置から、ｙｙ  ｂｙｔｅｓ分のデータに対して、アクセス（例えば、読み取り）を実行する。
【０１１２】
上述の管理情報２２６は、データレコード２２５が可変長である場合の管理情報の例を示す。レコードサイズが、システムとして固定（データレコード２２５が固定長）である場合、レコードサイズの情報は不要であり、管理情報の容量が削減される。
【０１１３】
ステップＳ１０８において、アクセス実行部１１３は、探索するＫｅｙに対応する情報が見つかるまで、場合によっては管理情報２２６を全部読む必要がある。アクセス実行部１１３が、1つ程度のページ２２３内のデータレコード２２５に対応する情報を検索するだけの場合、管理情報２２６のように単純な構成であってよい。また、管理情報の構造は、管理情報２２６の例に限らず、Ｋｅｙ値をより検索しやすい構造（例えば、Ｋｅｙ値の昇順／降順でソートされた構造やインデックス構造など）であってもよい。
【０１１４】
なお、本実施形態では、アクセス実行部１１３は、ページ単位のデータ（第２のデータ）を外部記憶装置２００から受信する。そして、アクセス実行部１１３は、ページ２２３から所望のデータレコード（第１のデータ、例えばｖａｌｕｅ）２２５を取り出す処理は、計算機１００上のメモリ（例えば、図３に示す記憶部７０２）を使用して実行する。例えば、アクセス実行部１１３は、ページ２２３のデータを取得し、取得したそのデータを計算機１００上の記憶部７０２にコピーし、記憶部７０２に格納された管理情報２２６を走査し、記憶部７０２に格納されたデータレコード２２５にアクセスする。
【０１１５】
以上が、アクセス識別子に対応するデータレコード２２５を抽出する方法の説明である。
図４に戻って、次に、アクセス要求受信部１１１は、リクエスト元のアプリケーション１２０に対して、取得したデータレコード２２５をＲｅａｄリクエストの応答として、出力する（ステップＳ１０９）。
【０１１６】
＝＝＝Ｗｒｉｔｅ処理＝＝＝
Ｗｒｉｔｅ系のデータアクセス要求命令（Ｕｐｄａｔｅリクエストやｐｕｔリクエスト）の場合、計算機１００は、まずページ２２３のデータを取得する。次に、計算機１００は、例えば記憶部７０２上で、そのデータを更新する。次に、計算機１００は、その更新したデータについて、ページ単位のＷｒｉｔｅ処理を行う。
【０１１７】
従って、図７において、ステップＳ１０１からステップＳ１０７までの動作は、図４に示すステップＳ１０１からステップＳ１０７までの動作と同一である。
【０１１８】
次に、アクセス実行部１１３は、アクセス対象のデータレコード２２５を特定するＫｅｙ（アクセス識別子）が管理情報２２６内にあるかどうかを確認する。続けて、アクセス実行部１１３は、その「Ｋｅｙ」が存在する場合、図４に示すステップＳ１０８における処理と同様に、その「Ｋｅｙ」に対応する「Ｖａｌｕｅ」へのポインタを取得する。そして、アクセス実行部１１３は、そのポインタとデータアクセス要求命令とに基づいてそのページ２２３のデータ（第２のデータの「ｖａｌｕｅ」及び管理情報２２６）を更新する（ステップＳ１２１）。
【０１１９】
なお、更新前後でＶａｌｕｅのサイズ（レコードサイズ）が異なる場合、アクセス実行部１１３は、更新後のＶａｌｕｅを、更新前のＶａｌｕｅとは別の場所に書き込むようにしてよい。また、データレコード２２５が更新あるいは削除されることで、ページ２２３の中に利用不可能なサイズの空き領域が多数できてしまう場合が考えられる。そのような場合には、計算機１００は、ガベージコレクション相当の処理を実行してよい。
【０１２０】
なお、ステップＳ１２１におけるアクセス実行部１１３の動作は、データストア機能実現部１１０としての仕様によって異なる。
【０１２１】
例えば、データストア機能実現部１１０が、ｐｕｔ（Ｋｅｙ、  ｖａｌｕｅ）関数で「Ｋｅｙ」に対応する「ｖａｌｕｅ」を追加する、というＡＰＩを備えているとする。その場合、そのＫｅｙに対応するデータレコード２２５がデータ記憶部２２０に既に存在する場合について、例えば、以下の２つの仕様が考えられる。そのひとつは、そのｖａｌｕｅを更新するという仕様である。また、他のひとつは、アプリケーション１２０に対して、「既にＫｅｙが存在する」と応答し、ｖａｌｕｅをｕｐｄａｔｅしない、といった仕様である。これらについてどのように実装するかは、データストア機能実現部１１０の仕様策定によって決定される。例えば後者の仕様の場合、データストア機能実現部１１０は、「ｖａｌｕｅ」は書き換えられず、アプリケーション１２０に応答を返す、といった動作をする。
【０１２２】
次に、アクセス実行部１１３は、更新されたページ２２３のデータとステップＳ１０４で算出されたアドレスとを指定し、外部記憶装置２００に対してＷｒｉｔｅ要求（データアクセスリクエスト）を送信する（ステップＳ１２５）。
【０１２３】
次に、外部記憶装置２００のアクセス処理部２１０は、このＷｒｉｔｅ要求を受け付け、データ記憶部２２０に対してＷｒｉｔｅ処理を実行する（ステップＳ１２６）。
【０１２４】
次に、アクセス処理部２１０は、このＷｒｉｔｅ処理で得られた処理結果（ここでは、Ｗｒｉｔｅ成功や失敗といった結果情報）をアクセス実行部１１３に送信する（ステップＳ１２７）。
【０１２５】
次に、アクセス実行部１１３は、受信したその処理結果をアクセス要求受信部１１１に出力する（ステップＳ１２８）。
【０１２６】
次に、アクセス要求受信部１１１は、リクエスト元のアプリケーション１２０に対して、取得したその処理結果をＷｒｉｔｅリクエストの応答として、出力する（ステップＳ１２９）。
【０１２７】
以上が、本実施形態の動作の説明である。
【０１２８】
次に、本実施形態において、システム構成の差異や特異なケースに対応する例を説明する。
【０１２９】
＝＝＝部分的なＷｒｉｔｅ＝＝＝
Ｗｒｉｔｅ処理において、部分的な更新で済む場合、ページ単位のアクセスをする必要がない場合がある。例えば、１つの計算機１００が外部記憶装置２００を専有し、かつその計算機１００が内部の排他制御を実行している場合、データの書き込みが必要なページ２２３内の領域は、更新される部分だけである。従って、管理情報２２６の更新が不要である場合、そのＷｒｉｔｅ処理の対象であるデータだけが、書き換えられればよい。
【０１３０】
この場合、アクセス実行部１１３は、ステップＳ１２１の処理をスキップし、ステップＳ１２５及びステップＳ１２６において対象のデータレコード２２５の部分だけを書き換える。アクセス実行部１１３がこのように動作することで、データストア機能実現部１１０におけるＷｒｉｔｅ処理の性能を向上させることができる。
【０１３１】
また、データストア機能実現部１１０は、複数の計算機１００がある１つの外部記憶装置２００を共有する場合にも、複数の計算機１００間においてページ単位で排他手続きを取り、更新される部分だけについてのｗｒｉｔｅ処理を実行してもよい。ここで、その更新される部分は、更新対象のデータレコード２２５である。
【０１３２】
また、外部記憶装置２００の機能（例えば、複数の命令をＡｔｏｍｉｃに実行できるような仕組み）が排他制御を実現し、データストア機能実現部１１０が、上述のような部分的なｗｒｉｔｅ処理を実行してよい。
【０１３３】
＝＝＝ページ２２３からデータがあふれる場合の処理＝＝＝
例えば、新しいデータ（新しいアクセス識別子（例えば、Ｋｅｙ）に対応するデータ（例えば、Ｖａｌｕｅ））が追加されることで、外部記憶装置２００のデータ記憶部２２０のページ容量が不足してしまうことが考えられる。ここで、ページ容量は、ページサイズで示されるページの容量である。即ち、データレコード２２５のサイズが大きいほど、ページＩＤが競合するデータレコード２２５が１つのページ２２３に入りきらない、という場合が増加する。
【０１３４】
従って、アクセス識別子に対応するデータのサイズの大きさを考慮し、ページサイズをそのデータのサイズに適する大きさにしておくことが望ましい。アクセス識別子に対応するデータのサイズは、データストア機能実現部１１０を利用するアプリケーション１２０によって異なる。このため、ページサイズは、利用アプリケーションの適性に合わせて、あらかじめ設定されてよい。
【０１３５】
利用されるハッシュ関数、レコードサイズに対応するページサイズ、及び総ページ数が適切であるという前提において、各ページ２２３はほぼ均等に使われる。従って、ページ２２３の容量が不足している場合は、全体の記憶容量自体も不足していると考えられる。
【０１３６】
しかし、上述の前提が崩れたり、ある特定のページ２２３に格納されるレコードが偶然により集中したりすると、情報処理システム１０全体での記憶容量には余裕があるにも拘わらず、特定のページ２２３の容量が不足してしまうことがある。
【０１３７】
この場合、データストア機能実現部１１０は、アクセス識別子から算出されるページＩＤで特定されるページ２２３とは異なる、別のページ２２３にデータを格納してよい。
【０１３８】
例えば、アクセス実行部１１３は、まず、アクセス識別子に基づいて算出されるページＩＤで特定されるページ２２３（第１のページ２２３）を取得する。
【０１３９】
次にアクセス実行部１１３は、取得したその第１のページ２２３の、管理情報２２６に、そのアクセス識別子の値が含まれているか否かを判定する。
【０１４０】
そのアクセス識別子の値が含まれている場合、アクセス実行部１１３は、そのアクセス識別子に対応する情報に基づいて、処理を実行する。
【０１４１】
そのアクセス識別子の値が含まれていない場合、アクセス実行部１１３は、別のページ２２３（第２のページ２２３）を取得して処理を実行する。その際、アクセス実行部１１３は、その第１のページ２２３の管理情報２２６にアクセス識別子と、データが実際に格納される、その第２のページ２２３のページＩＤの情報とを格納する。
【０１４２】
アクセス実行部１１３がページ容量の不足を検出するタイミングは、アクセス実行部１１３がそのページ２２３にデータレコード２２５を新しく格納したり、既存のデータレコード２２５を更新したりするタイミングである。ページ容量の不足が検出された時に、あふれたデータレコード２２５の格納先とされるページ２２３を選択する方法として、複数の方法が考えられる。
【０１４３】
例えば、データ記憶部２２０に、最初のアドレス空間２２１とは別の記憶領域に予備のページ２２３を用意しておく。アクセス実行部１１３は、その予備のページ２２３にあふれたレコードを追加する。
【０１４４】
また、アクセス実行部１１３は、別のページ２２３を任意の方法（たとえばランダム）で選んでもよい。
【０１４５】
また、第１のページ２２３内のどのレコードを第２のページ２２３に格納するかについてもさまざまな手法が考えられる。
【０１４６】
例えば、アクセス実行部１１３は、レコードサイズが大きいものを第２のページ２２３に格納する。また、アクセス実行部１１３は、更新頻度が低いレコード（例えば、管理情報に更新カウント値などを含む）を第２のレコードに格納してもよい。
【０１４７】
特定のアクセス識別子のレコードが存在するか否かの確認は、さまざまな用途で行われる。そのため、アクセス実行部１１３は、同一ページ２２３が算出されるアクセス識別子に対応する情報を、最初にアクセス先となるページ２２３（即ち、アクセス識別子から計算されるページ２２３）の管理情報２２６に格納してよい。
【０１４８】
このように構成することで、アクセス実行部１１３は、その特定のアクセス識別子のデータレコード２２５が存在するか否かについて、１回の外部記憶装置２００へのアクセスで判定することができる。
【０１４９】
＝＝＝キャッシュ＝＝＝
アクセス実行部１１３は、計算機１００に搭載されている記憶部７０２などを用いて、ページ２２３のデータをキャッシュしてよい。こうすることで、データストア機能実現部１１０の性能が向上する。１台の計算機１００が特定の外部記憶装置２００のアドレス空間２２１を専用で用いる場合、その１台の計算機１００は、別の計算機１００から外部記憶装置２００上のデータを更新されることを考慮しなくてよい。このため、アクセス実行部１１３は、Ｒｅａｄリクエストの処理時に、キャッシュデータの内容に基づいて応答してよい。これにより、往復遅延が削減される。
【０１５０】
Ｗｒｉｔｅ処理においては、以下の２つの条件を満足する場合、アクセス実行部１１３は、そのキャッシュ上のページ２２３にデータを書き込んだ時点で、アプリケーション１２０に対して応答を返してよい。その第１の条件は、１台の計算機１００が特定の外部記憶装置２００のアドレス空間２２１を専用で用いることである。その第２の条件は、データの永続性を担保する手段が、外部記憶装置２００に格納することではないことである。
【０１５１】
但し、外部記憶装置２００上のデータが最新データとして利用される場合には、オリジナル及びコピーされた全てのページ２２３へ、同期的に書き込み実行されることが必要である。このような同期的な書き込み処理によって、ある計算機１００の障害時に別の計算機１００を追加してデータストアシステムを復旧させることができる。即ち、耐障害性を重視する場合には、上述のように動作させる必要がある。
【０１５２】
また、複数の計算機１００で外部記憶装置２００を共有させる場合には、別の計算機１００からページ２２３に対する更新処理が発生する可能性がある。そのため、Ｒｅａｄキャッシュを利用することができない。そこで、アプリケーション１２０側やロードバランサなどを用いて、更新処理を動作させる計算機１００がアクセス識別子ごとに同一に割り当てられるようにする。この場合、アクセス実行部１１３は、Ｒｅａｄキャッシュを利用してもよい。この場合、アクセス実行部１１３がＲｅａｄキャッシュを利用しても、不整合は起きない。
【０１５３】
＝＝＝複数の計算機１００間の排他制御＝＝＝
図１に示すように計算機１００が複数台である場合、同一ページ２２３へのＷｒｉｔｅアクセスの排他制御を実行する。例えば、計算機１００は、別の計算機１００との間で２フェーズコミットのような方法を取ることで、その排他制御を実現してよい。
【０１５４】
また、外部記憶装置２００上で複数の処理をＡｔｏｍｉｃに実行し、排他制御が実現されてもよい。この場合、計算機１００間での通信は不要である。例えば、外部記憶装置２００は、管理情報にアクセス識別子ごとのバージョン番号を格納する。そして、外部記憶装置２００は、そのバージョン情報を参照して、そのアクセス識別子に対応するデータレコード２２５が、既に変更されているか否かを確認する。既に変更されているのでなければ、外部記憶装置２００は、そのデータレコード２２５を更新する。
【０１５５】
＝＝＝複数の記憶装置＝＝＝
複数の外部記憶装置２００を用意し、外部記憶装置２００へのアクセスを分散させることで、データストアシステムの性能をスケールアップさせることができる。
【０１５６】
この場合、例えば、外部記憶装置２００ごとに異なるページＩＤが付与されてよい。例えば、ページＩＤの０〜１０００が１台目の外部記憶装置２００に、ページＩＤの１００１〜２０００が２台目の外部記憶装置２００に、付与されてよい。
この情報は、計算機１００間で共有される。
【０１５７】
また、アクセス実行部１１３は、ハッシュ値を計算した時点で、コンシステント・ハッシングのような方法でどの外部記憶装置２００を使うかを決定するようにしてよい。次に、アクセス実行部１１３は、その外部記憶装置２００の中のどのページＩＤを使用するかを決めてもよい。
【０１５８】
＝＝＝複製＝＝＝
信頼性確保のためにページ２２３の複製を生成することができる。
【０１５９】
例えば、アクセス実行部１１３は、格納先の外部記憶装置２００をコンシステント・ハッシングのような方法で決定する際に、コンシステント・ハッシシングのハッシュリングの隣のノードを必要数選択する。こうして、アクセス実行部１１３は、複数の外部記憶装置２００を選択する。このような方法は既存技術で用いられているため、詳細な説明を省略する。
【０１６０】
上述した本実施形態における第１の効果は、ネットワーク３００を介してアクセスされる外部記憶装置２００及び記憶システムの応答性能を、向上することを可能にする点である。
【０１６１】
その理由は、以下のような構成を含むからである。即ち、第１に、アドレス解決部１１２がアクセス識別子に基づいて、データ記憶部２２０上のアドレスを算出する。第２に、アクセス実行部１１３がそのアドレスに基づいて読み出したページ２２３に含まれる管理情報２２６を解釈することで、そのアクセス識別子に対応するデータを取得する。
【０１６２】
換言すると、その理由は、計算機１００から外部記憶装置２００へのコマンド回数を削減することにより通信遅延を削減するようにしたからである。
【０１６３】
上述した本実施形態における第２の効果は、複数の計算機１００間での通信を低減することを可能にする点である。
【０１６４】
その理由は、アドレス解決部１１２が、変更されることが比較的まれな、アドレス空間２２１の開始アドレスとハッシュ関数とページサイズ及びアドレス空間２２１のサイズを示す情報とに基づいてデータ記憶部２２０上のアドレスを算出するからである。
【０１６５】
上述した本実施形態における第３の効果は、データストア機能実現部１１０におけるＷｒｉｔｅ処理の性能を向上させることを可能にする点である。
【０１６６】
その理由は、Ｗｒｉｔｅ処理においてページ単位のアクセスをする必要がない場合、アクセス実行部１１３が対象のデータレコード２２５の部分だけを書き換えるからである。
【０１６７】
上述した本実施形態における第４の効果は、以下の場合であっても、アクセス実行部１１３が、特定のアクセス識別子のデータレコード２２５が存在するか否かについて、１回の外部記憶装置２００へのアクセスで判定することを可能にする点である。その場合は、その特定のアクセス識別子から算出されるページＩＤで特定されるページ２２３とは異なる、別のページ２２３にデータが格納される場合である。
【０１６８】
その理由は、アクセス実行部１１３が、同一ページ２２３が算出されるアクセス識別子に対応する情報は、最初にアクセス先となるページ２２３の管理情報２２６に格納するからである。
【０１６９】
上述した本実施形態における第５の効果は、データストア機能実現部１１０の性能が、より向上することを可能にする点である。
【０１７０】
その理由は、アクセス実行部１１３は、計算機１００に搭載されている記憶部７０２などを用いて、ページ２２３のデータをキャッシュするからである。
【０１７１】
上述した本実施形態における第６の効果は、情報処理システム１０が提供するデータストアの信頼性を向上することを可能にする点である。
【０１７２】
その理由は、アクセス実行部１１３が、格納先の外部記憶装置２００をコンシステント・ハッシングのような方法で決定する際に、コンシステント・ハッシシングのハッシュリングの隣のノードを必要数選択するからである。
【０１７３】
＜＜＜第２の実施形態＞＞＞
次に、本発明の第２の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
【０１７４】
図８は、本発明の第２の実施形態に係る情報処理装置１０２の構成を示すブロック図である。
【０１７５】
図８に示すように、本実施形態における情報処理装置１０２は、アドレス解決部１２２とアクセス実行部１１３とを含む。
【０１７６】
アドレス解決部１２２は、記憶装置上のページ２２３を特定するアドレスを、アクセス対象のデータを特定するアクセス識別子に基づいて算出する。そのページ２２３は、そのアクセス識別子に対応するデータ（第１のデータ）を記憶する。
【０１７７】
アクセス実行部１１３は、図２に示すアクセス実行部１１３と同等である。
【０１７８】
情報処理装置１０２のハードウェア構成は、図３に示すコンピュータ７００と同等である。
【０１７９】
上述した本実施形態における効果は、ネットワーク３００を介してアクセスされる外部記憶装置２００及び記憶システムの応答性能を、向上することを可能にする点である。
【０１８０】
その理由は、以下のような構成を含むからである。即ち、第１に、アドレス解決部１２２がアクセス識別子に基づいて、データ記憶部２２０上のアドレスを算出する。第２に、アクセス実行部１１３がそのアドレスに基づいて読み出したページ２２３に含まれる管理情報２２６を解釈することで、そのアクセス識別子に対応するデータを取得する。
【０１８１】
換言すると、その理由は、計算機１００から外部記憶装置２００へのコマンド回数を削減することにより通信遅延を削減するようにしたからである。
【０１８２】
以上の各実施形態で説明した各構成要素は、必ずしも個々に独立した存在である必要はない。例えば、複数個の任意のその構成要素が１個のモジュールとして実現されてよい。また、その構成要素の内の任意のひとつが複数のモジュールで実現されてもよい。また、その構成要素の内の任意のひとつがその構成要素の内の任意の他のひとつであってよい。また、その構成要素の内の任意のひとつの一部と、その構成要素の内の任意の他のひとつの一部とが重複してもよい。
【０１８３】
以上説明した各実施形態における各構成要素及び各構成要素を実現するモジュールは、必要に応じ、可能であれば、ハードウェア的に実現されてよい。また、各構成要素及び各構成要素を実現するモジュールは、コンピュータ及びプログラムで実現されてよい。また、各構成要素及び各構成要素を実現するモジュールは、ハードウェア的なモジュールとコンピュータ及びプログラムとの混在により実現されてもよい。
【０１８４】
そのプログラムは、例えば、磁気ディスクや半導体メモリなど、コンピュータが読み取り可能な非一時的記録媒体に記録され、コンピュータに提供される。そして、そのプログラムは、コンピュータの立ち上げ時などに、非一時的記録媒体からコンピュータに読み取られる。この読み取られたプログラムは、そのコンピュータの動作を制御することにより、そのコンピュータを前述した各実施形態における構成要素として機能させる。
【０１８５】
また、以上説明した各実施形態では、複数の動作をフローチャートの形式で順番に記載してあるが、その記載の順番は複数の動作を実行する順番を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の順番は内容的に支障のない範囲で変更することができる。
【０１８６】
更に、以上説明した各実施形態では、複数の動作は個々に相違するタイミングで実行されることに限定されない。例えば、ある動作の実行中に他の動作が発生してよい。また、ある動作と他の動作との実行タイミングが部分的に乃至全部において重複してもよい。
【０１８７】
更に、以上説明した各実施形態では、ある動作が他の動作の契機になるように記載しているが、その記載はある動作と他の動作との全ての関係を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の関係は内容的に支障のない範囲で変更することができる。また各構成要素の各動作の具体的な記載は、各構成要素の各動作を限定するものではない。このため、各構成要素の具体的な各動作は、各実施形態を実施する上で機能的、性能的、その他の特性に対して支障をきたさない範囲内で変更されてよい。
【０１８８】
上記の実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０１８９】
（付記１）アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出するアドレス解決部と、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行するアクセス実行部と、を含む情報処理装置。
【０１９０】
（付記２）前記アクセス実行部は、前記第１のデータの追加、削除及び更新のいずれかであるデータ操作を実行する際に、前記記憶装置から前記第１のデータに対応する前記アクセス識別子に基づいて前記第２のデータを取得し、取得された前記第２のデータに対して前記データ操作を実行し、前記データ操作を実行された前記第２のデータを前記記憶装置に書き込む付記１記載の情報処理装置。
【０１９１】
（付記３）前記アドレス解決部は、前記アクセス識別子に対応する数値を算出し、
算出された前記数値と、前記記憶装置上の利用可能なアドレス空間の開始アドレスと、前記領域のサイズ及び前記アドレス空間のサイズを示す情報と、に基づいて前記アドレスを算出することを特徴とする付記１または２記載の情報処理装置。
【０１９２】
（付記４）前記アドレス解決部は、前記アクセス識別子のハッシュ値を前記数値として算出することを特徴とする付記３記載の情報処理装置。
【０１９３】
（付記５）前記管理情報は、前記第２のデータに含まれる前記第1のデータに対応するアクセス識別子と、前記第１のデータの前記領域内における位置を示すポインタと、の対応を示す情報を含むことを特徴とする付記１乃至４のいずれか１つに記載の情報処理装置。
【０１９４】
（付記６）前記第１のデータに対応するアクセス識別子に基づいて算出された前記アドレスに基づいて読み出された領域に含まれる前記管理情報は、前記第１のデータが前記記憶装置上の他の領域に記憶されることを示す情報、及び前記第１のデータが他の記憶装置上の領域に記憶されることを示す情報を含むことを特徴とする付記１乃至５のいずれか１つに記載の情報処理装置。
【０１９５】
（付記７）前記アドレスは、前記記憶装置上の物理アドレスであることを特徴とする付記１乃至６のいずれか１つに記載の情報処理装置。
【０１９６】
（付記８）アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する記憶装置と、前記記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出するアドレス解決部と、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行するアクセス実行部と、を含む情報処理装置と、を含む情報処理システム。
【０１９７】
（付記９）前記アクセス実行部は、前記第１のデータの追加、削除及び更新のいずれかであるデータ操作を実行する際に、前記記憶装置から前記第１のデータに対応する前記アクセス識別子に基づいて前記第２のデータを取得し、取得された前記第２のデータに対して前記データ操作を実行し、前記データ操作を実行された前記第２のデータを前記記憶装置に書き込む付記８記載の情報処理システム。
【０１９８】
（付記１０）前記アドレス解決部は、前記アクセス識別子に対応する数値を算出し、
算出された前記数値と、前記記憶装置上の利用可能なアドレス空間の開始アドレスと、前記領域のサイズ及び前記アドレス空間のサイズを示す情報と、に基づいて前記アドレスを算出することを特徴とする付記８または９記載の情報処理システム。
【０１９９】
（付記１１）前記アドレス解決部は、前記アクセス識別子のハッシュ値を前記数値として算出することを特徴とする付記１０記載の情報処理システム。
【０２００】
（付記１２）前記管理情報は、前記第２のデータに含まれる前記第1のデータに対応するアクセス識別子と、前記第１のデータの前記領域内における位置を示すポインタと、の対応を示す情報を含むことを特徴とする付記８乃至１１のいずれか１つに記載の情報処理システム。
【０２０１】
（付記１３）前記第１のデータに対応するアクセス識別子に基づいて算出された前記アドレスに基づいて読み出された領域に含まれる前記管理情報は、前記第１のデータが前記記憶装置上の他の領域に記憶されることを示す情報、及び前記第１のデータが他の記憶装置上の領域に記憶されることを示す情報を含むことを特徴とする付記８乃至１２のいずれか１つに記載の情報処理システム。
【０２０２】
（付記１４）前記アドレスは、前記記憶装置上の物理アドレスであることを特徴とする付記８乃至１３のいずれか１つに記載の情報処理システム。
【０２０３】
（付記１５）コンピュータが、アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出し、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行するデータアクセス方法。
【０２０４】
（付記１６）アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出し、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行する処理をコンピュータに実行させるプログラム。
【０２０５】
（付記１７）プロセッサと、プロセッサがアドレス解決手段及びアクセス実行手段として動作するための、プロセッサによって実行される命令を保持する記憶部とを含み、
前記アドレス解決手段は、アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出し、前記アクセス実行手段は、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行する情報処理装置。
【０２０６】
（付記１８）アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出し、算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、前記第２のデータに対して前記第１のデータの操作を実行する処理をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な非一時的記録媒体。
【０２０７】
以上、各実施形態を参照して本発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解しえるさまざまな変更をすることができる。
【０２０８】
この出願は、２０１４年２月５日に出願された日本出願特願２０１４−０２０３１７を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０２０９】
本発明は、ネットワークで接続された記憶装置を利用する、データベースシステムやキーバリューストアシステム、及び複数計算機で共通の記憶装置を共有するシェアード型分散データストアシステムなどに適用できる。
【符号の説明】
【０２１０】
１０    情報処理システム
１００    計算機
１１０    データストア機能実現部
１１１    アクセス要求受信部
１１２    アドレス解決部
１１３    アクセス実行部
１２０    アプリケーション
２００    外部記憶装置
２１０    アクセス処理部
２２０    データ記憶部
２２１    アドレス空間
２２３    ページ
２２５    データレコード
２２６    管理情報
３００    ネットワーク
７００    コンピュータ
７０１    ＣＰＵ
７０２    記憶部
７０３    記憶装置
７０４    入力部
７０５    出力部
７０６    通信部
７０７    記録媒体
【図１】
2015118865.tif 000003
【図２】
2015118865.tif 000004
【図３】
2015118865.tif 000005
【図４】
2015118865.tif 000006
【図５】
2015118865.tif 000007
【図６】
2015118865.tif 000008
【図７】
2015118865.tif 000009
【図８】
2015118865.tif 000010
【手続補正書】
【提出日】平成28年7月22日(2016.7.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１０
【補正方法】変更
【補正の内容】
【請求項１０】
アクセス対象のデータを特定するアクセス識別子に対応する第１のデータを記憶する、記憶装置上の、領域を特定するアドレスを前記アクセス識別子に基づいて算出し、
算出された前記アドレスに基づいて読み出される、前記領域のデータである、第２のデータに含まれる管理情報に基づいて、前記第２のデータに含まれる前記第１のデータを取得し、
前記第２のデータに対して前記第１のデータの操作を実行する処理をコンピュータに実行させる
プログラム。
【国際調査報告】
2015118865.tif 000011
2015118865.tif 000012