(58)【調査した分野】(Int.Cl.,DB名)
前記通知部は、前記ユーザ端末からの新たな書き込み要求に基づいて前記制御部が前記カレントディレクトリを変更しない場合に、前記カレントディレクトリのディレクトリ名を前記フロントサーバに通知しない、
請求項1または2記載のストレージシステム。
【発明を実施するための形態】
【0009】
以下、図面を参照し、本発明のストレージ装置、ファイル書き込み方法、およびプログラムの実施形態について説明する。
【0010】
<第1実施形態>
[ストレージシステム1の全体構成]
図1は、第1実施形態に係るストレージシステム1の一例を示す図である。ストレージシステム1は、例えば、複数のユーザ端末からのアップロード要求に従ってファイルをストレージサーバに蓄積すると共に、ユーザ端末からの閲覧要求またはダウンロード要求に従って、蓄積しているファイルをユーザ端末に閲覧またはダウンロードさせるストレージサービスを提供するものである。
【0011】
ストレージシステム1は、例えば、フロントサーバ100と、ストレージサーバ200と、メタデータデータベースサーバ300と、ユーザ端末400−1、・・・400−M(Mは2以上の自然数)とを含む。なお、ストレージシステム1において、複数のユーザ端末400とフロントサーバ100とがネットワークNWを介して情報を通信する。ネットワークNWは、例えば、無線基地局、Wi−Fiアクセスポイント、通信回線、プロバイダ、インターネットなどを含む。なお、以下の説明において、ユーザ端末を他のユーザ端末と区別しない場合には「ユーザ端末400」と記載する。
【0012】
また、ストレージシステム1において、フロントサーバ100とストレージサーバ200、およびフロントサーバ100とメタデータデータベースサーバ300とは、ネットワークNWとは異なるネットワークを介して通信接続されている。なお、
図1に示したフロントサーバ100、ストレージサーバ200、およびメタデータデータベースサーバ300は、単一のサーバ装置により実現してよく、それぞれ複数のサーバ装置を含んでいてよい。
【0013】
[フロントサーバ100の構成]
図2は、フロントサーバ100の一例を示す図である。フロントサーバ100は、例えば、ユーザ側通信部110と、サーバ側通信部120と、フロント制御部130と、を含む。
【0014】
ユーザ側通信部110およびサーバ側通信部120は、例えばNIC(Network Interface Card)を含む。ユーザ側通信部110は、ネットワークNWを介してユーザの使用するユーザ端末400との間で通信を行う。サーバ側通信部120は、他のネットワーク介してストレージサーバ200およびメタデータデータベースサーバ300との間で通信を行う。
【0015】
フロント制御部130は、例えば、アプリケーション処理部132と、ファイル管理部134とを含む。アプリケーション処理部132は、例えばCPU(Central Processing Unit)などのプロセッサがプログラムメモリに格納されたアプリケーションプログラムを実行することにより実現される。ファイル管理部134は、例えばCPUなどのプロセッサがプログラムメモリに格納されたOS(Operating System)プログラムを実行することにより実現される。アプリケーション処理部132およびファイル管理部134を含む機能部のうち一部または全部は、LSI(Large Scale Integration)、ASIC(Application Specific Integrated Circuit)、またはFPGA(Field-Programmable Gate Array)などのハードウェアにより実現されてもよい。
【0016】
アプリケーション処理部132は、ユーザ側通信部110を用いてユーザ端末400から送信されたファイルのアップロード要求を受け付ける(受付部)。ファイルのアップロード要求は、ディレクトリを指定したファイルの書き込み要求である。アプリケーション処理部132は、ファイルのアップロード要求に応答した書き込み要求をストレージサーバ200に送信する。
【0017】
ファイル管理部134は、アップロード要求によりストレージサーバ200に書き込まれているファイルに関連するディレクトリ情報をキャッシュメモリ136に書き込む。ディレクトリ情報は、ディレクトリを管理する管理情報である。
図3は、ディレクトリ情報136Aの一例を示す図である。ディレクトリ情報は、例えば、各ディレクトリ名と、所定の上限数の範囲内でディレクトリ名に対応付けられるファイル名とを対応付けている。ディレクトリ名は、ファイルのアップロード要求により指定されたディレクトリ名である。ファイル名は、アップロード要求により書き込まれるファイルのファイル名である。なお、ディレクトリ名には、追加時刻などその他の情報も対応付けられてよい。また、ファイル名には、ファイル管理部134においてファイル名に対応したファイルを特定するinode番号が対応付けられてよいが、これに限定されず、アップロード時刻などその他の情報も対応付けられてよい。
【0018】
また、ファイル管理部134は、ファイルがストレージサーバ200に書き込まれた場合に、メタデータデータベースサーバ300にメタデータを書き込む。
図4は、メタデータ310の一例を示す図である。メタデータ310には、例えば、グループidと、HDDidと、ディレクトリ名と、ファイル名と、LBA(Logical Block Address)とが含まれている。グループidは、ファイルストレージ部210全体の記憶容量を所定の記憶容量に区分した一つのグループを特定する識別情報である。各グループは、一又は複数のハードディスク装置210Aを含む。各グループは、他のグループと並行してファイルが書き込まれる。なお、「メモリ」の一例は、キャッシュメモリ136、またはメタデータデータベースサーバ300である。キャッシュメモリ136に代えて外部メモリを用いてもよい。
【0019】
[メタデータデータベースサーバ300の構成]
ストレージサーバ200に先だってメタデータデータベースサーバ300について説明する。メタデータデータベースサーバ300は、例えば、通信部とメタデータ310を記憶する記憶装置とを含む。メタデータデータベースサーバ300は、通信部を用いてメタデータ310を受信した場合に、記憶部にメタデータ310を書き込む。メタデータデータベースサーバ300は、フロントサーバ100の要求に従って、メタデータ310を読み出して、読み出したメタデータ310をフロントサーバ100に送信する。
【0020】
[ストレージサーバ200の構成]
図5は、ストレージサーバ200の一例を示す図である。ストレージサーバ200は、例えば、ファイルストレージ部210−1、・・・210−N(Nは2以上の自然数)と、サーバ側通信部220と、ストレージ制御部230と、情報記憶部240とを含む。なお、以下の説明において、ファイルストレージ部を他のファイルストレージ部と区別しない場合には「ファイルストレージ部210」と記載する。
【0021】
各ファイルストレージ部210は、一又は複数のハードディスク装置210Aを含む。ハードディスク装置210Aは、ファイルの書き込み、読み出し、および削除を実行する。
【0022】
ファイルストレージ部210は、ストレージ制御部230からライトコマンドが供給された場合、ライトコマンドに含まれるファイルをハードディスク装置210Aに書き込む。ファイルストレージ部210は、ストレージ制御部230からリードコマンドが供給された場合、リードコマンドにより指定されたファイルをハードディスク装置210Aから読み出し、読み出したファイルをストレージ制御部230に出力する。ファイルストレージ部210は、ストレージ制御部230から削除コマンドが供給された場合、リードコマンドにより指定されたファイルをハードディスク装置210Aから削除する。
【0023】
サーバ側通信部220は、例えばNICを含む。サーバ側通信部220は、ネットワークNWとは他のネットワーク介してストレージサーバ200との間で通信を行う。
【0024】
ストレージ制御部230は、例えば、記憶制御部232と、ファイルカウンタ部234とを含む。記憶制御部232およびファイルカウンタ部234は、例えばCPUなどのプロセッサがプログラムメモリに格納されたサーバプログラムを実行することにより実現される。記憶制御部232およびファイルカウンタ部234を含む機能部のうち一部または全部は、LSI、ASIC、またはFPGAなどのハードウェアにより実現されてもよい。
【0025】
情報記憶部240は、例えば、論物変換テーブル記憶部242と、ファイル数記憶部244とを含む。情報記憶部240は、HDD(Hard Disc Drive)、フラッシュメモリ、EEPROM(Electrically Erasable Programmable Read Only Memory)、ROM(Read Only Memory)、またはRAM(Random Access Memory)等により実現される。情報記憶部240には、サーバプログラム等の各種プログラム、各種の処理結果などが記憶される。
【0026】
記憶制御部232は、サーバ側通信部220を用いてフロントサーバ100から受信した書き込み要求に応答して、ファイルをハードディスク装置210Aに書き込む。記憶制御部232は、書き込み要求を受信した場合に、書き込み要求により指定されたディレクトリに対応付けてファイルをハードディスク装置210Aに書き込む。このとき、記憶制御部232は、論物変換テーブル記憶部242に記憶された論物変換テーブル242Aを参照して、書き込み要求に含まれるLBAをPBAに変換し、変換したPBAに対応する位置にファイルを書き込む。記憶制御部232は、例えば、複数回ファイルの書き込みを行う場合、ファイルのLBAを連番に設定し、LBAが近いファイルをハードディスク装置210Aにおける近くのPBAに書き込む。
図6は、論物変換テーブル242Aの一例を示す図である。論物変換テーブル記憶部242におけるデータ有無は、例えば、PBAにより特定される物理ブロック内にデータが書き込まれているか否かを示すデータ有無フラグである。
【0027】
ファイルカウンタ部234は、各ディレクトリに対応付けられて書き込まれたファイル数をカウントする。ファイルカウンタ部234は、カウントした結果をカウンタテーブル244Aに記憶する。カウンタテーブル244Aは、ディレクトリに対応付けて書き込まれたファイル数を管理する管理情報である。
図7は、カウンタテーブル244Aの一例を示す図である。カウンタテーブル244Aにおけるディレクトリ名には、例えば、カウントした結果としてのファイル数と、上限値とが対応付けられている。
【0028】
(ハードディスク装置210Aの構成)
図8は、ハードディスク装置210Aの一例を示す図である。ハードディスク装置210Aは、例えば、磁気ディスク211と、ヘッドスタックアッセンブリ(Head Stack Assembly;HSA)212と、駆動回路223と、HDDコントローラ224と、インターフェース225とを含む。
【0029】
磁気ディスク211は、アルミニウムやガラス等の基板の表裏面に磁気記録層が形成された円盤(プラッタ)である。磁気ディスク211は、単一の円盤により構成されてもよいし、円盤の厚み方向に対して複数枚の円盤が積み重ねられて構成されてもよい。
【0030】
ヘッドスタックアッセンブリ212は、記録再生ヘッド212aと、ヘッドアンプIC212bと、ボイスコイルモータ212cと、スピンドルモータ212dとを含む。
【0031】
記録再生ヘッド212aは、ヘッドアーム上に搭載され、ボイスコイルモータ212cからの駆動力によって磁気ディスク211上をシークしながら、磁気ディスク211に対して相対的に移動する。記録再生ヘッド212aは、記録および再生兼用の磁性体コアを用いた薄膜ヘッドであってよいが、これに限定されない。
【0032】
記録再生ヘッド212aは、ファイルを書き込む場合、ヘッドアンプIC212bにより供給された電気信号に基づく磁界を発生させることで、磁気ディスク221の磁気記録層の磁化方向を変化させる。これによって、記録再生ヘッド212aは、ファイルを磁気ディスク221に書き込む。記録再生ヘッド212aは、ファイルを読み出す場合、磁気ディスク211上を移動しながら、磁気ディスク211の磁気記録層の磁化方向に対応した電気信号を生成する。記録再生ヘッド212aは、生成した電気信号を、ヘッドアンプIC212bを介して駆動回路223に供給する。
【0033】
ヘッドアンプIC212bは、記録再生ヘッド212aにより供給された電気信号の信号強度を増幅する。また、ヘッドアンプIC212bは、駆動回路223により供給されたユーザデータを電気信号に変換し、記録再生ヘッド212aに供給する。
【0034】
ボイスコイルモータ212cは、駆動回路223により供給された駆動電流に応じて、ヘッドスタックアッセンブリ222を駆動する。これにより、ボイスコイルモータ212cは、記録再生ヘッド212aを、磁気ディスク211の径方向に沿って(あるいは径方向に対して角度を有する斜めの方向に沿って)外側または内側に移動させ、トラック間を移動させる。径方向とは、磁気ディスクの中心を通る方向である。スピンドルモータ212dは、駆動回路223により供給された駆動電流に応じて、磁気ディスク211を回転させる。スピンドルモータ212dは、例えば、DCブラシレスモータである。
【0035】
駆動回路223は、ヘッドアンプICとの間で信号を授受すると共に、ボイスコイルモータ212cおよびスピンドルモータ212dを駆動する。これにより、駆動回路223は、コマンドに含まれるPBAに対応する位置に記録再生ヘッド212aをシークさせてファイルを書き込む。
【0036】
HDDコントローラ224は、インターフェース225を用いて、フロントサーバ100から送信されたリードコマンド、ライトコマンド、および削除コマンドを受信する。HDDコントローラ224は、各コマンドに応じて、磁気ディスク211に情報を書き込んだり、磁気ディスク211に書き込まれた情報を読み出したりする。
【0037】
[ストレージシステム1の全体処理]
以下、フロントサーバ100がディレクトリ名を指定したファイルの書き込み要求を受け付けた場合に、ファイルをハードディスク装置210Aに書き込む処理について説明する。
図9は、ユーザ端末400、フロントサーバ100、およびストレージサーバ200による処理の流れの一例を示す図である。
【0038】
ユーザ端末400は、ファイルをアップロードする際に、ユーザの操作に従ってファイルをアップロードするアプリケーションプログラムに対してAPI(Application Program Interface)コールを供給する。これにより、ユーザ端末400のアプリケーションプログラムは、フロントサーバ100に、アプリケーション処理部132を呼び出す処理リクエストS1を送信する。なお、処理リクエストS1は、ユーザ端末400におけるアプリケーションまたはブラウザなどのUA(User Agent)により生成されたHTTP(Hypertext Transfer Protocol)リクエストに埋め込まれた情報である。
【0039】
フロントサーバ100は、処理リクエストS1を受信した場合に、カレントディレクトリのディレクトリ名を要求するディレクトリ名リクエストS2をストレージサーバ200に送信する。ストレージサーバ200は、ディレクトリ名リクエストS2を受信した場合、カレントディレクトリに対応するファイル数をカウントアップする(ステップS10)。ストレージサーバ200は、カレントディレクトリのディレクトリ名S3をフロントサーバ100に送信する。フロントサーバ100は、カレントディレクトリのディレクトリ名S3を受信した場合、ディレクトリ名S3をファイル書き込み先のディレクトリ名S4としてユーザ端末400に送信する。
【0040】
ユーザ端末400は、ディレクトリ名S4を指定したアップロード要求S5を含むHTTPリクエストをフロントサーバ100に送信する。フロントサーバ100は、アップロード要求S5を受信した場合、ストレージサーバ200に、ディレクトリ名を指定したファイルの書き込み要求S6を送信する。
【0041】
ストレージサーバ200は、フロントサーバ100により送信された書き込み要求S6を受信した場合、受信した書き込み要求S6により指定されたディレクトリ名のディレクトリに対応付けてファイルをハードディスク装置210Aに書き込む(ステップS11)。ストレージサーバ200は、ファイルの書き込みが完了した場合、レスポンスS7をフロントサーバ100に送信する。
【0042】
フロントサーバ100は、レスポンスS7を受信した場合、ハードディスク装置210Aに書き込まれたファイルのファイル名に関連するメタデータ310を更新する(ステップS21)。次にフロントサーバ100は、ファイルのアップロードが完了したことを通知する完了通知S8をユーザ端末400に送信する。
【0043】
[フロントサーバ100の動作]
図10は、フロントサーバ100における処理の流れの一例を示す図である。
図10に示した処理は、アプリケーション処理部132により所定期間毎に繰り返して実行される。
【0044】
まず、アプリケーション処理部132は、処理リクエストS1を受け付けたか否かを判定する(ステップS100)。アプリケーション処理部132は、処理リクエストS1を受け付けた場合、ストレージサーバ200にディレクトリ名リクエストS2を送信する(ステップS102)。
【0045】
次にアプリケーション処理部132は、ストレージサーバ200からディレクトリ名S3を受信したか否かを判定する(ステップS104)。アプリケーション処理部132は、ディレクトリ名S3を受信した場合、ユーザ端末400にディレクトリ名S4を送信する(ステップS106)。
【0046】
次にアプリケーション処理部132は、ユーザ端末400からディレクトリ名S4を指定したアップロード要求S5を受信したか否かを判定する(ステップS110)。アプリケーション処理部132は、アップロード要求S5を受信した場合、ディレクトリ名S4を含む書き込み要求S6をストレージサーバ200に送信する(ステップS112)。このとき、アプリケーション処理部132は、書き込み対象のファイルのファイル名をディレクトリ情報136Aにキャッシュする。
【0047】
次に、アプリケーション処理部132は、ストレージサーバ200からレスポンスS7を受信したか否かを判定する(ステップS114)。アプリケーション処理部132は、レスポンスS7を受信した場合、ディレクトリ情報136Aおよびメタデータ310を更新する(ステップS116)。このとき、アプリケーション処理部132は、ハードディスク装置210Aに書き込まれたファイルのファイル名を、指定されたディレクトリ名に対応付けてディレクトリ情報136Aに追加する。また、アプリケーション処理部132は、ハードディスク装置210Aに書き込まれたファイルのファイル名などの情報をメタデータデータベースサーバ300に送信する。次に、アプリケーション処理部132は、完了通知S8をユーザ端末400に送信する(ステップS118)。
【0048】
なお、処理リクエストを受信しない場合、およびアップロード要求を受信しない場合、フロントサーバ100は、本フローチャートの処理を終了する。
【0049】
また、フロントサーバ100は、ストレージサーバ200により通知されたディレクトリ名S3をユーザ端末400に送信してよいが、これに限定されず、ディレクトリ名S3をフロントサーバ100のAPI内で処理をするのみであってよい。フロントサーバ100は、ストレージサーバ200からディレクトリ名S3を受信した場合、ディレクトリ名S3をユーザ端末400に送信することなしに、メモリに記憶する。フロントサーバ100は、ユーザ端末400からアップロード要求S5を受信した場合、記憶しておいたディレクトリ名S3を読み出し、読み出したディレクトリ名S3および書き込み要求S6をストレージサーバ200に送信する。これにより、フロントサーバ100とユーザ端末400との間の通信回数を削減することができる。
【0050】
[ストレージサーバ200の動作]
図11は、ストレージサーバ200における第1書き込み処理の流れの一例を示す図である。
図11に示した処理は、ストレージ制御部230により所定期間毎に繰り返して実行される。
【0051】
まず、記憶制御部232は、ディレクトリ名リクエストS2を受け付けたか否かを判定する(ステップS200)。ファイルカウンタ部234は、ディレクトリ名リクエストS2を受け付けた場合、カレントディレクトリのファイル数をカウントアップする(ステップS202)。
【0052】
次に記憶制御部232は、ファイルカウンタ部234によりカウントアップされた結果としてのカレントディレクトリのファイル数が上限値以下であるか否かを判定する(ステップS204)。記憶制御部232は、カレントディレクトリのファイル数が上限値以下である場合、カレントディレクトリのディレクトリ名をフロントサーバ100に送信する(ステップS208)。記憶制御部232は、カレントディレクトリのファイル数が上限値を超えた場合、新たなディレクトリ名をカレントディレクトリのディレクトリ名として決定する(ステップS206)。記憶制御部232は、決定した新たなカレントディレクトリのディレクトリ名をフロントサーバ100に返信する(ステップS208)。
【0053】
次に、記憶制御部232は、フロントサーバ100から書き込み要求S6を受信したか否かを判定する(ステップS210)。記憶制御部232は、書き込み要求S6を受信した場合、指定されたディレクトリ名のディレクトリが存在しているか否かを判定する(ステップS212)。記憶制御部232は、指定されたディレクトリ名のディレクトリがカウンタテーブル244Aに存在している場合、当該ディレクトリに対応付けてファイルを書き込む(ステップS216)。
【0054】
記憶制御部232は、指定されたディレクトリ名のディレクトリがカウンタテーブル244Aに存在しない場合、決定したカレントディレクトリのディレクトリ名に対応したディレクトリの管理情報をカウンタテーブル244Aに書き込むことで、新たなディレクトリ名のディレクトリを追加する(ステップS214)。記憶制御部232は、追加したディレクトリに対応付けてファイルを書き込む(ステップS216)。
【0055】
なお、ディレクトリ名リクエストを受信していない場合、および書き込み要求を受信しない場合、ストレージサーバ200は、本フローチャートの処理を終了する。
【0056】
[書き込み処理におけるディレクトリとファイルとの関係]
以下、上述したストレージサーバ200において、各ディレクトリに対応付けてファイルを書き込む様子について説明する。
図12は、各ディレクトリとファイルとの関係を示す図である。
【0057】
図12を参照した説明において、ファイル数の上限としての上限値は「1000」であるものとする。記憶制御部232は、
図12(a)に示すように、グループidが「001」に対してディレクトリ名が「001」のディレクトリの情報をカウンタテーブル244Aに追加し、990個のファイルの書き込み要求をフロントサーバ100から受信するものとする。この場合、記憶制御部232は、990個のファイルを1つのカレントディレクトリに対応付けて連続的に書き込む。
【0058】
記憶制御部232は、ディレクトリ名が「001」のディレクトリに対応付けて1000個のファイルを書き込んだ場合において、1001個目のファイルを書き込む場合、ディレクトリ名が「002」の新たなディレクトリを追加する。記憶制御部232は、追加した新たなディレクトリとしてのカレントディレクトリに対応付けて1001個目のファイルを書き込む。すなわち、記憶制御部232は、新たなディレクトリを追加した場合に、ファイル数が上限値を超えたディレクトリに対応付けてファイルを書き込むことなしに、新たなディレクトリに対応付けてファイルを書き込む。このような動作は、各ディレクトリに対応付けて書き込まれたファイル数をカウントし、カウントしたファイル数が上限値を超えた場合に、ディレクトリに対応付けてファイルを書き込むことを制限する、と記載することもできる。
【0059】
[ファイルの書き込み要求と書き込み処理の遷移状態との関係]
図13は、書き込み要求を受け付けた時刻と、ディレクトリごとの書き込み処理との関係を示す図である。記憶制御部232は、ディレクトリ名が「001」のディレクトリdir001に対応付けて書き込んだファイル数が上限値以下である場合、ディレクトリdir001に対応したファイルの書き込み処理を行う。ディレクトリdir001に対応したファイルの書き込み処理は、ディレクトリdir001以外のディレクトリに対応付けて書き込むことなしに、ディレクトリdir001にのみ対応付けてファイルを書き込む処理である。記憶制御部232は、ディレクトリdir001に対応したファイルの書き込み処理を実行している期間において時刻tにファイル(file(t))の書き込み要求を受信した場合には当該ファイルをディレクトリdir001に対応付けて書き込み、時刻t+T1にファイル(file(t+T1))の書き込み要求を受信した場合には当該ファイルをディレクトリdir001に対応付けて書き込む。
【0060】
記憶制御部232は、ファイル(file(t+T1))をディレクトリdir001に対応付けて書き込むことでディレクトリdir001に書き込んだファイル数が上限値を超えた場合、ディレクトリdir002に対応したファイルの書き込み処理に遷移する。ディレクトリdir002に対応したファイルの書き込み処理は、ディレクトリdir002以外のディレクトリに対応付けてファイルを書き込むことなしに、ディレクトリdir002にのみ対応付けてファイルを書き込む処理である。これにより、記憶制御部232は、ディレクトリdir002に対応したファイルの書き込み処理を実行している期間において時刻t+T2にファイル(file(t+T2))の書き込み要求を受信した場合には当該ファイルをディレクトリdir002に対応付けて書き込む。
【0061】
ストレージサーバ200は、
図11に示す処理に代えて、以下の処理を行ってもよい。
図14は、ストレージサーバ200における書き込み処理の流れの他の一例を示す図である。
図14に示した書き込み処理は、ストレージ制御部230により所定期間毎に繰り返して実行される。
【0062】
まず、記憶制御部232は、ディレクトリ名リクエストS2を受け付けたか否かを判定する(ステップS300)。ファイルカウンタ部234は、ディレクトリ名リクエストS2を受け付けた場合、カレントディレクトリのファイル数をカウントアップする(ステップS302)。
【0063】
次に記憶制御部232は、ファイルカウンタ部234によりカウントアップされた結果としてのカレントディレクトリのファイル数が上限値以下であるか否かを判定する(ステップS304)。記憶制御部232は、カレントディレクトリのファイル数が上限値以下である場合、カレントディレクトリのディレクトリ名をフロントサーバ100に送信する(ステップS310)。
【0064】
記憶制御部232は、カレントディレクトリのファイル数が上限値を超えた場合、新たなディレクトリ名をカレントディレクトリのディレクトリ名として決定する(ステップS306)。次に、記憶制御部232は、決定したカレントディレクトリのディレクトリ名に対応したディレクトリの管理情報をカウンタテーブル244Aに書き込むことで、ディレクトリを追加する(ステップS308)。次に、記憶制御部232は、追加したカレントディレクトリのディレクトリ名をフロントサーバ100に送信する(ステップS310)。
【0065】
次に、記憶制御部232は、フロントサーバ100から書き込み要求S6を受信したか否かを判定する(ステップS312)。記憶制御部232は、書き込み要求S6を受信した場合、追加したディレクトリにファイルを書き込む(ステップS314)。
【0066】
なお、ディレクトリ名リクエストを受信していない場合、および書き込み要求を受信しない場合、ストレージサーバ200は、本フローチャートの処理を終了する。以上が、第2書き込み処理の説明である。
【0067】
ストレージサーバ200は、以上の動作により、各ディレクトリに対応して書き込まれるファイル数に設けられる上限の範囲内で、ファイルをハードディスク装置210Aに書き込む。なお、フロントサーバ100およびストレージサーバ200は、
図10と、
図11または
図14とに示した処理を行うことで、ストレージ装置として機能する。
【0068】
[第1実施形態の効果]
以上説明した第1実施形態のストレージシステム1によれば、各ディレクトリに対応してハードディスク装置210Aに書き込まれるファイル数に設けられる上限の範囲内で、フロントサーバ100により受け付けられた書き込み要求に応答して、指定されたディレクトリ名に対応付けてファイルを書き込むので、ディレクトリに対応付けられるファイル数を制限することができる。これにより、ストレージシステム1によれば、ディレクトリ情報136Aが肥大化することを抑制することができる。この結果、ストレージシステム1によれば、ディレクトリ名をシークする時間を抑制することができることで、ファイルの書き込み時間を短縮することができる。
【0069】
また、第1実施形態のストレージシステム1によれば、ディレクトリに対応付けられるファイル数が上限値に達するまで1つのディレクトリに連続的にファイルを書き込むので、連続的に書き込むファイルを複数のディレクトリに分散させることがない。連続的に書き込まれたファイルは、略同時期に書き込まれたファイルとも言うことができる。これにより、ストレージシステム1によれば、略同時期に書き込まれるファイルにおける磁気ディスク221上の位置を近くに配置することができる。この結果、ストレージシステム1によれば、略同時期に書き込まれた複数のファイルを読み出す際のリード時間を短縮することができる。
【0070】
<第2実施形態>
以下、第2実施形態について説明する。第2実施形態のストレージサーバ200は、カレントディレクトリのディレクトリ名に書き込んだファイル数が上限値を超えた場合に、ディレクトリ名をフロントサーバ100にプッシュ通知する点で、第1実施形態のストレージシステム1とは異なる。以下、この点を中心に説明する。
【0071】
[第2実施形態の全体処理]
図15は、ユーザ端末400、フロントサーバ100、およびストレージサーバ200による処理の流れの一例を示す図である。
【0072】
まず、フロントサーバ100は、通知リクエストS20をストレージサーバ200に送信する。通知リクエストS20は、ストレージサーバ200におけるカレントディレクトリを新たに設定したタイミングでカレントディレクトリのディレクトリ名をフロントサーバ100に通知するメッセージをプッシュ通知することを要求するメッセージである。フロントサーバ100は、例えば、フロントサーバ100の電源が投入してアプリケーションプログラムの起動が完了したタイミング、またはフロントサーバ100が起動している最中における定期的に、通知リクエストS20をストレージサーバ200に送信する。通知リクエストS20は、ディレクトリを新たに追加したタイミングでプッシュ通知することに限定されず、
図14に示したように新たなディレクトリ名を決定した後に新たなディレクトリを追加する場合において、新たなディレクトリを追加したタイミングであってよい。
【0073】
フロントサーバ100は、処理リクエストS21を受信した場合に、既にストレージサーバ200からプッシュ通知されているカレントディレクトリのディレクトリ名S22をユーザ端末400に送信する。フロントサーバ100は、アップロード要求S23を受信した場合、ストレージサーバ200に、ディレクトリ名を指定したファイルの書き込み要求S24を送信する。
【0074】
ストレージサーバ200は、フロントサーバ100により送信された書き込み要求S24を受信した場合、受信した書き込み要求S24により指定されたディレクトリ名に対応付けてファイルをハードディスク装置210Aに書き込む(ステップS30)。ストレージサーバ200は、ファイルの書き込みが完了した場合、レスポンスS25をフロントサーバ100に送信する。これにより、ストレージサーバ200は、フロントサーバ100からユーザ端末400に完了通知S26を送信させる。
【0075】
次にストレージサーバ200は、カレントディレクトリに対応するファイル数をカウントアップする(ステップS31)。ストレージサーバ200は、ファイルの書き込みを実行する度に、カレントディレクトリのディレクトリ名に対するファイル数が上限値を超えたか否かを判定する。ストレージサーバ200は、カレントディレクトリのディレクトリ名に対するファイル数が上限値以下である場合、プッシュ通知を実行しない(ステップS32)。ストレージサーバ200は、カレントディレクトリのディレクトリ名に対するファイル数が上限値を超えた場合に、新たなカレントディレクトリのディレクトリ名を決定する。ストレージサーバ200は、決定した新たなカレントディレクトリのディレクトリ名S27をフロントサーバ100にプッシュ通知する(ステップS33)。
【0076】
なお、フロントサーバ100は、ディレクトリ名S27を受信した場合に、通知リクエストをストレージサーバ200に送信してよい。これにより、フロントサーバ100は、以降に追加されるディレクトリのディレクトリ名をストレージサーバ200にプッシュ通知させることができる。
【0077】
なお、フロントサーバ100は、ストレージサーバ200により通知されたディレクトリ名S3をユーザ端末400に送信してよいが、これに限定されず、ディレクトリ名S3をフロントサーバ100のAPI内で処理をするのみであってよい。フロントサーバ100は、ストレージサーバ200からディレクトリ名S3を受信した場合、ディレクトリ名S3をユーザ端末400に送信することなしに、メモリに記憶する。フロントサーバ100は、ユーザ端末400からアップロード要求S5を受信した場合、記憶しておいたディレクトリ名S3を読み出し、読み出したディレクトリ名S3および書き込み要求S6をストレージサーバ200に送信する。これにより、フロントサーバ100とユーザ端末400との間の通信回数を削減することができる。
【0078】
[第2実施形態の効果]
第2実施形態のストレージシステム1によれば、フロントサーバ100により処理リクエストを受信する度に、ストレージサーバ200からフロントサーバ100にディレクトリ名を通知する必要がない。これにより、ストレージシステム1によれば、ストレージサーバ200の処理負荷を抑制することができる。また、ストレージシステム1によれば、フロントサーバ100およびストレージサーバ200の通信回数を抑制することができる。
【0079】
<第3実施形態>
以下、第3実施形態について説明する。第3実施形態のストレージサーバ200は、ファイルの書き込み時間が所定時間を超える場合に、カレントディレクトリのディレクトリのファイル数の上限値を減少させる点で、上述した第1実施形態および第2実施形態とは異なる。以下、この点を中心に説明する。
【0080】
[ストレージサーバ200における書き込み処理]
図16は、ストレージサーバ200における第3書き込み処理の流れの一例を示す図である。
図16に示した処理は、ストレージ制御部230により所定期間毎に繰り返して実行される。
【0081】
まず、記憶制御部232は、リクエストを受け付けたか否かを判定する(ステップS400)。ファイルカウンタ部234は、リクエストを受け付けた場合、カレントディレクトリのファイル数をカウントアップする(ステップS402)。
【0082】
次に記憶制御部232は、カウントアップされた結果としてのカレントディレクトリのファイル数が上限値以下であるか否かを判定する(ステップS404)。記憶制御部232は、カレントディレクトリのファイル数が上限値以下である場合、カレントディレクトリのディレクトリ名をフロントサーバ100に送信する(ステップS408)。記憶制御部232は、カレントディレクトリのファイル数が上限値を超えた場合、新たなディレクトリ名をカレントディレクトリのディレクトリ名として決定する(ステップS406)。記憶制御部232は、設定した新たなカレントディレクトリのディレクトリ名をフロントサーバ100に返信する(ステップS408)。
【0083】
次に、記憶制御部232は、フロントサーバ100から書き込み要求を受信したか否かを判定する(ステップS410)。記憶制御部232は、書き込み要求を受信した場合、指定されたディレクトリ名が設定されたディレクトリが存在しているか否かを判定する(ステップS412)。記憶制御部232は、指定されたディレクトリ名が設定されたディレクトリが存在している場合、当該ディレクトリにファイルを書き込む(ステップS416)。記憶制御部232は、指定されたディレクトリ名が設定されたディレクトリが存在しない場合、決定したカレントディレクトリのディレクトリ名に対応したディレクトリの管理情報をカウンタテーブル244Aに書き込むことで、ディレクトリを追加する(ステップS414)。
【0084】
次に、記憶制御部232は、追加したディレクトリに対応付けてファイルを書き込む(ステップS416)。次に記憶制御部232は、ファイルの書き込み時間を検出する(ステップS418)。記憶制御部232は、例えば、ハードディスク装置210Aにライトコマンドを出力した時刻から、ハードディスク装置210Aから書き込み完了の応答を入力した時刻までの期間を計測することで、ファイルの書き込み時間を検出する。
【0085】
記憶制御部232は、検出した書き込み時間が所定時間を超えているか否かを判定する(ステップS420)。記憶制御部232は、検出した書き込み時間が所定時間を超えている場合、カレントディレクトリのディレクトリについての上限値を減少させる(ステップS422)。
【0086】
なお、ディレクトリ名リクエストを受信していない場合、書き込み要求を受信しない場合、および書き込み時間が所定時間を超えていない場合、ストレージサーバ200は、本フローチャートの処理を終了する。
【0087】
なお、ストレージシステム1は、ストレージサーバ200によりファイルの書き込み時間が所定時間を超えた場合にファイル数の上限値を変更したが、これに限定されない。フロントサーバ100は、ストレージサーバ200に書き込み要求を送信した時刻から、ストレージサーバ200からレスポンスを受信した時刻までの時間が所定時間を超えた場合に、ストレージサーバ200に通知してよい。ストレージサーバ200は、フロントサーバ100から通知を受信した場合に、カレントディレクトリに対応付けてファイルを書き込むことを制限する。そして、ストレージサーバ200は、新たなカレントディレクトリのディレクトリ名を決定して、フロントサーバ100に新たなカレントディレクトリのディレクトリ名を通知する。
【0088】
また、ストレージシステム1は、ファイルの書き込み時間が所定時間を超える場合にディレクトリに対応する上限値を減少させるが、これに限定されない。ストレージシステム1は、ファイルの書き込み時間が所定時間よりも短い場合に、ディレクトリに対応する上限値を増加させてよい。
【0089】
[第3実施形態の効果]
第3実施形態のストレージシステム1によれば、ファイルの書き込み時間が所定時間を超える場合に、カレントディレクトリのディレクトリに対応する上限値を減少させるので、カレントディレクトリに対応付けて書き込むファイル数を抑制することができる。これにより、ストレージシステム1によれば、ファイルの書き込み時間が長くなることを抑制することができる。
【0090】
<実施例1>
以下、上述したストレージシステム1の実施例1を説明する。
図17は、カレントディレクトリに対応付けて書き込んだファイル数と、秒単位の書き込みリクエストの処理数との関係を示す図である。
図17において、実施例1は、上述した実施形態において各ディレクトリに対するファイル数の上限値を「1000」に設定した場合の書き込みリクエストの処理数の変化を表している。実施例2は、上述した実施形態において各ディレクトリに対するファイル数の上限値を「10000」に設定した場合の書き込みリクエストの処理数の変化を表している。比較例1は、1つのカレントディレクトリに対応付けてファイルを書き込んだ場合の書き込みリクエストの処理数の変化を表している。比較例2は、ディレクトリを固定数設定し、さらに、当該ディレクトリの下位にディレクトリを同数設定した場合の書き込みリクエストの処理数の変化を表している。
【0091】
実施例1および実施例2におけるリクエストの処理数は、各ディレクトリに対応したファイル数が増加しても大きく低下していないことが分かる。一方、比較例1におけるリクエストの処理数は、ファイル数が一定数を超えると急峻に低下していることが分かる。また、比較例2におけるリクエストの処理数は、ファイル数が一定数を超えても、実施例1および実施例2におけるリクエストの処理数より低いことが分かる。
【0092】
<実施例2>
以下、上述したストレージシステム1の実施例2を説明する。
図18は、比較例1のディスクオフセット、シーク回数、およびスループットを表す図である。
図19は、実施例のディスクオフセット、シーク回数、およびスループットを表す図である。
図18および
図19の特性は、blktraceを用いて、ストレージサーバ200におけるインターフェース255(ブロックI/Oレイヤ)における信号を検出して得たものである。
【0093】
図18および
図19を参照すると、実施例におけるディスクオフセットおよびシーク回数は、比較例におけるディスクオフセットおよびシーク回数よりも低いことが分かる。また、実施例におけるスループットは、比較例におけるスループットよりも高いことが分かる。
<実施例3>
以下、上述したストレージシステム1の実施例3を説明する。
図20は、磁気ディスク221上に書き込まれたファイルの物理位置の時間的な変化を示す図である。
図20を参照すると、実施例は、比較例よりも狭い範囲にファイルを書き込んでいることが分かる。
<ハードウェア構成>
図21は、ユーザ端末400、フロントサーバ100、ストレージサーバ200、およびメタデータデータベースサーバ300のハードウェア構成の一例を示す図である。本図は、ユーザ端末400がスマートフォンなどの携帯電話である例を示している。ユーザ端末400は、例えば、CPU401、RAM402、ROM403、フラッシュメモリなどの二次記憶装置404、タッチパネル405、および無線通信モジュール406が、内部バスあるいは専用通信線によって相互に接続された構成となっている。ナビアプリは、ネットワークNWを介してダウンロードされ、二次記憶装置404に格納される。
【0094】
フロントサーバ100は、例えば、NIC101、CPU102、RAM103、ROM104、フラッシュメモリやHDDなどの二次記憶装置105、およびドライブ装置106が、内部バスあるいは専用通信線によって相互に接続された構成となっている。ドライブ装置106には、光ディスクなどの可搬型記憶媒体が装着される。二次記憶装置105、またはドライブ装置106に装着された可搬型記憶媒体に記憶されたプログラムがDMAコントローラ(不図示)などによってRAM103に展開され、CPU102によって実行されることで、各サーバの機能部が実現される。
【0095】
ストレージサーバ200は、例えば、NIC201、CPU202、RAM203、ROM204、フラッシュメモリやHDDなどの二次記憶装置205、およびドライブ装置206が、内部バスあるいは専用通信線によって相互に接続された構成となっている。ドライブ装置206には、光ディスクなどの可搬型記憶媒体が装着される。二次記憶装置205、またはドライブ装置206に装着された可搬型記憶媒体に記憶されたプログラムがDMAコントローラ(不図示)などによってRAM203に展開され、CPU202によって実行されることで、各サーバの機能部が実現される。
【0096】
メタデータデータベースサーバ300は、例えば、NIC301、CPU302、RAM303、ROM304、フラッシュメモリやHDDなどの二次記憶装置305、およびドライブ装置306が、内部バスあるいは専用通信線によって相互に接続された構成となっている。ドライブ装置306には、光ディスクなどの可搬型記憶媒体が装着される。二次記憶装置305、またはドライブ装置306に装着された可搬型記憶媒体に記憶されたプログラムがDMAコントローラ(不図示)などによってRAM303に展開され、CPU302によって実行されることで、各サーバの機能部が実現される。
【0097】
以上、本発明を実施するための形態について実施形態を用いて説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【解決手段】ディレクトリ名を指定したファイルの書き込み要求を受け付ける受付部と、各ディレクトリに対応して記憶装置に書き込まれるファイル数に設けられる上限の範囲内で、前記受付部により受け付けられた書き込み要求に応答して、指定された前記ディレクトリ名のディレクトリに対応付けて前記ファイルを前記記憶装置に書き込む制御部とを備えるストレージ装置。