(57)【要約】【課題】データをミラーリングして格納する複数のサーバのいずれかから読み出し対象データを読み出す際の負荷の抑制を図ること。【解決手段】サーバ１０２−Ａ〜Ｃは、サーバ１０２−Ａ〜Ｃが有するハードディスクを所定のデータサイズで分割したブロックの記憶内容がサーバ１０２−Ａ〜Ｃの間で異なるように複数のデータをミラーリングして記憶する。記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃから読み出し対象データを読み出す際に、読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求をサーバ１０２−Ａ〜Ｃに送信する。送信要求を受信したサーバ１０２−Ａ〜Ｃは、ハードディスクにおける読み出し対象データが格納された格納位置に基づいて負荷情報を生成し、記憶制御装置１０１に送信する。記憶制御装置１０１は、受信した負荷情報に基づいて、サーバ１０２−Ａ〜Ｃから読み出し対象データを読み出すサーバを決定する。【選択図】図１
2016081194.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
各サーバが有する記憶領域を所定のデータサイズで分割したブロックの記憶内容が前記各サーバの間で異なるように複数のデータをミラーリングして記憶する複数のサーバから、前記複数のデータのうちの読み出し対象データを読み出す際に、前記読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を前記各サーバに送信し、
前記各サーバから受信した前記負荷情報に基づいて、前記複数のサーバから前記読み出し対象データを読み出すサーバを決定する、
処理を実行させることを特徴とする記憶情報抽出プログラム。
【請求項２】
前記読み出し対象データは、前記複数のデータのうちの２以上のデータを含み、
前記決定する処理は、
前記各サーバから受信した前記負荷情報として前記各サーバにおける前記読み出し対象データの各々が格納された格納位置を示すアドレス同士の差分に基づいて、前記複数のサーバから前記読み出し対象データを読み出すサーバを決定することを特徴とする請求項１に記載の記憶情報抽出プログラム。
【請求項３】
前記コンピュータに、
前記各サーバに前記複数のデータのいずれかのデータを書き込む際に、前記複数のサーバの数と、１から前記数までの各整数のうちの前記各サーバの間で重複しないように前記各サーバに割り振った整数と、前記所定のデータサイズとに基づいて前記いずれかのデータを書き込むブロックを決定する指示を前記各サーバに送信する、
処理を実行させることを特徴とする請求項１または２に記載の記憶情報抽出プログラム。
【請求項４】
複数のデータをミラーリングして記憶する複数のサーバの各サーバに、
前記各サーバが有する記憶領域を所定のデータサイズで分割したブロックの記憶内容が前記各サーバの間で異なるように記憶された前記複数のデータのうち、読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を受信し、
前記送信要求を受信した場合、前記負荷情報を生成し、
生成した前記負荷情報を前記送信要求の要求元に送信する、
処理を実行させることを特徴とする記憶情報抽出プログラム。
【請求項５】
前記生成する処理は、
前記送信要求を受信した場合、前記記憶領域における前記読み出し対象データが格納された格納位置に基づいて、前記負荷情報を生成することを特徴とする請求項４に記載の記憶情報抽出プログラム。
【請求項６】
前記読み出し対象データは、前記複数のデータのうちの２以上のデータを含み、
前記生成する処理は、
前記各サーバにおける前記読み出し対象データの各々が格納された格納位置を示すアドレス同士の差分を、前記負荷情報として生成することを特徴とする請求項４または５に記載の記憶情報抽出プログラム。
【請求項７】
前記各サーバに、
前記複数のサーバの数と、１から前記数までの各整数のうちの前記各サーバの間で重複しないように自サーバに割り振られた整数と、前記所定のデータサイズとに基づいて前記複数のデータのいずれかのデータを書き込むブロックを決定する指示を前記要求元から受信したことに応じて、前記数と前記整数とに基づいて、前記いずれかのデータを書き込むブロックを決定する、
処理を実行させることを特徴とする請求項４〜６のいずれか一つに記載の記憶情報抽出プログラム。
【請求項８】
前記複数のデータの各データは、所定の属性の値に対応付けられたデータであり、
前記各サーバに、
前記複数のデータのうちの前記記憶領域を分割したいずれかのブロックに属する２以上のデータを、前記２以上のデータの各々に対応付けられた前記所定の属性の値に従って並び替えて前記いずれかのブロックに書き込むことを特徴とする請求項４〜７のいずれか一つに記載の記憶情報抽出プログラム。
【請求項９】
各サーバが有する記憶領域を所定のデータサイズで分割したブロックの記憶内容が前記各サーバの間で異なるように複数のデータをミラーリングして記憶する複数のサーバから、前記複数のデータのうちの読み出し対象データを読み出す際に、前記読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を前記各サーバに送信し、
前記各サーバから受信した前記負荷情報に基づいて、前記複数のサーバから前記読み出し対象データを読み出すサーバを決定する、
制御部を有することを特徴とする記憶制御装置。
【請求項１０】
コンピュータが、
各サーバが有する記憶領域を所定のデータサイズで分割したブロックの記憶内容が前記各サーバの間で異なるように複数のデータをミラーリングして記憶する複数のサーバから、前記複数のデータのうちの読み出し対象データを読み出す際に、前記読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を前記各サーバに送信し、
前記各サーバから受信した前記負荷情報に基づいて、前記複数のサーバから前記読み出し対象データを読み出すサーバを決定する、
処理を実行することを特徴とする記憶情報抽出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶情報抽出プログラム、記憶制御装置、および記憶情報抽出方法に関する。
【背景技術】
【０００２】
従来、記憶領域に格納したデータの読み出しにかかる負荷を抑制する技術がある。関連する先行技術として、例えば、複数のディスク装置の最大シーク時間および最大回転時間に基づき設定された読み出しコマンドの処理時間の予測値に基づいて、処理時間が均等になるように複数のディスク装置に複数の読み出しコマンドを振り分ける技術がある。また、要求元からのコンテンツ配信要求を受け、配信サーバが配信したコンテンツの複製を保持するサーバと配信サーバから、要求されたコンテンツの異なる部分を並行して取得し、取得したコンテンツの各部分が連続するように要求元に中継する技術がある。また、分割データを分割した細分割データをディスク１に、細分割データの複製を互いに異なり原本とも異なるディスク２に記憶し、ディスク１を持つ機器とディスク２を持つ機器に各々の負荷状況を考慮し細分割データを用いる処理要求を割り振る技術がある。また、スライディング書き込みウィンドウの現在位置によって反映される間隔と同期を取り、書き込むべきデータがウィンドウの現行間隔に収まる場合のみ、このデータを送信する技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−２５８９０７号公報
【特許文献２】特開２００３−２８３５３８号公報
【特許文献３】特開２０００−３２２２９２号公報
【特許文献４】特開２０１２−１１３７０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、データをミラーリングして格納する複数のサーバのいずれかから読み出し対象データを読み出す際の負荷を抑制することが困難である。具体的には、例えば、各サーバが有する記憶領域を分割したブロックの記憶内容が各サーバの間で同一であると、どのサーバから読み出し対象データを読み出しても、各サーバにおける読み出しにかかる負荷が同一となる可能性が高くなる。このように、どのサーバから読み出し対象データを読み出しても読み出しにかかる負荷が同一であると、読み出しにかかる負荷が相対的に低いサーバがないために、複数のサーバのいずれかから読み出し対象データを読み出す際の負荷を抑制することが困難になる。
【０００５】
１つの側面では、本発明は、データをミラーリングして格納する複数のサーバのいずれかから読み出し対象データを読み出す際の負荷の抑制を図ることができる記憶情報抽出プログラム、記憶制御装置、および記憶情報抽出方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、各サーバが有する記憶領域を所定のデータサイズで分割したブロックの記憶内容が前記各サーバの間で異なるように複数のデータをミラーリングして記憶する複数のサーバから、複数のデータのうちの読み出し対象データを読み出す際に、読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を各サーバに送信し、各サーバから受信した負荷情報に基づいて、複数のサーバから読み出し対象データを読み出すサーバを決定する記憶情報抽出プログラム、記憶制御装置、および記憶情報抽出方法が提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、データをミラーリングして格納する複数のサーバのいずれかから読み出し対象データを読み出す際の負荷の抑制を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施の形態にかかる記憶制御装置１０１の動作例を示す説明図である。
【図２】図２は、ストレージシステム１００の詳細な例を示す説明図である。
【図３】図３は、記憶制御装置１０１のハードウェア構成例を示すブロック図である。
【図４】図４は、サーバ１０２のハードウェア構成例を示すブロック図である。
【図５】図５は、クライアント装置２０１のハードウェア構成例を示すブロック図である。
【図６】図６は、記憶制御装置１０１の機能構成例を示すブロック図である。
【図７】図７は、サーバ１０２の機能構成例を示すブロック図である。
【図８】図８は、書き込みリクエストの一例を示す説明図である。
【図９】図９は、ストリームデータ４１１の一例を示す説明図である。
【図１０】図１０は、検索リクエストの一例を示す説明図である。
【図１１】図１１は、書き込み処理時におけるフラッシュの動作例を示す説明図である。
【図１２】図１２は、書き込み処理時におけるソートの一例を示す説明図である。
【図１３】図１３は、イベントデータ管理情報７１１の一例を示す説明図である。
【図１４】図１４は、読み出し処理時の動作例を示す説明図である。
【図１５】図１５は、初期化処理手順の一例を示すフローチャートである。
【図１６】図１６は、書き込み処理手順の一例を示すフローチャートである。
【図１７】図１７は、読み出し処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に図面を参照して、開示の記憶情報抽出プログラム、記憶制御装置、および記憶情報抽出方法の実施の形態を詳細に説明する。
【００１０】
図１は、本実施の形態にかかる記憶制御装置１０１の動作例を示す説明図である。ストレージシステム１００に含まれる記憶制御装置１０１は、記憶制御装置１０１に接続する複数のサーバ１０２の記憶内容を制御するコンピュータである。図１では、複数のサーバ１０２として、サーバ１０２−Ａ〜Ｃという３台のサーバがある。サーバ１０２−Ａ〜Ｃは、信頼性を確保するため、複数のデータをミラーリングして記憶する。ミラーリングとは、複数の記憶領域で原本と原本の複製とを記憶することである。複数のデータはどのようなデータでもよい。例えば、複数のデータは、時系列に沿ったデータであるストリームデータであってもよい。また、複数のデータの各データは、それぞれ同一のデータサイズでもよいし、異なるデータサイズでもよい。
【００１１】
また、サーバ１０２−Ａ〜Ｃにおいて、複数のデータを記憶する記憶領域は、どのようなものでもよく、例えば、ハードディスク、半導体メモリ、磁気テープストレージである。本実施の形態では、複数のデータを記憶する記憶領域は、ハードディスクであるとする。
【００１２】
本実施の形態では、複数のデータを、ストリームデータであるとする。また、データは、イベントデータとする。ここで、イベントデータとは、何らかの事象が発生したことを示すデータである。例えば、ストリームデータが、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）を流れるパケットをキャプチャしたものであり、１つ１つのパケットが、イベントデータである。例えば、あるイベントデータは、ある時刻に、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）パケットが流れたことを示すデータである。
【００１３】
ここで、データをミラーリングして格納する複数のサーバのいずれかから読み出し対象データを読み出す際の負荷を抑制することが困難である。具体的には、例えば、各サーバが有する記憶領域を分割したブロックの記憶内容が各サーバの間で同一であると、どのサーバから読み出し対象データを読み出しても、各サーバにおける読み出しにかかる負荷が同一となる可能性が高くなる。このように、どのサーバから読み出し対象データを読み出しても読み出しにかかる負荷が同一であると、読み出しにかかる負荷が相対的に低いサーバがないために、複数のサーバのいずれかから読み出し対象データを読み出す際の負荷を抑制することが困難になる。
【００１４】
また、ハードディスクの構造上、ハードディスクに対して書き込みアクセスを行っている間に、同一のハードディスクに対して読み出しアクセスが行われると、ヘッドの大幅な移動が発生し、書き込み性能が大幅に低下することになる。この場合、書き込みが多いシステムでは特に問題となる。ここで、サーバにおける読み出しにかかる負荷は、例えば、読み出しにかかる時間である。また、複数のデータを記憶する記憶領域が、ハードディスクであれば、ヘッドの移動量であってもよい。
【００１５】
ストレージシステム１００における読み出しの負荷を抑制するために、サーバがイベントデータを書き込む際に、イベントデータを受信した順次にハードディスクに書き込むのではなく、イベントデータを一時的にサーバのバッファに格納する。そして、サーバは、バッファがいっぱいになったら、イベントデータを所定のメタデータによりソート（並び替え）してからハードディスクに書き込む。バッファのデータを記憶領域に書き込むことを、以降、「フラッシュ」と呼称する。所定のメタデータについては、図１２で後述する。一般的に、時間的に連続する全てのイベントデータが読み出されることは少なく、ある時間内で同一、または連続するメタデータの値を持つイベントデータが読み出されることが多い。よって、イベントデータを検索頻度の高いメタデータによりソートすることで、サーバにおける読み出し対象となるイベントデータの読み出しにかかる負荷を抑制することができる。
【００１６】
しかしながら、フラッシュをまたぐタイミングで受信した２つのイベントデータが読み出し対象となる場合、時間的に連続していて、かつ、同一のメタデータの値をもっていたとしても、ハードディスク内の離れた位置に書き込まれることになる。
【００１７】
そこで、記憶制御装置１０１は、ブロックの記憶内容が異なるようにミラーリングして記憶する各サーバにおけるデータの読出にかかる負荷から読み出し先のサーバを決定する。これにより、ブロックの記憶内容が異なるため、負荷に優劣がつくため、負荷が小さいサーバからデータを読み出すことができて、データをミラーリングして格納する複数のサーバのいずれかから読み出し対象データを読み出す際の負荷の抑制を図ることができる。
【００１８】
具体的な動作を、図１を用いて説明する。図１の（ａ）において、サーバ１０２−Ａ〜Ｃは、複数のデータをミラーリングして記憶する。さらに、サーバ１０２−Ａ〜Ｃは、サーバ１０２−Ａ〜Ｃが有するハードディスクを所定のデータサイズで分割したブロックの記憶内容がサーバ１０２−Ａ〜Ｃの間で異なるように複数のデータを記憶する。ここで、所定のデータサイズとは、バッファのデータサイズとなる。バッファのデータサイズは、例えば、ハードディスクのアクセス単位の整数倍であることが好ましい。図１の例では、バッファのデータサイズは、イベントデータ３つ分のサイズであるとする。
【００１９】
図１の（ａ）では、サーバ１０２−Ａは、イベントデータ１をブロックｂＡ−１に記憶し、イベントデータ２〜４をブロックｂＡ−２に記憶し、イベントデータ５〜７をブロックｂＡ−３に記憶する。また、サーバ１０２−Ｂは、イベントデータ１、２をブロックｂＢ−１に記憶し、イベントデータ３〜５をブロックｂＢ−２に記憶し、イベントデータ６、７、…をブロックｂＢ−３に記憶する。また、サーバ１０２−Ｃは、イベントデータ１〜３をブロックｂＣ−１に記憶し、イベントデータ４〜６をブロックｂＣ−２に記憶し、イベントデータ７、…をブロックｂＣ−３に記憶する。
【００２０】
このように、ブロックの記憶内容がサーバ１０２−Ａ〜Ｃの間で異なるように記憶する方法として、例えば、サーバ１０２−Ａ〜Ｃが、リアルタイムでイベントデータを受信する場合、例えば、フラッシュのタイミングをサーバ１０２−Ａ〜Ｃの間で変えればよい。具体的には、初回のフラッシュのタイミングを、サーバ１０２−Ａはバッファのデータ量が１／３に達した時とし、サーバ１０２−Ｂはバッファのデータ量が２／３に達した時とし、サーバ１０２−Ｃはバッファのデータ量がいっぱいになった時とする。より詳細な例については、図１１で説明する。
【００２１】
記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃから読み出し対象データを読み出す際に、読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求をサーバ１０２−Ａ〜Ｃに送信する。図１の（ａ）の例では、記憶制御装置１０１は、読み出し対象データとして、イベントデータ３、４の読み出しにかかる負荷の度合いを表す負荷情報の送信要求をサーバ１０２−Ａ〜Ｃに送信する。
【００２２】
次に、図１の（ｂ）において、サーバ１０２−Ａ〜Ｃは、負荷情報の送信要求を受信した場合、ハードディスクにおける読み出し対象データが格納された格納位置に基づいて、負荷情報を生成する。格納位置とする情報は、記憶領域のアドレスでもよいしブロックでもよい。
【００２３】
例えば、サーバ１０２−Ａ〜Ｃは、イベントデータ３、４の読み出しにかかるハードディスクのヘッドの移動量を負荷情報として生成する。サーバ１０２−Ａ、Ｂは、イベントデータ３、４が同一のブロックに格納されているため、ヘッドの移動量が小さくなる。これに対し、サーバ１０２−Ｃは、イベントデータ３、４が異なるブロックに格納されているため、ヘッドの移動量が大きくなる。異なるブロックに格納されるとヘッドの移動量が大きくなる理由として、異なるブロックは、ハードディスク内の離れた箇所に配置される可能性があるためである。また、前述したソートを行う場合、異なるブロックが連続した箇所に配置されたとしても、ソートした結果、イベントデータ３、４が離れてしまう可能性がある。
【００２４】
サーバ１０２−Ａ〜Ｃは、負荷情報を生成した後、記憶制御装置１０１に負荷情報を送信する。記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃから受信した負荷情報に基づいて、サーバ１０２−Ａ〜Ｃから読み出し対象データを読み出すサーバを決定する。図１の（ｂ）の例では、記憶制御装置１０１は、負荷情報が小さくなったサーバ１０２−Ａ、Ｂのいずれかからイベントデータ３、４を読み出す。
【００２５】
また、図１の例では、読み出し対象データが２つの例を示したが、読み出し対象データは、３つ以上でもよいし、１つでもよい。読み出し対象データが１つであったとしても、ブロックの記憶内容がサーバ１０２−Ａ〜Ｃで異なるため、読み出し対象となる、あるイベントデータが、あるサーバでは１つのブロックに収まり、別のサーバでは２つのブロックに分断されることが起こり得る。具体的には、あるイベントデータのデータサイズが通常より大きなものとなった場合に２つのブロックに分断されることが起こりやすい。この場合、サーバ１０２−Ａ〜Ｃから受信した負荷情報は異なるものとなるため、記憶制御装置１０１は、負荷情報が最も小さいサーバを、あるイベントデータを読み出すサーバとして決定することで、ストレージシステム１００の負荷を抑制することができる。次に、図２を用いて、ストレージシステム１００の詳細な例について説明する。
【００２６】
図２は、ストレージシステム１００の詳細な例を示す説明図である。ストレージシステム１００は、クライアント装置２０１と、記憶制御装置１０１と、サーバ１０２−Ａ〜Ｃとを有する。クライアント装置２０１と、記憶制御装置１０１とは、ネットワーク２１１により接続される。また、記憶制御装置１０１と、サーバ１０２−Ａ〜Ｃとは、ネットワーク２１２により接続される。
【００２７】
クライアント装置２０１は、ストレージシステム１００の利用者等の操作により、記憶制御装置１０１に対して、書き込みリクエスト、検索リクエスト、読み出しリクエストを送信するコンピュータである。以下に、書き込みリクエスト、検索リクエスト、読み出しリクエストを送信する際の動作について説明する。
【００２８】
書き込みリクエストについて、クライアント装置２０１は、受信したストリームデータからイベントデータを形成し、イベントデータを一意に識別するイベントデータＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）を付与したイベントデータを含む書き込みリクエストを記憶制御装置１０１に送信する。書き込みリクエストの具体例については、図８で説明する。また、書き込みリクエストを受信した記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃに書き込みリクエストを転送する。書き込みリクエストを受信したサーバ１０２は、書き込み処理を実行する。書き込み処理については、図１１、図１２で説明する。
【００２９】
検索リクエストについて、クライアント装置２０１は、ストレージシステム１００の利用者等によって指定された検索条件を含む検索リクエストを記憶制御装置１０１に送信する。検索リクエストの具体例については、図１０で説明する。
【００３０】
読み出しリクエストについて、クライアント装置２０１は、検索リクエストの検索結果で得たイベントデータＩＤの一部、または全部を読み出し対象とする読み出しリクエストを、記憶制御装置１０１に送信する。読み出しリクエストは、読み出し対象となるイベントデータＩＤを含むだけであるため、特に図示しない。読み出しリクエストを受信した記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃと協働して読み出し処理を行う。読み出し処理については、図１４で説明する。
【００３１】
記憶制御装置１０１は、クライアント装置２０１からの書き込みリクエスト、検索リクエスト、読み出しリクエストを受け付けて処理するプロキシサーバである。次に、図３〜５を用いて、記憶制御装置１０１、サーバ１０２、クライアント装置２０１のハードウェア構成について説明する。
【００３２】
図３は、記憶制御装置１０１のハードウェア構成例を示すブロック図である。図３において、記憶制御装置１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、を含む。また、記憶制御装置１０１は、ディスクドライブ３０４およびディスク３０５と、通信インターフェース３０６と、を含む。また、ＣＰＵ３０１〜ディスクドライブ３０４、通信インターフェース３０６はバス３０７によってそれぞれ接続される。
【００３３】
ＣＰＵ３０１は、記憶制御装置１０１の全体の制御を司る演算処理装置である。ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される揮発性メモリである。
【００３４】
ディスクドライブ３０４は、ＣＰＵ３０１の制御に従ってディスク３０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ３０４には、例えば、磁気ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク３０５は、ディスクドライブ３０４の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ３０４が磁気ディスクドライブである場合、ディスク３０５には、磁気ディスクを採用することができる。また、ディスクドライブ３０４がソリッドステートドライブである場合、ディスク３０５には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００３５】
通信インターフェース３０６は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース３０６は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース３０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００３６】
また、ストレージシステム１００の管理者が、記憶制御装置１０１を直接操作する場合、記憶制御装置１０１は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。
【００３７】
図４は、サーバ１０２のハードウェア構成例を示すブロック図である。図４では、サーバ１０２の例として、サーバ１０２−Ａのハードウェア構成を示す。サーバ１０２−Ｂ、Ｃも、サーバ１０２−Ａと同様のハードウェア構成を有する。図４において、サーバ１０２は、ＣＰＵ４０１と、ＲＯＭ４０２と、ＲＡＭ４０３と、を含む。また、サーバ１０２は、ハードディスクドライブ４０４およびハードディスク４０５と、通信インターフェース４０６と、を含む。また、ＣＰＵ４０１〜ハードディスクドライブ４０４、通信インターフェース４０６はバス４０７によってそれぞれ接続される。
【００３８】
ＣＰＵ４０１は、サーバ１０２の全体の制御を司る演算処理装置である。ＲＯＭ４０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ４０３は、ＣＰＵ４０１のワークエリアとして使用される揮発性メモリである。
【００３９】
ハードディスクドライブ４０４は、ＣＰＵ４０１の制御に従ってハードディスク４０５に対するデータのリードおよびライトを制御する制御装置である。ハードディスク４０５は、ハードディスクドライブ４０４の制御で書き込まれたデータを記憶する記憶媒体である。また、サーバ１０２は、ハードディスクドライブ４０４、ハードディスク４０５の代わりに、ソリッドステートドライブ、半導体素子によって形成された半導体メモリを有してもよい。ハードディスク４０５は、ストリームデータ４１１を記憶する。
【００４０】
通信インターフェース４０６は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース４０６は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース４０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００４１】
また、ストレージシステム１００の管理者が、サーバ１０２を直接操作する場合、サーバ１０２は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。
【００４２】
また、図１等で示したサーバのバッファは、ＲＡＭ４０３でもよいし、ハードディスクドライブ４０４のハードディスク４０５とは異なる記憶領域でもよい。
【００４３】
図５は、クライアント装置２０１のハードウェア構成例を示すブロック図である。クライアント装置２０１は、ＣＰＵ５０１と、ＲＯＭ５０２と、ＲＡＭ５０３と、を含む。また、クライアント装置２０１は、ディスクドライブ５０４と、ディスク５０５と、通信インターフェース５０６と、を含む。また、クライアント装置２０１は、ディスプレイ５０７と、キーボード５０８と、マウス５０９とを含む。また、ＣＰＵ５０１〜ディスクドライブ５０４と、通信インターフェース５０６〜マウス５０９とは、バス５１０によってそれぞれ接続される。
【００４４】
ＣＰＵ５０１は、クライアント装置２０１の全体の制御を司る演算処理装置である。ＲＯＭ５０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ５０３は、ＣＰＵ５０１のワークエリアとして使用される揮発性メモリである。
【００４５】
ディスクドライブ５０４は、ＣＰＵ５０１の制御に従ってディスク５０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ５０４には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク５０５は、ディスクドライブ５０４の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ５０４が磁気ディスクドライブである場合、ディスク５０５には、磁気ディスクを採用することができる。また、ディスクドライブ５０４が光ディスクドライブである場合、ディスク５０５には、光ディスクを採用することができる。また、ディスクドライブ５０４がソリッドステートドライブである場合、ディスク５０５には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００４６】
通信インターフェース５０６は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース５０６は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース５０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００４７】
ディスプレイ５０７は、マウスカーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイ５０７には、例えば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００４８】
キーボード５０８は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。また、キーボード５０８は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス５０９は、マウスカーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。マウス５０９は、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。次に、図６、７を用いて、記憶制御装置１０１、サーバ１０２の機能構成を説明する。
【００４９】
図６は、記憶制御装置１０１の機能構成例を示すブロック図である。記憶制御装置１０１は、制御部６００を有する。制御部６００は、第１の送信部６０１と、第２の送信部６０２と、決定部６０３と、を含む。制御部６００は、記憶装置に記憶されたプログラムをＣＰＵ３０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、ディスク３０５などである。また、各部の処理結果は、ＣＰＵ３０１のレジスタや、ＣＰＵ３０１のキャッシュメモリ等に格納される。
【００５０】
第１の送信部６０１は、サーバ１０２−Ａ〜Ｃにストリームデータ４１１のいずれかのデータを書き込む際に、いずれかのデータを書き込むブロックを決定する指示をサーバ１０２−Ａ〜Ｃに送信する。具体的な処理内容については、図１１、図１５で説明する。
【００５１】
第２の送信部６０２は、ストリームデータ４１１のうちの読み出し対象データを読み出す際に、読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求をサーバ１０２−Ａ〜Ｃに送信する。負荷情報は、前述したように、ヘッドの移動量でもよいし、ストリームデータを記憶する記憶領域が半導体ディスクであれば、読み出しにかかるブロックの個数でもよい。また、負荷情報は、読み出しにかかる時間でもよい。時間の算出方法としては、例えば、サーバ１０２−Ａ〜Ｃは、予め記憶しておいた所定のデータサイズの読み出しにかかる時間についての情報を参照して、読み出しにかかる時間を算出する。または、負荷情報は、ストリームデータを記憶する記憶領域が磁気テープストレージであればテープを移動する長さでもよい。
【００５２】
決定部６０３は、サーバ１０２−Ａ〜Ｃから受信した負荷情報に基づいて、サーバ１０２−Ａ〜Ｃから読み出し対象データを読み出すサーバを決定する。例えば、負荷情報がヘッドの移動量である場合、決定部６０３は、ヘッドの移動量が最も小さいサーバを、読み出し対象データを読み出すサーバとして決定する。また、例えば、負荷情報が読み出しにかかるブロックの個数であれば、決定部６０３は、読み出しにかかるブロックの個数が最も少ないサーバを、読み出し対象データを読み出すサーバとして決定する。
【００５３】
また、読み出し対象データが、ストリームデータ４１１のうちの２以上のデータを含むものとする。この際、決定部６０３は、負荷情報としてサーバ１０２−Ａ〜Ｃにおける読み出し対象データの各々が格納された格納位置を示すアドレス同士の差分に基づいて、サーバ１０２−Ａ〜Ｃから読み出し対象データを読み出すサーバを決定する。
【００５４】
図７は、サーバ１０２の機能構成例を示すブロック図である。図７では、サーバ１０２−Ａの機能構成について説明する。図示はしないが、サーバ１０２−Ｂ、Ｃも、サーバ１０２−Ａと同一の機能を有する。サーバ１０２は、制御部７００を有する。制御部７００は、決定部７０１と、書込部７０２と、受信部７０３と、生成部７０４と、送信部７０５を含む。制御部７００は、記憶装置に記憶されたプログラムをＣＰＵ４０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、ハードディスク４０５などである。また、各部の処理結果は、ＣＰＵ４０１のレジスタや、ＣＰＵ４０１のキャッシュメモリ等に格納される。また、制御部７００は、ハードディスクドライブ４０４が有する機能であってもよい。
【００５５】
また、サーバ１０２−Ａは、イベントデータ管理情報７１１−Ａにアクセス可能である。イベントデータ管理情報７１１は、ＲＡＭ４０３といった記憶装置に格納されている。イベントデータ管理情報７１１の記憶内容の一例については、図１３で後述する。
【００５６】
決定部７０１は、ストリームデータ４１１のいずれかのデータを書き込むブロックを決定する指示を記憶制御装置１０１から受信したことに応じて、複数のサーバの数とサーバ１０２−Ａ〜Ｃに割り振った整数とに基づいて、いずれかのデータを書き込むブロックを決定する。ここで、指示は、図６における第１の送信部６０１で記載したものである。
【００５７】
また、ストリームデータ４１１の各データが、所定のメタデータの値に対応付けられたデータであるとする。このとき、書込部７０２は、ストリームデータ４１１のうちの記憶領域を分割したいずれかのブロックに属する２以上のデータを、２以上のデータの各々に対応付けられた所定の属性の値に従ってソートして（並び替えて）いずれかのブロックに書き込む。
【００５８】
受信部７０３は、ストリームデータ４１１のうち、読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を受信する。
【００５９】
生成部７０４は、送信要求を受信した場合、例えば、記憶領域における読み出し対象データが格納された格納位置に基づいて、負荷情報を生成する。格納位置とする情報は、記憶領域のアドレスでもよいしブロックでもよい。また、生成部７０４は、サーバ１０２−Ａ〜Ｃにおける読み出し対象データの各々が格納された格納位置を示すアドレス同士の差分を、負荷情報として生成してもよい。送信部７０５は、生成した負荷情報を送信要求の要求元に送信する。
【００６０】
図８は、書き込みリクエストの一例を示す説明図である。書き込みリクエストは、図８に示すように、イベントデータＩＤと、メタデータと、イベントデータと、という３つのデータで形成される。イベントデータＩＤは、クライアント装置２０１が付与したものであり、イベントデータを識別する値である。メタデータは、イベントデータに付随する属性である。イベントデータは、何らかの事象が発生したことを示すデータである。
【００６１】
例えば、図８の例では、書き込みリクエスト８０１は、イベントデータＩＤが１であり、送信元ＩＰアドレスが、「１９２．１６８．０．１」であり、送信先ＩＰアドレスが、「１９２．１６８．０．２」であり、プロトコルが「ＴＣＰ」であることを示す。また、書き込みリクエスト８０１は、イベントデータが、「２０１３／０９／３０／１２：００」に送信開始したことを示す。
【００６２】
図９は、ストリームデータ４１１の一例を示す説明図である。図９では、書き込みリクエストによりサーバ１０２−Ａ〜Ｃに書き込まれたストリームデータ４１１の一例を示す。ストリームデータ４１１の一部である、あるタイミングを始点として１番目に記憶制御装置１０１に到達したイベントデータは、イベントデータＩＤが１であるイベントデータ９０１−１である。イベントデータ９０１−１は、送信元ＩＰアドレスが「１９２．１６８．０．３」であるイベントデータである。以下、ストリームデータ４１１の一部である、あるタイミングを始点として２〜８番目に記憶制御装置１０１に到達したイベントデータは、それぞれ、イベントデータＩＤが２〜８であるイベントデータ９０１−２〜８である。
【００６３】
ここで、イベントデータ９０１−４、５は、送信元ＩＰアドレスが「１９２．１６８．０．１」であるイベントデータである。また、イベントデータ９０１−２、８は、送信元ＩＰアドレスが「１９２．１６８．０．２」であるイベントデータである。また、イベントデータ９０１−１、６、７は、送信元ＩＰアドレスが「１９２．１６８．０．３」であるイベントデータである。また、イベントデータ９０１−３は、送信元ＩＰアドレスが「１９２．１６８．０．４」であるイベントデータである。
【００６４】
図１０は、検索リクエストの一例を示す説明図である。図１０では、図９で示したストリームデータが到達した後に、記憶制御装置１０１がクライアント装置２０１から受信した検索リクエスト１００１を示す。記憶制御装置１０１は、検索リクエスト１００１を、サーバ１０２−Ａ〜Ｃのいずれかに送信する。
【００６５】
検索リクエストは、検索条件を含む。検索条件は、メタデータの値を指定したものである。具体的には、例えば、検索条件は、送信元ＩＰアドレス、送信先ＩＰアドレス、プロトコル、開始時刻のうちのいずれかの値を指定したものである。
【００６６】
図１０の例では、検索リクエスト１００１は、送信元ＩＰアドレスが「１９２．１６８．０．１」であり、開始時刻が「２０１３／０９／３０／１２：００−２０１３／０９／３０／１３：００」の範囲にあるイベントデータを検索するリクエストである。また、検索リクエスト１００１が示す「＊」は、ワイルドカードを意味する。
【００６７】
図１１は、書き込み処理時におけるフラッシュの動作例を示す説明図である。図１１では、書き込み処理の一部として、サーバ１０２が、記憶制御装置１０１からの書き込みリクエストによるイベントデータを書き込む際のフラッシュの動作例について説明する。
【００６８】
ストリームデータ４１１の一部であるイベントデータの書き込みリクエストを受信すると、サーバ１０２−Ａ〜Ｃは、サーバ１０２−Ａ〜Ｃそれぞれのバッファに格納する。そして、サーバ１０２−Ａ〜Ｃは、初回のフラッシュを行うタイミングを、下記（１）式が真であるときに行う。
【００６９】
バッファ内のデータ量≧Ｓ＊ｉ／Ｎ  …（１）
【００７０】
ただし、Ｓは、バッファの記憶容量を示す。また、ｉは、サーバ１０２−Ａ〜Ｃのそれぞれで値が異なるように付与された値であり、本実施の形態では、サーバ１０２−Ａが１、サーバ１０２−Ｂが２、サーバ１０２−Ｃが３であるとする。ｉの値は、ストレージシステム１００の初期化時に記憶制御装置１０１によって設定される。また、Ｎは、サーバ１０２の台数である。本実施の形態ではＮ＝３となる。Ｎとｉを送信することが、Ｎとｉとブロックのデータサイズとに基づいて、ストリームデータ４１１の各イベントデータを、どのブロックに書き込むかを決定する指示となる。
【００７１】
例えば、図１１の例では、時刻ｔ１において、サーバ１０２−Ａは、サーバ１０２−Ａのバッファ内のデータ量がＳ／３となり、（１）式が真となるためフラッシュを行う。一方、時刻ｔ１において、サーバ１０２−Ｂ、Ｃは、（１）式が偽となるため、フラッシュを行わない。サーバ１０２−Ｂは、サーバ１０２−Ｂのバッファ内のデータ量が２＊Ｓ／３となる時刻ｔ２において（１）式が真となり、フラッシュを行う。また、サーバ１０２−Ｃは、サーバ１０２−Ｃのバッファ内のデータ量がＳとなる時刻ｔ３において（１）式が真となり、フラッシュを行う。２回目以降のフラッシュを行うタイミングについては、サーバ１０２−Ａ〜Ｃは、バッファ内のデータ量がＳとなった際に行う。
【００７２】
次に、サーバ１０２−Ａ〜Ｃは、図９で示したイベントデータ９０１−４、５を順次受信する。サーバ１０２−Ａは、イベントデータ９０１−４を受信した際に時刻ｔ４において、フラッシュを行う。従って、サーバ１０２−Ａは、イベントデータ９０１−４と、イベントデータ９０１−５とを異なるブロックに書き込むことになる。一方、サーバ１０２−Ｂ、Ｃは、時刻ｔ４においてフラッシュを行わないため、イベントデータ９０１−４と、イベントデータ９０１−５とを同一のブロックに書き込むことになる。ここで、実際にブロックに書き込む際には、ソートして書き込むことになる。ソートの一例は、図１２で説明する。
【００７３】
図１１で示すように、サーバ１０２−Ａは、時間的に連続かつ、同一のメタデータの値を持つ、イベントデータ９０１−４、５をハードディスク４０５内の離れた位置に格納する。これに対し、サーバ１０２−Ｂ、Ｃは、イベントデータ９０１−４、５をハードディスク４０５内の近接した位置に格納する。
【００７４】
図１２は、書き込み処理時におけるソートの一例を示す説明図である。図１２では、サーバ１０２−Ｂが、イベントデータ９０１−１〜５を書き込む際に行うソートを用いて、書き込み処理時におけるソートの例を説明する。
【００７５】
サーバ１０２は、ある期間に受信したイベントデータを、特定のメタデータによりソートしてから、ハードディスク４０５に書き込む。特定のメタデータは、ストレージシステム１００の管理者により予め設定される。具体的には、ストレージシステム１００の管理者は、複数のメタデータ属性のうち検索リクエストで最も指定されることが多いであろうメタデータ属性を指定しておく。図１２の例では、サーバ１０２−Ｂは、バッファに格納されたイベントデータ９０１−１〜５を、送信元ＩＰアドレスでソートする。ソートした結果、サーバ１０２−Ｂは、イベントデータ９０１−４、５、２、１、３の順に並び替えて、サーバ１０２−Ｂのハードディスク４０５に書き込む。次に、図１３で、イベントデータ９０１−１〜８が書き込まれた後の例を用いて、イベントデータ管理情報の説明を行う。
【００７６】
図１３は、イベントデータ管理情報７１１の一例を示す説明図である。図１３では、図９で示したストリームデータ４１１をサーバ１０２−Ａ〜Ｃが受け取り、図１１、図１２で示した書き込み処理時のフラッシュおよびソートを行って記憶した状態におけるイベントデータ管理情報７１１を示す。図１３の例では、イベントデータ管理情報７１１−Ａは、レコード１３０１−Ａ−１、２を有する。また、イベントデータ管理情報７１１−Ｂは、レコード１３０１−Ｂ−１、２を有する。同様に、イベントデータ管理情報７１１−Ｃは、レコード１３０１−Ｃ−１、２を有する。
【００７７】
イベントデータ管理情報７１１は、イベントデータＩＤと、開始アドレスと、データサイズというフィールドを含む。イベントデータＩＤフィールドには、受信したイベントデータのイベントデータＩＤが格納される。開始アドレスフィールドには、受信したイベントデータを書き込んだアドレスが格納される。データサイズフィールドには、受信したイベントデータとメタデータとの合計のデータサイズが格納される。なお、図１３の例では、サーバ１０２−Ａ〜Ｃが、イベントデータとメタデータとを連続領域に書き込むものとする。
【００７８】
例えば、図１３の例では、サーバ１０２−Ａは、レコード１３０１−Ａ−１、２が示すように、イベントデータ９０１−４とイベントデータ９０１−５とが異なるブロックに格納されたため、開始アドレスが大きく離れた値となる。これに対し、サーバ１０２−Ｂ、Ｃは、レコード１３０１−Ｂ−１、２、レコード１３０１−Ｃ−１、２が示すように、イベントデータ９０１−４とイベントデータ９０１−５とが同一のブロックに格納されたため、開始アドレスが近い値となる。次に、図１０で示した検索リクエスト１００１によりイベントデータＩＤ＝４、５となるイベントデータ９０１−４、５が検出され、イベントデータ９０１−４、５の読み出し時の動作例を、図１４を用いて説明する。
【００７９】
図１４は、読み出し処理時の動作例を示す説明図である。読み出し処理として、記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃのそれぞれに、読み出し対象データの読み出しにかかる負荷情報の送信要求を送信する。負荷情報の送信要求を受信したサーバ１０２−Ａ〜Ｃは、イベントデータ管理情報７１１を参照して、負荷情報を生成する。そして、記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃからの負荷情報に基づいて、読み出し対象データを読み出すサーバを決定する。図１４の例では、読み出し対象データとして、記憶制御装置１０１は、イベントデータ９０１−４、５の読み出しにかかる負荷情報の送信要求をサーバ１０２−Ａ〜Ｃに送信する。
【００８０】
負荷情報としては、例えば、読み出し対象となるイベントデータを読み出す際のヘッドの移動量とすることが考えられる。この場合、サーバ１０２−Ａ〜Ｃは、読み出し対象となるイベントデータのうちの開始アドレスが最小のイベントデータの開始アドレスと、開始アドレスが最大のイベントデータの開始アドレスとの差を、負荷情報として生成する。
【００８１】
図１４の例では、サーバ１０２−Ａは、負荷情報を、「０ｘ２４０００００００−０ｘ１８０００００００＝０ｘＣ０００００００」とする。同様に、サーバ１０２−Ｂ、Ｃは、負荷情報を、「０ｘ１Ｃ０１０００００−０ｘ１Ｃ０００００００＝０ｘ１０００００」とする。サーバ１０２−Ａ〜Ｃは、生成した負荷情報を記憶制御装置１０１に送信する。記憶制御装置１０１は、受信した記憶制御装置１０１を参照して、負荷情報が示す値が最小となるサーバＢ、Ｃのいずれかを、イベントデータ９０１−４、５を読み出すサーバとして決定する。
【００８２】
そして、記憶制御装置１０１は、決定したサーバに対して、イベントデータ９０１−４、５の読み出しリクエストを発行して、決定したサーバからイベントデータ９０１−４、５を受信する。次に、記憶制御装置１０１は、受信したイベントデータ９０１−４、５を、クライアント装置２０１に送信する。
【００８３】
次に、図１５〜図１７を用いて、ストレージシステム１００が実行するフローチャートを示す。
【００８４】
図１５は、初期化処理手順の一例を示すフローチャートである。初期化処理は、ストレージシステム１００を初期化する処理である。初期化処理は、ストリームデータ４１１を記憶制御装置１０１が受信する前に行われる処理である。
【００８５】
記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃに、ハートビート要求をブロードキャスト送信する（ステップＳ１５０１）。ハートビート要求を送信後、記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃから応答があるまで待ち受ける。ハートビート要求を受信した、サーバ１０２−Ａ〜Ｃは、ハートビート要求の応答を、記憶制御装置１０１に送信する（ステップＳ１５０２）。
【００８６】
応答を受信した記憶制御装置１０１は、応答を受信したサーバの数Ｎを集計する（ステップＳ１５０３）。次に、記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃに、Ｎと、各サーバに割り振る通し番号ｉとを送信する（ステップＳ１５０４）。Ｎとｉを送信することが、Ｎとｉとブロックのデータサイズとに基づいて、ストリームデータ４１１の各イベントデータを、どのブロックに書き込むかを決定する指示となる。ステップＳ１５０４の処理終了後、記憶制御装置１０１は、初期化処理を終了する。
【００８７】
Ｎとｉとを受信したサーバ１０２−Ａ〜Ｃは、Ｎとｉとを記憶する（ステップＳ１５０５）。ステップＳ１５０５の処理終了後、サーバ１０２−Ａ〜Ｃは、初期化処理を終了する。初期化処理を実行することにより、記憶制御装置１０１は、サーバ１０２−Ａ〜Ｃのブロックの記憶内容がサーバ１０２−Ａ〜Ｃの間で異なるようにするための情報を提供することができる。
【００８８】
図１６は、書き込み処理手順の一例を示すフローチャートである。書き込み処理は、サーバ１０２−Ａ〜Ｃにイベントデータを書き込む処理である。また、書き込み処理は、サーバ１０２−Ａ〜Ｃが、記憶制御装置１０１からの書き込みリクエストを受信した際に行う。図１６で示す各ステップは、サーバ１０２−Ａ〜Ｃが行うが、以下の説明では、説明の簡略化のため、サーバ１０２−Ａが、書き込み処理を行う例を示す。
【００８９】
サーバ１０２−Ａは、イベントデータをバッファに書き込む（ステップＳ１６０１）。次に、サーバ１０２−Ａは、１回もバッファをフラッシュしていないか否かを判断する（ステップＳ１６０２）。１回以上バッファをフラッシュした場合（ステップＳ１６０２：Ｎｏ）、サーバ１０２−Ａは、バッファ内のデータ量がＳに達したか否かを判断する（ステップＳ１６０３）。バッファ内のデータ量がＳに達していない場合（ステップＳ１６０３：Ｎｏ）、サーバ１０２−Ａは、書き込み処理を終了する。
【００９０】
一方、１回もバッファをフラッシュしていない場合（ステップＳ１６０２：Ｙｅｓ）、サーバ１０２−Ａは、バッファ内のデータ量がＳ＊ｉ／Ｎに達したか否かを判断する（ステップＳ１６０４）。バッファ内のデータ量がＳ＊ｉ／Ｎに達していない場合（ステップＳ１６０４：Ｎｏ）、サーバ１０２−Ａは、書き込み処理を終了する。
【００９１】
一方、バッファ内のデータ量がＳに達した場合、またはバッファ内のデータ量がＳ＊ｉ／Ｎに達した場合（ステップＳ１６０３：Ｙｅｓ、ステップＳ１６０４：Ｙｅｓ）、サーバ１０２−Ａは、バッファ内のイベントデータをソートする（ステップＳ１６０５）。次に、サーバ１０２−Ａは、バッファをフラッシュする（ステップＳ１６０６）。そして、サーバ１０２−Ａは、イベントデータ管理情報７１１−Ａを更新する（ステップＳ１６０７）。具体的な更新内容として、サーバ１０２−Ａは、バッファ内に格納されていたイベントデータのイベントデータＩＤと、前述のイベントデータがブロックに書き込まれた際の開始アドレスおよびデータサイズとを、イベントデータ管理情報７１１に書き込む。ステップＳ１６０７の処理終了後、サーバ１０２−Ａは、書き込み処理を終了する。書き込み処理を実行することにより、サーバ１０２−Ａは、自サーバの各ブロックの記憶内容を、他のサーバのブロックの記憶内容と異なるものにすることができる。
【００９２】
図１７は、読み出し処理手順の一例を示すフローチャートである。読み出し処理は、サーバ１０２−Ａ〜Ｃのいずれかから読み出し対象のイベントデータを読み出す処理である。また、読み出し処理は、記憶制御装置１０１と、サーバ１０２−Ａ〜Ｃとが協働して行う処理である。また、図１７で示す例では、サーバ１０２−Ａの負荷情報が最も小さくなり、記憶制御装置１０１は、サーバ１０２−Ａから読み出し対象のイベントデータを読み出すものとする。
【００９３】
記憶制御装置１０１は、読み出しリクエストのイベントデータを読み出す際の負荷情報の送信要求を各サーバに送信する（ステップＳ１７０１）。送信要求を受信したサーバ１０２−Ａ〜Ｃは、イベントデータ管理情報７１１を参照して、負荷情報を生成する（ステップＳ１７０２、ステップＳ１７０３）。そして、サーバ１０２−Ａ〜Ｃは、負荷情報を記憶制御装置１０１に送信する（ステップＳ１７０４、ステップＳ１７０５）。負荷情報が最も小さいサーバ１０２−Ａを除くサーバ１０２−Ｂ、Ｃは、ステップＳ１７０５の終了後、読み出し処理を終了する。
【００９４】
サーバ１０２−Ａ〜Ｃから負荷情報を受信した記憶制御装置１０１は、各サーバの負荷情報が等しいか否かを判断する（ステップＳ１７０６）。各サーバの負荷情報が異なる場合（ステップＳ１７０６：Ｎｏ）、記憶制御装置１０１は、複数のサーバのうち負荷情報の最も小さいサーバを読み出しリクエストのイベントデータを読み出すサーバとして決定する（ステップＳ１７０７）。図１７の例では、記憶制御装置１０１は、サーバ１０２−Ａを、読み出しリクエストのイベントデータを読み出すサーバとして決定する。一方、各サーバの負荷情報が等しい場合（ステップＳ１７０６：Ｙｅｓ）、記憶制御装置１０１は、複数のサーバのうちいずれかのサーバを、読み出しリクエストのイベントデータを読み出すサーバとして決定する（ステップＳ１７０８）。
【００９５】
ステップＳ１７０７、またはステップＳ１７０８の処理終了後、記憶制御装置１０１は、イベントデータを読み出すと決定したサーバに、読み出しリクエストを送信する（ステップＳ１７０９）。図１７の例では、記憶制御装置１０１は、サーバ１０２−Ａに、読み出しリクエストを送信する。
【００９６】
読み出しリクエストを受信したサーバ１０２−Ａは、読み出しリクエストのイベントデータを読み出し、記憶制御装置１０１に送信する（ステップＳ１７１０）。ステップＳ１７１０の処理終了後、サーバ１０２−Ａは、読み出し処理を終了する。イベントデータを受信した記憶制御装置１０１は、受信したイベントデータをクライアント装置２０１に送信する（ステップＳ１７１１）。ステップＳ１７１１の処理終了後、記憶制御装置１０１は、読み出し処理を終了する。読み出し処理を実行することにより、記憶制御装置１０１は、読み出しにかかる負荷が最も小さいサーバ１０２からイベントデータを読み出すことができる。
【００９７】
以上説明したように、ストレージシステム１００によれば、ブロックの記憶内容が異なるようにミラーリングして記憶する各サーバにおけるデータの読出にかかる負荷から読み出し先のサーバを決定する。ブロックの記憶内容が異なるので負荷に優劣がつくため、負荷が小さいサーバからデータを読み出すことができて、ストレージシステム１００は、サーバ１０２−Ａ〜Ｃのいずれかから読み出し対象データを読み出す際の負荷の抑制を図ることができる。負荷の抑制をすることにより、ストレージシステム１００は、読み出し対象データをいち早く読み出すことができる。
【００９８】
また、ストレージシステム１００によれば、読み出し対象データが２以上であれば、負荷情報としてサーバ１０２−Ａ〜Ｃにおける読み出し対象データの各々が格納された格納位置を示すアドレス同士の差分に基づいて、読み出し先のサーバを決定してもよい。これにより、ヘッドの移動量が最も小さいサーバから読み出し対象データを読み出して、ストレージシステム１００における読み出しにかかる負荷を抑制することができる。また、ストレージシステム１００における読み出しにかかる負荷を抑制することができるため、読み出しアクセスとの競合により書き込み性能の低下を抑制することができる。また、ヘッドの移動量が最も小さいサーバから読み出し対象データを読み出すため、ストレージシステム１００は、クライアント装置２０１が発行した読み出しリクエストに応答時間を短縮することができる。また、本実施の形態では、ハードディスクといった、シーケンシャルアクセスは得意であるがランダムアクセスを苦手とする記憶装置に対してより効果がある。
【００９９】
また、ストレージシステム１００によれば、複数のサーバの数と、サーバ１０２−Ａ〜Ｃに割り振った整数と、所定のデータサイズとに基づいていずれかのデータを書き込むブロックを決定する指示をサーバ１０２−Ａ〜Ｃに送信する。これにより、ストレージシステム１００は、サーバ１０２−Ａ〜Ｃの間で、ブロックの記憶内容が異なるようにすることを担保することができる。
【０１００】
また、サーバ１０２−Ａ〜Ｃによれば、いずれかのブロックに属する２以上のイベントデータを、２以上のイベントデータの各々に対応付けられた所定のメタデータの値に従って並び替えていずれかのブロックに書き込んでもよい。これにより、サーバ１０２−Ａ〜Ｃは、メタデータの値が一致、または近似する２つ以上のイベントデータに対する読み出しリクエストに対して、読み出しにかかる負荷を抑制することができる。
【０１０１】
また、複数のデータは、時系列に沿ったストリームデータであってもよい。ストリームであれば、ストリームデータ内の時間的に連続する２つ以上のイベントデータに対する読み出しリクエストが発行されることが多い。従って、読み出しリクエストとなるイベントデータの各々が、サーバ１０２−Ａ〜Ｃの各ブロックに分散されていることは少ない。従って、本実施の形態を実行した際に、読み出しリクエストとなるイベントデータの各々が全て異なるブロックにあり、サーバ１０２−Ａ〜Ｃのどこから読み出しても同じであるという、効果が得られない状態となる可能性が小さくなる。
【０１０２】
なお、本実施の形態で説明した記憶情報抽出方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本記憶情報抽出プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本記憶情報抽出プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１０３】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１０４】
（付記１）コンピュータに、
各サーバが有する記憶領域を所定のデータサイズで分割したブロックの記憶内容が前記各サーバの間で異なるように複数のデータをミラーリングして記憶する複数のサーバから、前記複数のデータのうちの読み出し対象データを読み出す際に、前記読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を前記各サーバに送信し、
前記各サーバから受信した前記負荷情報に基づいて、前記複数のサーバから前記読み出し対象データを読み出すサーバを決定する、
処理を実行させることを特徴とする記憶情報抽出プログラム。
【０１０５】
（付記２）前記読み出し対象データは、前記複数のデータのうちの２以上のデータを含み、
前記決定する処理は、
前記各サーバから受信した前記負荷情報として前記各サーバにおける前記読み出し対象データの各々が格納された格納位置を示すアドレス同士の差分に基づいて、前記複数のサーバから前記読み出し対象データを読み出すサーバを決定することを特徴とする付記１に記載の記憶情報抽出プログラム。
【０１０６】
（付記３）前記コンピュータに、
前記各サーバに前記複数のデータのいずれかのデータを書き込む際に、前記複数のサーバの数と、１から前記数までの各整数のうちの前記各サーバの間で重複しないように前記各サーバに割り振った整数と、前記所定のデータサイズとに基づいて前記いずれかのデータを書き込むブロックを決定する指示を前記各サーバに送信する、
処理を実行させることを特徴とする付記１または２に記載の記憶情報抽出プログラム。
【０１０７】
（付記４）複数のデータをミラーリングして記憶する複数のサーバの各サーバに、
前記各サーバが有する記憶領域を所定のデータサイズで分割したブロックの記憶内容が前記各サーバの間で異なるように記憶された前記複数のデータのうち、読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を受信し、
前記送信要求を受信した場合、前記負荷情報を生成し、
生成した前記負荷情報を前記送信要求の要求元に送信する、
処理を実行させることを特徴とする記憶情報抽出プログラム。
【０１０８】
（付記５）前記生成する処理は、
前記送信要求を受信した場合、前記記憶領域における前記読み出し対象データが格納された格納位置に基づいて、前記負荷情報を生成することを特徴とする付記４に記載の記憶情報抽出プログラム。
【０１０９】
（付記６）前記読み出し対象データは、前記複数のデータのうちの２以上のデータを含み、
前記生成する処理は、
前記各サーバにおける前記読み出し対象データの各々が格納された格納位置を示すアドレス同士の差分を、前記負荷情報として生成することを特徴とする付記４または５に記載の記憶情報抽出プログラム。
【０１１０】
（付記７）前記各サーバに、
前記複数のサーバの数と、１から前記数までの各整数のうちの前記各サーバの間で重複しないように自サーバに割り振られた整数と、前記所定のデータサイズとに基づいて前記複数のデータのいずれかのデータを書き込むブロックを決定する指示を前記要求元から受信したことに応じて、前記数と前記整数とに基づいて、前記いずれかのデータを書き込むブロックを決定する、
処理を実行させることを特徴とする付記４〜６のいずれか一つに記載の記憶情報抽出プログラム。
【０１１１】
（付記８）前記複数のデータの各データは、所定の属性の値に対応付けられたデータであり、
前記各サーバに、
前記複数のデータのうちの前記記憶領域を分割したいずれかのブロックに属する２以上のデータを、前記２以上のデータの各々に対応付けられた前記所定の属性の値に従って並び替えて前記いずれかのブロックに書き込むことを特徴とする付記４〜７のいずれか一つに記載の記憶情報抽出プログラム。
【０１１２】
（付記９）前記複数のデータは、時系列に沿ったデータであることを特徴とする付記１〜８のいずれか一つに記載の記憶情報抽出プログラム。
【０１１３】
（付記１０）各サーバが有する記憶領域を所定のデータサイズで分割したブロックの記憶内容が前記各サーバの間で異なるように複数のデータをミラーリングして記憶する複数のサーバから、前記複数のデータのうちの読み出し対象データを読み出す際に、前記読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を前記各サーバに送信し、
前記各サーバから受信した前記負荷情報に基づいて、前記複数のサーバから前記読み出し対象データを読み出すサーバを決定する、
制御部を有することを特徴とする記憶制御装置。
【０１１４】
（付記１１）コンピュータが、
各サーバが有する記憶領域を所定のデータサイズで分割したブロックの記憶内容が前記各サーバの間で異なるように複数のデータをミラーリングして記憶する複数のサーバから、前記複数のデータのうちの読み出し対象データを読み出す際に、前記読み出し対象データの読み出しにかかる負荷の度合いを表す負荷情報の送信要求を前記各サーバに送信し、
前記各サーバから受信した前記負荷情報に基づいて、前記複数のサーバから前記読み出し対象データを読み出すサーバを決定する、
処理を実行することを特徴とする記憶情報抽出方法。
【符号の説明】
【０１１５】
１００  ストレージシステム
１０１  記憶制御装置
１０２  サーバ
６００、７００  制御部
６０１  第１の送信部
６０２  第２の送信部
６０３、７０１  決定部
７０２  書込部
７０３  受信部
７０４  生成部
７０５  送信部
【図１】
2016081194.tif 000003
【図２】
2016081194.tif 000004
【図３】
2016081194.tif 000005
【図４】
2016081194.tif 000006
【図５】
2016081194.tif 000007
【図６】
2016081194.tif 000008
【図７】
2016081194.tif 000009
【図８】
2016081194.tif 000010
【図９】
2016081194.tif 000011
【図１０】
2016081194.tif 000012
【図１１】
2016081194.tif 000013
【図１２】
2016081194.tif 000014
【図１３】
2016081194.tif 000015
【図１４】
2016081194.tif 000016
【図１５】
2016081194.tif 000017
【図１６】
2016081194.tif 000018
【図１７】
2016081194.tif 000019