(57)【要約】【課題】アクセス性能を向上させることができるストレージシステムを提供することである。【解決手段】実施形態によれば、ストレージシステムは、複数の第１プロセッサと、複数の第２プロセッサと、を具備する。前記複数の第２プロセッサは、各々が１以上の不揮発性メモリを有し、前記複数の第１プロセッサから発行されるデータの入出力命令を処理する。前記複数の第１プロセッサごとに、前記複数の第２プロセッサの中からデータの書き込み先として適用し得る１以上の第２プロセッサが前記複数の第１のプロセッサ間で重複しないように割り当てられる。前記複数の第１プロセッサは、前記複数の第２プロセッサの中の前記割り当てられた１以上の第２プロセッサのみへデータを書き込み可能であり、前記複数の第２プロセッサすべてからデータを読み出し可能である。【選択図】図４
2018156594.tif 000002
【特許請求の範囲】
【請求項１】
複数の第１プロセッサと、
各々が１以上の不揮発性メモリ装置を有し、前記複数の第１プロセッサから発行されるデータの入出力命令を処理する複数の第２プロセッサと、
を具備し、
前記複数の第１プロセッサごとに、前記複数の第２プロセッサの中からデータの書き込み先として適用し得る１以上の第２プロセッサが前記複数の第１のプロセッサ間で重複しないように割り当てられ、
前記複数の第１プロセッサは、前記複数の第２プロセッサの中の前記割り当てられた１以上の第２プロセッサのみへデータを書き込み可能であり、前記複数の第２プロセッサすべてからデータを読み出し可能である、
ストレージシステム。
【請求項２】
前記複数の第２プロセッサは、マトリックス状に接続され、
前記複数の第１プロセッサは、前記複数の第２プロセッサの中の２以上の第２プロセッサと前記複数の第１のプロセッサ間で重複しないように接続され、
前記複数の第１プロセッサごとに、前記２以上の第２プロセッサと、前記マトリックス状に接続された前記複数の第２プロセッサ間の配線上において前記２以上の第２プロセッサの近傍に位置する第２のプロセッサとが割り当てられる、
請求項１に記載のストレージシステム。
【請求項３】
カラム型データベースが構築されるストレージシステムであって、
１以上の第１プロセッサと、
各々が１以上の不揮発性メモリ装置を有し、前記１以上の第１プロセッサから発行されるデータの入出力命令を処理する１以上の第２プロセッサと、
を具備し、
前記１以上の第１プロセッサは、
書き込みが要求されたレコードデータをカラムごとに分割し、前記１以上の不揮発性メモリの読み出し単位であるページそれぞれには同一のカラムのデータのみが格納されるように、前記分割したデータをカラム別かつ所定サイズのセクタ単位にキャッシュメモリに蓄積し、
前記キャッシュメモリに蓄積されるセクタ単位のデータをカラム順にソートし、前記ソートしたカラム順に前記セクタ単位のデータが各セクタに格納される、所定数のセクタで構成されるチャンクを生成するとともに、前記チャンク内の各セクタに関するメタデータを生成して、前記チャンク内の所定のセクタに格納し、
前記生成した１チャンク分のデータを前記１以上の第２プロセッサに書き込む、
ストレージシステム。
【請求項４】
前記１以上の第１プロセッサは、少なくとも照合対象カラムおよび検索条件を含むレコードデータの検索命令を前記１以上の第２プロセッサに発行し、
前記１以上の第２プロセッサは、前記検索命令の受信時、前記１以上の不揮発性メモリ装置上に存在する前記チャンクごとに、前記所定のセクタに格納される前記メタデータを読み出し、前記メタデータに基づき、前記照合対象カラムのデータを格納するセクタからデータを読み出し、前記読み出したデータが前記検索条件に合致する場合、前記メタデータに基づき、前記読み出したデータを含むレコードデータの他のカラムのデータが格納されるセクタを特定し、前記特定したセクタから他のデータを読み出し、すべてのカラムのデータを含むレコードデータを作成し、前記作成したレコードデータを前記１以上の第１プロセッサに返却する、
請求項３に記載のストレージシステム。
【請求項５】
前記所定のセクタは、前記チャンクの先頭のセクタである請求項３または４に記載のストレージシステム。
【請求項６】
前記メタデータは、各セクタに格納されるデータのカラム識別子と、同一のカラムのデータを格納する全セクタ中における各セクタの順番と、各セクタ内の要素数とを保持するセクタ情報テーブルを含む請求項３または４に記載のストレージシステム。
【請求項７】
前記メタデータは、少なくとも固定長または可変長のいずれかであるのかを示す各カラムのデータ型情報を含む請求項３または４に記載のストレージシステム。
【請求項８】
前記１以上の第１プロセッサは、前記１以上の第２プロセッサから返却されたすべてのレコードデータをマージする請求項４に記載のストレージシステム。
【請求項９】
前記レコードデータは、テーブルによりグループ化され、
前記検索命令には、さらにテーブル名が含まれ、
前記１以上の第２プロセッサは、
前記１以上の不揮発性メモリ装置上に確保されている前記チャンク用の領域が有効であるか否かと、有効である前記チャンク用の領域がいずれのテーブルのチャンクに割り当てられているのかとを管理するチャンク管理情報を保持し、
前記検索命令に含まれる前記テーブル名と、前記チャンク管理情報とに基づき、前記１以上の不揮発性メモリ装置上に存在するすべてのチャンクの中から前記検索命令の対象となるチャンクを選択する、
請求項４に記載のストレージシステム。
【請求項１０】
複数の第１プロセッサと、各々が１以上の不揮発性メモリ装置を有し、前記複数の第１プロセッサから発行されるデータの入出力命令を処理する複数の第２プロセッサとを具備するストレージシステムの処理方法であって、
前記複数の第１プロセッサごとに、前記複数の第２プロセッサの中からデータの書き込み先として適用し得る１以上の第２プロセッサを前記複数の第１のプロセッサ間で重複しないように割り当てることと、
前記複数の第１プロセッサが、前記複数の第２プロセッサの中の前記割り当てられた１以上の第２プロセッサのみへデータを書き込むことと、
前記複数の第１プロセッサが、前記複数の第２プロセッサすべてからデータを読み出すことと、
を具備する処理方法。
【請求項１１】
カラム型データベースが構築されるストレージシステムであって、１以上の第１プロセッサと、各々が１以上の不揮発性メモリ装置を有し、前記１以上の第１プロセッサから発行されるデータの入出力命令を処理する１以上の第２プロセッサと、を具備するストレージシステムの処理方法であって、
前記１以上の第１プロセッサが、
書き込みデータを含むレコードデータをカラムごとに分割し、前記１以上の不揮発性メモリの読み出し単位であるページそれぞれには同一のカラムのデータのみが格納されるように、前記分割したデータをカラム別かつ所定サイズのセクタ単位にキャッシュメモリに蓄積することと、
前記キャッシュメモリに蓄積されるセクタ単位のデータをカラム順にソートし、前記ソートしたカラム順にセクタ単位のデータが各セクタに格納される、所定数のセクタで構成されるチャンクを生成するとともに、前記チャンク内の各セクタに関するメタデータを生成して、前記チャンク内の所定のセクタに格納することと、
前記生成した１チャンク分のデータを前記１以上の第２プロセッサ書き込むことと、
少なくとも照合対象カラムおよび検索条件を含むレコードデータの検索命令を前記１以上の第２プロセッサに発行することと、
を具備し、
前記前記１以上の第２プロセッサが、前記検索命令の受信時、前記１以上の不揮発性メモリ装置上に存在する前記チャンクごとに、
前記所定のセクタに格納される前記メタデータを読み出すことと、
前記メタデータに基づき、前記照合対象カラムのデータを格納するセクタからデータを読み出すことと、
前記読み出したデータが前記検索条件に合致する場合、前記メタデータに基づき、前記読み出したデータを含むレコードデータの他のカラムのデータが格納されるセクタを特定することと、
前記特定したセクタから他のデータを読み出し、すべてのカラムのデータを含むレコードデータを作成し、前記作成したレコードデータを前記１以上の第１プロセッサに返却することと、
を具備する処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ストレージシステムおよび処理方法に関する。
【背景技術】
【０００２】
クラウドコンピューティングの普及に伴い、大量のデータを格納でき、かつ、データの入出力を高速に処理できるストレージシステムの需要が高まっている。ビッグデータへの関心が高まるにつれて、この傾向は益々強まってきている。このような要求に応え得るストレージシステムの１つとして、複数のメモリノードを相互に接続したストレージシステムが提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５６５９７５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のメモリノードを相互に接続したストレージシステムにおいては、たとえば、データの書き込み時に発生し得るメモリノードの排他ロックの取り合いなどにより、ストレージシステム全体の性能低下を招いてしまっている。
【０００５】
本発明が解決しようとする課題は、アクセス性能を向上させることができるストレージシステムおよび処理方法を提供することである。
【課題を解決するための手段】
【０００６】
実施形態によれば、ストレージシステムは、複数の第１プロセッサと、複数の第２プロセッサと、を具備する。前記複数の第２プロセッサは、各々が１以上の不揮発性メモリを有し、前記複数の第１プロセッサから発行されるデータの入出力命令を処理する。前記複数の第１プロセッサごとに、前記複数の第２プロセッサの中からデータの書き込み先として適用し得る１以上の第２プロセッサが前記複数の第１のプロセッサ間で重複しないように割り当てられる。前記複数の第１プロセッサは、前記複数の第２プロセッサの中の前記割り当てられた１以上の第２プロセッサのみへデータを書き込み可能であり、前記複数の第２プロセッサすべてからデータを読み出し可能である。
【図面の簡単な説明】
【０００７】
【図１】第１実施形態のストレージシステムの利用形態の一例を示す図。
【図２】第１実施形態のストレージシステムの構成の一例を示す図。
【図３】第１実施形態のストレージシステムのＮＭの構成（ＮＣの詳細な構成）の一例を示す図。
【図４】第１実施形態のストレージシステムにおけるＣＵへのＮＭの割り当ての一例を示す図。
【図５】第１実施形態のストレージシステム（ＣＵおよびＮＭ）の機能ブロックの一例を示す図。
【図６】第１実施形態のストレージシステムのＮＭリストの一例を示す図。
【図７】第１実施形態のストレージシステム（ＣＵ）の動作手順を示すフローチャート。
【図８】図７のステップＡ２の書き込み先ＮＭの選択処理の詳細な手順を示すフローチャート。
【図９】第１実施形態のストレージシステムにおけるＣＵへのＮＭの割り当ての別の一例を示す図。
【図１０】第１実施形態のストレージシステムのＮＭリストの別の一例を示す図。
【図１１】第２実施形態のストレージシステムの概要を説明するための第１の図。
【図１２】第２実施形態のストレージシステムの概要を説明するための第２の図。
【図１３】第２実施形態のストレージシステムがデータベース操作のために提供するインタフェースを説明するための図。
【図１４】第２実施形態のストレージシステムのレコード登録時の動作を説明するための第１の図。
【図１５】第２実施形態のストレージシステムのレコード登録時の動作を説明するための第２の図。
【図１６】第２実施形態のストレージシステムのＮＭ上でのデータの保存形式の一例を示す図。
【図１７】第２実施形態のストレージシステムのメタデータの一例を示す図。
【図１８】第２実施形態のストレージシステムのチャンク管理情報の一例を示す図。
【図１９】第２実施形態のストレージシステムのチャンク登録順リストの一例を示す図。
【図２０】第２実施形態のストレージシステムにおけるＮＭのレコード検索時の動作を説明するための図。
【図２１】第２実施形態のストレージシステム（ＣＵおよびＮＭ）の機能ブロックの一例を示す図。
【図２２】第２実施形態のストレージシステムのテーブル作成時におけるＣＵのテーブル管理部の動作手順を示すフローチャート。
【図２３】第２実施形態のストレージシステムのテーブル削除時におけるＣＵのテーブル管理部の動作手順を示すフローチャート。
【図２４】第２実施形態のストレージシステムのレコード登録時におけるＣＵのＣＵキャッシュ管理部の動作手順を示すフローチャート。
【図２５】第２実施形態のストレージシステムのレコード検索時におけるＣＵの検索処理部の動作手順を示すフローチャート。
【図２６】第２実施形態のストレージシステムのレコード検索時におけるＮＭの検索実行部の動作手順を示すフローチャート。
【図２７】第２実施形態のストレージシステムのチャンク書き込み時におけるＮＭのチャンク管理部の動作手順を示すフローチャート。
【図２８】第２実施形態のストレージシステムのテーブル削除時におけるＮＭのチャンク管理部の動作手順を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、実施の形態について図面を参照して説明する。
【０００９】
（第１実施形態）
まず、第１実施形態について説明する。
【００１０】
図１は、本実施形態のストレージシステム１の利用形態の一例を示す図である。
【００１１】
図１に示すように、ストレージシステム１は、たとえば、ネットワークＮ経由で接続される複数のクライアント装置２からの要求に応じて、データの書き込みやデータの読み出しなどを実行するファイルサーバなどとして利用され得る。また、ストレージシステム１は、オブジェクトストレージなどと称される、ＫＶＳ（Key value store）型のストレージシステムとして実現されている。ＫＶＳ型であるストレージシステム１では、クライアント装置２からのデータの書き込み要求には、書き込むデータ（Value）と、書き込むデータを特定するためのキー（Key）とが含まれる。この要求を受けたストレージシステム１は、キーとデータとのペアを格納する。一方、クライアント装置２からのデータの読み出し要求には、キーが含まれる。キーとして、たとえばファイル名などの文字列を採用し得る。換言すると、クライアント装置２は、ストレージシステム１のデータ記憶領域内のどこにどのデータが記録されているなどといった、ストレージシステム１のデータ記憶領域の状態を論理的にも物理的にも把握している必要がまったくない。また、ストレージシステム１は、キーからデータの格納先を辿るためのインデックスをデータ記憶領域内の所定の領域で管理してもよい。
【００１２】
ストレージシステム１の筐体のたとえば前面には、複数のスロットが設けられ、各スロットには、ブレードユニット１００１を収納することができる。また、各ブレードユニット１００１には、複数のボードユニット１００２を収納することができる。各ボードユニット１００２には、複数のＮＡＮＤ型フラッシュメモリ２２が搭載されている。ブレードユニット１００１およびボードユニット１００２のコネクタを介して、ストレージシステム１内の複数のＮＡＮＤ型フラッシュメモリ２２は、マトリックス状に接続される。複数のＮＡＮＤ型フラッシュメモリ２２をマトリックス状に接続することにより、ストレージシステム１は、大容量のデータ記憶領域を論理的に構築する。
【００１３】
図２は、ストレージシステム１の構成の一例を示す図である。
【００１４】
図２に示すように、ストレージシステム１は、複数のＣＵ（Connection unit）［第１プロセッサ］１０と、複数のＮＭ（Node module）［第２プロセッサ］２０とを有している。なお、図１において、ボードユニット１００２に搭載されているとして示したＮＡＮＤ型フラッシュメモリ２２は、ＮＭ２０側に内蔵されている。
【００１５】
ＮＭ２０は、ＮＣ（Node controller）２１と、１以上のＮＡＮＤ型フラッシュメモリ２２とを有している。ＮＡＮＤ型フラッシュメモリ２２は、たとえばエンベデッドマルチメディアカード（ｅＭＭＣ（登録商標））である。ＮＣ２１は、ＮＡＮＤ型フラッシュメモリ２２に対するアクセス制御と、データの転送制御とを実行する。ＮＣ２１は、たとえば４系統の入出力ポートを有している。この入出力ポート経由でＮＣ２１同士を接続することにより、複数のＮＭ２０をマトリックス状に接続することができる、前述した、ストレージシステム１内の複数のＮＡＮＤ型フラッシュメモリ２２をマトリックス状に接続するとは、複数のＮＭ２０をマトリックス状に接続することである。複数のＮＭ２０をマトリックス状に接続することにより、前述したように、ストレージシステム１は、大容量のデータ記憶領域３０を論理的に構築する。
【００１６】
ＣＵ１０は、クライアント装置２からの要求に応じて、以上のように構築されるデータ記憶領域３０に対するデータの入出力処理（データの更新、データの削除を含む）を実行する。より詳細には、クライアント装置２からの要求に対応するデータの入出力命令をＮＭ２０に対して発行する。なお、図１および図２には示していないが、ストレージシステム１のＦＥＰ（Front end processor）として、負荷分散装置（ロードバランサ）が設けられている。負荷分散装置には、ストレージシステム１を示すネットワークＮ上のアドレスが割り当てられており、クライアント装置２は、このアドレス宛てに各種要求を送信する。クライアント装置２からの要求を受けた負荷分散装置は、その要求を、複数のＣＵ１０の中のいずれかのＣＵ１０に中継する。また、負荷分散装置は、ＣＵ１０から受領した処理結果をクライアント装置２へ返送する。負荷分散装置は、典型的には、複数のＣＵ１０の負荷が均等となるように、クライアント装置２からの要求を複数のＣＵ１０へ振り分けるものであるが、複数のＣＵ１０の中からいずれかのＣＵ１０を選択する手法については、既知の様々な手法を適用し得る。あるいは、負荷分散装置によらず、複数のＣＵ１０の中の１つがマスタとして動作し、負荷分散装置の役割を担うようにしてもよい。
【００１７】
ＣＵ１０は、ＣＰＵ１１、ＲＡＭ１２およびＮＭインタフェース１３を有している。ＣＵ１０の各機能は、ＲＡＭ１２に格納され、ＣＰＵ１１によって実行されるプログラムにより実現される。ＮＭインタフェース１３は、ＮＭ２０、より詳細には、ＮＣ２１との間の通信を実行する。ＮＭインタフェース１３は、複数のＮＭ２０の中のいずれか１つのＮＭ２０のＮＣ２１と接続されている。つまり、ＣＵ１０は、ＮＭインタフェース１３を介して、複数のＮＭ２０の中のいずれか１つのＮＭ２０と直接的に接続され、ＮＭ２０のＮＣ２１を介して、その他のＮＭ２０と間接的に接続される。ＣＵ１０と直接的に接続されるＮＭ２０は、ＣＵ１０ごとに異なっている。また、図２には示されていないが、ＣＵ１０間も相互に接続されており、ＣＵ１０同士で通信することができる。
【００１８】
前述したように、ＣＵ１０は、複数のＮＭ２０の中のいずれか１つのＮＭ２０と直接的に接続される。したがって、ＣＵ１０が、直接的に接続されるＮＭ２０以外のＮＭ２０に対してデータの入出力命令を発行する場合においても、その入出力命令は、まず、直接的に接続されるＮＭ２０へ転送される。その後、その入出力命令は、各ＮＭ２０のＮＣ２１を介して目的のＮＭ２０まで転送される。たとえば、マトリックス状に接続される複数のＮＭ２０について、行番号と列番号との組合せで各ＮＭ２０に識別子（Ｍ，Ｎ）が付されるものと想定すると、ＮＣ２１は、自ＮＭ２０の識別子と、入出力命令の送り先として指定される識別子とを比較することにより、第１に、その入出力命令が自ＮＭ２０宛てか否かを判断できる。自ＮＭ２０宛てでない場合、ＮＣ２１は、自ＮＭ２０の識別子と、入出力命令の送り先として指定される識別子との関係、より詳細には、行番号、列番号それぞれの大小関係から、第２に、隣接するＮＭ２０の中のいずれのＮＭ２０へ転送すべきかを判断できる。入出力命令を目的のＮＭ２０まで転送する手法については、既知の様々な手法を適用し得る。本来であれば転送先として選ばれることがないＮＭ２０への経路も、予備経路として使用され得る。
【００１９】
また、ＮＭ２０による、入出力命令に応じた入出力処理の結果、すなわち、ＮＡＮＤ型フラッシュメモリ２２に対するアクセスの結果も、前述した入出力命令の転送と同様、ＮＣ２１の働きにより、他のＮＭ２０をいくつか経由して入出力命令の発行元であるＣＵ１０まで転送される。たとえば、入出力命令の発行元の情報として、ＣＵ１０が直接的に接続されるＮＭ２０の識別子を含ませることで、この識別子を処理結果の転送先として指定することができる。
【００２０】
図３は、ＮＭ２０の構成（ＮＣ２１の詳細な構成）の一例を示す図である。
【００２１】
前述したように、ＮＭ２０は、ＮＣ２１と、１以上のＮＡＮＤ型フラッシュメモリ２２とを有している。また、ＮＣ２１は、図３に示すように、ＣＰＵ２１１、ＲＡＭ２１２、Ｉ／Ｏコントローラ２１３およびＮＡＮＤインタフェース２１４を有している。ＮＣ２１の各機能は、ＲＡＭ２１２に格納され、ＣＰＵ２１１によって実行されるプログラムにより実現される。Ｉ／Ｏコントローラ２１３は、ＣＵ１０（より詳細には、ＮＭインタフェース１３）または他のＮＭ２０（より詳細には、ＮＣ２１）との間の通信を実行する。ＮＡＮＤインタフェース２１４は、ＮＡＮＤ型フラッシュメモリ２２に対するアクセスを実行する。
【００２２】
ここで、図４を参照して、以上のような構成を持つストレージシステム１におけるＣＵ１０へのＮＭ２０の割り当てについて説明する。
【００２３】
いま、あるＣＵ１０が、クライアント装置２からデータの書き込み要求を受けたものと想定する。また、別のＣＵ１０も、ほぼ同じタイミングで、クライアント装置２からデータの書き込み要求を受けたものと想定する。さらに、これら２つのＣＵ１０が、たとえばキーをパラメータとするハッシュ計算や、ラウンドロビン方式などにより、同一のＮＭ２０を、キーとデータとのペアの格納先として選択したとする。通常、複数のホスト（ＣＵ１０に相当）から共有されるストレージ装置は、データの整合性確保のために、排他ロックが設けられ、このロックを獲得したホストのみがデータの書き込みを実行することができる。そのため、いま想定するケースでは、２つのＣＵ１０間でロックの取り合いが発生してしまう。ロックの取り合いは、ストレージ装置の性能低下の要因となる。
【００２４】
そこで、このストレージシステム１では、データの書き込みに関しては、図４（Ａ）に示すように、ＣＵ１０ごとに、書き込み先として適用し得るＮＭ２０をＣＵ１０間で重複しないように割り当てる。つまり、各ＣＵ１０が、自身に割り当てられたＮＭ２０のみへデータを書き込み可能とする。その一方で、データの読み出しに関しては、図４（Ｂ）に示すように、各ＣＵ１０が、すべてのＮＭ２０からデータを読み出し可能とする。
【００２５】
データの書き込みに関しては、自身に割り当てられたＮＭ２０のみを対象として、キーとデータとのペアの格納先を選択すればよい。データの読み出しに関しては、すべてのＮＭ２０からキーを読み出し、該当するキーを格納するＮＭ２０からデータを読み出してもよいし、インデックスが管理されている場合、インデックスを参照して、データの格納先であるＮＭ２０を特定し、そのＮＭ２０からデータを読み出すようにしてもよい。
【００２６】
これにより、このストレージシステム１は、排他ロックを不要とし、アクセス性能を向上させることができる。
【００２７】
図５は、ストレージシステム１（ＣＵ１０およびＮＭ２０）の機能ブロックの一例を示す図である。
【００２８】
図５に示すように、ＣＵ１０は、クライアント通信部１０１、ＮＭ選択部１０２、ＣＵ側内部通信部１０３およびＮＭリスト１０４を有している。ＮＭ２０は、ＮＭ側内部通信部２０１、コマンド実行部２０２およびメモリ２０３（ＮＡＮＤ型フラッシュメモリ２２およびＲＡＭ２１２）を有している。ＣＵ１０の各機能部は、ＲＡＭ１２に格納され、ＣＰＵ１１によって実行されるプログラムにより実現される。ＮＭ２０の各機能部は、ＲＡＭ２１２に格納され、ＣＰＵ２１１によって実行されるプログラムにより実現される。なお、クライアント装置２は、インタフェース部５０１およびサーバ通信部５０２を有している。
【００２９】
クライアント装置２のインタフェース部５０１は、ユーザからのレコード（データ）の登録、取得、検索などの要求を受け付ける。サーバ通信部５０２は、（たとえば負荷分散装置を介した）ＣＵ１０との通信を実行する。
【００３０】
ＣＵ１０のクライアント通信部１０１は、（たとえば負荷分散装置を介した）クライアント装置２との通信を実行する。ＮＭ選択部１０２は、データの書き込み時、書き込み先のＮＭ２０を選択する。ＣＵ側内部通信部１０３は、他のＣＵ１０またはＮＭ２０との通信を実行する。ＮＭリスト１０４は、各ＣＵ１０に割り当てられた書き込み先のＮＭ２０のリストである。このＮＭリスト１０４は、１つのＮＭ２０が複数のＮＭリスト１０４に載ることがないように作成される。ＮＭ選択部１０２は、ＮＭリスト１０４に基づき、書き込み先のＮＭ２０を選択する。ＮＭ２０を選択する手法については、ラウンドロビン方式やロードバランス方式など、既知の様々な手法を適用し得る。
【００３１】
図６に、ＮＭリスト１０４の一例を示す。図６（Ａ）は、ＣＵ１０に対する書き込み先ＮＭ２０の割り当てが図４に示すように行われた場合におけるＣＵ［０］１０のＮＭリスト１０４を示し、図６（Ｂ）は、ＣＵ１０に対する書き込み先ＮＭ２０の割り当てが図４に示すように行われた場合におけるＣＵ［１］１０のＮＭリスト１０４を示している。
【００３２】
ＮＭ２０のＮＭ側内部通信部２０１は、ＣＵ１０または他のＮＭ２０との通信を実行する。コマンド実行部２０２は、ＣＵ１０からの要求に応じて、メモリ２０３に対するアクセスを実行する。メモリ２０３は、ユーザからのデータを記憶する。メモリ２０３は、不揮発性のＮＡＮＤ型フラッシュメモリ２２のほか、たとえばデータを一時的に保持するための揮発性のＲＡＭ２１２を含む。
【００３３】
図７は、本実施形態のストレージシステム１（ＣＵ１０）の動作手順を示すフローチャートである。
【００３４】
ＣＵ１０は、クライアント装置２からの要求がデータの書き込みまたはデータの読み出しのいずれであるのかを判定する（ステップＡ１）。データの書き込みである場合（ステップＡ１のＹＥＳ）、ＣＵ１０は、ＮＭリスト１０４上のＮＭ２０の中から書き込み対象とするＮＭ２０を選択する（ステップＡ２）。そして、ＣＵ１０は、選択したＮＭ２０を対象として、データの書き込み処理を実行する（ステップＡ３）。
【００３５】
一方、データの読み出しである場合（ステップＡ１のＹＥＳ）、ＣＵ１０は、すべてのＮＭ２０の中から読み出し対象とするＮＭ２０を選択する（ステップＡ４）。そして、ＣＵ１０は、選択したＮＭ２０を対象として、データの読み出し処理を実行する（ステップＡ５）。
【００３６】
図８は、図７のステップＡ２の書き込み先ＮＭ２０の選択処理の詳細な手順を示すフローチャートである。ここでは、ＮＭリスト１０４上のＮＭ２０をラウンドロビン方式で選択する場合を想定する。
【００３７】
まず、ＣＵ１０は、最初の書き込みか否かを判定する（ステップＢ１）。最初の書き込みである場合（ステップＢ１のＹＥＳ）、ＣＵ１０は、ＮＭリスト１０４上の先頭のＮＭ２０の座標をＮＭリスト１０４から取得する（ステップＢ２）。
【００３８】
最初の書き込みではない場合（ステップＢ１のＮＯ）、ＣＵ１０は、続いて、ＮＭリスト１０４上の最後のＮＭ２０まで書き込み済みか否かを判定する（ステップＢ３）。ＮＭリスト１０４上の最後のＮＭ２０まで書き込み済みである場合においても（ステップＢ３のＹＥＳ）、ＣＵ１０は、ＮＭリスト１０４上の先頭のＮＭ２０の座標をＮＭリスト１０４から取得する（ステップＢ２）。一方、ＮＭリスト１０４上の最後のＮＭ２０まで書き込み済みではない場合（ステップＢ３のＮＯ）、ＣＵ１０は、ＮＭリスト１０４上において前回書き込んだＮＭ２０の次のＮＭ２０の座標をＮＭリスト１０４から取得する（ステップＢ４）。
【００３９】
このように、このストレージシステム１は、排他ロックを不要とし、アクセス性能を向上させることができる。
【００４０】
ところで、以上の説明では、ＣＵ１０が、複数のＮＭ２０の中のいずれか１つのＮＭ２０と直接的に接続されていることを前提としている。前述したように、ＣＵ１０は、たとえばデータの読み出しに関しては、すべてのＮＭ２０と通信する可能性がある。また、ＣＵ１０が、直接的に接続されているＮＭ２０以外のＮＭ２０と通信する場合、ＣＵ１０−ＮＭ２０間に１以上の他のＮＭ２０が介在することになる。そこで、ＣＵ１０−ＮＭ２０間の通信の性能を高めるために、より詳細には、ＣＵ１０−ＮＭ２０間の通信時に介在する他のＮＭ２０の数を少なくするために、たとえば図９に示すように、ＣＵ１０間で重複しないように、ＣＵ１０を、たとえば２つのＮＭ２０と直接的に接続することも一考である。そして、この場合、ＣＵ１０に割り当てる書き込み先のＮＭ２０は、直接的に接続されているＮＭ２０と、これらのＮＭ２０と（物理的な位置関係ではなく）配線上において近傍に位置するＮＭ２０とにすることが好ましい。そうすることにより、データの書き込み時におけるＣＵ１０−ＮＭ２０間の通信の性能についても高めることができる。図９に示すようにＣＵ１０とＮＭ２０とを接続した場合におけるＮＭリスト１０４の一例を図１０に示す。図９（Ａ）は、ＣＵ［０］１０のＮＭリスト１０４を示し、図９（Ｂ）は、ＣＵ［１］１０のＮＭリスト１０４を示している。
【００４１】
これにより、このストレージシステム１は、さらに、アクセス性能を向上させることができる。
【００４２】
（第２実施形態）
次に、第２実施形態について説明する。なお、第１実施形態と同一の構成要素については同一の符号を使用し、その説明を省略する。
【００４３】
本実施形態のストレージシステム１も、複数のＮＭ２０をマトリックス状に接続することにより、大容量のデータ記憶領域３０を論理的に構築する。また、複数のＣＵ１０により、クライアント装置２から要求されたデータ記憶領域３０に対するデータの入出力処理が実行される。また、本実施形態のストレージシステム１は、カラム型データベースが構築されることを想定する。
【００４４】
ここで、まず、図１１および図１２を参照して、本実施形態のストレージシステム１の概要について説明する。
【００４５】
図１１は、一般的なカラム型データベースにおいて検索が行われる様子（Ａ）と、本実施形態のストレージシステム１において検索が行われる様子（Ｂ）とを比較して示す図である。
【００４６】
図１１（Ａ）に示すように、一般的なカラム型データベースにおいては、たとえばＤＢサーバが、ネットワークスイッチを介して接続されるすべてのストレージから検索対象のデータを読み出し（ａ１）、読み出したデータそれぞれについて、検索条件との照合を実行する（ａ２）。よって、検索対象のデータが大量に存在する場合、ネットワークスイッチ経由でＤＢサーバと複数のストレージとを繋ぐ内部ネットワークが混雑する。また、ＤＢサーバで大量の照合を行うため、ＤＢサーバの負荷が高くなる。これらは、カラム型データベースの性能低下の要因となる。
【００４７】
そこで、本実施形態のストレージシステム１は、第１に、各ＮＭ２０が、検索条件と合致するデータの検索を並列に実行し、検索されたデータのみをＣＵ１０に返却する。より詳細には、ＣＵ１０は、各ＮＭ２０に検索要求を送り（ｂ１）、各ＮＭ２０は、各々のＮＭ２０内において検索対象のデータと検索条件との照合を実行する（ｂ２）。検索条件と合致するデータが検索されたＮＭ２０は、そのデータをＣＵ１０に返却し（ｂ３）、ＣＵ１０は、ＮＭ２０から返却されたデータをマージする（ｂ４）。
【００４８】
このストレージシステム１においては、内部ネットワーク上のデータ量が低減され、混雑が緩和される。また、ＮＭ２０で分散して検索を行うことで、ＣＵ１０の負荷が低減される。これにより、ストレージシステム１のアクセス性能を向上させることができる。
【００４９】
次に、カラム型データベースにおけるデータの保存形式に着目する。図１２は、カラム型でない一般的なデータベースにおいてデータの読み出し時に生じる無駄を説明するための図である。
【００５０】
いま、図１２に示すように、レコード１〜レコード５の５つのレコードが検索対象のデータとして存在するものと想定する。また、各レコードは、カラム１〜カラム４の３つのカラムのデータを含むものと想定する。そして、カラム２のデータが「ｂｂｂ」のレコードを検索するという検索条件が与えられた場合を想定する。
【００５１】
この場合、理想的には、まず、各レコードのカラム２のデータを読み出し（ｃ１）、検索条件と合致する（カラム２のデータが「ｂｂｂ」の）レコード２内のその他のカラムのデータを読み出せばよい（ｃ２）。しかしながら、実際は、本来であれば読み出しが不要なカラムのデータの読み出しも行われてしまっている。
【００５２】
そこで、本実施形態のストレージシステム１は、第２に、データの保存形式を工夫することで、このような無駄なカラムのデータの読み出しを削減する。これにより、ストレージシステム１のアクセス性能を向上させることができる。以下、これら第１および第２の点について詳述する。
【００５３】
図１３は、ストレージシステム１がデータベース操作のために提供するインタフェースを説明するための図である。
【００５４】
図１３に示すように、ストレージシステム１は、カラム型データベースを操作するためのインタフェースとして、少なくとも、テーブル作成、テーブル削除、レコード登録およびレコード検索の４つのインタフェースを提供する。
【００５５】
テーブル作成時、クライアント装置２のユーザは、図１３（Ａ）に示すように、テーブル名、カラム数、カラム名およびカラムごとのデータ型を指定する。つまり、ストレージシステム１は、テーブル名、カラム数、カラム名およびカラムごとのデータ型をパラメータとするテーブル作成コマンド（たとえばCreateTable）を受け付ける。
【００５６】
テーブル削除時、クライアント装置２のユーザは、図１３（Ｂ）に示すように、テーブル名を指定する。つまり、ストレージシステム１は、テーブル名をパラメータとするテーブル削除コマンド（たとえばDropTable）を受け付ける。
【００５７】
レコード登録時、クライアント装置２のユーザは、図１３（Ｃ）に示すように、テーブル名およびカラムごとのデータを指定する。つまり、ストレージシステム１は、テーブル名およびカラムごとのデータをパラメータとするレコード登録コマンド（たとえばInsert）を受け付ける。
【００５８】
レコード検索時、クライアント装置２のユーザは、図１３（Ｄ）に示すように、テーブル名、照合対象カラムおよび検索条件を指定する。つまり、ストレージシステム１は、テーブル名、照合対象カラムおよび検索条件をパラメータとするレコード検索コマンド（たとえばSearch）を受け付ける。
【００５９】
次に、図１４および図１５を参照して、ストレージシステム１のレコード登録時の動作を説明する。 
図１３（Ｃ）に示すレコード登録コマンドが発行された場合、ストレージシステム１のＣＵ１０は、クライアント装置２から送られるレコード（各カラムのデータ）を、一旦キャッシュに保存する。以降、ＣＵ１０のキャッシュをＣＵキャッシュと称する。ＣＵキャッシュは、ＲＡＭ１２上に設けられる。そして、このキャッシングの際、ＣＵ１０は、各カラムのデータを以下のように保存する。これは、後述するチャンク（Chunk）を作成するために行うものである。チャンクは、複数のセクタで構成されるものであり、ＣＵ１０キャッシュは、チャンクのセクタと同一サイズのセクタの集合体として構成される。その数は、たとえば、チャンクのセクタと同数である。チャンクのセクタのサイズは、たとえば、ＮＡＮＤ型フラッシュメモリ２２の読み出し単位であるページと同一サイズである。
【００６０】
ＣＵ１０は、まず、レコードを、カラムごとに分割する。次に、ＣＵ１０は、その分割後の各カラムのデータを、図１４に示すように、同一セクタには同一カラムのデータのみが入るように（ＣＵキャッシュ上の）別セクタに保存する。
【００６１】
図１４には、３つのカラムのデータを含むレコードをＣＵキャッシュに保存するケースが示されている。より詳細には、まず、セクタ０〜セクタ２の３つに各カラムのデータを別々に保存していき、セクタ０〜セクタ２に空きがなくなった後、今度は、セクタ３〜セクタ５の３つに各カラムのデータを別々に保存していき、セクタ３〜セクタ５にも空きがなくなった後、さらに、セクタ６〜セクタ８の３つに各カラムのデータを別々に保存していく様子が示されている。なお、図１４には、各セクタに５つずつカラムのデータが保存されている例を示しているが、各セクタに保存されるカラムのデータの数はセクタ間で異なっていても構わない。換言すれば、カラム間で使用するセクタの数が異なっていても構わない。あるカラムのデータを保存するセクタに空きがなくなったら、そのカラムのデータを保存するセクタのみを新たに確保すればよく、カラム間で同期を取ってセクタの確保を行う必要はない。
【００６２】
たとえば、ＣＵキャッシュが一杯になった場合、ＣＵ１０は、チャンクを作成し、ＮＭ２０への書き込みを行う。図１５を参照して、チャンクの作成およびＮＭ２０への書き込みについて説明する。なお、チャンクの作成およびＮＭ２０への書き込みは、ＣＵキャッシュが一杯になった場合以外にも、たとえば、ＣＵキャッシュへ最初のデータを保存してから一定時間が経過した場合（最初のデータのキャッシュ時間が一定時間を超えた場合）や、ＣＵキャッシュへ最後のデータを保存してから一定時間が経過した場合（クライアント装置２からのレコードの書き込みが一定時間ない場合）など、様々なタイミングで行い得る。
【００６３】
前述したように、クライアント装置２がレコード登録を行うと（図１５（１））、ＣＵ１０は、そのレコードのデータをカラムごとに分割し、各カラムのデータを別々のセクタに保存する（図１５（２））。そして、ＣＵキャッシュが一杯になると、ＣＵ１０は、まず、チャンクの作成を行う（図１５（３））。
【００６４】
より詳細には、ＣＵ１０は、ＣＵキャッシュ内のセクタをカラム順にソートする。このソートの後、ＣＵ１０は、チャンク内の各セクタに関するメタデータを生成し、チャンクのたとえば先頭のセクタに格納する。メタデータについては後述する。
【００６５】
チャンクを作成すると、ＣＵ１０は、１チャンク分のデータの書き込みを、複数のＮＭ２０の中のいずれかのＮＭ２０に対して実行する（図１５（４））。複数のＮＭ２０の中からいずれかのＮＭ２０を選択する手法については、既知の様々な手法を適用し得る。
【００６６】
図１６は、ストレージシステム１のＮＭ２０上でのデータの保存形式の一例を示す図である。
【００６７】
図１６に示すように、ストレージシステム１は、チャンク単位でデータを保存する。チャンクは、複数のセクタで構成される。セクタには、メタデータセクタと、実データセクタとの２種類が存在する。メタデータセクタは、たとえば、各チャンクの先頭のセクタである。図１７に、メタデータの一例を示す。
【００６８】
図１７に示すように、メタデータは、データ型情報（図１７（Ａ））と、セクタ情報テーブル（図１７（Ｂ））とを含む。
【００６９】
データ型情報は、各カラムのデータ型に関する情報である。より詳細には、データ型情報は、固定長または可変長のいずれかであるのかを示し、かつ、固定長である場合、その長さを示す。
【００７０】
固定長データ型の場合、データ型情報でサイズが分かるので、実データセクタ内に、各データのサイズ情報を持つ必要がない。一方、可変長データ型の場合、実データセクタ内に、各データのサイズ情報が格納される。
【００７１】
また、セクタ情報テーブルは、セクタごとに、カラム番号、順番および要素数を保持するテーブルである。カラム番号は、各セクタがどのカラムのデータを保存しているのかを示す。順番は、同一のカラムを格納するセクタ間の順番を示す。要素数は、各セクタが保存するデータの数を示す。
【００７２】
このセクタ情報テーブルを参照することにより、チャンク内のｎ番目のレコードの各カラムのデータがどのセクタに保存されているのかが分かる。固定長データ型の場合、セクタ内のアドレスも分かる。たとえば、図１７に示すセクタ情報テーブルの場合、２０００番目のレコードのカラム２のデータは、セクタ３の９７６個目、つまり３９０１Byte〜３９０４Byteの位置に保存されていることが分かる。
【００７３】
なお、可変長データ型の場合、データが１セクタに収まらないこともあり得る。この場合、複数のセクタが使用されることになる。その場合、たとえば、セクタ情報テーブルの要素数フィールドを用いて、そのデータが保存される先頭のセクタの要素数を−１、２番目の要素数を−２などとして識別するようにしてもよい。
【００７４】
また、ＮＭ２０は、チャンクを管理するために、メモリ（ＲＡＭ２１２）上で、チャンク管理情報と、チャンク登録順リストを管理する。図１８は、チャンク管理情報の一例を示す図であり、図１９は、チャンク登録順リストの一例を示す図である。
【００７５】
チャンク管理情報は、図１８に示すように、各チャンク領域の有効・無効を示し、有効のチャンク領域については、そのチャンク領域が割り当てられているテーブルのテーブルＩＤを示す。チャンク領域は、ＮＭ２０上に確保されたチャンク用の領域である。
【００７６】
チャンク登録順リストは、図１９に示すように、テーブルごとに、チャンクの登録順番を保持する。
【００７７】
チャンク管理情報およびチャンク登録順リストを管理するＮＭ２０は、チャンクの書き込み時、チャンク管理情報により、無効なチャンク領域を検索する。ＮＭ２０は、検索されたチャンク領域にチャンクを書き込む。この時、ＮＭ２０は、そのチャンク領域を有効にし、かつ、テーブルＩＤを登録するために、チャンク管理情報を更新する。また、ＮＭ２０は、そのテーブルのチャンク登録順リストについて、有効にしたチャンク領域のチャンク番号を先頭に登録するための更新を実行する。
【００７８】
たとえば、あるテーブル内のレコードの検索が要求された場合、ＮＭ２０は、そのテーブルのチャンク登録順リストを参照することにより、検索対象とすべきチャンクを認識することができる。また、たとえば、チャンク登録順リストの先頭または末尾からチャンクを辿ることにより、新しいデータ順または古いデータ順に検索を行うこともできる。
【００７９】
また、テーブル削除時、ＮＭ２０は、チャンク管理情報内において削除対象のテーブルＩＤが割り当てられているチャンク領域を無効にし、かつ、そのテーブルのチャンク登録順リストを空にする。
【００８０】
ここで、図２０を参照して、ＮＭ２０のレコード検索時の動作について説明する。
【００８１】
ＮＭ２０は、チャンク登録順リストを辿りながら、各チャンクについて、次の動作を繰り返す。
【００８２】
ＮＭ２０は、各チャンクの先頭セクタからメタデータを読み出す（図２０（１））。次に、ＮＭ２０は、メタデータに基づき、照合対象カラムのデータが保存されたセクタからのデータの読み出しを実行する（図２０（２））。検索条件と合致するデータが検索された場合、ＮＭ２０は、メタデータに基づき、他のカラムのデータが保存されたセクタからのデータの読み出しを実行する（図２０（３））。
【００８３】
たとえば、図２０に示すチャンクの場合であって、カラム１が５のレコードを検索する場合、ＮＭ２０は、セクタ０からメタデータを読み出し、メタデータに基づき、カラム１を格納するセクタ１〜３からのデータの読み出しを実行する。ここでは、カラム１の５番目のデータが検索条件と合致するので、ＮＭ２０は、メタデータに基づき、カラム２の５番目のデータがどのセクタに格納されているのかを判定する。ここでは、セクタ５の１番目に格納されていると判定することになる。そこで、ＮＭ２０は、セクタ５からのデータの読み出しを実行する。なお、レコードの検索時には、ＣＵ１０も、ＣＵキャッシュ上のデータについて、検索条件と合致するデータの検索を実行する。
【００８４】
このように、このストレージシステム１は、データの保存形式を工夫することで、必要最小限のセクタの読み出しを行えばよく、ストレージシステム１のアクセス性能を向上させることができる。また、ＮＭ１０が並列に検索を実行することで、さらに、ストレージシステム１のアクセス性能を向上させることができる。
【００８５】
図２１は、ストレージシステム１（ＣＵ１０およびＮＭ２０）の機能ブロックの一例を示す図である。
【００８６】
図２１に示すように、ＣＵ１０は、クライアント通信部１０１、ＣＵ側内部通信部１０３、テーブル管理部１０５、ＣＵキャッシュ管理部１０６、検索処理部１０７、ＣＵキャッシュ検索実行部１０８、テーブルリスト１０９およびＣＵキャッシュ１１０を有している。ＮＭ２０は、ＮＭ側内部通信部２０１、コマンド実行部２０２、メモリ２０３、チャンク管理部２０４および検索実行部２０５を有している。ＣＵ１０の各機能部は、ＲＡＭ１２に格納され、ＣＰＵ１１によって実行されるプログラムにより実現される。ＮＭ２０の各機能部は、ＲＡＭ２１２に格納され、ＣＰＵ２１１によって実行されるプログラムにより実現される。なお、クライアント装置２は、インタフェース部５０１およびサーバ通信部５０２を有している。
【００８７】
クライアント装置２のインタフェース部５０１は、第１実施形態と同様、ユーザからのレコード（データ）の登録、取得、検索などの要求を受け付ける。また、ここでは、カラム型データベースが構築されることを想定しているので、インタフェース部５０１は、さらに、テーブルの作成、削除の要求を受け付ける。サーバ通信部５０２は、第１実施形態と同じであるので、その説明を省略する。
【００８８】
ＣＵ１０のクライアント通信部１０１およびＣＵ側内部通信部１０３は、第１実施形態と同じであるので、その説明を省略する。テーブル管理部１０５は、クライアント装置２からの要求により作成されたテーブルの情報、つまり、後述するテーブルリスト１０９を管理する。また、テーブル管理部１０５は、テーブルに関する処理（チャンク管理情報およびチャンク登録順リストに関する処理）を必要に応じてＮＭ２０に要求する。テーブルリスト１０９は、各テーブルの名前やカラムの情報を保持する。ＣＵキャッシュ管理部１０６は、ＣＵキャッシュ１１０へのデータの書き込みおよびＣＵキャッシュ１１０からのデータの読み出しを実行する。ＣＵキャッシュ管理部１０６は、たとえばＣＵキャッシュ１１０に一定量のデータが貯まった場合など、１チャンク分のデータのＮＭ２０への書き込みを実行する。
【００８９】
ＣＵキャッシュ１１０は、一定量のデータを一時的に保管する領域である。検索処理部１０７は、各ＮＭ２０に検索を要求する。また、検索処理部１０７は、各ＮＭ２０からの検索結果をマージし、最終的な結果（レコード）を作成する。ＣＵキャッシュ検索実行部１０８は、ＣＵキャッシュからレコードを読み、検索条件と照合し、検索条件と合致するレコードを取得する。
【００９０】
ＮＭ２０のＮＭ側内部通信部２０１、コマンド実行部２０２およびメモリ２０３は、第１実施形態と同じであるので、その説明を省略する。チャンク管理部２０４は、前述したチャンク管理情報およびチャンク登録順リストを管理する。検索実行部２０５は、メモリ２０３から照合対象カラムのデータを読み、検索条件と照合し、検索条件と合致するレコードを取得し、ＣＵ１０に返却する。
【００９１】
図２２は、ストレージシステム１のテーブル作成時におけるＣＵ１０のテーブル管理部１０５の動作手順を示すフローチャートである。
【００９２】
テーブル管理部１０５は、クライアント通信部１０１からテーブル作成要求を受信すると（ステップＣ１）、その要求されたテーブルのテーブル情報をテーブルリスト１０９に登録する（ステップＣ２）。また、テーブル管理部１０５は、ＣＵ側内部通信部１０３に対して、自ＣＵ１０を除く全ＣＵ１０へのテーブル情報登録要求の送信を要求する（ステップＣ３）。各ＣＵ１０では、テーブル管理部１０５により、テーブルリスト１０９へのテーブル情報の登録が行われる。
【００９３】
図２３は、ストレージシステム１のテーブル削除時におけるＣＵ１０のテーブル管理部１０５の動作手順を示すフローチャートである。
【００９４】
テーブル管理部１０５は、クライアント通信部１０１からテーブル削除要求を受信すると（ステップＤ１）、ＣＵ側内部通信部１０３に対して、自ＣＵ１０を除く全ＣＵ１０からのテーブル情報削除要求の送信を要求する（ステップＤ２）。各ＣＵ１０では、テーブル管理部１０５により、テーブルリスト１０９からのテーブルの情報の削除が行われる。
【００９５】
また、テーブル管理部１０５は、ＣＵ側内部通信部１０３に対して、全ＮＭ２０へのテーブル情報削除要求の送信を要求する（ステップＤ３）。各ＮＭ２０では、チャンク管理部２０４により、そのテーブルのチャンクが無効化され、かつ、そのテーブルのチャンク登録順リストが空となる。
【００９６】
そして、テーブル管理部１０５は、テーブルリスト１０９からテーブル情報を削除する（ステップＤ４）。
【００９７】
図２４は、ストレージシステム１のレコード登録時におけるＣＵ１０のＣＵキャッシュ管理部１０６の動作手順を示すフローチャートである。
【００９８】
ＣＵキャッシュ管理部１０６は、ＣＵキャッシュ１１０内に領域が割り当て済みか否かを判定する（ステップＥ１）。割り当て済みでない場合（ステップＥ１のＮＯ）、ＣＵキャッシュ管理部１０６は、ＣＵキャッシュ１１０内での領域の割り当てを行う（ステップＥ２）。
【００９９】
ＣＵキャッシュ管理部１０６は、登録するレコードが領域に書き込み可能なサイズか否かを判定する（ステップＥ３）。書き込み可能なサイズではない場合（ステップＥ３のＮＯ）、ＣＵキャッシュ管理部１０６は、登録済データからチャンクを作成し、作成したチャンクの書き込みをＣＵ側内部通信部１０３に要求する（ステップＥ４）。この書き込み完了後、ＣＵキャッシュ管理部１０６は、その領域を解放する。続いて、ＣＵキャッシュ管理部１０６は、ＣＵキャッシュ１１０内での新たな領域の割り当てを行う（ステップＥ５）。
【０１００】
そして、ＣＵキャッシュ管理部１０６は、ＣＵキャッシュ１１０に割り当てられた領域にデータを登録する（ステップＥ６）。
【０１０１】
図２５は、ストレージシステム１のレコード検索時におけるＣＵ１０の検索処理部１０７の動作手順を示すフローチャートである。
【０１０２】
検索処理部１０７は、クライアント通信部１０１からレコード検索要求を受信すると（ステップＦ１）、ＣＵ側内部通信部１０３に対して、複数ＮＭ２０への検索要求の送信を要求する（ステップＦ２）。検索処理部１０７は、ＣＵ側内部通信部１０３から１ＮＭ２０分ずつ検索結果を受信し（ステップＦ３）、全ＮＭ２０の検索結果を受信すると（ステップＦ４のＹＥＳ）、全ＮＭ２０の検索結果からクライアント装置２へ返送する検索結果を作成する（ステップＦ５）。検索処理部１０７は、作成した検索結果をクライアント通信部１０１に送信する（ステップＦ６）。この検索結果は、クライアント通信部１０１によりクライアント装置２に返送される。
【０１０３】
図２６は、ストレージシステム１のレコード検索時におけるＮＭ２０の検索実行部２０５の動作手順を示すフローチャートである。
【０１０４】
検索実行部２０５は、ＮＭ側内部通信部２０１から検索要求を受信すると（ステップＧ１）、チャンク登録順リストから先頭のチャンク情報を取得する（ステップＧ２）。続いて、検索実行部２０５は、メモリ２０３からチャンクのメタデータを取得する（ステップＧ３）。検索実行部２０５は、メタデータに基づき、メモリ２０３から照合対象カラムのセクタデータを取得し（ステップＧ４）、セクタ内の各データを順次検索条件と照合する（ステップＧ５）。
【０１０５】
検索条件と合致する場合（ステップＧ６のＹＥＳ）、検索実行部２０５は、メタデータに基づき、照合対象カラムのデータが検索条件と合致するレコードの他のカラムのデータをメモリ２０３から取得する（ステップＧ７）。検索実行部２０５は、この検索結果をメモリ２０３に格納する（ステップＧ８）。
【０１０６】
検索実行部２０５は、セクタ内の全データの照合が完了したか否かを判定し（ステップＧ９）、完了していない場合（ステップＧ９のＮＯ）、ステップＧ５に戻り、セクタ内の次のデータについて処理を行う。一方、完了している場合（ステップＧ９のＹＥＳ）、検索実行部２０５は、続いて、チャンク内の照合対象カラムを全て検索完了しているか否かを判定する（ステップＧ１０）。完了していない場合（ステップＧ１０のＮＯ）、検索実行部２０５は、ステップＧ４に戻り、チャンク内の次のセクタについて処理を行う。
【０１０７】
完了している場合（ステップＧ１０のＹＥＳ）、検索実行部２０５は、チャンク登録順リストから次のチャンク情報を取得する（ステップＧ１１）。次のチャンク情報が存在する場合（ステップＧ１２のＹＥＳ）、検索実行部２０５は、ステップＧ３に戻り、次のチャンクについて処理を行う。一方、次のチャンク情報が存在しない場合（ステップＧ１２のＮＯ）、検索実行部２０５は、メモリ２０３から全検索結果を読み出し（ステップＧ１３）、ＮＭ側内部通信部２０１に対して、要求元ＣＵ１０への検索結果の送信を要求する（ステップＧ１４）。
【０１０８】
図２７は、ストレージシステム１のチャンク書き込み時におけるＮＭ２０のチャンク管理部２０４の動作手順を示すフローチャートである。
【０１０９】
チャンク管理部２０４は、ＮＭ側内部通信部２０１からチャンク書き込み要求を受信すると（ステップＨ１）、空きチャンクを検索する（ステップＨ２）。空きチャンクが存在しない場合（ステップＨ３のＮＯ）、チャンク管理部２０４は、要求されたチャンク書き込みの処理をエラー終了する。
【０１１０】
空きチャンクが存在する場合（ステップＨ３のＹＥＳ）、チャンク管理部２０４は、そのチャンクへの書き込みを実行する（ステップＨ４）。チャンク管理部２０４は、そのチャンクのチャンク管理情報を有効に変更し、テーブルＩＤを登録するとともに、該当テーブルのチャンク登録順リストを更新する（ステップＨ５）。
【０１１１】
図２８は、ストレージシステム１のテーブル削除時におけるＮＭ２０のチャンク管理部２０４の動作手順を示すフローチャートである。
【０１１２】
チャンク管理部２０４は、ＮＭ側内部通信部２０１からテーブル削除通知を受信すると（ステップＪ１）、チャンク管理情報のうち、削除されたテーブルのテーブルＩＤを持つチャンクを全て無効に変更し、そのテーブルＩＤのチャンク登録順リストを空にする（ステップＪ２）
このように、このストレージシステム１は、第１に、各ＮＭ２０が、検索条件と合致するデータの検索を並列に実行し、第２に、データの保存形式を工夫することにより、アクセス性能を向上させることができる。
【０１１３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１４】
１…ストレージシステム、２…クライアント装置、１０…ＣＵ（Connection unit）、２０…ＮＭ（Node module）、２１…ＮＣ（Node controller）、２２…ＮＡＮＤ型フラッシュメモリ、１００１…ブレードユニット、１００２…ボードユニット。
【図１】
2018156594.tif 000003
【図２】
2018156594.tif 000004
【図３】
2018156594.tif 000005
【図４】
2018156594.tif 000006
【図５】
2018156594.tif 000007
【図６】
2018156594.tif 000008
【図７】
2018156594.tif 000009
【図８】
2018156594.tif 000010
【図９】
2018156594.tif 000011
【図１０】
2018156594.tif 000012
【図１１】
2018156594.tif 000013
【図１２】
2018156594.tif 000014
【図１３】
2018156594.tif 000015
【図１４】
2018156594.tif 000016
【図１５】
2018156594.tif 000017
【図１６】
2018156594.tif 000018
【図１７】
2018156594.tif 000019
【図１８】
2018156594.tif 000020
【図１９】
2018156594.tif 000021
【図２０】
2018156594.tif 000022
【図２１】
2018156594.tif 000023
【図２２】
2018156594.tif 000024
【図２３】
2018156594.tif 000025
【図２４】
2018156594.tif 000026
【図２５】
2018156594.tif 000027
【図２６】
2018156594.tif 000028
【図２７】
2018156594.tif 000029
【図２８】
2018156594.tif 000030