(57)【要約】      （修正有）【課題】ストリームデータの書き込みと読み出しが競合した場合の読み出し性能を改善するストレージ装置を提供する。【解決手段】ストレージ装置は、複数のディスクストレージ１５〜１８と、受信した一群のデータを前記複数のディスクストレージ１５〜１８に分割して記憶させる制御を行う制御部とを備える。制御部は、前記複数のディスクストレージ１５〜１８へのデータの書き込み処理と読み出し処理とを同じ期間内に行う場合、予め決められた数の一部のディスクストレージへの書き込み処理を順次中断し、書き込み処理を中断した一部のディスクストレージから、読み出し要求の対象データをリードバッファに読み出す。制御部は、前記読み出し要求の対象データが前記複数のディスクストレージから前記リードバッファに読み出された後、前記リードバッファに格納されたデータを前記一群のデータに再構成して出力する制御を行う。【選択図】図６
2016206953.tif 000002
【特許請求の範囲】
【請求項１】
複数のディスクストレージと、受信した一群のデータを前記複数のディスクストレージに分割して記憶させる制御を行う制御部とを備えたストレージ装置であって、
前記制御部は、
前記複数のディスクストレージへのデータの書き込み処理と前記複数のディスクストレージに記憶されたデータに対する読み出し要求に応じた読み出し処理とを同じ期間内に行う場合、前記複数のディスクストレージのうち予め決められた数の一部のディスクストレージへの書き込み処理を順次中断し、前記書き込み処理を中断した一部のディスクストレージから、要求されたデータの読み出し処理を行いながら、読み出されたデータを、データを一時的に記憶するリードバッファに格納させる制御を行うとともに、
前記読み出し要求の対象データが前記読み出し処理により前記複数のディスクストレージから前記リードバッファに読み出された後、前記リードバッファに格納されたデータを前記一群のデータに再構成して出力する制御を行う
ことを特徴とするストレージ装置。
【請求項２】
前記制御部は、
前記受信した一群のデータを、一時的にデータを記憶するライトバッファに記憶し、前記ライトバッファに所定量のデータが記憶される度に、前記ライトバッファに記憶したデータを分割し、分割した各データを前記複数のディスクストレージのそれぞれに書き込ませる制御を行う
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
各ディスクストレージのどのアドレスにどのデータが記憶されたかを管理するデータ管理情報、および、各ディスクストレージへのデータの書き込み可否を制御するための書き込み制御情報を記憶する記憶部を備え、
前記制御部は、
前記読み出し処理では、前記データ管理情報を参照し、読み出し要求の対象データを記憶しているディスクストレージを特定し、特定したディスクストレージの中から前記予め決められた数のディスクストレージを順次選択し、選択した前記予め決められた数のディスクストレージに対応する前記書き込み制御情報について、書き込み不可を示す情報に更新するとともに、当該選択したディスクストレージから前記読み出し処理を行わせる制御を行い、
前記書き込み処理では、前記書き込み制御情報を参照し、書き込みが許可されている複数ディスクストレージに対して、前記一群のデータの書き込み処理を行わせる制御を行う
ことを特徴とする請求項１又は２のいずれか１項に記載のストレージ装置。
【請求項４】
前記制御部は、
前記読み出し処理により読み出すデータのうち、前記一部のディスクストレージに分割されて記憶されたデータの読み出しが完了すると、前記書き込み制御情報を更新して前記書き込み処理を中断する前記一部のディスクストレージを前記予め決められた数の他のディスクストレージに変更して前記書き込み処理と前記読み出し処理とを実行させる
ことを特徴とする請求項３に記載のストレージ装置。
【請求項５】
複数のディスクストレージと、一群のデータを前記複数のディスクストレージに分割して記憶させる制御を行う制御部とを備えたストレージ装置における前記複数のディスク装置へのアクセスの制御方法であって、
前記複数のディスクストレージへのデータの書き込み処理と前記複数のディスクストレージに記憶されたデータに対する読み出し要求に応じた読み出し処理とを同じ期間内に行う場合に、前記複数のディスクストレージのうち予め決められた数の一部のディスクストレージへの書き込み処理を順次中断し、前記書き込み処理を中断した一部のディスクストレージから、要求されたデータの読み出し処理を行いながら、読み出されたデータを、データを一時的に記憶するリードバッファに格納させる処理と、
前記読み出し要求の対象データが前記読み出し処理により前記複数のディスクストレージから前記リードバッファに読み出された後、前記リードバッファに格納されたデータを前記一群のデータに再構成して出力する処理と、
を前記制御部に実行させる制御方法。
【請求項６】
複数のディスクストレージと、受信した一群のデータを前記複数のディスクストレージに分割して記憶させる処理を行うプロセッサとを備えたストレージ装置における前記複数のディスク装置へのデータの書き込み及び読み出しを制御する制御プログラムであって、
前記複数のディスクストレージへのデータの書き込み処理と前記複数のディスクストレージに記憶されたデータに対する読み出し要求に応じた読み出し処理とを同じ期間内に行う場合に、前記複数のディスクストレージのうち予め決められた数の一部のディスクストレージへの書き込み処理を順次中断し、前記書き込み処理を中断した一部のディスクストレージから、要求されたデータの読み出し処理を行いながら、読み出されたデータを、データを一時的に記憶するリードバッファに格納させる処理と、
前記読み出し要求の対象データが前記読み出し処理により前記複数のディスクストレージから前記リードバッファに読み出された後、前記リードバッファに格納されたデータを前記一群のデータに再構成して出力する処理と、
を前記プロセッサに実行させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、制御方法および制御プログラムに関する。
【背景技術】
【０００２】
従来、ネットワークを介して受信したストリームデータ（ネットワーク上で流れるデータであって、時刻順に到来する不定長のデータ）をハードディスクドライブ（ＨＤＤ）等のディスクストレージによる大容量記憶装置に蓄積するストレージサーバがある。ストレージサーバは、例えば、連続的に受信される一連のストリームデータをメモリ上のバッファに一時的に格納し、バッファに格納したデータが一定量に達するとＨＤＤ等の記憶装置に書き込む。ＨＤＤ等の記憶装置への書き込み速度がストリームデータの受信速度よりも低速である場合、ストレージサーバは、記憶装置へのアクセスの高速化のために、ストリームデータを分割して複数のＨＤＤに並行して書き込む処理をする（「ストライピング」とも呼ばれる）。
【０００３】
ストリームデータを蓄積する技術として、ストリームデータを格納するデジタル記録システムのバンド幅の要件を動的に管理することにより、バンド幅を使い尽くしてデータが失われることを防止する技術が知られている。また、ストリームデータを２台のデータ記憶装置に二重化して記録するようにして、記録されたデータの冗長性を確保しながら、複数のストリームデータを同時に記録、再生する技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００３−５３３８４３号公報
【特許文献２】特開２００７−２８１９７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ストリームデータを記憶する大規模容量のＨＤＤでは、一般的なパーソナルコンピュータ（ＰＣ）向けＨＤＤとは異なる制御が行われる場合がある。例えば、ファイルシステムを作らずに直接ＨＤＤへのアクセスを制御する場合や、ファイルシステム上に１つの巨大なファイルを作成してＨＤＤのアクセス制御をする場合がある。ＨＤＤ等のディスク記録媒体は、アクセス先のデータが格納されているトラックまで磁気ヘッドを移動させてからアクセスを行うため、アクセス先が異なる書き込みと読み出しのアクセスを切り替える際には磁気ヘッドの移動等による遅延が生じる。そのため、ＨＤＤに対して書き込みアクセスを行っている最中に、同一ＨＤＤに対して頻繁に読み出しアクセスが行われると、書き込み性能が低下する。
【０００６】
ストリームデータを蓄積するストレージサーバの場合、書き込み性能の低下は即座にデータの消失につながるため、書き込み性能の低下は許されない。そのため、書き込み性能に影響が出ない程度に読み出し要求を処理することが行われるが、その結果、読み出し時間が長くなってしまう。
【０００７】
例えば、複数のＨＤＤへ分割したデータを書き込んでいる最中に、ある期間内に受信したストリームデータを読み出して解析するバッチ処理等を行う場合がある。この場合、ストリームデータのＨＤＤへの書き込みに影響がでないようにするために、例えば複数のＨＤＤにストリームデータを書き込んだ後、次に書き込むストリームデータがメモリ上のバッファに格納されるまでの間を利用してデータの読み出しを行う。そして、メモリ上のバッファに受信したストリームデータがたまると再度、複数のＨＤＤへの書き込みを再開する。しかし、複数のＨＤＤへの書き込みと読み出しを頻繁に繰り返すと、磁気ヘッドの移動等による待ち時間が生じるために、読み出し時間が長くなるという課題がある。
【０００８】
本発明の１つの側面では、ストレージ装置においてストリームデータの書き込みと読み出しが競合した場合の読み出し性能を改善することを目的とする。
【課題を解決するための手段】
【０００９】
開示の技術の一観点によれば、ストレージ装置は、複数のディスクストレージと、受信した一群のデータを前記複数のディスクストレージに分割して記憶させる制御を行う制御部とを備える。制御部は、前記複数のディスクストレージへのデータの書き込み処理と前記複数のディスクストレージに記憶されたデータの読み出し要求に応じた読み出し処理とを同じ期間内に行う場合、予め決められた数の一部のディスクストレージへの書き込み処理を順次中断し、書き込み処理を中断した一部のディスクストレージから、要求されたデータの読み出し処理を行う。読み出されたデータは、データを一時的に記憶するリードバッファに格納される。制御部は、前記読み出し要求の対象データが前記読み出し処理により前記複数のディスクストレージから前記リードバッファに読み出された後、前記リードバッファに格納されたデータを前記一群のデータに再構成して出力する制御を行う。
【発明の効果】
【００１０】
開示の技術によれば、ストレージ装置においてストリームデータの書き込みと読み出しが競合した場合の読み出し性能を改善することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、本実施形態が適用されるストレージシステムの構成例を示す図である。
【図２】図２は、ストレージサーバ１の一構成例を示す図である。
【図３】図３は、ストレージサーバ１を制御するソフトウェアの機能ブロック図である。
【図４】図４は、複数のＨＤＤを有するストレージサーバ１へのデータの書き込み動作を説明する図である。
【図５】図５は、複数のＨＤＤへの書き込み中に複数のＨＤＤから読み出す動作を説明する図である。
【図６】図６は、本発明の一実施形態の動作を説明する図である。
【図７】図７は、書込み可能ＨＤＤテーブルの一構成例を示す図である。
【図８】図８は、データ管理テーブルの一構成例を示す図である。
【図９】図９は、読み出し処理を実行した後のデータ管理テーブルの状態を示す図である。
【図１０】図１０は、図９の読み出し処理の後、更に別の読み出し処理を実行した後のデータ管理テーブルの状態を示す図である。
【図１１】図１１は、書き込み要求の処理のうち、データをライトバッファにため込む処理のフローチャートである。
【図１２】図１２は、書き込み要求の処理のうち、ライトバッファからＨＤＤにデータを書き込む処理のフローチャートである。
【図１３】図１３は、読み出し要求の処理のフローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面に基づいて、本発明に係るストレージシステムの実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００１３】
本実施形態に係るストレージ装置は、ネットワークを介して受信したストリームデータをＨＤＤ等の大容量記憶装置に蓄積する。ここで、本実施例において、ストリームデータとは、ネットワーク上で流れるデータであって、時刻順に到来する不定長のデータをいい、音楽や映画等の連続コンテンツデータに限られず、ネットワーク上で流れる不定長のパケットデータ等も含むものとする。
【００１４】
以下に開示するストレージ装置の用途としては、例えば、監視カメラの映像データやリモートセンシングのセンサデータ等を、過去一定期間（例えば、数日間〜数週間、あるいはそれ以上）にわたって記憶しておき、必要な時に必要な期間を指定して読出す用途が想定される。また、データセンター等の設備の運用環境等の状態を示す運用情報を時系列的に記憶しておき、何らかの障害等が生じた際に、過去に遡ってその運用情報を解析することにより、障害の原因を究明するといった用途も想定される。
【００１５】
図１は、本実施形態に係るストレージシステムの構成の一例を示す図である。ストレージサーバ１はストレージ装置の一例であり、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等のネットワーク２を介して書き込みクライアント装置３及び読み出しクライアント装置４と接続される。書き込みクライアント装置３は、広域のネットワーク６を流れるストリームデータを取り出すネットワークタップ装置５に接続される。
【００１６】
ネットワークタップ装置５は常時ネットワーク６をモニタし、ネットワーク６上で流れるストリームデータを分岐させて取り出す。ネットワークタップ装置５によるデータの取得方法としては、例えば、ネットワーク６上を流れる全てのストリームデータのデータ・パケットを取り出してもよいし、所定の宛先アドレスまたは送信元アドレスを有する特定のデータ・パケットを取り出すようにしてもよい。ネットワークタップ装置５は、ネットワーク６から分岐させて取り出したデータ・パケットを取得した時刻情報とともに、取り出したデータ・パケットを書き込みクライアント装置３に送信する。
【００１７】
書き込みクライアント装置３は、ネットワークタップ装置５から受け取ったデータ・パケットを、必要に応じて分割や再構成し、書き込み要求とともにネットワーク２を介してストレージサーバ１に送信する。書き込みクライアント装置３は、ネットワークタップ装置５から受信したデータ・パケットが不定長の長いデータの場合、一定の長さの固定長のデータに変換（分割）してからストレージサーバ１に送信するようにしてもよい。
【００１８】
読み出しクライアント装置４は、ストレージサーバ１の利用者の端末（不図示）から随時送られてくる読み出し要求に応じてネットワーク２を介してストレージサーバ１に読み出し要求を送信し、読み出された読み出しデータを要求元の利用者の端末に返送する。一般に、書き込みクライアント装置３からの書き込み要求は連続的又は高頻度に発生するのに対して、読み出しクライアント装置４からの読み出し要求は、特定の時刻（年月日時分秒）の範囲を指定した要求が散発的に発生する。
【００１９】
図２はストレージサーバ１の一構成例を示す図である。ストレージサーバ１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１と、システム制御部１２と、メモリ１３と、複数のディスクストレージとしてのＨＤＤ１５〜１８と、ネットワーク２と接続するためのネットワークインタフェース１４とを有する。システム制御部１２は、ＣＰＵ１１、メモリ１３、ネットワークインタフェース１４、ＨＤＤ１５〜１８間のデータ転送を制御し、ＨＤＤ１５〜１８のインタフェース回路やメモリ１３のインタフェース回路を含むものとする。図２では、例として４つのＨＤＤを備える例を示しているが、ＨＤＤの数は４つに限られず、任意の数とすることができる。
【００２０】
メモリ１３は、ライトバッファ１３１の記憶領域と、リードバッファ１３２の記憶領域と、書込み可能ＨＤＤテーブル１３３の記憶領域と、データ管理テーブル１３４の記憶領域とを含む。ライトバッファ１３１は、書き込みクライアント装置３から送られる書き込みデータを一時的に記憶する記憶領域であり、リードバッファ１３２は、読み出しクライアント装置４からの読み出し要求に基づいてＨＤＤ１５〜１８から読み出される読み出しデータを一時的に記憶する記憶領域である。書込み可能ＨＤＤテーブル１３３およびデータ管理テーブル１３４の詳細については後述する。
【００２１】
ライトバッファ１３１は、メモリ１３中に複数設ける構成としてもよい。すなわち、受信したストリームデータをため込むライトバッファと、受信済みのデータをストライプ単位に分割して複数のＨＤＤへ書き込む処理を行っている間中、ＨＤＤへ書き込むデータを保持しておくライトバッファとをメモリ中に設けることができる。そのようにすることで、複数のＨＤＤ１５〜１８へのストライピングによる書き込み処理と、受信したストリームデータをため込む処理とを並行して行うことが可能となる。
【００２２】
図２では示されていないが、メモリ１３には、ＣＰＵ１１で実行されるプログラムや、ＣＰＵ１１が実行する処理で使用するデータ等も記憶される。ＣＰＵ１１は、「制御部」又は「プロセッサ」の一例である。ＣＰＵ１１は、メモリ１３に記憶された不図示のプログラムを実行することにより、ストレージサーバ１全体の制御を行う。具体的には、ＣＰＵ１１は、書込み可能ＨＤＤテーブル１３３やデータ管理テーブル１３４の情報に基づいて、ストリームデータのＨＤＤ１５〜１８への書き込みおよび読み出しを制御する。
【００２３】
なお、リードバッファ１３２は、メモリ１３上ではなくバッファ専用のＨＤＤ等、他の記憶装置に設けてもよく、ライトバッファ１３１についても、他の高速な記憶装置に設けてもよい。また、ＨＤＤ１５〜１８に代えて、他の種類の大容量記憶装置も使用可能であるが、本発明では光磁気ディスクや光ディスク等、読み書きを行うためのヘッドの機械的な移動を伴うアクセス方式であるディスクストレージ装置の場合に顕著な効果を奏する。
【００２４】
図３は、ストレージサーバ１を制御するためのソフトウェアの機能ブロック図である。ストレージサーバ１を制御するソフトウェアは、リクエスト受信部１１１と、データ分割部１１２と、データ書込部１１３と、データ読出部１１４と、データ統合部１１５と、リプライ送信部１１６とを有する。各機能ブロック（１１１〜１１６）の制御プログラムは、例えば、メモリ１３や、図２において不図示の不揮発性メモリやＨＤＤ等の記憶装置に記憶される。各機能ブロックの処理は、ＣＰＵ１１がメモリ１３等に記憶された各機能ブロックの制御プログラムを読み出して実行することによって行われる。
【００２５】
リクエスト受信部１１１は、書き込みクライアント装置３からの書き込み要求、又は、読み出しクライアント装置４からの読み出し要求を受信する。受信した要求が書き込みクライアント装置３からの書き込み要求であった場合、書き込み要求とともに、書き込みデータ、すなわち、書き込みクライアント装置３によって加工等されたストリームデータのデータ・パケットを受信する。リクエスト受信部１１１は、受信した書き込みデータを、ライトバッファ１３１に格納する。リクエスト受信部１１１が読み出しクライアント装置４から読み出し要求を受信した場合には、リクエスト受信部１１１は、受信した読み出し要求の読み出し処理をデータ読出部１１４に指示する。
【００２６】
データ分割部１１２は、ライトバッファ１３１に一定量のデータが格納された後、ライトバッファ１３１に格納されたデータを複数のＨＤＤへストライピングによって書き込む際のストライプ単位のデータに分割する。
【００２７】
データ書込部１１３は、複数のＨＤＤ１５〜１８のうち、書込み可能ＨＤＤテーブル１３３を参照して書き込み可能なＨＤＤを特定する。データ書込部１１３は、特定した書き込み可能なＨＤＤに対して、データ分割部１１２によって分割されたデータを書き込む処理を行う。
【００２８】
データ読出部１１４は、読み出しクライアント装置４からの読み出し要求があった場合に、読み出し対象となるデータが格納されているＨＤＤを、データ管理テーブル１３４を参照して特定する。そして、特定したＨＤＤのうち、一部のＨＤＤを読み出し対象のＨＤＤに指定し、指定したＨＤＤから、読み出し要求の対象となるデータを読み出してリードバッファ１３２に格納する読み出し処理を行う。データ読出部１１４は、読み出し処理を行う一部のＨＤＤを順次変更していきながら、読み出し対象データを記憶する全てのＨＤＤから読み出し対象となるデータを読み出して、リードバッファ１３２に格納する。
【００２９】
データ統合部１１５は、データ読出部１１４によってリードバッファ１３２に格納されたデータを、データ管理テーブル１３４から取得した各データの時刻情報に基づいて並べ替えて結合する。すなわち、データ統合部１１５は、複数のＨＤＤ１５〜１８からリードバッファ１３２に読み出されたデータを、ストライピング前の状態に統合（又は、再構成）したデータを作成する。リプライ送信部１１６は、データ統合部１１５によって統合されたデータを、読み出し要求のリクエスト元となる読み出しクライアント装置４に送信する。
【００３０】
図４は、複数のＨＤＤを有するストレージサーバ１へのデータの書き込みを説明する図である。図４では、書き込みクライアント装置３からの書き込みデータを分割して４台のＨＤＤ１５〜１８に並列に書き込む例を示す。図４では、ＨＤＤ１５〜１８以外のストレージサーバ１の構成要素は省略している（後述の図５、図６においても同様）。
【００３１】
図４において、網掛け部分３０〜３３は既に書き込まれた領域を示し、白抜き部分はこれからデータを書き込む、あるいは、上書きする領域を示す。「書き込み中のアドレス」で示される各ＨＤＤ１５〜１８の領域に対して、ライトバッファ１３１に格納されたデータを分割したストライプ単位で並行してデータの書き込み処理が行われる。各ＨＤＤ１５〜１８への書き込み処理はシーケンシャルに行われる。なお、複数のＨＤＤ１５〜１８は厳密に同期して動作する必要はないが、ライトバッファ１３１に所定量のデータがたまる毎に並列に動作することになる。ＨＤＤ１５〜１８の全記憶領域にデータが書き込まれると、ＨＤＤ１５〜１８の記憶領域の先頭アドレスに戻って既にデータが書き込まれた領域に新規データを上書きする。
【００３２】
図５は、複数のＨＤＤへの書き込み中に複数のＨＤＤから読み出す動作を説明する図である。図５では、４台のＨＤＤ１５〜１８へのデータの書き込み処理中に、ＨＤＤ１５〜１８に含まれる読み出し対象データ４０〜４３に対しする読み出し要求が来た場合に、従来の方法で読み出す動作を、本実施例との比較のために説明する。ストリームデータを蓄積するストレージサーバ１では、蓄積するデータの欠落を防止するために読み出し処理よりも書き込み処理が優先して処理される。そのため、ストレージサーバ１へのデータの書き込み処理と読み出し処理とが競合した場合には、ストライプデータの書き込み後であって、かつ、ライトバッファ１３１に書き込みデータをため込んでいる間等の余剰時間を使用して読み出しが行われる。図５の例では、４台のＨＤＤ１５〜１８へ並行して書き込み処理が行われ、また、４台のＨＤＤ１５〜１８から並行して読み出し処理が行われるものとする。
【００３３】
一般に書き込みアドレスと読み出しアドレスは異なるため、上記余剰時間の開始時に各ＨＤＤの磁気ヘッドを書き込み位置から読み出し位置に一旦移動してから読み出し処理を行い、余剰時間の終了時までに磁気ヘッドを再度書き込み位置まで戻す時間が必要になる。磁気ヘッドの移動等の時間が必要となることから、実質的には余剰時間の一部の時間しか読み出し処理に使うことができない。従って、余剰時間よりも短い時間を利用した読み出し処理を何度も繰り返すこととなり、読み出し要求の処理には長時間を要することになる。
【００３４】
なお、図５における読み出し処理について、全ＨＤＤ１５〜１８から並行してデータを読み出す場合でも、各ＨＤＤの厳密な読み出しタイミングは、種々の条件によって異なってくる。例えば、読み出し要求アドレスのディスク上での物理的位置と磁気ヘッドとの円周方向での相対位置がＨＤＤによって異なること、あるいは、欠陥トラックの置換処理の有無がＨＤＤによって異なること、等から各ＨＤＤからのデータ読み出しタイミングは一致しない。そのため、読み出しデータはリードバッファ１３２において時刻順に再構成され、時刻順に再構成されたデータが読み出しクライアント装置４に返送される。
【００３５】
図６は本発明の一実施態様の動作を説明する図である。図６以降の説明において、説明を簡単にするために、ＨＤＤの台数は４台で、ネットワーク６を流れるストリームデータの流量は１２［ＭＢ／ｓ］とし、各ＨＤＤの最大書き込み性能と最大読み出し性能はともに４［ＭＢ／ｓ］とする。この場合、理論的には３台のＨＤＤでストリームデータを取りこぼしなく記憶することができ、１台分のＨＤＤの余剰性能が生じることとなる。
【００３６】
図６の例では、図５の場合と異なり、読み出し要求に対する読み出し処理は４台のＨＤＤ１５〜１８から並行に同時に行われるのではなく、特定の１台ずつ（図６ではＨＤＤ１５）からデータの読み出しが行われる例を示す。すなわち、３台のＨＤＤに対して最大書き込み性能で１２［ＭＢ／ｓ］のストリームデータを分割して書き込みつつ、残りの１台のＨＤＤからデータの読み出し処理を行う。
【００３７】
具体的には、ＨＤＤ１５に対する書き込み処理を中断して読み出し処理を実行している間、残りの３台のＨＤＤ１６〜１８に対してデータの書き込み処理を行う。ＨＤＤ１５からの一定量のデータの読み出し処理が完了すると、ＨＤＤ１５は書き込み処理に復帰し、次に、ＨＤＤ１６が書き込み処理を中断して読み出し処理を実行する。以下同様に順次１台ずつデータが読み出されるＨＤＤを変更して読み出し処理を行う。各ＨＤＤにおける読み出し処理は連続的に行うことができるため、図５の例での磁気ヘッドの頻繁な移動は不要となり、各ＨＤＤからの読み出し処理速度を改善できる。
【００３８】
図７は、書込み可能ＨＤＤテーブル１３３の一構成例を示す図である。書込み可能ＨＤＤテーブル１３３は、書き込み処理を行うＨＤＤと読み出し処理を行うＨＤＤとを区別して管理するための情報を格納するテーブルであり、複数のＨＤＤへのアクセス制御を行うために用いられる。例えば、データ書込部１１３は、ストレージサーバ１のシステム初期化時に、ストレージサーバ１が備えるＨＤＤを特定して、書込み可能ＨＤＤテーブル１３３のリストに、書込み可否情報の初期値とともに加える。
【００３９】
図７に示す書込み可能ＨＤＤテーブル１３３の例において、左欄は各ＨＤＤ１５〜１８のＨＤＤ番号（ＨＤＤ１〜ＨＤＤ４）を示し、右欄は対応するＨＤＤへの書込み可否を示すフラグの値を示す。書込み可否のフラグは、例えば「１」は書き込み可能、「０」は書き込み不可、あるいは書き込み中断（読み出し中）を意味する。
【００４０】
図８は、データ管理テーブル１３４の一構成例を示す図である。データ管理テーブル１３４は、時系列順に受信したストリームデータを複数のＨＤＤに分割して記憶したデータについて、ＨＤＤごとの記憶アドレス（データが書き込まれたアドレス）とデータ受信時刻とを関連付けて管理するためのテーブルである。図６の例のように、書き込み処理を行うＨＤＤと読み出し処理を行うＨＤＤとを分けた場合、読み出し処理中のＨＤＤにはデータを書き込めないので、ＨＤＤごとに記憶アドレスと書き込まれたデータの受信時刻との対応が異なってくる。そのため、複数のＨＤＤに書き込まれたデータに対する読み出し要求があった場合、ＣＰＵ１１により実行されるデータ読出部１１４は、データ管理テーブル１３４に記憶したＨＤＤごとの記憶アドレスとデータの受信時刻の情報とを参照して、読み出し対象となるデータを特定する。
【００４１】
図８に示すデータ管理テーブル１３４において、最も上の行はデータ受信の時刻（年月日時分秒）を示し、第２行以下は各ＨＤＤでの書き込みアドレスを示す。データ管理テーブル１３４は、各ＨＤＤに格納するデータの受信時刻と、データの格納アドレスとを対応付けて管理するためのデータ管理情報の一例である。図８のデータ管理テーブル１３４の記載例では、一番左の列が項目名を表し、その右側に、「データ受信時刻」の情報と、そのデータ受信時刻に関連付けられた各ＨＤＤのアドレス情報とを関連付けて１つの列に表した例となっている。図８では、一般的な縦方向の表の記載形式ではなく、説明の便宜上、横方向にデータを追加していく表の記載形式のデータ管理テーブル１３４の表の記載例となっている。ライトバッファ１３１から出力された分割したストリームデータを各ＨＤＤに書き込む毎に、書き込んだデータの受信時刻と各ＨＤＤでの書き込みアドレスからなる列が右方に書き足される。
【００４２】
図８では簡単のために時刻情報は秒のみで表示し、動作開始時（０秒）から２０秒後に受信したデータが各ＨＤＤのアドレスの６０番地までに書き込まれた時点までの状態を表している。０秒と２０秒の間にも各ＨＤＤに多数の書き込み処理がされているが、図８において途中の列は「・・・」と記載して省略する。図８及び後述の図９の点線枠８０で囲った部分に着目すると、受信時刻が「０」の列と、その１つ右の「・・・」の列とで表される５秒単位のひとまとまりの分割されたデータを各ＨＤＤに連続して書き込むものとする。図８において、最も上の行の「受信時刻」は、その列の各ＨＤＤの欄を上から下の方向に見ていった場合に、最初にアドレス値が格納されているＨＤＤに記憶されたデータの受信時刻を示すものとする。データ管理テーブル１３４における、各ＨＤＤに記憶されたデータと受信時刻との対応関係については、図９を用いて後述する。
【００４３】
なお、ＨＤＤ容量の全てに書き込みが行われたら先頭アドレスに戻って上書きをするため、上書きされたアドレスの旧データについての情報は削除して構わない。そのため、データ管理テーブル１３４内のデータが無限に増殖し続けることはない。
【００４４】
データ管理テーブル１３４におけるアドレス情報とデータ受信時刻の情報とを記憶するフォーマットについては図８の例に限られず、適宜変更することができる。例えば、ＨＤＤごとにアドレス情報とデータ受信時刻とを対応付けたテーブルを持たせてもよい。また、各データのデータ受信時刻の情報と、対応するデータが記憶されているＨＤＤの識別情報と、そのＨＤＤにおいて対応するデータが記憶されているアドレス情報とを関連付けて記憶するテーブルであってもよい。
【００４５】
図９は、ストリームデータの受信開始から１００秒後に、０秒から２０秒の直前の時刻までの期間のデータに対する読み出し要求を受け、受信開始から１６０秒後までに読み出し動作を完了した状態のデータ管理テーブル１３４の状態を示している。
【００４６】
例えば、ネットワーク２を介して受信された２０秒分のストリームデータがライトバッファ１３１に書き込まれた段階で、ＣＰＵ１１により実行されるデータ分割部１１２は、ライトバッファ１３１に記憶した２０秒分のストリームデータを５秒ごとに区切って分割する。５秒ごとに区切って分割されたデータは、複数のＨＤＤへストライピングによって書き込む際のストライプ単位のデータである。そして、ＣＰＵ１１により実行されるデータ書込部１１３は、５秒ごとに区切って分割したストライプ単位のデータを４つのＨＤＤに書き込む。なお、図９では４つのストライプ単位のデータを４つのＨＤＤに並列に書き込む例を示しているが、ＨＤＤへの書き込みタイミングはこのような態様に限られない。例えば、ライトバッファ１３１に１つのストライプ単位のデータ（例えば５秒分のストリームデータ）が書き込まれた段階で、書き込み先となる１つのＨＤＤへの書き込みを開始してもよい。
【００４７】
図９の例では、ひとまとまりの分割されたデータが各ＨＤＤに書き込まれた際の、各ＨＤＤでデータが書き込まれた先頭アドレスを、「０」、「６０」、「３００」といった形で表記している。この場合、ＨＤＤ１のアドレスが「０」番地から「６０」番地の直前の番地までの領域には、受信時刻が０〜４秒（正確には、０秒から５秒の直前の時刻まで）のデータが格納され、ＨＤＤ２の同じアドレス領域には、受信時刻が５〜９秒（５秒から１０秒の直前の時刻まで）のデータが格納される。同様に、ＨＤＤ３の同じアドレス領域には、受信時刻が１０〜１４秒（１０秒から１５秒の直前の時刻まで）のデータが格納され、ＨＤＤ４の同じアドレス領域には、受信時刻が１５〜１９秒（１５秒から２０秒の直前の時刻まで）のデータが格納される。
【００４８】
ＣＰＵ１１により実行されるデータ読出部１１４は、読み出しクライアント４からデータの読み出し要求を受信した場合、データ管理テーブル１３４を参照して読み出し対象のデータが格納されているＨＤＤを特定する。図９のデータ管理テーブル１３４の例では、５秒の単位で各ＨＤＤに受信データが書き込まれることを前提としたテーブルになっている。そのため、データ読出部１１４は、０〜１９秒（０秒から２０秒の直前の時刻まで）の期間のデータの読み出し要求を受信すると、データ管理テーブル１３４を参照し、読み出し対象データが各ＨＤＤのアドレスが「０」番地から始まる領域に格納されていることを特定する。
【００４９】
読み出し要求の対象となるデータが格納されている記憶領域を有する複数のＨＤＤを特定した後、データ読出部１１４は、特定した複数のＨＤＤに含まれる一部のＨＤＤを選んで、読み出し処理を行う。図９の例では、データ読出部１１４は、最初にＨＤＤ１を読み出し対象として選択する。そして、書込み可能ＨＤＤテーブル１３３のＨＤＤ１に対応する書込み可否を示す情報を「１」から「０」に書き換える。その後、データ読出部１１４は、ＨＤＤ１に対するストライプ単位でのデータの書き込みの終了を待って、ＨＤＤ１からの読み出し処理を開始する。本実施例において、「書き込み処理の中断」とは、各ＨＤＤへのストライプ単位のデータの書き込みが終わった段階で書き込み処理を中断することをいうものとする。
【００５０】
図９中、点線枠８０で囲った部分が、読み出し要求による読み出し対象となる０秒から２０秒の直前の時刻までのデータである。読み出し処理は、まず、点線枠８１で示す１００秒から１１５秒の直前の時刻までの間、ＨＤＤ１のアドレス「０」番地以降に書込まれていた受信時刻が０〜４秒のデータをＨＤＤ１から読み出す。そして、点線枠８２で示す１１５秒から１３０秒の直前の時刻までの間、ＨＤＤ２のアドレス「０」番地以降に書込まれていた受信時刻が５〜９秒のデータをＨＤＤ２から読み出す。
【００５１】
次に、点線枠８３で示す１３０秒から１４５秒の直前の時刻までの間、ＨＤＤ３のアドレス「０」番地以降に書込まれていた受信時刻が１０〜１４秒のデータをＨＤＤ３から読み出す。その後、点線枠８４で示す１４５秒から１６０秒の直前の時刻までの間、ＨＤＤ４のアドレス「０」番地以降に書込まれていた受信時刻が１５〜１９秒のデータをＨＤＤ４から読み出す。
【００５２】
図９において、「−」（横バー）はその時間には書き込みがされていないことを意味する。図９の点線枠８１〜８４中のカッコの中に記載されたアドレス値は、読み出し処理が行われずに継続して書き込み処理が行われたと仮定した場合のアドレス値を参考情報として示したものであり、実際に記憶される情報としては「−」となる。例えば、図９では、ＨＤＤ１の１００秒時点では実際には書き込みはされていないので括弧書きで「（３００）」と表示される。なお、データ管理テーブル１３４において、「−」の情報は、データが書き込まれていないことを示す何らかの識別情報であれば良い。
【００５３】
データ読出部１１４によって、各ＨＤＤから読み出されたデータは、一旦、メモリ１３のリードバッファ１３２に格納される。そして、データ統合部１１５によって、リードバッファ１３２に格納した各読み出しデータを、受信時刻の時間順序に沿って再構成する。リプライ送信部１１６は、再構成したデータを読み出しクライアント装置４に送信する。
【００５４】
データ読出部１１４が点線枠８１の期間に読み出し処理を行っている間はＨＤＤ１への書き込みができないため、１１５秒の時点でのＨＤＤ１の書き込み開始アドレスは、１００秒時点で書き込み開始する予定であった３００番地となる。同様に、ＨＤＤ２では１３０秒の時点での書き込み開始アドレスは、１１５秒時点で書き込み開始する予定であった３６０番地となる。以下、ＨＤＤ３、ＨＤＤ４についても同様である。
【００５５】
なお、本実施形態では１台のＨＤＤで読み出している間は、残りの３台のＨＤＤで書き込み処理を行う。本実施例では、各ＨＤＤの書き込み性能は受信データの最大スループット１２［ＭＢ／ｓ］の３分の１の４［ＭＢ／ｓ］であることから、１台のＨＤＤから読み出し処理を行いつつ、ストリームデータを漏れなく３台のＨＤＤに書き込むことができる。
【００５６】
図１０は、図９の読み出し処理の後、更に別の読み出し処理を実行した後のデータ管理テーブルの状態を示す図である。図１０では、図９で読み出し処理をしていた１００秒から１６０秒の直前の時刻までの間の書き込みデータに対し、２００秒の時点で読み出し要求を受け、３８０秒の直前の時刻までに読み出し動作を完了した状態のデータ管理テーブル１３４の状態を示している。
【００５７】
図１０において点線枠９０が読み出し対象のデータであり、図９で説明した読み出し処理があったため、１００秒から１６０秒の直前の時刻までの各時間帯とも同時には３台のＨＤＤに分割して記憶されている。具体的には、１００秒から１１５秒の直前の時刻までのデータはＨＤＤ２〜ＨＤＤ４の３台に、１１５秒から１３０秒の直前の時刻までのデータはＨＤＤ１、ＨＤＤ３、ＨＤＤ４の３台に書き込まれている。同様に、１３０秒から１４５秒の直前の時刻までのデータはＨＤＤ１、ＨＤＤ２、ＨＤＤ４の３台に、そして１４５秒から１６０秒の直前の時刻までのデータはＨＤＤ１〜ＨＤＤ３の３台に書込まれている。
【００５８】
２００秒の時点で読み出しクライアント装置４から点線枠９０で囲まれた領域のデータの読み出し要求があった場合、データ読出部１１４は、データ管理テーブル１３４を参照して、読み出し対象となるデータの格納場所を特定する。具体的には、データ読出部１１４は、まず、データ管理テーブル１３４の受信時刻が１００秒の列の情報を、ＨＤＤ番号の若いＨＤＤ１から順に読み出して判定する。
【００５９】
受信時刻が１００秒のＨＤＤ１の欄の情報は「−」となっているので、データ読出部１１４は、ＨＤＤ１には受信時刻１００秒のデータは格納されていないと判定し、次に、ＨＤＤ２の欄の情報を判定する。受信時刻１００秒の列のＨＤＤ２の欄には、アドレス値「３００」が記憶されているので、データ読出部１１４は、受信時刻１００秒のデータがＨＤＤ２のアドレス「３００」番地以降の領域に格納されていると判定する。前述の通り、ストライプ単位のデータは５秒間のデータを前提に図９、図１０の例が示されているので、データ読出部１１４は、受信時刻１０５秒からのデータがＨＤＤ３に格納されているかどうかを判定する。データ管理テーブル１３４の受信時刻が１００秒の列で、ＨＤＤ３の欄にもアドレス値「３００」が記憶されているので、データ読出部１１４は、受信時刻１０５秒のデータがＨＤＤ３のアドレス「３００」番地以降の領域に格納されていると判定する。以下同様に、データ読出部１１４は、読み出し要求の読み出し対象となるデータの格納場所を特定する。
【００６０】
データ読出部１１４による読み出し処理は、まず、ＨＤＤ１のアドレス３００番地から４８０番地の直前の番地までのデータを、点線枠９１で示すように２００秒から２４５秒の直前の時刻までの４５秒間をかけて読み出す。点線枠９１の期間内のＨＤＤ１に対する読み出し処理は、点線枠９０の期間内にＨＤＤ１に書き込まれた、受信時刻が１１５〜１１９秒、１３０〜１３４秒、１４５〜１４９秒のデータの読み出し処理に対応する。
【００６１】
次に、データ読出部１１４は、ＨＤＤ２のアドレス３００番地から４８０番地の直前の番地までのデータを、点線枠９２で示すように２４５秒から２９０秒の直前の時刻までの４５秒間をかけて読み出す。点線枠９２の期間内のＨＤＤ２に対する読み出し処理は、点線枠９０の期間内にＨＤＤ２に書き込まれた、受信時刻が１００〜１０４秒、１３５〜１３９秒、１５０〜１５４秒のデータの読み出し処理に対応する。
【００６２】
次に、データ読出部１１４は、ＨＤＤ３のアドレス３００番地から４８０番地の直前の番地までのデータを、点線枠９３で示すように２９０秒から３３５秒の直前の時刻までの４５秒間をかけて読み出す。点線枠９３の期間内のＨＤＤ３に対する読み出し処理は、点線枠９０の期間内にＨＤＤ３に書き込まれた、受信時刻が１０５〜１０９秒、１２０〜１２４秒、１５５〜１５９秒のデータの読み出し処理に対応する。
【００６３】
そして、データ読出部１１４は、ＨＤＤ４のアドレス３００番地から４８０番地の直前の番地までのデータを、点線枠９４で示すように３３５秒から３８０秒の直前の時刻までの４５秒間をかけて読み出す。点線枠９４の期間内のＨＤＤ４に対する読み出し処理は、点線枠９０の期間内にＨＤＤ４に書き込まれた、受信時刻が１１０〜１１４秒、１２５〜１２９秒、１４０〜１４４秒のデータの読み出し処理に対応する。
【００６４】
点線枠９１〜９４の各期間内にデータ読出部１１４によって読み出された読み出しデータは一旦メモリ１３のリードバッファ１３２に格納される。そして、データ統合部１１５によって、リードバッファ１３２に格納された読み出しデータを受信時刻の時間順序に沿って再構成する。再構成された１００秒から１６０秒の直前の時刻までのデータは、リプライ送信部１１６によって読み出しクライアント装置４に返送される。
【００６５】
複数のＨＤＤへの書き込み処理中に、過去にこれら複数のＨＤＤに書き込まれたデータに対する読み出し要求を受信した場合、本実施例では、複数のＨＤＤの一部を読み出し用のＨＤＤとして選択する。選択した一部の読み出し用のＨＤＤから、読み出し対象のデータを読み出しつつ、残りのＨＤＤに対しては、ストリームデータの書き込みを継続する。ストリームデータを漏れなく蓄積するために必要な台数のＨＤＤに対する受信データの書き込みを継続しつつ、一部のＨＤＤから読み出すことで、ＨＤＤ等のディスク装置のヘッダの移動回数を減らし、ストレージサーバの読み出し処理の性能を高めることが可能となる。
【００６６】
図６〜図１０を用いて説明したストレージサーバ１の例では、簡単のために、複数のＨＤＤ１５〜１８への書き込み処理と読み出し処理が競合した場合に、１台のＨＤＤへの書き込みを中断して、書き込みを中断したＨＤＤから読み出し処理を行う例を説明した。しかし、ＨＤＤの台数がより多い場合、あるいは、ＨＤＤの書き込み性能がより高速の場合、ストリームデータの流量に対して複数台のＨＤＤ分の余剰性能が生じる場合がある。この場合、ストリームデータを漏れなく蓄積するために必要なＨＤＤの台数以外の余った複数台のＨＤＤを読み出し対象のＨＤＤとすることもできる。ストリームデータの書き込みに必須ではない余った複数台のＨＤＤから同時に読み出し処理を行うことで、より高速に読み出し要求に対する読み出し処理を完了させることができる。
【００６７】
ここで、ストレージサーバに含まれるＨＤＤの台数をＭ台とし、Ｍ台のＨＤＤのうち、ストリームデータを漏れなく蓄積するのに必要なＨＤＤの台数を除くＨＤＤの台数をＮ台とする（Ｍ、Ｎは自然数）。この場合、ストレージサーバに含まれる複数のＨＤＤへのストリームデータの書き込み中に、過去に書き込まれたデータに対する読み出し要求があった場合、（Ｍ−Ｎ）台のＨＤＤに分割したストリームデータを書き込みつつ、Ｎ台のＨＤＤから読み出し処理を行うことができる。
【００６８】
余剰ＨＤＤの台数Ｎは、ストリームデータの流量と、ＨＤＤの書き込み性能との関係から求めることもできるが、一般的にはストレージサーバ１のシステム設計時に概ね予測することができる。ここで、ネットワーク６を流れるストリームデータの最大流量（帯域幅）をＢ［ＭＢ／ｓ］とし、ＨＤＤの台数をＭとし、各ＨＤＤの最大書き込み性能ｂ［ＭＢ／ｓ］とし、同時に読み出し処理を行うことができる台数をＮ台とする。この場合、ストレージサーバ１のシステム構成は、「Ｂ＜＝（Ｍ−Ｎ）＊ｂ」の条件を満たせばよく、Ｂ、Ｍ、ｂの値が求まれば、Ｎの値を決定することができる。
【００６９】
大規模なストレージサーバでは、数十〜数百台のＨＤＤが用いられる場合もあり、この場合、たとえ数％の余剰性能を見込んだとしても、データ書き込み中の読み出し処理に使用できる複数台（Ｎ台）のＨＤＤを確保できるようにシステム設計することが可能である。なお、ストリームデータの最大流量（帯域幅）が変動することが既知となっている場合には、ストリームデータの流量の変動に合わせてＮの台数を変更するようにしてもよい。
【００７０】
次に、図３に示す各機能ブロック（１１１〜１１６）による書き込み処理および読み出し処理を実行するためのプログラム処理について、フローチャートを用いて説明する。書き込みクライアント装置３から受信した書き込み要求の処理は、リクエスト受信部１１１と、データ分割部１１２と、データ書込部１１３とによって処理される。すなわち、１１１〜１１３の各処理部によって、メモリ１３上のライトバッファ１３１に受信データをため込む処理と、ライトバッファ１３１上のデータをストライプ単位に分割する処理と、分割したデータをＨＤＤに書き込む処理とが行われる。
【００７１】
図１１は、リクエスト受信部１１１が書き込みクライアント装置３から書き込み要求を受信した場合に、書き込みクライアント装置３から受信したストリームデータをライトバッファ１３１にため込む処理のフローチャートである。Ｓ１０１は図１１のフローの開始であり、リクエスト受信部１１１が書き込みクライアント装置３から書き込み要求を受信する度に起動される。Ｓ１０２は、受信した所定量のストリームデータをライトバッファ１３１に書き込む処理である。
【００７２】
Ｓ１０３は、ライトバッファ１３１が満杯か、あるいは、所定量のデータ（例えば、ストライプ単位で分割する対象となる量のデータ）が書き込まれたか否かを判定するステップである。Ｓ１０３でＹＥＳであれば、リクエスト受信部１１１は書き込むライトバッファを切り替えるとともに、図１２に示すＨＤＤへの書き込み処理を起動する（Ｓ１０４）。なお、ライトバッファ１３１は、図２に示すように同一容量のライトバッファが２面用意されているものとする。一方のライトバッファ１３１に書き込みクライアント装置３から受信したストリームデータをため込んでいる間に、他方のライトバッファ１３１からＨＤＤへのデータの書き込み処理が行われる。
【００７３】
Ｓ１０３でＮＯの場合には、Ｓ１０５で受信した書き込み要求のデータのうち、ライトバッファに書き込まれていないデータがまだ存在しているか否かを判定し、まだ存在する場合（Ｓ１０５でＹＥＳ）にはＳ１０２のステップに戻る。Ｓ１０５の判定において、全データの書き込みが完了していれば（Ｓ１０５でＮＯ）、Ｓ１０６にて処理を終了する。１つの書き込み要求に伴うデータ量は不定長であり、ライトバッファ１３１の容量未満の場合もある。その場合には、次の書き込み要求のデータが来てライトバッファ１３１が満杯になるまで待つことになる。逆に、書き込みクライアント装置３において、ストレージサーバ１のライトバッファ１３１の容量を考慮しないで書き込みデータを送信した場合、１つの書き込み要求でバッファ容量以上のデータを受信する場合もある。そのため、Ｓ１０５の判定処理が必要になる。
【００７４】
ライトバッファ１３１が満杯で、受信したデータの全てを書き込めない場合、リクエスト受信部１１１は、書き込み要求の送信元の書き込みクライアント装置３に対して、書き込み要求のリトライをするよう応答することができる。そうすることで、ライトバッファ１３１のデータがＨＤＤに書き込まれてライトバッファ１３１に空き容量ができた後、リトライにより再送信された書き込み要求に係るデータをライトバッファ１３１に格納させることができる。なお、ライトバッファ１３１の容量についてある程度のマージンを持たせておくことで、リトライの回数を減らすこともできる。
【００７５】
図１２は、ライトバッファ１３１からＨＤＤへの書き込み処理のフローチャートである。Ｓ１１１は開始ステップであり、ライトバッファ１３１が満杯になる度に、図１１のＳ１０４の処理によって起動される。Ｓ１１２では、データ分割部１１２が、ライトバッファ１３１に格納したデータを複数のＨＤＤへ分割して書き込む単位であるストライプ単位のサイズのデータに分割する。次いで、Ｓ１１３ではデータ書込部１１３が、上述した書込み可能ＨＤＤテーブル１３３を参照して書き込み可能なＨＤＤを確認し、データを書き込むＨＤＤを決定する。
【００７６】
Ｓ１１３でデータの書き込み先のＨＤＤが決定されると、データ書込部１１３は、書き込み可能ＨＤＤに対して並列にストライプデータ単位での書き込み処理を行う（Ｓ１１４）。ライトバッファ１３１に格納したデータを複数のＨＤＤに全て書き込み終えると、データ書込部１１３はＳ１１５にて上述のデータ管理テーブル１３４を更新し、Ｓ１１６にて処理を終了する。
【００７７】
図１３は、リクエスト受信部１１１が読み出しクライアント装置４からの読み出し要求を受信した場合の処理フローを示す。Ｓ１２１はこのフローの開始であり、読み出しクライアント装置４から読み出し要求を受信する度に起動される。リクエスト受信部１１１は、読み出し要求を受信すると、データ読出部１１４を起動する。Ｓ１２２では、データ読出部１１４は、データ管理テーブル１３４を参照して読み出し要求で指定された時間範囲のデータを格納しているＨＤＤを全てリストアップする。読み出し要求の対象となるデータの大きさによって読み出し対象となるＨＤＤが異なる。例えば、４台のＨＤＤの場合、読み出し要求の対象となるデータの大きさがストライプ単位で４ストライプ分未満の大きさのデータであれば、一部のＨＤＤのみが読み出し対象となる。
【００７８】
次いで、データ読出部１１４は、Ｓ１２３とＳ１２８のループの間のＳ１２４からＳ１２７までの処理をリストアップした全ＨＤＤについて繰り返す。Ｓ１２３とＳ１２８は、その間の処理を繰り返すことを意味する。Ｓ１２４では、リストアップされたＨＤＤの中から読み出し対象とするＮ台のＨＤＤを選択する。そして、選択したＮ台のＨＤＤについて書込み可能ＨＤＤテーブル１３３の対応するＨＤＤ番号のフラグを０（ゼロ）にして、書き込み不可に設定する。即ち、選択したＨＤＤへのストリームデータの書き込み処理を中断する。なお、ストリームデータを漏れなく記憶できる台数の書き込み対象のＨＤＤが確保できる限り、読み出し対象のＮ台のＨＤＤの選び方は任意であり、予め選択順を決めておいてもよいし、ランダムに選択してもよい。
【００７９】
Ｓ１２５ではＳ１２４で選択した読み出し対象のＮ台のＨＤＤでのその時点までに行われていた書き込み処理が完了済みか否かを判定し、書き込み中であれば（Ｓ１２５でＮＯ）書き込み処理が完了するまで待つ。図１２の書き込み処理と図１３の読み出し処理とは非同期的に行われるため、Ｓ１２５において、読み出し対象として選択したＮ台へのストライプ単位での書き込み処理の終了を待つ。
【００８０】
選択したＮ台のＨＤＤへの書き込みが完了していれば（Ｓ１２５でＹＥＳ）、Ｓ１２６に移り、選択したＮ台のＨＤＤから読み出し要求対象データの読み出し処理を行い、読み出したデータをリードバッファ１３２に格納する。選択したＮ台のＨＤＤからの読み出し処理が完了するとＳ１２７に移り、書込み可能ＨＤＤテーブル１３３におけるそのＨＤＤのフラグを１に戻し、次の対象読み出し対象となるＨＤＤを選択し、Ｓ１２４から同様の処理を繰り返す。
【００８１】
Ｓ１２６において読み出すデータ量としては、読み出し要求の読み出し対象となるデータのサイズよりもリードバッファ１３２の容量が大きい場合、Ｎ台のＨＤＤのそれぞれから読み出し対象の全てのデータを読み出すようにすることができる。一方、リードバッファ１３２の容量が、読み出し要求の読み出し対象となるデータサイズに満たない場合には、Ｎ台のＨＤＤのそれぞれから受信時刻が一定の範囲内の一部のデータを読み出す。
【００８２】
Ｓ１２３〜Ｓ１２７の処理において全読み出し対象のＨＤＤからリードバッファ１３２にデータを読み出した後、Ｓ１２９において、データ統合部１１５は、リードバッファ１３２に格納されたデータを時間順序に再構成する。そして、リプライ送信部１１６は、データ統合部１１５により再構成したデータを読み出しクライアント装置４に送信する（Ｓ１３０）。読み出し要求に対する読み出し対象データが全て読み出された場合（Ｓ１３１でＹＥＳ）、読み出し処理は完了する（Ｓ１３２）。
【００８３】
読み出し要求の読み出し対象データのうち、まだ複数のＨＤＤから読み出されていないデータがある場合（Ｓ１３１でＮＯ）、処理はＳ１２３に戻り、まだ読み出されていないデータについてＳ１２３〜Ｓ１３０の処理を再度行う。以下、読み出し対象のデータが全て読み出されるまで同じ動作を繰り返す。この場合、読み出し対象のデータが全て読み出されるまで、リプライ送信部１１６は、複数回に分けて、あるいは、送信するデータがＨＤＤから読み出されるまでの間一時的にウェイトを入れながら、読み出しクライアント装置４に読み出されたデータを送信する。
【００８４】
以上説明したように、開示する一実施例によれば、複数のＨＤＤ等のディスクストレージを有するストレージサーバ１において、複数のＨＤＤへの書き込み処理と読み出し処理とが競合した場合、一部のＨＤＤからのみ読み出し処理を行う。そのようにすることで、全ＨＤＤに対する書き込み処理と読み出し処理とを交互に繰り返す際の、ＨＤＤの磁気ヘッドの頻繁な移動を最小限に抑えることができる。
【００８５】
異なるアドレスの書き込み処理と読み出し処理とを切り替える際、ＨＤＤのヘッドが移動するシークタイムと、ヘッドの移動後に読み出すデータが保存されている位置まで磁気ディスクを回転するのを待つサーチタイム等の時間が必要となる。ライトバッファ１３１のサイズはメモリ容量等の制限により上限があり、例えばライトバッファ１３１にデータをため込む時間を５００ｍｓ（ミリ秒）とする。また、ＨＤＤへの書き込み動作から読み出し動作に切り替え、再度、読み出し動作から書き込み動作へ切り替えた際のＨＤＤのシークタイムとサーチタイムの合計を５０ｍｓとする。この場合、従来の全ＨＤＤの書き込み処理と読み出し処理を頻繁に切り替える処理方法だと、各ＨＤＤにおいて書き込み動作と読み出し動作を切り替えるたびに１０％の時間が浪費される。
【００８６】
従来の全ＨＤＤの書き込み処理と読み出し処理を頻繁に切り替える処理方法において、図５の４台のＨＤＤ１５〜１８を使用し、ストリームデータの流量は、１２［ＭＢ／ｓ］、各ＨＤＤの最大書き込み速度は４［ＭＢ／ｓ］とする。この場合、１つのライトバッファ１３１に受信データを書き込みながら、もう１つのライトバッファ１３１に格納されたデータを分割して複数のＨＤＤにストライプ単位で書き込む場合、各ＨＤＤへのデータの書き込みに３７５ｍｓ消費する。すると、読み出し処理に用いることができる時間は１２５ｍｓとなるが、そのうちの５０ｍｓがヘッドの移動等に消費されてしまい、実際の読み出し処理に使用できる時間が非常に少なくなってしまう。ＨＤＤのヘッドの移動を伴う書き込み処理と読み出し処理の切り替えを全ＨＤＤにおいて頻繁に行う方法だと、ヘッドの移動に伴う無駄な時間を多く消費し、読み出し処理に用いることのできる時間が圧迫されることから、読み出し処理が遅くなってしまう。
【００８７】
一方、上述の開示の技術によれば、ストリームデータを漏れなく蓄積するために必要な台数の書き込み処理用のＨＤＤを確保しつつ、書き込み処理を行っていない一部のＨＤＤからデータを読み出すことで、アクセスを行うためのヘッドの頻繁な移動を抑止できる。その結果、ストレージサーバ１においてストリームデータの書き込みと読み出しが競合した場合の読み出し性能を改善することができる。
【００８８】
以上、本発明の好ましい実施例について説明したが、本発明は特定の実施例に限定されるものではなく、種々の変形や変更が可能である。例えば、データ読出部１１４が読み出し処理を行う対象となるＮ台のＨＤＤを決定する際、書き込みクライアント装置３から受信する書き込みデータの一定時間あたりの受信量に応じて、読み出し対象となるＨＤＤの台数Ｎを動的に変更するようにしてもよい。また、ライトバッファ１３１と同様にリードバッファ１３２についても複数の領域を設け、リプライ送信部１１６による読み出しクライアント装置４へのデータ送信処理と、データ読出部１１４によるＨＤＤからのデータ読み出し処理とを並行して行うようにしてもよい。
【００８９】
なお、前述したストレージサーバ１を制御するための図３に記載の各機能ブロック（１１１〜１１６）の機能をＣＰＵ１１に実行させるコンピュータプログラム、およびそのプログラムを記録した、非一時的なコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、非一時的なコンピュータ読み取り可能な記録媒体は、例えばＳＤメモリカードなどのメモリカードである。なお、前記コンピュータプログラムは、前記記録媒体に記録されたものに限られず、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送されるものであってもよい。
【符号の説明】
【００９０】
１：ストレージサーバ
２：ネットワーク
３：書き込みクライアント装置
４：読み出しクライアント装置
５：ネットワークタップ装置
６：ネットワーク
１１：ＣＰＵ     
１２：システム制御部
１３：メモリ
１４：ネットワークインタフェース
１５〜１８：ＨＤＤ
１１１：リクエスト受信部
１１２：データ分割部
１１３：データ書込部
１１４：データ読出部
１１５：データ統合部
１１６：リプライ送信部
１３１：ライトバッファ
１３２：リードバッファ
１３３：書き込み可能ＨＤＤテーブル
１３４：データ管理テーブル
【図１】
2016206953.tif 000003
【図２】
2016206953.tif 000004
【図３】
2016206953.tif 000005
【図４】
2016206953.tif 000006
【図５】
2016206953.tif 000007
【図６】
2016206953.tif 000008
【図７】
2016206953.tif 000009
【図８】
2016206953.tif 000010
【図９】
2016206953.tif 000011
【図１０】
2016206953.tif 000012
【図１１】
2016206953.tif 000013
【図１２】
2016206953.tif 000014
【図１３】
2016206953.tif 000015