(57)【要約】応答性能の向上に貢献すること。そのために、ストレージシステムは、制御装置と、制御装置とインターコネクトネットワークを介して接続する、記憶装置と、を含み、記憶装置は、データを格納するデータ記憶部と、制御装置から指定された第１のデータと、データ記憶部が所定の領域に格納する第２のデータと、を比較し、当該比較結果に応じて、当該所定の領域でデータの更新の有無を決定する比較書き込み処理を実行する、比較書き込み部と、を備え、制御装置は、記憶装置に読み込み命令を発行する読み込み命令発行部と、読み込み命令に基づいて読み込まれたデータを保持する書き込みバッファ記憶部と、書き込みバッファ記憶部に書かれたデータを、第１のデータとして指定し、比較書き込み処理の実行を比較書き込み命令として記憶装置に指示する、比較書き込み命令部と、を備える。
2015141219.tif 000002
【特許請求の範囲】
【請求項１】
１又は２以上の制御装置と、
前記制御装置とインターコネクトネットワークを介して接続する、１又は２以上の記憶装置と、を含むストレージシステムであって、
前記記憶装置は、
データを格納するデータ記憶手段と、
前記制御装置から指定された第１のデータと、前記データ記憶手段が所定の領域に格納する第２のデータと、を比較し、当該比較結果に応じて、当該所定の領域でデータの更新の有無を決定する比較書き込み処理を実行する、比較書き込み手段と、
を備え、
前記制御装置は、
前記記憶装置に読み込み命令を発行する読み込み命令発行手段と、
前記読み込み命令に基づいて読み込まれたデータを保持する書き込みバッファ記憶手段と、
前記書き込みバッファ記憶手段に書かれたデータを、前記第１のデータとして指定し、前記比較書き込み処理の実行を比較書き込み命令として前記記憶装置に指示する、比較書き込み命令手段と、
を備えるストレージシステム。
【請求項２】
前記比較書き込み命令手段は、前記第１のデータと、書き込み対象である前記所定の領域と、書き込み対象の第３のデータと、を前記記憶装置に通知し、
前記比較書き込み手段は、前記第１のデータと、前記第２のデータとが同一である場合、前記所定の領域のデータを前記第３のデータに更新し、前記第１のデータと、前記第２のデータとが同一ではない場合、前記所定の領域のデータを前記第２のデータに維持する、請求項１に記載のストレージシステム。
【請求項３】
前記記憶装置は、前記制御装置から命令を受信し、命令に応じた処理の結果を前記制御装置に返信する命令処理手段をさらに備え、
前記制御装置は、前記比較書き込み命令の結果を受信する書き込み結果受信手段をさらに備え、
前記命令処理手段は、前記比較書き込み命令手段が、前記所定の領域のデータを前記第３のデータに更新した場合、前記比較書き込み処理を成功したと前記制御装置に返信し、前記比較書き込み命令手段が、前記所定の領域のデータを前記第２のデータに維持した場合、前記比較書き込み処理を失敗したと前記制御装置に返信し、
前記読み込み命令発行手段は、前記比較書き込み処理を失敗したとの結果を受信した場合、前記読み込み命令を再発行する、請求項１又は２に記載のストレージシステム。
【請求項４】
前記ストレージシステムは、前記制御装置にアクセスするストレージクライアント手段をさらに含み、
前記ストレージクライアント手段は、前記記憶装置に対し、レコードおよび管理情報を、１回の比較書き込み命令で実行可能な連続記憶領域に保持する、請求項１乃至３のいずれか一に記載のストレージシステム。
【請求項５】
前記ストレージクライアント手段は、前記記憶装置の記憶領域に対し、当該記憶領域の所定のサイズごとに、所定の情報を埋め込んで管理する、請求項４に記載のストレージシステム。
【請求項６】
前記ストレージ装置は、２以上の前記記憶装置に対し、データの複製を保持し、
前記ストレージクライアント手段は、各前記記憶装置に対する前記比較書き込み処理の比較情報を、対象の記憶媒体から読み込み、
前記ストレージクライアント手段が、前記制御装置間で共通の方法を用いて、主たる前記記憶装置を１つ選び、当該主たる記憶装置に対して、前記比較書き込み命令が成功したあとに、他の複製の書き込み先となる前記記憶装置への前記読み込み命令、及び前記比較書き込み命令を発行する、請求項４又は５に記載のストレージシステム。
【請求項７】
前記記憶装置に読み込み命令を発行する読み込み命令発行手段と、
前記読み込み命令に基づいて読み込まれたデータを保持する書き込みバッファ記憶手段と、
前記書き込みバッファ記憶手段に書かれたデータを、前記第１のデータとして指定し、前記第１のデータと、記憶装置が所定の領域に格納する第２のデータとの比較結果に応じて、当該所定の領域のデータを更新の有無を決定する比較書き込み処理を実行する、比較書き込み命令手段と、
を備える制御装置。
【請求項８】
データを格納するデータ記憶手段と、
前記制御装置から指定された第１のデータと、前記データ記憶手段が所定の領域に格納する第２のデータと、を比較し、当該比較結果に応じて、当該所定の領域でデータの更新の有無を決定する比較書き込み処理を実行する、比較書き込み手段と、
を備える記憶装置。
【請求項９】
読み込み命令を発行する工程と、
読み込まれたデータを、第１のデータとして第１の領域に保持する工程と、
前記第１のデータと、前記第１の領域と異なる第２の領域に格納された第２のデータとの比較結果に応じて、前記第２の領域に格納されるデータを更新するか否かを決定する、比較書き込み処理の実行を指示する工程と、
を含むデータアクセス方法。
【請求項１０】
制御装置を制御するコンピュータに実行させるプログラムを記録するプログラム記録媒体であって、
前記記憶装置に読み込み命令を発行する処理と、
読み込まれたデータを、第１のデータとして第１の領域に保持する処理と、
前記第１のデータと、前記第１の領域と異なる第２の領域に格納された第２のデータとの比較結果に応じて、前記第２の領域に格納されるデータを更新するか否かを決定する、比較書き込み処理の実行を指示する処理と、
を実行するプログラムを記録するプログラム記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム、制御装置、記憶装置、データアクセス方法及びプログラム記録媒体に関する。
【背景技術】
【０００２】
記憶装置及び記憶システムに対するデータアクセスの制御に関するさまざまな技術が知られている。【０００３】
例えば、単一あるいは複数の計算機によって構成されるデータストアシステム（例えば、データベースシステムやファイルシステム、キャッシュシステム）がある。近年では、分散ストレージシステムが、そのようなシステムに、しばしば適用されている。その分散ストレージシステムは、ネットワークを介して接続された複数の汎用的な計算機を含む。【０００４】
そして、その分散ストレージシステムは、それらの計算機に搭載された記憶装置を用いて、データの格納及びデータの提供を行う。その記憶装置は、例えばＨＤＤ（Hard Disk Drive）、主記憶（例えば、ＤＲＡＭ（Dynamic Random Access Memory））などである。【０００５】
上述のような分散ストレージシステムでは、いずれの計算機にデータを配置し、いずれの計算機によってデータを処理するのかを、ソフトウェアまたは特別なハードウェアが決定する。このようなアーキテクチャは、Ｓｈａｒｅｄ  ｎｏｔｈｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅと呼ばれる。【０００６】
ＳＡＮ（Storage Area Network）は、例えば複数のサーバ間でＦＣ（Fibre Channel）などのネットワークを介して、記憶装置を共有する。例えば、データストアシステムは、ＳＡＮにより共有される記憶装置を用いて実現される。【０００７】
ＳＡＮにおいて、複数の計算機間でデータを共有してシステムを実現するには、Ｓｈａｒｅｄ  Ｅｖｅｒｙｔｈｉｎｇアーキテクチャに基づくソフトウェアを用いる必要がある。例えば、ファイルシステムの場合、そのソフトウェアは、ＳＡＮファイルシステムなどである。また、データベースシステムの場合、そのソフトウェアは、Ｏｒａｃｌｅ（登録商標）  ＲＡＣ（Real Application Clusters）（登録商標）などがある。【０００８】
Ｓｈａｒｅｄ  Ｅｖｅｒｙｔｈｉｎｇアーキテクチャは、通常、ＦＣやｉＳＣＳＩ（Internet Small Computer System Interface）を用いて実現される。ＦＣやｉＳＣＳＩは、通信遅延が大きい。そのため、記憶装置としても応答性能に優れた記憶装置が使われるケースは少なく、ＨＤＤなどの応答性能に劣る記憶装置が主に使われる。【０００９】
一方、ＨＤＤは、シーケンシャルなアクセス性能に優れる。そのため、データベースなどのソフトウェアは、例えば、Ｗｒｉｔｅ  Ａｈｅａｄ  Ｌｏｇなどの方法を用いて更新情報だけをシーケンシャルに書き出すことによって、その共有される記憶装置の低い性能をカバーする。【００１０】
近年では、高速かつ汎用的なＰＣＩ−ｅ（Peripheral Component Interconnect-Express）インターフェースで、計算機にＳＳＤ（Solid State Drive）などの高速な記憶装置を接続する構成が、用いられる。このような構成は、高速な記憶装置に低遅延でアクセスすることを可能にする。従って、このような構成は、ＳＡＮ上のストレージに対するキャッシュなどの用途に用いられる。【００１１】
Ｓｈａｒｅｄ  Ｅｖｅｒｙｔｈｉｎｇアーキテクチャは、このような構成のＰＣＩ−ｅデバイスをＥｘｐＥｔｈｅｒ（登録商標）などにより複数ホスト間で共有する技術を用いることにより、実現できる。Ｓｈａｒｅｄ  Ｅｖｅｒｙｔｈｉｎｇアーキテクチャは、このような構成を取ることにより、上述のＳＡＮ上のストレージと比較して、低遅延でのストレージ共有を可能にする。【００１２】
ここまで述べたように、クラスタベースの分散ストレージや分散データベース技術は、関連技術のサーバを前提とするアーキテクチャであるＳｈａｒｅｄ  ＮｏｔｈｉｎｇあるいはＳｈａｒｅｄ  Ｓｔｏｒａｇｅアーキテクチャを前提に発展してきている。関連技術のサーバアーキテクチャは、自身以外のサーバのリソースにアクセスするには、該当するサーバ経由でアクセスしなければならなかった。しかし、リソース分離型アーキテクチャでは、各リソース（メモリ、ストレージなど）はインターコネクトネットワークを経由して接続されているため、各ＣＰＵ（Central Processing Unit）から各リソースを物理的に共有することが可能であり、サーバを経由してアクセスする必要が必ずしも無い。以上のように、サーバアーキテクチャの変化は分散ストレージや分散データベースの技術に変革を与える。【００１３】
例えば、データの排他制御を行うにあたり、関連技術の分散システムの排他制御は２相コミットや３相コミット、Ｐａｘｏｓアルゴリズムなどの方法で、サーバ間で通信をやりとりすることにより実現されている。他に、前述したＯｒａｃｌｅ ＲＡＣではＣａｃｈｅ  Ｆｕｓｉｏｎと呼ばれる機能によって排他制御を実現している。分散キー・バリュー・ストアではＨａｓｈ関数で責任ノードを分散決定し、そのノードが排他単位となるデータ（例えばレコード単位）を管理する。例えば、レコード間にまたがるトランザクションなどではノード間で前述の２相コミットなどを用いて実現する必要がある。【００１４】
これらは、サーバ間の通信がサーバ内部のリソースへの通信時間より長いことを前提に設計されている。リソース分離型アーキテクチャにおいては、サーバとリソース間の通信時間とサーバ間（ＣＰＵ間）の通信時間の関係は、必ずしもサーバ間（ＣＰＵ間）通信が優位とは限らず、同等（あるいはそれ以下）であることが考えられる。従って、リソース分離型アーキテクチャ上で動作する分散ストレージ・データベースシステムなどでは、排他制御においてサーバ間の通信を削減することが求められ、リソース側の（限られたＨＷによる）機能を活用することも可能である。【００１５】
ここで、特許文献１において、テーブル又はインデックス等、データベースオブジェクトをフラグメントに分割し、分割したフラグメントを複製（クローン化）し、クローン化したフラグメントを用いて、データの更新の有無を管理する技術が開示されている。【００１６】
また、特許文献２において、ＣＡＳ（Ｃｏｍｐａｒｅ ａｎｄ  Ｓｗａｐ）命令を処理する機能を備えたＫＶＳ（キー・バリュー・ストア、Key Value Store）システムを共有する構成において、ＣＡＳ命令をもちいて複数計算機からの更新処理を排他的に行う技術が開示されている。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特表２００９−５０５２８１号公報
【特許文献２】特開２０１２−２３８０６１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
なお、上記先行技術文献の開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明の観点からなされたものである。【００１９】
第１の問題点は、サーバ間で複数の通信を必要とする排他制御方法は、サーバ間の通信やサーバの計算リソースなどを利用するために、通信遅延の影響で性能が低下してしまう点である。【００２０】
その理由は、リソース分離型アーキテクチャにおいては、各ＣＰＵがインターコネクトネットワークを介して記憶装置（ストレージ）や、メモリにアクセスするため、物理的な記憶装置のアクセス時間に加え、排他制御のためのサーバ間の通信ごとに遅延が必要になるためである。 【００２１】
第２の問題点は、サーバ間で通信を必要とする方式は、ＣＰＵリソースを過剰に利用し、性能が低下してしまう点である。【００２２】
その理由は、サーバ上で通信処理用のプロセスやスレッドを動作させる必要があるため、コンテキストスイッチコストが必要になったり、通信処理にもＣＰＵリソースを必要とするためである。サーバのＣＰＵ能力が潤沢でない場合はその影響は大きい。【００２３】
第３の問題点は、共有された記憶装置は、他のＣＰＵによって書き換えられる可能性があるために、書き込み可能であるＣＰＵを制限する必要がある点である。【００２４】
その理由は、データベースなどの分散ストレージシステムでは、記憶領域の有効活用や負荷分散などの理由で、記憶装置のデータ構造が変更される可能性があるためである。これを起こさないためには、完全に領域ごとに担当計算機を変更したり、書き込みのたびに共有記憶装置上の領域上で排他情報をチェックするような機構が必要になり、応答遅延で性能が悪化するためである。【００２５】
例えば、特許文献１に開示された技術においては、データベースをフラグメントに分割し、各フラグメントに対応する、クローン化したフラグメントを保持する必要がある。従って、特許文献１に開示された技術では、データベースの負荷が増大する恐れがある。そして、その結果、特許文献１に開示された技術では、応答遅延で性能が悪化する恐れがある。【００２６】
また、特許文献２に開示された技術においては、記憶装置自体は共有されておらず、記憶装置はＫＶＳを動作させるサーバのみからアクセスされ、書き込み可能なＣＰＵを制限している。従ってＫＶＳを動作させるサーバのＣＰＵリソースを必要とし、またサーバ間通信を必要とするために、第２の問題点と同様の問題も現れる。【００２７】
そこで、本発明は、応答性能の向上に貢献するストレージシステム、制御装置、記憶装置、データアクセス方法、記憶装置の制御方法、及びプログラム記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００２８】
本発明の第１の視点によれば、１又は２以上の制御装置と、前記制御装置とインターコネクトネットワークを介して接続する、１又は２以上の記憶装置と、を含むストレージシステムであって、
前記記憶装置は、データを格納するデータ記憶部と、前記制御装置から指定された第１のデータと、前記データ記憶部が所定の領域に格納する第２のデータと、を比較し、当該比較結果に応じて、当該所定の領域でのデータの更新の有無を決定する比較書き込み処理を実行する、比較書き込み部と、を備え、
前記制御装置は、前記記憶装置に読み込み命令を発行する読み込み命令発行部と、前記読み込み命令に基づいて読み込まれたデータを保持する書き込みバッファ記憶部と、前記書き込みバッファ記憶部に書かれたデータを、前記第１のデータとして指定し、前記比較書き込み処理の実行を比較書き込み命令として前記記憶装置に指示する、比較書き込み命令部と、を備えるストレージシステムが提供される。【００２９】
本発明の第２の視点によれば、前記記憶装置に読み込み命令を発行する読み込み命令発行部と、前記読み込み命令に基づいて読み込まれたデータを保持する書き込みバッファ記憶部と、前記書き込みバッファ記憶部に書かれたデータを、前記第１のデータとして指定し、前記第１のデータと、記憶装置が所定の領域に格納する第２のデータとの比較結果に応じて、当該所定の領域でデータの更新の有無を決定する比較書き込み処理を実行する、比較書き込み命令部と、を備える制御装置が提供される。【００３０】
本発明の第３の視点によれば、データを格納するデータ記憶部と、前記制御装置から指定された第１のデータと、前記データ記憶部が所定の領域に格納する第２のデータと、を比較し、当該比較結果に応じて、当該所定の領域でデータの更新の有無を決定する比較書き込み処理を実行する、比較書き込み部と、を備える記憶装置が提供される。【００３１】
本発明の第４の視点によれば、読み込み命令を発行する工程と、読み込まれたデータを、第１のデータとして第１の領域に保持する工程と、前記第１のデータと、前記第１の領域と異なる第２の領域に格納された第２のデータとの比較結果に応じて、前記第２の領域に格納されるデータを更新するか否かを決定する、比較書き込み処理の実行を指示する工程と、を含むデータアクセス方法が提供される。
なお、本方法は、データのアクセスを制御する制御装置という、特定の機械に結び付けられている。【００３２】
本発明の第５の視点によれば、制御装置を制御するコンピュータに実行させるプログラムを記録するプログラム記録媒体であって、前記記憶装置に読み込み命令を発行する処理と、読み込まれたデータを、第１のデータとして第１の領域に保持する処理と、前記第１のデータと、前記第１の領域と異なる第２の領域に格納された第２のデータとの比較結果に応じて、前記第２の領域に格納されるデータを更新するか否かを決定する、比較書き込み処理の実行を指示する処理と、を実行するプログラムを記録するプログラム記録媒体が提供される。
なお、本プログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００３３】
応答性能の向上に貢献するストレージシステム、制御装置、記憶装置、データアクセス方法、記憶装置の制御方法、及びプログラム記録媒体が提供される。
【図面の簡単な説明】
【００３４】
【図１】本発明の一実施形態の概要を説明するための図である。
【図２】ストレージシステム５００の全体構成の一例を示すブロック図である。
【図３】制御装置１０Ｘ、及び記憶装置２０Ｘの内部構成の一例を示す図である。
【図４】ストレージシステム５００の動作の一例を示す図である。
【発明を実施するための形態】
【００３５】
初めに、図１を用いて本発明の一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。
【００３６】
上述の通り、応答性能の向上に貢献するストレージシステムが望まれる。
【００３７】
そこで、一例として図１に示すストレージシステム１０００を提供する。ストレージシステム１０００は、１又は２以上の制御装置１０１０と、１又は２以上の記憶装置１０２０と、を含んで構成される。なお、図１は、簡単のため、１つの制御装置１０１０、及び１つの記憶装置１０２０を記載する。制御装置１０１０と、記憶装置１０２０と、はインターコネクトネットワーク１０３０を介して接続する。
【００３８】
記憶装置１０２０は、データ記憶部１０２１と、比較書き込み部１０２２と、を備える。また、記憶装置１０２０は、ＬＳＩ（Large Scale Integration）等のハードウェア部品である回路部品を実装することにより、その動作をハードウェア的に実現することができる。あるいは、その機能を提供するプログラムを、図示しないソフトウェア記憶媒体に格納し、そのプログラムを主記憶部にロードしてＣＰＵにおいて実行することにより、ソフトウェア的に実現することも可能である。
【００３９】
データ記憶部１０２１は、データを格納する。比較書き込み部１０２２は、比較書き込み処理を実行する。比較書き込み処理とは、制御装置１０１０から指定された第１のデータと、データ記憶部１０２０が所定の領域に格納する第２のデータと、を比較し、当該比較結果に応じて、当該所定の領域のデータの更新の有無を決定する処理である。
【００４０】
制御装置１０１０は、読み込み命令発行部１０１１と、書き込みバッファ記憶部１０１２と、比較書き込み命令部１０１３と、を備える。また、制御装置１０１０の各部は、ＬＳＩ（Large Scale Integration）等のハードウェア部品である回路部品を実装することにより、その動作をハードウェア的に実現することができる。あるいは、その機能を提供するプログラムを、図示しないソフトウェア記憶媒体に格納し、そのプログラムを主記憶部にロードしてＣＰＵにおいて実行することにより、ソフトウェア的に実現することも可能である。
【００４１】
読み込み命令発行部１０１１は、記憶装置１０２０に読み込み命令を発行する。書き込みバッファ記憶部１０１２は、読み込み命令に基づいて読み込まれたデータを保持する。つまり、制御装置１０１０は、読み込み命令を発行した場合、記憶装置１０２０からデータを読み込み、読み込まれたデータを書き込みバッファ記憶部１０１２に格納する。
【００４２】
比較書き込み命令部１０１３は、書き込みバッファ記憶部１０１２に書かれたデータを、第１のデータとして指定し、比較書き込み処理の実行を比較書き込み命令として記憶装置１０２０に指示する。
【００４３】
ここで、ストレージシステム１０００においては、記憶装置１０２０にアクセスする制御装置１０１０を限定するために、制御装置１０１０間での排他制御が必要ではない。
【００４４】
また、ストレージシステム１０００においては、記憶装置１０２０は、比較書き込み処理を実行する。そのため、記憶装置１０２０が、領域ごとに書き込みを許可する制御装置１０１０を変更したり、書き込みのたびに記憶装置上の領域上で、制御装置１０１０を識別する情報をチェックする必要がない。つまり、ストレージシステム１０００においては、比較書き込み処理により、書き込み処理における、記憶装置１０２０の処理負荷が低減する。従って、ストレージシステム１０００は、応答性能の向上に貢献する。
【００４５】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００４６】
図２は、本実施形態に係るストレージシステム５００の全体構成の一例を示すブロック図である。ストレージシステム５００は、制御装置（Central Processing Unit）１００〜１０Ｘと、記憶装置２００〜２０Ｘと、インターコネクトネットワーク３００を含んで構成される。制御装置１００〜１０Ｘと、記憶装置２００〜２０Ｘとは、インターコネクトネットワーク３００を介して接続する。以下、説明のため、制御装置１００〜１０Ｘを、制御装置１０Ｘと記す。また、記憶装置２００〜２０Ｘを、記憶装置２０Ｘと記す。
【００４７】
ストレージシステム５００は、リソース分離型アーキテクチャである。図２に示すように、ストレージシステム５００は、制御装置１０Ｘと、記憶装置２０Ｘと、をインターコネクトネットワーク３００を介して接続し、計算機サーバとして機能する。
【００４８】
制御装置１０Ｘは、演算処理手段（例えば、ＣＰＵ）と、インターコネクトネットワーク３００に接続するためのインターフェースと、記憶回路（レジスタ）と、ＣＰＵキャッシュと、を含んで構成される。さらに、制御装置１０Ｘは、メモリ等の記憶装置を含んでも良いことは勿論である。
【００４９】
記憶装置２０Ｘは、インターコネクトに接続するためのインターフェースと、記憶装置と、記憶装置へのアクセス処理を行う手段と、電源供給処理を行う手段と、を含んで構成される。記憶装置は、例えば、フラッシュメモリ、ＤＲＡＭ、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＨＤＤ等であっても良い。また、記憶装置は、例えば、ＮＶＭ（Non-Volatile Memory）  Ｅｘｐｒｅｓｓに準拠したＰＣＩ−ｅフラッシュカードであってもよい。
【００５０】
インターコネクトネットワーク３００は、制御装置１０Ｘと、記憶装置２０Ｘと、を接続する。そして、制御装置１０Ｘ、及び記憶装置２０Ｘは、インターコネクトネットワーク３００を介して、データ、及び制御メッセージ等を送受信する。例えば、インターコネクトネットワーク３００は、光ケーブル、及びスイッチ等を用いて実現しても良い。また、インターコネクトネットワーク３００は、ＰＣＩ−ｅを用いて実現しても良い。
【００５１】
制御装置１０Ｘは、公知のアーキテクチャで構成される計算機であっても良い。その場合、インターコネクトネットワーク３００は、Ｅｔｈｅｒｎｅｔ（登録商標）、ＰＣＩ−ｅネットワークを用いて実現しても良い。また、ＥｘｐＥｔｈｅｒ（登録商標）を用いて、計算機のインターコネクトネットワークである、ＰＣＩ−ｅｘｐｒｅｓｓを拡張しても良い。そして、制御装置１０ＸにＥｘｐＥｔｈｅｒ機能を備えたインターフェースを保持させることで、リソース「分離型アーキテクチャに類似したアーキテクチャ」を実現できる。なお、その場合、記憶装置２０Ｘは、ＥｘｐＥｔｈｅｒ機能を備える装置、ＰＣＩ−ｅ機能を備える装置を備えることが好ましい。ＰＣＩ―ｅ機能を備える装置は、ＰＣＩ−ｅ  Ｆｌａｓｈ、ＲＡＩＤ（Redundant Arrays Independent Disk）カードであっても良い。または、ＰＣＩ―ｅ機能を備える装置は、ＧＰＧＰＵ（General-Purpose computing on Graphics Processing Unit）機能を備えるカード、ＭＩＣ（Many Integrated Core）アーキテクチャに基づく演算ボード等であっても良い。
【００５２】
また、インターコネクトネットワーク３００は、Ｆｉｂｒｅ  Ｃａｎｎｅｌ、ＦＣｏＥ（Fibre Channel over Ethernet）を用いて実現しても良い。その場合、制御装置１０Ｘは、公知のアーキテクチャで構成される計算機にホストバスアダプタを備える装置であっても良い。また、記憶装置２０Ｘは、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ、ＦｃｏＥに対するインターフェースを備えることが好ましい。なお、２以上の各制御装置１０Ｘを接続するネットワークは、インターコネクトネットワーク３００とは異なるネットワークであっても良い。例えば、各制御装置１０ＸをＥｔｈｅｒｎｅｔ（ＴＣＰ（Transmission Control Protocol）／ＩＰ（Internet Protocol））を用いて接続しても良い。そして、制御装置１０Ｘと、記憶装置２０Ｘと、をＦｉｂｒｅ  Ｃｈａｎｎｅｌを用いて接続しても良い。
【００５３】
図３は、制御装置１０Ｘ、及び記憶装置２０Ｘの内部構成の一例を示す図である。なお、図３は、簡単のため、本実施形態に係る制御装置１０Ｘ、及び記憶装置２０Ｘに関係するモジュールを主に記載する。
【００５４】
ストレージクライアント部４は、分散ストレージシステムに対するアクセス機能を提供する。ストレージクライアント部４は、ソフトウェアであっても良い。ストレージクライアント部４は、制御装置１０Ｘの内部で動作するソフトウェアであっても良い。また、ストレージクライアント部４は、制御装置１０Ｘとは異なる計算機で動作するソフトウェアであっても良い。さらに、ストレージクライアント部４は、ＬＳＩ（Large Scale Integration）等のハードウェア部品である回路部品を実装することにより、その動作をハードウェア的に実現することができる。あるいは、その機能を提供するプログラムを、図示しないソフトウェア記憶媒体に格納し、そのプログラムを主記憶部にロードしてＣＰＵにおいて実行することにより、ソフトウェア的に実現することも可能である。
【００５５】
次に、制御装置１０Ｘの内部構成について詳細に説明する。
【００５６】
制御装置１０Ｘは、ストレージ処理部１と、インターコネクトネットワーク通信実現部３と、を含んで構成される。また、制御装置１０Ｘは、ＬＳＩ（Large Scale Integration）等のハードウェア部品である回路部品を実装することにより、その動作をハードウェア的に実現することができる。あるいは、その機能を提供するプログラムを、図示しないソフトウェア記憶媒体に格納し、そのプログラムを主記憶部にロードしてＣＰＵにおいて実行することにより、ソフトウェア的に実現することも可能である。ストレージ処理部１は、アクセス応答部１１と、読み込み命令発行部１２と、書き込みバッファ記憶部１３と、比較書き込み命令部１４と、書き込み結果受信部１５と、判定再送部１６と、を含んで構成される。
【００５７】
ストレージ処理部１は、データベース、ＫＶＳ、ファイルシステムを実現するソフトウェアである。
【００５８】
インターコネクトネットワーク通信実現部３は、インターコネクトネットワーク３００を介して、所定の通信プロトコルに従って、通信処理を行う。インターコネクトネットワーク３００は、当該処理を実行できれば、ハードウェアであっても、ソフトウェアであっても良い。
【００５９】
アクセス応答部１１は、ストレージクライアント部４からのストレージアクセス要求（即ち、処理命令）を受け付ける。また、アクセス応答部１１は、当該処理命令の結果をストレージクライアント部４に返信する。
【００６０】
例えば、ストレージ処理部１がデータベースである場合、アクセス応答部１１は、ＳＱＬ（Structured Query Language）等で指定されるデータ操作命令を受け付けても良い。また、ストレージ処理部１がＫＶＳである場合、アクセス応答部１１は、ｋｅｙに対応するｖａｌｕｅを取得命令、登録命令、及び更新命令を受け付けても良い。
【００６１】
読み込み命令発行部１２は、アクセス応答部１１が受け取った処理命令に応じて、記憶装置２０Ｘにおけるデータの配置場所（即ち、データのアドレス）を算出する。そして、読み込み命令発行部１２は、算出した配置場所からデータを読み出す。そして、読み込み命令発行部１２は、読み込んだデータを書き込みバッファ記憶部１３に格納する。
【００６２】
書き込みバッファ記憶部１３は、データを記憶できれば良く、その詳細は問わない。例えば、書き込みバッファ記憶部１３は、ＣＰＵの一次キャッシュ、又は二次キャッシュであっても良い。また、制御装置１０Ｘが主記憶装置を備える場合、書き込みバッファ記憶部１３は、当該主記憶装置に配置されても良い。
【００６３】
比較書き込み命令部１４は、記憶装置２０Ｘに対して比較書き込み命令を発行する。
具体的には、比較書き込み命令部１４は、第１のデータ（以下、読み込み済みのデータと呼ぶ）と、書き込み対象である所定の領域と、書き込み対象の第３のデータ（更新データと呼ぶ）と、を前記記憶装置に通知する。ここで、書き込み対象である所定の領域とは、記憶装置２０Ｘにおける、データの読み込み元の配置場所に相当する。
【００６４】
より具体的には、比較書き込み命令部１４は、読み込み済みのデータと、更新データと、を用いて、インターコネクトネットワーク通信実現部３を介して、比較書き込み命令を発行する。ここで、読み込み済みのデータとは、書き込みバッファ記憶部１３に格納された、読み込み済みのデータを意味する。また、更新データとは、ストレージクライアント部４のアクセス要求に含まれるデータを意味する。
【００６５】
比較書き込み処理命令とは、記憶装置２０Ｘ上で動作する、比較書き込み処理の要求命令である。例えば、比較書き込み処理命令は、ＮＶＭ ＥｘｐｒｅｓｓのＲｅｖ１、１標準仕様に含まれるＦｕｓｅｄＯｐｅｒａｔｉｏｎ機能を用いて実現することができる。この場合、記憶装置２０ＸはＮＶＭＥｘｐｒｅｓｓに準拠したデバイスである。
【００６６】
ここで、本実施形態に係るストレージシステム５００における比較書き込み処理について説明する。
【００６７】
まず、比較書き込み処理命令が発行された場合、記憶装置２０Ｘは、書き込み対象の領域に対するデータと、指定されたデータとが同一である場合、当該書き込み対象の領域に対してデータを書き込む（Ｗｒｉｔｅを行う）。
【００６８】
一方、書き込み対象の領域に対するデータと、指定されたデータとが同一ではない場合、記憶装置２０Ｘは、書き込み処理をキャンセルする（Ｗｒｉｔｅをキャンセルする）。
つまり、第１のデータと、書き込み対象の領域に対するデータとが同一ではない場合、記憶装置２０Ｘは、書き込み対象の領域のデータを維持する。
【００６９】
上記の通り、データの比較処理と、Ｗｒｉｔｅ処理とを行うことを保証する処理を、本書では、比較書き込み処理と呼ぶ。本実施形態に係るストレージシステム５００においては、記憶装置２０Ｘの比較書き込み部２３が、比較書き込み処理を実行する。
【００７０】
書き込み結果受信部１５は、比較書き込み命令の結果を受信する。ここで、比較書き込み命令とは、比較書き込み命令部１４が要求し、記憶装置２０Ｘで処理された比較書き込み処理の命令である。
【００７１】
書き込み結果受信部１５は、受信した結果を、判定再送部１６に転送する。ここで、判定再送部１６は、比較書き込み処理を失敗したとの結果を受信した場合、読み込み命令発行部１２に、読み込み処理の再処理命令を発行する。
【００７２】
または、判定再送部１６は、比較書き込み処理を失敗したとの結果を受信した場合、比較書き込み処理を失敗したことを、アクセス応答部１１に通知する。そして、アクセス応答部１１は、比較書き込み処理を失敗したことを、ストレージクライアント部４に通知する。そして、ストレージクライアント部４を利用するアプリケーションが、比較書き込み処理の失敗に対する処理を実行しても良い。
【００７３】
例えば、アプリケーションが、所定の整数のレコードの値をインクリメントする処理（レコードに＋１する処理）の実行を試みるとする。そして、書き込み結果受信部１５が、当該処理を失敗したとの結果を受信したとする。その場合、ストレージ処理部１は、当該処理の命令を再送しても良い。
【００７４】
また、例えば、制御装置１０Ｘの一つが、記憶領域の再構成を行ったとする。その場合、比較書き込み命令を発行する制御装置１０Ｘが、書き込み対象のアドレスに格納されたデータ構成を把握できない場合がある。その場合、読み込み命令発行部１２は、書き込み対象のアドレスの再読み込み命令を発行し、書き込み対象のアドレスに格納されたデータを読み込む。そして、読み込み命令発行部１２は、再読み込み処理により取得されたデータと、書き込み対象のデータとを用いて、比較書き込み処理を行うように、比較書き込み命令を発行しても良い。
【００７５】
次に、記憶装置２０Ｘの内部構成について詳細に説明する。
【００７６】
記憶装置２０Ｘは、インターコネクトネットワーク通信実現部３と、命令処理部２１と、読み込み処理部２２と、比較書き込み部２３と、データ記憶部２４と、を含んで構成される。また、記憶装置２０Ｘは、ＬＳＩ（Large Scale Integration）等のハードウェア部品である回路部品を実装することにより、その動作をハードウェア的に実現することができる。あるいは、その機能を提供するプログラムを、図示しないソフトウェア記憶媒体に格納し、そのプログラムを主記憶部にロードしてＣＰＵにおいて実行することにより、ソフトウェア的に実現することも可能である。ストレージ処理部１は、アクセス応答部１１と、読み込み命令発行部１２と、書き込みバッファ記憶部１３と、比較書き込み命令部１４と、書き込み結果受信部１５と、判定再送部１６と、を含んで構成される。
【００７７】
命令処理部２１は、制御装置１０Ｘから命令を受信し、命令に応じた処理の結果を制御装置１０Ｘに返信する。
【００７８】
具体的には、命令処理部２１は、インターコネクトネットワーク３００を介して、制御装置１０Ｘから発行される命令を受信する。具体的には、命令処理部２１は、読み込み命令発行部１２、及び比較書き込み命令部１４が発行する命令を受信する。命令処理部２１は、読み込み処理部２２、及び比較書き込み部２３等に、受信した命令を送信する。
【００７９】
また、命令処理部２１は、比較書き込み部２３が、所定の領域のデータを更新データに更新した場合、比較書き込み処理を成功したと制御装置１０Ｘに返信する。一方、命令処理部２１は、比較書き込み部２３が、所定の領域のデータを維持した場合、比較書き込み処理を失敗したと制御装置１０Ｘに返信する。
【００８０】
読み込み処理部２２は、データ記憶部２４に格納されているデータを読み込む処理を行う。
【００８１】
比較書き込み部２３は、データ記憶部２４に格納されているデータに対して、比較書き込み処理を実行する。具体的には、比較書き込み部２３は、制御装置から指定された第１のデータ（上記の読み込み済みのデータ）と、データ記憶部２４が所定の領域に格納する第２のデータ（上記の書き込み対象の領域に対するデータ）と、を比較する。そして、比較書き込み部２３は、当該比較結果に応じて、当該所定の領域のデータの更新の有無を決定する比較書き込み処理を実行する。
【００８２】
データ記憶部２４は、データの保持、及び格納を行う。また、データ記憶部２４は、記憶媒体特性に基づいた制御等を行う機能を備える。例えば、記憶媒体特性に基づいた制御等を行う機能は、集積回路、ＦＰＧＡ（Field Programmable Gate Array）上のロジックを用いて実現しても良い。具体的には、記憶媒体特性に基づいた制御等を行う機能は、フラッシュメモリのコントローラ、ＤＲＡＭコントローラを用いて実現しても良い。また、記憶媒体は、フラッシュメモリ、ＤＲＡＭ、ＨＤＤ等であっても良く、その詳細は問わない。
【００８３】
次に、本実施形態に係るストレージシステム５００の動作について説明する。
【００８４】
図４は、本実施形態に係るストレージシステム５００の動作の一例を示す図である。具体的には、図４は、制御装置１００、及び制御装置１０１からのデータの更新処理が競合する場合を示す。簡略化のため、図４において、データストアソフトウェアは、ＫＶＳであるとする。そして、図４は、１つのＫｅｙに対するＵｐｄａｔｅ命令を処理する一例を示す。なお、リレーショナルデータベースに対するＳＱＬ処理においても、本質的には同様である。また、説明の簡略化のため、図４においては、エラー処理等への対応は記述していない。本来は、１つのＫｅｙに対するＵｐｄａｔｅ命令を処理する場合、物理的、論理的障害、ユーザアプリケーションの利用ミスに対する例外的な処理を行うことが好ましい。
【００８５】
まず、図４に示すタイミングｔ１において、制御装置１００は、Ｕｐｄａｔｅアクセス命令を、ストレージクライアント部４から受信する。そして、制御装置１００は、記憶装置２０Ｘからデータを読み込む。タイミングｔ１において、記憶装置２０Ｘは、ｄａｔａ０を格納しているとする。
【００８６】
また、タイミングｔ１より後のタイミングｔ２において、制御装置１０１は、Ｕｐｄａｔｅアクセス命令を、ストレージクライアント部４から受信する。具体的には、制御装置１０１は、タイミングｔ２における読み込み命令に基づいて、ｄａｔａ０を取得する。そして、制御装置１０１は、書き込みバッファ記憶部１３にｄａｔａ０を格納する。
【００８７】
そして、タイミングｔ２の後、タイミングｔ３において、制御装置１００は、比較書き込み命令として、格納されているデータがｄａｔａ０と等しい場合、格納するデータをｄａｔａ１に書き換える命令を発行する。
【００８８】
ここで、記憶装置２０Ｘに格納されているデータはｄａｔａ０であるため、データ書き換えの命令を受信した記憶装置２０Ｘは、ｄａｔａ１を書き込む。ここで、制御装置１００は、制御装置１０１より先に、比較書き込み命令を発行している。そのため、制御装置１００から発行された比較書き込み命令は成功する。
【００８９】
一方、タイミングｔ３の後、タイミングｔ４において、制御装置１０１は、格納されているデータがｄａｔａ０と等しい場合、格納するデータをｄａｔａ１’に書き換える命令を発行する。
【００９０】
ここで、制御装置１０１が比較書き込み命令を発行するタイミングｔ４は、制御装置１０１が比較書き込み命令を発行するタイミングｔ３の後である。そして、タイミングｔ４において、記憶装置２０Ｘに格納されているデータは、ｄａｔａ１である。そのため、制御装置１０１から発行される、比較書き込み命令は失敗する。そこで、制御装置１０１は、ストレージクライアント部４に、データの書き換えを失敗したことを通知する。その結果、ストレージシステム５００を利用するアプリケーションは、データの書き換えを失敗したことを認識し、データの書き換えの失敗に応じた処理を行う。
【００９１】
次に、タイミングｔ４の後、タイミングｔ５において、制御装置１００は、再度、記憶装置２０Ｘから、データの読み込みを行っても良い。その場合、制御装置１００は、ｄａｔａ１を読み込む。
【００９２】
そして、タイミングｔ５の後、タイミングｔ６において、制御装置１００は、ｄａｔａ１と比較したうえで、更新処理を行っても良い。具体的には、タイミングｔ６において、制御装置１００は、比較書き込み命令として、格納されているデータがｄａｔａ０と等しい場合、格納するデータをｄａｔａ１に書き換える命令を発行しても良い。
【００９３】
ストレージシステム５００を利用するアプリケーションが、当該更新処理を許可しても良い。または、ストレージシステム５００を利用するアプリケーションが、１レコードに対するトランザクションを実行するとする。例えば、１レコードに対するトランザクションの実行とは、読み込んだ値に、所定の規定値を加算する処理の実行等を含む。その場合、制御装置１００は、上記のタイミングｔ５、ｔ６の処理の通り、データの再読み込み、及び更新処理を実行しても良い。
【００９４】
また、例えば、制御装置１０１が、アプリケーションからのデータの書き換え要求ではなく、記憶装置２０Ｘ内のデフラグ処理、記憶装置２０Ｘ間のマイグレーション処理等を実行する場合を考える。その場合、制御装置１０Ｘがデータの読み込み処理（Ｒｅａｄ処理）を実行後に、データが書き換わる可能性がある。そのため、制御装置１０Ｘがデータを読み込み後に、比較書き込み命令に基づいて、書き込み処理（Ｗｒｉｔｅ処理）を行うことは有益である。
【００９５】
なお、読み込み、書き込み、比較確認のデータであるｄａｔａ０、ｄａｔａ１は、レコードに対する任意の識別子、及びバージョン番号等のデータを含んでいても良い。
【００９６】
また、ｄａｔａ０、ｄａｔａ１は、実データを含まなくても良い。例えば、ｄａｔａ０、ｄａｔａ１を格納する記憶装置２０Ｘとは異なる記憶装置が、実データを格納していても良い。その場合、ｄａｔａ０、ｄａｔａ１は、実データの管理情報を含んでいても良い。そして、ストレージシステム５００は、当該管理情報を制御しても良い。
【００９７】
次に、物理アドレスの算出処理について、詳細に説明する。具体的には、アクセス応答部１１が、アクセス識別子に基づいて、記憶装置２００の物理アドレスを算出する処理について、説明する。
【００９８】
記憶媒体は、論理アドレス、又は物理アドレスを指定し、アクセス先を指定する場合が多い。例えば、記憶媒体は、データ記憶部２４の全体、又は一部の領域を、データストアソフトウェアの格納先として利用しても良い。データ記憶部２４の全体を使用できない理由は、１又は２以上のサービスがデータ記憶部２４を分割して使用する場合があるからである。または、データ記憶部２４の全体を使用できない理由は、システム実現のための管理情報を格納する領域用に、データ記憶部２４の一部が確保される場合があるからである。
【００９９】
本実施形態に係る記憶装置２０Ｘは、データ記憶部２４のデータ格納先のアドレス空間を、任意のサイズでページブロックに分割し、ページブロックのＩＤ（Identification）を用いて、対応するページブロックにアクセスする。以下、ページブロックのＩＤをページブロックＩＤと呼ぶ。
【０１００】
例えば、格納先の最初の物理アドレスから５番目のページを、ページブロックＩＤ＝４でアクセスするとする。その場合、制御装置１０Ｘは、データ格納先のアドレス空間の最初のアドレスと、ページブロックＩＤと、ページブロックとに基づいて、当該ページブロックＩＤの物理アドレスを一意に算出可能である。データ空間は、アドレス空間として連続した領域を確保できることが好ましい。アドレス空間として、分割した領域を確保する場合、制御装置１０Ｘは、計算ブロックＩＤと、開始アドレスとを保持することが好ましい。
【０１０１】
また、Ｋｅｙからアクセス先のページ（ページブロックＩＤ）を特定することが必要である。本実施形態に係るストレージシステム５００においては、記憶装置２００は、アクセス識別子（例えば、Ｋｅｙ値）を数値に変換する。アクセス識別子を数値に変換する方法は、例えば、ハッシュ関数（例えば、ｍｄ５等）を用いても良い。その場合、制御装置１０Ｘは、算出したハッシュ値を、データ記憶部２４が提供する総ページ数で除算する。
ここで、制御装置１０Ｘは、データ記憶部２４のデータストアソフトウェアの格納先として提供される容量をページサイズで除算することで、データ記憶部２４が提供する総ページ数を算出できる。そして、制御装置１０Ｘは、算出した剰余を、ページブロックＩＤとして決定する。そして、制御装置１０Ｘは、ページブロックＩＤを算出できれば、ページブロックＩＤと、ページサイズと、開始アドレスとに基づいて、ページを示すアドレスを算出できる。
【０１０２】
上記のページを示すアドレスの算出方法を用いることで、制御装置１０Ｘは、記憶装置２０Ｘの総ページ数（又は、総容量）と、ページサイズと、開始アドレスと、ハッシュ関数と、を保持すれば、Ｋｅｙを含むページにアクセスできる。
【０１０３】
なお、２以上の制御装置１０Ｘが、所定の記憶装置２０Ｘを共有しても良い。その場合、２以上の制御装置１０Ｘは、総ページ数（又は、総容量）と、ページサイズと、開始アドレスと、ハッシュ関数と、を共有しても良い。その結果、２以上の制御装置１０Ｘは、アクセス識別子が格納されたページ領域にアクセスできる。また、障害が発生した時、記憶装置２０Ｘが追加、又は削除された時を除いて、総ページ数（又は、総容量）、ページサイズ、開始アドレス、ハッシュ関数は、システム開始時から不変である。そのため。制御装置１０Ｘ間で、総ページ数等のデータを送受信する必要がない。そのため、上記のページを示すアドレスの算出方法は、データストアソフトウェアの高速化に貢献する。
【０１０４】
ページ内のデータ構造について、記憶装置２０Ｘは、レコード、及び管理情報等を、１度の比較書き込み命令で実行可能なサイズの連続領域に格納することが好ましい。なぜなら、記憶装置２０Ｘが、レコード単位の比較書き込み命令を行う場合、比較書き込み命令において、記憶装置２０Ｘは、２以上のアドレスと、データとの組み合わせをアトミックにチェックしないからである。
【０１０５】
また、ページ内のデフラグを行った後であっても、新しいＷｒｉｔｅ命令に対応する、管理情報のバイナリ文字列と、デフラグ後のレコードのバイナリ文字列と、が一致してしまう場合がある。そこで、管理情報のバイナリ文字列と、デフラグ後のレコードのバイナリ文字列と、が一致することを防止するために、記憶装置２０Ｘは、所定のサイズ毎に一意となる情報を記憶しても良い。例えば、記憶装置２０Ｘは、所定のサイズ毎に、Ｋｅｙ値と、ブロック番号とを組み合わせた情報を記憶しても良い。
【０１０６】
なお、本実施形態に係るストレージシステム５００においては、制御装置１０Ｘは、当該制御装置１０Ｘに含まれる記憶媒体（図示せず）を用いて、データの読み込み、及び書き込み処理を行う。具体的には、制御装置１０Ｘにおいては、ストレージ処理部１は、記憶装置２０Ｘから、ページ単位でデータを読み込み（Ｒｅａｄ処理）、ページから必要とする値を取り出す。つまり、制御装置１０Ｘは、当該制御装置１０Ｘに含まれる記憶媒体に読み込んだデータをコピーする。そして、制御装置１０Ｘは、データをコピーした記憶領域の管理情報を参照し、当該管理情報に基づいて、必要な値の情報にアクセスする。
【０１０７】
次に、２以上の記憶装置２０Ｘに、データを複製する処理について説明する。
【０１０８】
ストレージシステム５００が、２以上の記憶装置２０Ｘを含む場合、記憶装置２０Ｘへのアクセスを分割することが必要となる場合がある。その場合、例えば、制御装置１０Ｘは、コンシステント・ハッシング等の方法を用いて、どの記憶装置２０Ｘを使用するかを決定しても良い。
【０１０９】
ここで、記憶装置２０Ｘへのアクセスを分割する場合、制御装置１０Ｘは、データを複製し、信頼性を確保することが好ましい。なぜなら、制御装置１０Ｘが、格納先として２以上の記憶装置２０Ｘを選択した場合、各記憶装置２０Ｘのバージョンが異なる場合がある。その場合、各記憶装置２０Ｘにおいて、データの不整合が生じる恐れがあるからである。例えば、制御装置１０Ｘが、コンシステント・ハッシングを用いて、データの格納先とする記憶装置２０Ｘを決定するとする。その場合、制御装置１０Ｘは、コンシステント・ハッシングのハッシュリングの隣のノードを、必要数選択することで、２以上の記憶装置２０Ｘを選択できる。
【０１１０】
また、例えば、制御装置１０Ｘが、３つの記憶装置２０Ｘに、データの複製を書きこむ場合を考える。そして、制御装置１００と、制御装置１０１とが、夫々、上記の３つの記憶装置２０Ｘに、並列で、それぞれの記憶装置２０Ｘに読み込み命令を発行したあとに、書き込み命令を発行するとする。その結果、制御装置１００がデータを書き込む記憶装置２０Ｘと、制御装置１０１がデータを書き込む記憶装置２０Ｘとで、夫々、書き込みが成功してしまう恐れがある。
【０１１１】
従って、これを防ぐには、書き込み処理完了後、後に制御装置１０Ｘが読み込みを行った際に多数決方式などで複製間の整合性を担保する必要がある。この場合、後に読み込みリクエストが発生するまでは整合性が保たれていないため、冗長性が下がりシステムの信頼性が低下してしまうことがある。これを防ぐには、書き込み完了後、アプリケーションに応答を返す前に読み込み処理を行って整合性の確認を行う必要がある。これはレスポンス性能の低下を招く。
【０１１２】
複数の記憶装置２０Ｘに対して書き込み処理が完了した時点で、少なくとも１度は書き込み処理が成功したことを保証するには、３つの記憶装置２０Ｘへの書き込みを並行に行うのではなく、１つのプライマリ記憶装置（主たる記憶装置とも呼ぶ）２０Ｘ（任意の方法でキーごとに決めることができる）に成功したあとに、制御装置１０Ｘは、残りの２つの記憶装置２０Ｘへ書き込み命令を発行する必要がある。プライマリ記憶装置２０Ｘを決める方法としては、コンシステント・ハッシングの一つめに見つかったノードにする、ということが方法として採用可能である。
【０１１３】
このように行うことで、１つ目のプライマリ記憶装置２０Ｘで排他制御を行い、バージョン情報（あるいは時刻情報など）を管理情報に含めることで、２つ目以降の記憶装置２０Ｘへの書き込みが、先行する書き込みリクエストを追い越すことを防ぐことが出来る。なお、後続のリクエスト処理中に１つ以上の記憶媒体に対して書き込みが成功した後に、後続のリクエストを発行した制御装置１０Ｘが障害を起こした場合には不整合が起こりえる。このときには、読み込み時に多数決方式や、プライマリ優先などといった方法で、整合性の担保を行う必要がある。
【０１１４】
以上のように、本実施形態に係るストレージシステム５００においては、制御装置１０Ｘ（ＣＰＵ等）と、記憶装置と、がインターコネクトネットワークを介して接続する。そして、本実施形態に係るストレージシステム５００においては、制御装置１０Ｘが、読み込みを行ったデータを書き込みバッファ記憶部１３に保持する。そして、制御装置１０Ｘは、書き込みバッファに保持されるデータと、記憶装置２０Ｘが保持するデータと、の比較書き込み命令を発行する。そして、制御装置１０Ｘは、比較書き込み命令の成否に応じて、読み込み命令を繰り返す。そのため、本実施形態に係るストレージシステム５００は、ネットワーク通信の回数を削減することに貢献し、分散ストレージデータベースシステムの応答性能の向上に貢献する。
【０１１５】
また、本実施形態に係るストレージシステム５００においては、インターコネクトネットワークを用い、サーバ装置（上記、制御装置１０Ｘ相当）間での通信を行う必要がない。インターコネクトネットワークは、サーバ装置間のネットワークに対して、安価で、低遅延なネットワークを実現することが容易である。そのため、本実施形態に係るストレージシステム５００は、コスト削減、及び応答性能の向上に貢献する。
【０１１６】
上述の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【０１１７】
（付記１）上記第１の視点に係るストレージシステムの通りである。
【０１１８】
（付記２）前記比較書き込み命令部は、前記第１のデータと、書き込み対象である前記所定の領域と、書き込み対象の第３のデータと、を前記記憶装置に通知し、前記比較書き込み部は、前記第１のデータと、前記第２のデータとが同一である場合、前記所定の領域のデータを前記第３のデータに更新し、前記第１のデータと、前記第２のデータとが同一ではない場合、前記所定の領域のデータを前記第２のデータに維持する、付記１に記載のストレージシステム。
【０１１９】
（付記３）前記記憶装置は、前記制御装置から命令を受信し、命令に応じた処理の結果を前記制御装置に返信する命令処理部をさらに備え、前記制御装置は、前記比較書き込み命令の結果を受信する書き込み結果受信部をさらに備え、前記命令処理部は、前記比較書き込み命令部が、前記所定の領域のデータを前記第３のデータに更新した場合、前記比較書き込み処理を成功したと前記制御装置に返信し、前記比較書き込み命令部が、前記所定の領域のデータを前記第２のデータに維持した場合、前記比較書き込み処理を失敗したと前記制御装置に返信し、前記読み込み命令発行部は、前記比較書き込み処理を失敗したとの結果を受信した場合、前記読み込み命令を再発行する、付記１又は２に記載のストレージシステム。
【０１２０】
（付記４）前記ストレージシステムは、前記制御装置にアクセスするストレージクライアント部をさらに含み、前記ストレージクライアント部は、前記記憶装置に対し、レコードおよび管理情報を、１回の比較書き込み命令で実行可能な連続記憶領域に保持する、付記１乃至３のいずれか一に記載のストレージシステム。
【０１２１】
（付記５）前記ストレージクライアント部は、前記記憶装置の記憶領域に対し、当該記憶領域の所定のサイズごとに、所定の情報を埋め込んで管理する、付記４に記載のストレージシステム。
【０１２２】
（付記６）前記ストレージ装置は、２以上の前記記憶装置に対し、データの複製を保持し、前記ストレージクライアント部は、各前記記憶装置に対する前記比較書き込み処理の比較情報を、対象の記憶媒体から読み込み、前記ストレージクライアント部が、前記制御装置間で共通の方法を用いて、主たる前記記憶装置を１つ選び、当該主たる記憶装置に対して、前記比較書き込み命令が成功したあとに、他の複製の書き込み先となる前記記憶装置への前記読み込み命令、及び前記比較書き込み命令を発行する、付記４又は５に記載のストレージシステム。
【０１２３】
（付記７）前記制御装置は、前記ストレージクライアント部からの処理命令を受け付け、当該処理命令の結果を前記ストレージクライアント部に返信するアクセス応答部をさらに備え、前記アクセス応答部は、前記比較書き込み処理の成否を、前記ストレージクライアント部に通知する付記４乃至６のいずれか一に記載のストレージシステム。
【０１２４】
（付記８）上記第２の視点に係る制御装置の通りである。
【０１２５】
（付記９）上記第３の視点に係る記憶装置の通りである。
【０１２６】
（付記１０）上記第４の視点に係るデータアクセス方法の通りである。
【０１２７】
（付記１１）記憶装置を制御する方法であって、データを格納する工程と、前記制御装置から指定された第１のデータと、前記データ記憶部が所定の領域に格納する第２のデータと、を比較し、当該比較結果に応じて、当該所定の領域のデータを更新の有無を決定する比較書き込み処理を実行する工程と、を含む記憶装置の制御方法。
【０１２８】
（付記１２）上記第５の視点に係るプログラム記録媒体の通りである。
【０１２９】
（付記１３）記憶装置を制御するコンピュータに実行させるプログラムを記録するプログラム記録媒体であって、データを格納する処理と、所定の第１のデータと、所定の領域に格納する第２のデータと、を比較し、当該比較結果に応じて、当該所定の領域のデータの更新の有無を決定する処理と、を実行するプログラムを記録するプログラム記録媒体。
【０１３０】
なお、上記の特許文献の開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
以上、上述した実施形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
この出願は、２０１４年３月２０日に出願された日本出願特願２０１４−０５８２２９を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１３１】
１  ストレージ処理部
３  インターコネクトネットワーク通信実現部
４  ストレージクライアント部
１１  アクセス応答部
１２、１０１１  読み込み命令発行部
１３、１０１２  書き込みバッファ記憶部
１４、１０１３  比較書き込み命令部
１５  書き込み結果受信部
１６  判定再送部
２１  命令処理部
２２  読み込み処理部
２３、１０２２  比較書き込み部
２４、１０２１  データ記憶部
１００〜１０Ｘ、１０１０  制御装置
２００〜２０Ｘ、１０２０  記憶装置
３００、１０３０  インターコネクトネットワーク
５００、１０００  ストレージシステム
【図１】
2015141219.tif 000003
【図２】
2015141219.tif 000004
【図３】
2015141219.tif 000005
【図４】
2015141219.tif 000006
【手続補正書】
【提出日】平成28年9月8日(2016.9.8)
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１０
【補正方法】変更
【補正の内容】
【請求項１０】
制御装置を制御するコンピュータに実行させるプログラムを記録するプログラムであって、
前記記憶装置に読み込み命令を発行する処理と、
読み込まれたデータを、第１のデータとして第１の領域に保持する処理と、
前記第１のデータと、前記第１の領域と異なる第２の領域に格納された第２のデータとの比較結果に応じて、前記第２の領域に格納されるデータを更新するか否かを決定する、比較書き込み処理の実行を指示する処理と、
を実行するプログラムを記録するプログラム。
【国際調査報告】
2015141219.tif 000007
2015141219.tif 000008