(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-01
(45)【発行日】2023-08-09
(54)【発明の名称】情報処理装置および情報処理プログラム
(51)【国際特許分類】
G06F 16/13 20190101AFI20230802BHJP
G06F 16/185 20190101ALI20230802BHJP
【FI】
G06F16/13 110
G06F16/185
(21)【出願番号】P 2019201537
(22)【出願日】2019-11-06
【審査請求日】2022-07-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】古田 智徳
(72)【発明者】
【氏名】宇納 知寛
【審査官】成瀬 博之
(56)【参考文献】
【文献】国際公開第2011/084854(WO,A1)
【文献】国際公開第2018/175144(WO,A1)
【文献】特開2018-180845(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
書き込みが要求された複数の書き込みデータセットの重複を排除することで得られた複数のデータセットを、外部ストレージに格納する格納処理であって、前記複数のデータセットから出現順に選択された2以上のデータセットをオブジェクトにまとめて前記外部ストレージに格納する前記格納処理を実行し、
前記外部ストレージに格納された前記オブジェクトのうち2以上の前記オブジェクトを生成順にまとめたオブジェクトグループを単位としてデフラグの実行要否を判定し、
前記オブジェクトグループのうち一のオブジェクトグループのデフラグを実行すると判定すると、前記一のオブジェクトグループに含まれるすべての前記オブジェクトをそれぞれ第1のオブジェクトとして前記外部ストレージから取得し、前記第1のオブジェクトに含まれるデータセットのうち参照数が1以上である有効データセットを、前記有効データセットの生成順と参照数とに基づいて組み合わせて1以上の第2のオブジェクトを生成し直し、前記第2のオブジェクトを前記第1のオブジェクトの代わりに前記外部ストレージに格納する第1のデフラグ処理を実行する、処理部、
を有する情報処理装置。
【請求項2】
前記第1のデフラグ処理では、前記有効データセットの中から前記生成順が近く、かつ前記参照数が近いと判定されるデータセットを、同一の前記第2のオブジェクトに組み込む、
請求項1記載の情報処理装置。
【請求項3】
前記第1のデフラグ処理では、組み込まれた前記有効データセットの前記参照数と所定の基準値との比較結果に基づいて、前記第2のオブジェクトのサイズを可変する、
請求項2記載の情報処理装置。
【請求項4】
前記第1のデフラグ処理では、組み込まれた前記有効データセットの前記参照数が所定の基準値に基づいて小さいと判定される前記第2のオブジェクトのサイズを、組み込まれた前記有効データセットの前記参照数が前記基準値に基づいて大きいと判定される前記第2のオブジェクトのサイズより小さくする、
請求項2記載の情報処理装置。
【請求項5】
前記処理部は、
前記外部ストレージに格納された前記第2のオブジェクトについてのデフラグの実行要否を、前記第2のオブジェクトごとに個別に判定し、
前記第2のオブジェクトのうち一のオブジェクトのデフラグを実行すると判定すると、前記一のオブジェクトを前記外部ストレージから取得し、前記一のオブジェクトに含まれるデータセットのうち前記参照数が1以上のデータセットだけをまとめて第3のオブジェクトを生成し直し、前記第3のオブジェクトを前記一のオブジェクトの代わりに前記外部ストレージに格納する第2のデフラグ処理を実行する、
請求項1乃至4のいずれか1項に記載の情報処理装置。
【請求項6】
前記オブジェクトグループを単位とした実行要否の判定では、それぞれの前記オブジェクトグループに含まれるデータセットのうち前記参照数が0のデータセットの数に基づいて実行要否を判定し、
前記処理部は、前記一のオブジェクトグループのデフラグを実行すると判定してから所定時間が経過した後に、前記第1のデフラグ処理の実行を開始する、
請求項1乃至5のいずれか1項に記載の情報処理装置。
【請求項7】
コンピュータに、
書き込みが要求された複数の書き込みデータセットの重複を排除することで得られた複数のデータセットを、外部ストレージに格納する格納処理であって、前記複数のデータセットから出現順に選択された2以上のデータセットをオブジェクトにまとめて前記外部ストレージに格納する前記格納処理を実行し、
前記外部ストレージに格納された前記オブジェクトのうち2以上の前記オブジェクトを生成順にまとめたオブジェクトグループを単位としてデフラグの実行要否を判定し、
前記オブジェクトグループのうち一のオブジェクトグループのデフラグを実行すると判定すると、前記一のオブジェクトグループに含まれるすべての前記オブジェクトをそれぞれ第1のオブジェクトとして前記外部ストレージから取得し、前記第1のオブジェクトに含まれるデータセットのうち参照数が1以上である有効データセットを、前記有効データセットの生成順と参照数とに基づいて組み合わせて1以上の第2のオブジェクトを生成し直し、前記第2のオブジェクトを前記第1のオブジェクトの代わりに前記外部ストレージに格納する第1のデフラグ処理を実行する、
処理を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置および情報処理プログラムに関する。
【背景技術】
【0002】
オンラインストレージサービス、クラウドストレージサービスなど、ネットワークを介してストレージ領域を提供するストレージサービスが普及している。また、このようなストレージサービスと顧客のコンピュータとの間でゲートウェイとして機能するストレージゲートウェイがある。
【0003】
例えば、顧客のコンピュータとクラウドストレージなどの外部ストレージとの間で書き込みデータを中継するストレージゲートウェイが提案されている。このストレージゲートウェイは、顧客のコンピュータからファイル単位でデータの書き込み要求を受け付け、書き込みが要求されたデータの重複を排除し、重複が排除されたデータをオブジェクト単位で外部ストレージに転送する。
【0004】
また、重複排除技術に関しては、例えば、非参照データセグメントを含み得るデータグループにマークアンドスイープ操作を集中させることにより、重複排除データシステムから非参照データセグメントを効率的に除去できるようにしたシステムが提案されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2019-95986号公報
【文献】国際公開第2011/084854号
【発明の概要】
【発明が解決しようとする課題】
【0006】
上記のストレージゲートウェイでは、外部ストレージに転送されたオブジェクトについてのデフラグが行われるものがある。このデフラグでは、例えば、外部ストレージに転送されたオブジェクトの中から、どのファイルからも参照されない無効なチャンクを多く含むオブジェクトが検出される。そして、検出されたオブジェクトがストレージゲートウェイに取得され、オブジェクト内の有効なチャンクだけを用いてオブジェクトが再構築されて、外部ストレージに再転送される。
【0007】
しかし、このようなデフラグでは、オブジェクトのデフラグが実行されるたびにストレージゲートウェイと外部ストレージとの間で往復のオブジェクト転送が実行されるので、通信回数が増大するという問題がある。例えば外部ストレージの一例であるクラウドストレージのサービスでは、通信回数に応じて課金される場合があり、この場合には通信回数が増大するほど課金される金額も増大してしまう。
【0008】
1つの側面では、本発明は、外部ストレージとの通信回数が減少する可能性を高めることが可能な情報処理装置および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
1つの案では、次のような処理部を有する情報処理装置が提供される。この情報処理装置において、処理部は、書き込みが要求された複数の書き込みデータセットの重複を排除することで得られた複数のデータセットを、外部ストレージに格納する格納処理を実行する。この格納処理では、処理部は、複数のデータセットから出現順に選択された2以上のデータセットをオブジェクトにまとめて外部ストレージに格納する。また、処理部は、外部ストレージに格納されたオブジェクトのうち2以上のオブジェクトを生成順にまとめたオブジェクトグループを単位としてデフラグの実行要否を判定し、オブジェクトグループのうち一のオブジェクトグループのデフラグを実行すると判定すると、一のオブジェクトグループに含まれるすべてのオブジェクトをそれぞれ第1のオブジェクトとして外部ストレージから取得し、第1のオブジェクトに含まれるデータセットのうち参照数が1以上である有効データセットを、有効データセットの生成順と参照数とに基づいて組み合わせて1以上の第2のオブジェクトを生成し直し、第2のオブジェクトを第1のオブジェクトの代わりに外部ストレージに格納する第1のデフラグ処理を実行する。
【0010】
また、1つの案では、上記の情報処理装置と同様の処理をコンピュータに実行させる情報処理プログラムが提供される。
【発明の効果】
【0011】
1つの側面では、外部ストレージとの通信回数が減少する可能性を高めることができる。
【図面の簡単な説明】
【0012】
【
図1】第1の実施の形態に係るストレージシステムの構成例および処理例を示す図である。
【
図2】第2の実施の形態に係る情報処理システムの構成例を示す図である。
【
図3】クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。
【
図4】クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。
【
図5】チャンクマップテーブルの構成例を示す図である。
【
図6】チャンク管理テーブルおよびハッシュキーテーブルの構成例を示す図である。
【
図8】オブジェクト管理テーブルの構成例を示す図である。
【
図9】デフラグ判定テーブルの構成例を示す図である。
【
図10】デフラグ処理手順の比較例を示す第1の図である。
【
図11】デフラグ処理手順の比較例を示す第2の図である。
【
図12】デフラグ処理手順の比較例を示す第3の図である。
【
図13】デフラグ処理手順の比較例を示す第4の図である。
【
図14】デフラグ処理手順の比較例を示す第5の図である。
【
図15】第2の実施の形態におけるデフラグ処理手順を示す図である。
【
図16】2回目以降のデフラグの実行例を示す第1の図である。
【
図17】2回目以降のデフラグの実行例を示す第2の図である。
【
図18】ファイル書き込み処理の手順を示すフローチャートの例(その1)である。
【
図19】ファイル書き込み処理の手順を示すフローチャートの例(その2)である。
【
図20】ファイル削除処理の手順を示すフローチャートの例である。
【
図21】デフラグ処理の手順を示すフローチャートの例(その1)である。
【
図22】デフラグ処理の手順を示すフローチャートの例(その2)である。
【
図23】デフラグ処理の変形例を示すフローチャートである。
【発明を実施するための形態】
【0013】
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例および処理例を示す図である。
図1に示すストレージシステムは、情報処理装置10と、この情報処理装置10の外部に接続された外部ストレージ20とを有する。情報処理装置10は、外部ストレージ20に対するデータの読み書きを制御する制御装置である。外部ストレージ20は、情報処理装置10に対して図示しないネットワークを介して接続され、情報処理装置10に対してネットワークを介してデータの記憶領域を提供する。また、外部ストレージ20は、オブジェクト単位でデータが読み書きされるオブジェクトストレージである。
【0014】
情報処理装置10は、処理部11を有する。処理部11は、例えば、情報処理装置10が備える図示しないプロセッサとして実現される。この場合、処理部11の処理は、プロセッサがプログラムを実行することで実現される。
【0015】
処理部11は、例えば図示しないホスト装置から、複数の書き込みデータセットの書き込み要求を受ける。例えば、処理部11は、複数のファイルの書き込み要求を受け、各ファイルの実データを分割することによって、上記の複数の書き込みデータセットを取得する。
【0016】
処理部11は、このような複数の書き込みデータセットの重複を排除することで得られた複数のデータセットを、外部ストレージ20に格納する。この格納処理では、処理部11は、複数のデータセットからそれらの出現順に選択された2以上のデータセットを、それぞれオブジェクトにまとめて外部ストレージ20に格納する。
【0017】
図1の例では、重複排除によって得られた複数のデータセットからオブジェクトOB1~OB6が生成されている。例えば、オブジェクトOB1には、2以上のデータセットが出現順に組み込まれ、その次に出現したデータセットはオブジェクトOB2に組み込まれる。処理部11は、これらのオブジェクトOB1~OB6を外部ストレージ20に格納する。
【0018】
また、処理部11は、外部ストレージ20に格納されたオブジェクトのうち2以上のオブジェクトを生成順にまとめたオブジェクトグループを単位として、デフラグの実行要否を判定する。
図1の例では、オブジェクトOB1~OB3がオブジェクトグループGP1として管理され、オブジェクトOB4~OB6がオブジェクトグループGP2として管理される。各オブジェクトグループGP1,GP2では、例えば、それぞれに含まれるデータセットのうち、参照数が「0」になった無効なデータセットの数が監視される。そして、例えば所定の閾値との比較により、無効なデータセットの数が多くなったと判定された場合に、そのオブジェクトグループのデフラグを実行すると判定される。なお、参照数とは、元の書き込みデータセットのうちのいくつから参照されているかを示す数値である。
【0019】
図1では例として、オブジェクトグループGP2についてデフラグを実行すると判定されたとする。この場合、処理部11は次のようなデフラグ処理を実行する。なお、
図1においてオブジェクトOB4~OB6に示された斜線の領域は、無効なデータセットの領域を示す。
【0020】
処理部11はまず、オブジェクトグループGP2に含まれるすべてのオブジェクトOB4~OB6を外部ストレージ20から取得する。そして、処理部11は、オブジェクトOB4~OB6に含まれるデータセットのうち、参照数が1以上である有効なデータセットを組み合わせて、1以上のオブジェクトを生成し直す(オブジェクト再構築)。この生成処理では、異なるオブジェクトに含まれていた有効なデータセット同士が、同一のオブジェクトに組み込まれてもよい。複数のオブジェクトを含むオブジェクトグループ単位でデフラグ処理を実行することで、このように異なるオブジェクトに含まれていた有効なデータセット同士を組み合わせることが可能になる。
【0021】
図1の例では、オブジェクトOB4~OB6に含まれる有効なデータセットを用いて、オブジェクトOB11,OB12が生成されたとする。処理部11は、生成されたオブジェクトOB11,OB12を、元のオブジェクトOB4~OB6の代わりに外部ストレージ20に格納する。これにより、無効なデータセットを外部ストレージ20から削除し、外部ストレージ20の使用容量を削減できる。
【0022】
ここで、処理部11は、オブジェクトOB11,OB12の生成の際、有効な各データセットについての生成順および参照数に基づいて、データセットの組み合わせ方を決定する。これにより、オブジェクトOB11,OB12のそれぞれについてさらにデフラグが実行される回数が減少する可能性が高くなる。その結果、情報処理装置10と外部ストレージ20との間の通信回数が減少する可能性が高められる。
【0023】
例えば、処理部11は、オブジェクトOB4~OB6に含まれる有効なデータセットの中から、生成順が近く、かつ参照数が近いと判定されるデータセットを、同一のオブジェクトに組み込む。生成順が近いデータセットをオブジェクトにまとめて外部ストレージ20に格納することで、そのオブジェクト内の各データセットの参照数が同じ時期に減算される可能性が高くなる。そして、参照数が近いデータセットをオブジェクトにまとめて外部ストレージ20に格納することで、そのオブジェクト内の各データセットの参照数が均等に減少していく可能性が高くなる。
【0024】
その結果、オブジェクト内の分散した位置で無効のデータセットが長時間をかけて徐々に発生する可能性が低くなり、逆にオブジェクト内で多数の無効のデータセットが一度に発生しやすくなる。これにより、このオブジェクトについて再度デフラグが必要と判定されたときに、一度に多数の無効のデータセットを削除できる可能性が高まる。その結果、オブジェクト内で無効のデータセットが長時間をかけて少しずつ増えていく場合と比較して、同じオブジェクトについてのデフラグの実行回数が減少する可能性が高くなる。
【0025】
したがって、情報処理装置10と外部ストレージ20との間の通信回数が減少する可能性が高くなる。また、通信回数の減少により、情報処理装置10と外部ストレージ20との間の通信量も削減される。
【0026】
〔第2の実施の形態〕
次に、
図1の外部ストレージ20としてクラウドストレージが用いられ、
図1の情報処理装置10としてクラウドストレージゲートウェイが用いられた場合の例について説明する。
【0027】
図2は、第2の実施の形態に係る情報処理システムの構成例を示す図である。
図2に示す情報処理システムは、クラウドストレージゲートウェイ100、NAS(Network Attached Storage)クライアント210およびストレージシステム220を有する。クラウドストレージゲートウェイ100は、ネットワーク231を介してNASクライアント210と接続され、また、ネットワーク232を介してストレージシステム220と接続されている。ネットワーク231は、例えばLAN(Local Area Network)であり、ネットワーク232は、例えばWAN(Wide Area Network)である。
【0028】
ストレージシステム220は、ネットワーク232を介してクラウドストレージサービスを提供する。以下の説明では、ストレージシステム220が提供するクラウドストレージサービスによってサービス利用者(ここではクラウドストレージゲートウェイ100)が利用可能な記憶領域を、「クラウドストレージ」と記載する場合がある。
【0029】
また、本実施の形態では例として、ストレージシステム220は、データがオブジェクト単位で管理されるオブジェクトストレージによって実現される。例えば、ストレージシステム220は、制御サーバ221aとストレージ装置221bとをそれぞれ含むストレージノード221を複数有する、分散型のストレージシステムとして実現される。この場合、各ストレージノード221において、制御サーバ221aはストレージ装置221bに対するアクセスを制御し、ストレージ装置221bの記憶領域によってクラウドストレージの一部が実現される。また、サービス利用者(クラウドストレージゲートウェイ100)からのオブジェクトの格納先とされるストレージノード221は、オブジェクト固有の情報に基づいて決定される。
【0030】
一方、NASクライアント210は、クラウドストレージゲートウェイ100を、ファイルシステムによって管理される記憶領域を提供するNASサーバとして認識する。この記憶領域とは、ストレージシステム220によって提供されるクラウドストレージによる記憶領域である。そして、NASクライアント210は、例えばNFS(Network File System)プロトコルやCIFS(Common Internet File System)プロトコルにしたがって、クラウドストレージゲートウェイ100に対してファイル単位でデータの読み書きを要求する。すなわち、NASクライアント210は、クラウドストレージゲートウェイ100のNASサーバ機能により、クラウドストレージを大容量の仮想的なネットワークファイルシステムとして利用できるようになる。
【0031】
NASクライアント210は、例えば、データバックアップのためのバックアップソフトウェアを実行する。この場合NASクライアント210は、NASクライアント210に記憶されたファイル、またはNASクライアント210に接続されたサーバ(例えば業務サーバ)に記憶されたファイルを、NASサーバから提供される記憶領域にバックアップする。
【0032】
クラウドストレージゲートウェイ100は、
図1に示した情報処理装置10の一例である。クラウドストレージゲートウェイ100は、NASクライアント210とクラウドストレージとの間で転送されるデータを中継する。
【0033】
例えば、クラウドストレージゲートウェイ100は、NASサーバ機能により、NASクライアント210からファイルの書き込み要求を受信し、書き込みが要求されたファイルを内部にキャッシュする。クラウドストレージゲートウェイ100は、書き込みが要求されたファイルをチャンク単位に分割し、チャンク内の実データ(チャンクデータ)をクラウドストレージに格納する。このとき、所定個数のチャンクデータがグループ化されてオブジェクトが生成され、生成されたオブジェクトがクラウドストレージに転送される。
【0034】
また、クラウドストレージゲートウェイ100は、NASクライアント210からのファイルをキャッシュする時点で、ファイルをチャンク単位に分割し、同一内容のチャンクデータが重複して保存されないようにする「重複排除」を行う。さらに、チャンクデータは圧縮された状態で格納されてもよい。例えば、クラウドストレージサービスでは、格納されるデータ量に応じて課金が行われる場合がある。重複排除やデータ圧縮を行うことで、クラウドストレージに格納されるデータ量を削減し、サービス利用コストを抑制することができる。
【0035】
図3は、クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。クラウドストレージゲートウェイ100は、例えば、
図3に示すようなコンピュータとして実現される。
【0036】
クラウドストレージゲートウェイ100は、プロセッサ101、RAM(Random Access Memory)102、HDD(Hard Disk Drive)103、グラフィックインタフェース(I/F)104、入力インタフェース(I/F)105、読み取り装置106および通信インタフェース(I/F)107を備える。
【0037】
プロセッサ101は、クラウドストレージゲートウェイ100全体を統括的に制御する。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、またはPLD(Programmable Logic Device)である。また、プロセッサ101は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
【0038】
RAM102は、クラウドストレージゲートウェイ100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ101による処理に必要な各種データが格納される。
【0039】
HDD103は、クラウドストレージゲートウェイ100の補助記憶装置として使用される。HDD103には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置を使用することもできる。
【0040】
グラフィックインタフェース104には、表示装置104aが接続されている。グラフィックインタフェース104は、プロセッサ101からの命令にしたがって、画像を表示装置104aに表示させる。表示装置としては、液晶ディスプレイや有機EL(Electroluminescence)ディスプレイなどがある。
【0041】
入力インタフェース105には、入力装置105aが接続されている。入力インタフェース105は、入力装置105aから出力される信号をプロセッサ101に送信する。入力装置105aとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【0042】
読み取り装置106には、可搬型記録媒体106aが脱着される。読み取り装置106は、可搬型記録媒体106aに記録されたデータを読み取ってプロセッサ101に送信する。可搬型記録媒体106aとしては、光ディスク、半導体メモリなどがある。
【0043】
通信インタフェース107は、ネットワーク107aを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、クラウドストレージゲートウェイ100の処理機能を実現することができる。なお、NASクライアント210や制御サーバ221aも、
図3と同様のハードウェア構成を有するコンピュータとして実現可能である。
【0044】
図4は、クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。クラウドストレージゲートウェイ100は、記憶部110、ファイル入出力部120、重複排除処理部130およびクラウド通信部140を備える。
【0045】
なお、記憶部110は、例えば、RAM102やHDD103など、クラウドストレージゲートウェイ100が備える記憶装置の記憶領域として実現される。また、ファイル入出力部120、重複排除処理部130およびクラウド通信部140の処理は、例えば、プロセッサ101が所定のプログラムを実行することで実現される。
【0046】
記憶部110には、ディレクトリテーブル111、チャンクマップテーブル112、チャンク管理テーブル113、ハッシュキーテーブル114、オブジェクト管理テーブル115およびデフラグ判定テーブル116が記憶される。また、記憶部110の記憶領域の一部は、データキャッシュ117として利用される。
【0047】
ディレクトリテーブル111は、ファイルシステムにおけるディレクトリ構造を表現するための管理情報である。ディレクトリテーブル111には、ディレクトリ構造上のディレクトリ(フォルダ)、またはディレクトリ内のファイルに対応するレコードが登録される。各レコードには、ディレクトリまたはファイルを識別するためのinode番号が登録されている。また、例えば、各レコードに親ディレクトリのinode番号が登録されることで、ディレクトリ間、およびディレクトリとファイルとの関係が表現される。
【0048】
チャンクマップテーブル112は、ファイルと重複排除されたチャンクとの対応関係を管理するための管理情報である。チャンク管理テーブル113は、チャンクとオブジェクトとの対応関係や、チャンクの参照数を管理するための管理情報である。ハッシュキーテーブル114は、チャンクに対応するハッシュキーを管理するための管理情報である。
【0049】
オブジェクト管理テーブル115は、オブジェクトごとに、オブジェクトに含まれるチャンクのうち有効なチャンクを示す有効チャンク数と無効なチャンクを示す無効チャンク数とを管理するための管理情報である。デフラグ判定テーブル116は、後述するオブジェクトグループごとに、オブジェクトグループに含まれるチャンクのうち有効なチャンクを示す有効チャンク数と無効なチャンクを示す無効チャンク数とを管理するための管理情報である。オブジェクト管理テーブル115およびデフラグ判定テーブル116は、クラウドストレージ240に格納されたオブジェクトについてのデフラグの実行要否を判定するために利用される。
【0050】
データキャッシュ117は、重複排除されたチャンクをキャッシュするための記憶領域である。NASクライアント210から書き込みが要求されたファイルに対応するチャンクのデータは、重複排除された上で一旦データキャッシュ117に格納された後、オブジェクトに組み込まれてクラウドストレージ240に格納される。チャンクの格納によりデータキャッシュ117の容量が少なくなると、クラウドストレージ240に格納済みで、NASクライアント210からのアクセス頻度が低いチャンクは、データキャッシュ117から削除される。
【0051】
ファイル入出力部120は、NASサーバとしてのインタフェース処理を実行する。例えば、ファイル入出力部120は、NASクライアント210からのファイルの読み書き要求を受け付け、要求された内容に応じた処理を重複排除処理部130に依頼して、NASクライアント210に応答する。
【0052】
クラウド通信部140は、重複排除処理部130からの要求に応じてクラウドストレージ240との間の通信処理を実行する。例えば、重複排除処理部130は、オブジェクトストレージであるクラウドストレージ240との間でオブジェクトの送受信を行う。重複排除処理部130は、PUTコマンドによりオブジェクトをクラウドストレージ240にアップロードする。また、重複排除処理部130は、GETコマンドによりオブジェクトをクラウドストレージ240から取得する。また、重複排除処理部130は、DELETEコマンドによりクラウドストレージ240上のオブジェクトを削除する。
【0053】
重複排除処理部130は、ファイルの実データを重複を排除した状態で格納するための処理を実行する。重複排除処理部130は、重複判定部131、チャンク管理部132およびデフラグ処理部133を備える。
【0054】
重複判定部131は、書き込みが要求されたファイルの実データをチャンク単位に分割し、分割された実データを重複を排除しながらデータキャッシュ117に格納する。
チャンク管理部132は、重複判定部131によってデータキャッシュ117に格納されたチャンクを、適切なサイズになるように複数まとめてオブジェクトを生成し、クラウド通信部140を介してクラウドストレージ240に格納する。本実施の形態では例として、所定個数のチャンクによってオブジェクトが生成される。
【0055】
デフラグ処理部133は、ファイルの更新や削除の要求に伴って参照されなくなったチャンク(無効チャンク)を監視し、その監視結果に基づいてデフラグを実行する。デフラグとは、発生した無効チャンクをクラウドストレージ240から削除して、クラウドストレージ240の使用容量を削減するための処理である。デフラグでは基本的に、無効チャンクを含むオブジェクトがクラウドストレージ240から取得され、無効チャンクデータを削除した残りのチャンクによってオブジェクトが再構築されて、再構築されたオブジェクトがクラウドストレージ240に格納される。
【0056】
次に、重複排除処理で利用される管理情報について、
図5~
図7を用いて説明する。
図5は、チャンクマップテーブルの構成例を示す図である。チャンクマップテーブル112は、ファイルと重複排除されたチャンクとの対応関係を管理するための管理情報である。
図5に示すように、チャンクマップテーブル112には、ファイル番号、オフセット、サイズおよびチャンク番号の各項目を有するレコードが登録される。各レコードは、ファイルの実データを分割して生成された1つのチャンクに対応付けられている。
【0057】
ファイル番号は、ファイルの識別番号を示す。オフセットは、ファイルの先頭からチャンクの先頭までのオフセット量を示す。サイズは、チャンクのサイズを示す。オフセットおよびサイズの値によって、ファイルにおけるチャンクの領域が特定される。
【0058】
チャンク番号は、ファイル上のチャンクに対応する、重複排除されたチャンクの識別番号を示す。あるファイル上の第1のチャンクと、それと同じファイルまたは他のファイル上の第2のチャンクとの間でデータの内容が同じ場合、第1のチャンクに対応するレコードと第2のチャンクに対応するレコードには同じチャンク番号が登録される。例えば
図5では、ファイル番号「f1」およびオフセット「o1」で識別されるチャンクのレコードと、ファイル番号「f2」およびオフセット「o14」で識別されるチャンクのレコードとには、同じチャンク番号「ck1」が登録されている。これは、前者のチャンクと後者のチャンクとの間ではデータの内容が同じであり、このデータがチャンク番号「ck1」のチャンクとしてデータキャッシュ117やクラウドストレージ240に格納されていることを示す。
【0059】
なお、チャンク番号は、重複していないユニークなチャンクが出現し、データキャッシュ117に格納された順に付与される。したがって、チャンク番号は、重複排除されたチャンクの出現順や格納順を示す。
【0060】
図6は、チャンク管理テーブルおよびハッシュキーテーブルの構成例を示す図である。
チャンク管理テーブル113は、重複排除されたチャンクとオブジェクトとの対応関係や、チャンクの参照数を管理するための管理情報である。
図6に示すように、チャンク管理テーブル113には、チャンク番号、オブジェクト番号、オフセット、サイズおよび参照数の各項目を有するレコードが登録される。各レコードは、重複排除された1つのチャンクに対応付けられている。
【0061】
オブジェクト番号は、チャンクが属するオブジェクトの識別番号を示す。オフセットは、オブジェクトの先頭からチャンクの先頭までのオフセット量を示す。サイズは、チャンクのサイズを示す。オフセットおよびサイズの値によって、オブジェクトにおけるチャンクの領域が特定される。参照数は、チャンク番号が示すチャンクが、ファイルを分割して生成されたチャンクのうちいくつのチャンクから参照されているかを示す。すなわち、参照数は、チャンク番号が示すチャンクがファイル上のいくつのチャンクの間で重複しているかを示す。例えば、あるチャンク番号に対応する参照数が「2」の場合、同じチャンク番号の値が登録された2つのレコードがチャンクマップテーブル112に存在することになる。
【0062】
ここで、
図5の例では、ファイル番号「f1」のファイルは2つのチャンクに分割されており、ファイル番号「f2」のファイルは4つのチャンクに分割されている。また、
図6の例では、前者のファイルに含まれる2つのチャンクのデータと、後者のファイルに含まれるチャンクのうち先頭から2つのチャンクのデータとが、オブジェクト番号「ob1」のオブジェクトに属するチャンクとしてクラウドストレージ240に格納されている。
【0063】
ハッシュキーテーブル114は、重複排除されたチャンクに対応するハッシュキーを管理するための管理情報である。
図6に示すように、ハッシュキーテーブル114には、ハッシュキーがチャンク番号に対応付けて登録されている。ハッシュキーは、チャンクのデータに基づいて算出されたハッシュ値であり、書き込みが要求されたファイル内のチャンクのデータと同一のチャンクを検索するために利用される。
【0064】
図7は、オブジェクトの生成例を示す図である。この
図7を用いて、オブジェクトの生成方法について説明する。
なお、
図7に示すテーブル113aは、チャンク管理テーブル113から、オブジェクト番号「ob11」のオブジェクトに属するチャンクに対応するレコードのチャンク番号およびオブジェクト番号の各項目を抽出したものである。同様に、
図7に示すテーブル113bは、チャンク管理テーブル113から、オブジェクト番号「ob12」のオブジェクトに属するチャンクに対応するレコードのチャンク番号およびオブジェクト番号の各項目を抽出したものである。また、
図7に示すテーブル113cは、チャンク管理テーブル113から、オブジェクト番号「ob13」のオブジェクトに属するチャンクに対応するレコードのチャンク番号およびオブジェクト番号の各項目を抽出したものである。
【0065】
NASクライアント210から新規のファイルの書き込みや既存のファイルの更新が要求されると、重複判定部131は、ファイルの実データをチャンク単位に分割する。
図7の例では、ファイルf11の実データが8個のチャンクに分割され、ファイルf12の実データが5個のチャンクに分割されたものとする。
【0066】
ここでは説明を簡単にするために、これらのチャンクのデータはすべて異なる(重複していない)ものとする。このため、ファイルf11を分割して得られたチャンクのデータには個別のチャンク番号「ck11」~「ck18」が付与され、ファイルf12を分割して得られたチャンクのデータには個別のチャンク番号「ck19」~「ck23」が付与されている。そして、チャンク番号「ck11」~「ck23」にそれぞれ対応するチャンクのデータ(チャンクck11~ck23)は、データキャッシュ117に個別に格納される。
【0067】
各チャンクにはオブジェクトのオブジェクト番号が割り当てられ、そのオブジェクト番号がチャンク管理テーブル113に登録される。また、本実施の形態では、同じオブジェクト番号に割り当てられたチャンクの個数が所定数に達すると、オブジェクト番号がカウントアップされ、次のチャンクにはカウントアップ後のオブジェクト番号が割り当てられる。これにより、同一のオブジェクトに対しては所定個数のチャンクが割り当てられる。
【0068】
なお、チャンクの個数が所定数に達していないオブジェクトの状態を、次のチャンクを受け入れ可能な「アクティブ」と呼ぶことにする。アクティブなオブジェクトは、クラウドストレージ240への格納準備が整っていない未完成なオブジェクトである。また、チャンクの個数が所定数に達したオブジェクトの状態を、次のチャンクを受け入れ不可能な「非アクティブ」と呼ぶことにする。非アクティブなオブジェクトは、クラウドストレージ240への格納準備が整ったオブジェクトとなり、所定のタイミングでクラウドストレージ240へ転送される。
【0069】
図7の例では、まず、チャンクck11~ck15がオブジェクト番号「ob11」のオブジェクト(オブジェクトob11)に割り当てられる。そして、この段階で、オブジェクトob11に含まれるチャンクの個数が所定数(
図7では例として5個)に達し、オブジェクトob11が非アクティブになったとする。すると、次のチャンクck16には新たなオブジェクト番号「ob12」が割り当てられる。
【0070】
この後、チャンクck16~ck20がオブジェクト番号「ob12」のオブジェクト(オブジェクトob12)に割り当てられ、この段階でオブジェクトob12が非アクティブになったとする。すると、次のチャンクck21には新たなオブジェクト番号「ob13」が割り当てられる。
図7の例では、チャンクck21~ck23がオブジェクト番号「ob13」のオブジェクト(オブジェクトob13)に割り当てられるが、この段階ではオブジェクトob13はアクティブの状態である。この場合、次に生成されるチャンク(図示せず)にはオブジェクト番号「ob13」が割り当てられることになる。
【0071】
以上の手順により、ファイルの書き込みに伴うオブジェクトの生成では、重複排除によって所定個数のチャンクが新たに出現するたびに新たなオブジェクトが完成される。オブジェクトには、生成順にオブジェクト番号が付与される。また、1つのオブジェクトには、連続するチャンク番号を有するチャンクが割り当てられる。
【0072】
以上の
図7では、データの重複がない場合について説明した。例えば、この後に書き込みが要求されたファイル内のチャンクに、チャンクck11~ck23のいずれかと同じ内容のデータを含むチャンクが存在した場合、そのチャンクのデータはデータキャッシュ117に新たに格納されず、クラウドストレージ240にも転送されない。すなわち、このチャンクについては実データの書き込みが行われず、ファイルと格納済みのチャンクとを対応付けるためのメタデータのみがチャンクマップテーブル112に書き込まれる。このようにして、重複するデータが記憶されないようにする「重複排除処理」が実行される。
【0073】
なお、本実施の形態では、所定個数のチャンクがオブジェクトに割り当てられると、そのオブジェクトが非アクティブ化される。しかし、他の方法として、例えば、オブジェクトに割り当てられたチャンクの合計サイズが所定サイズを超えた場合に、そのオブジェクトが非アクティブ化されてもよい。
【0074】
次に、デフラグの実行要否を判定するために利用される管理情報について、
図8、
図9を用いて説明する。
図8は、オブジェクト管理テーブルの構成例を示す図である。オブジェクト管理テーブル115には、オブジェクト番号に対して有効チャンク数および無効チャンク数が対応付けて登録される。有効チャンク数は、オブジェクトに含まれるチャンクデータのうち、有効なチャンクデータ(参照数が1以上のチャンクデータ)の数を示す。無効チャンク数は、オブジェクトに含まれるチャンクデータのうち、無効なチャンクデータ(参照数が0のチャンクデータ)の数を示す。
【0075】
図9は、デフラグ判定テーブルの構成例を示す図である。デフラグ判定テーブル116は、有効チャンク数および無効チャンク数を、複数のオブジェクトを含むオブジェクトグループごとに管理するための管理情報である。デフラグ判定テーブル116には、オブジェクトグループに含まれるチャンクデータのチャンク番号に対して、有効チャンク数および無効チャンク数が対応付けて登録される。ファイルの書き込みに伴ってオブジェクトが生成される際、所定個数(例えば20個)のオブジェクトが1つのオブジェクトグループにグループ化される。
【0076】
また、デフラグ判定テーブル116の各レコードにはデフラグ済みフラグがさらに登録される。デフラグ済みフラグは、該当するオブジェクトグループについてデフラグが1回以上実行されたか否かを示すフラグ情報である。ここでは例として、デフラグ済みフラグの値は、デフラグが1回も実行されていない場合は「0」に設定され、デフラグが1回でも実行されると「1」に更新されるものとする。
【0077】
ところで、クラウドストレージ240のようなオブジェクトストレージを提供するサービスでは、一般的に、使用容量に応じて課金される。また、GETコマンドやPUTコマンド等による通信に対して課金されるサービスもある。例えば、コマンドによる通信回数、あるいは通信データ量に応じて課金される場合がある。
【0078】
クラウドストレージゲートウェイ100は、重複排除技術により、内容が同じデータがクラウドストレージ240に重複して格納されないように制御する。これにより、クラウドストレージ240における使用容量が削減される。また、ファイルの削除や更新によって、どのファイルからも参照されない無効のチャンクが発生する場合がある。クラウドストレージゲートウェイ100は、デフラグの実行により、クラウドストレージ240から無効なチャンクを削除する。これにより、クラウドストレージ240における使用容量のさらなる削減が図られる。
【0079】
しかし、クラウドストレージ240のようなオブジェクトストレージを提供するサービスでは、一般的に、オブジェクト内の一部のデータ領域だけを削除するようなコマンドは用意されていない。このため、デフラグでは基本的に、無効なチャンクを含むオブジェクトを取得し、無効なチャンクを除去してオブジェクトを再構築した上で、再構築したオブジェクトを送信する、という手順が実行される。
【0080】
このように、1回のデフラグを実行するためにはクラウドストレージ240とクラウドストレージゲートウェイ100との間で複数回の通信が行われる場合が多い。このため、通信に対して課金されるサービスでは、デフラグの実行により通信コストが増大してしまう。したがって、デフラグ実行時における通信回数や通信データ量をできるだけ削減したいという点に課題がある。
【0081】
ここで、
図10~
図14を用いてデフラグ処理手順の比較例について説明し、その後に第2の実施の形態におけるデフラグ処理手順について説明する。
まず、
図10は、デフラグ処理手順の比較例を示す第1の図である。
図10の例では、NASクライアント210からクラウドストレージゲートウェイ100に対して、ファイルf21~f24の書き込みが順に要求されたとする。
【0082】
可変長チャンキングにより、ファイルf21はチャンクA~Dに分割され、ファイルf22はチャンクA,E,C,Fに分割され、ファイルf23はチャンクA,E,G,Hに分割され、ファイルf24はチャンクA,E,G,H,Iに分割されたとする。ここで、同じアルファベットの文字が付与されたチャンクのデータは同じ内容であるとする。例えば、ファイルf21~f24からそれぞれ分割されたチャンクAは、すべて同じ内容のデータである。すなわち、ファイルf21~f24の間ではチャンクAのデータが重複している。
【0083】
このようなファイルf21~f24の書き込みが要求された場合、重複排除処理により、チャンクA~Iが1つずつデータキャッシュ117に格納される。また、チャンクA~Iに対応する参照数(重複数)は、それぞれ「4」、「1」、「2」、「1」、「3」、「1」、「2」、「2」、「1」となる。
【0084】
また、
図10では例として、オブジェクトには3個のチャンクが割り当てられるものとする。この場合、チャンクA~Cによりオブジェクトob21が生成され、チャンクD~Fによりオブジェクトob22が生成され、チャンクG~Iによりオブジェクトob23が生成される。そして、オブジェクトob21~ob23は、PUTコマンドによりクラウドストレージゲートウェイ100からクラウドストレージ240にアップロードされる。
【0085】
図11は、デフラグ処理手順の比較例を示す第2の図である。クラウドストレージゲートウェイ100においては、データキャッシュ117の残容量が所定量以下になると、クラウドストレージ240にアップロード済みのオブジェクトのうちアクセス頻度が低いオブジェクトが、データキャッシュ117から削除される。
図11では、オブジェクトob21~ob23がデータキャッシュ117から削除されているとする。
【0086】
この状態で、NASクライアント210からファイルf21の削除が要求されたとする。これに伴い、チャンクAの参照数は「4」から「3」に減少し、チャンクBの参照数は「1」から「0」に減少し、チャンクCの参照数は「2」から「1」に減少し、チャンクDの参照数は「1」から「0」に減少する。これにより、チャンクB,Dは無効なデータとなる。
【0087】
図12は、デフラグ処理手順の比較例を示す第3の図である。この
図12では、無効になったチャンクB,Dの各データをクラウドストレージ240から削除するためのデフラグ処理手順の一例を示している。
【0088】
図12の例では、チャンクBを含むオブジェクトob21が、GETコマンドによりクラウドストレージゲートウェイ100に取得される。そして、チャンクBを除くチャンクA,Cによりオブジェクトob21が再構築され、再構築されたオブジェクトob21がPUTコマンドによりクラウドストレージ240に再アップロードされる。
【0089】
また、チャンクDを含むオブジェクトob22が、GETコマンドによりクラウドストレージゲートウェイ100に取得される。そして、チャンクDを除くチャンクE,Fによりオブジェクトob22が再構築され、再構築されたオブジェクトob22がPUTコマンドによりクラウドストレージ240に再アップロードされる。
【0090】
図13は、デフラグ処理手順の比較例を示す第4の図である。
図13では、データキャッシュ117の残容量低下に伴い、再構築されたオブジェクトob21,ob22はデータキャッシュ117から削除されている。
【0091】
この状態で、NASクライアント210からさらにファイルf22の削除が要求されたとする。これに伴い、チャンクAの参照数は「3」から「2」に減少し、チャンクEの参照数は「3」から「2」に減少し、チャンクCの参照数は「1」から「0」に減少し、チャンクFの参照数は「1」から「0」に減少する。これにより、チャンクC,Fは無効なデータとなる。
【0092】
図14は、デフラグ処理手順の比較例を示す第5の図である。この
図14では、無効になったチャンクC,Fをクラウドストレージ240から削除するためのデフラグ処理手順の一例を示している。
【0093】
図14の例では、チャンクCを含むオブジェクトob21が、GETコマンドによりクラウドストレージゲートウェイ100に取得される。そして、チャンクCを除くチャンクAによりオブジェクトob21が再構築され、再構築されたオブジェクトob21がPUTコマンドによりクラウドストレージ240に再アップロードされる。
【0094】
また、チャンクFを含むオブジェクトob22が、GETコマンドによりクラウドストレージゲートウェイ100に取得される。そして、チャンクFを除くチャンクEによりオブジェクトob22が再構築され、再構築されたオブジェクトob22がPUTコマンドによりクラウドストレージ240に再アップロードされる。
【0095】
以上のデフラグ処理手順により、無効になったチャンクB,C,D,Fがクラウドストレージ240から削除され、クラウドストレージ240の使用容量が削減される。しかしながら、
図12に示す1回目のデフラグ処理と
図14に示す2回目のデフラグ処理のどちらでも、各オブジェクトについて2回のコマンド送信が実行されており、通信回数が多くなっている。
【0096】
図10~
図14では説明を簡単にするためにオブジェクト数やオブジェクト内のチャンク数を少なく記載しているが、実際には数万以上のオブジェクトが生成され、各オブジェクトにも数千以上のチャンクが含まれる。このため、無効チャンクが発生するオブジェクトは大量に出現し、しかも、同じオブジェクトについて無効チャンクが複数回発生し得る。そして、それらのオブジェクトそれぞれについてGETコマンドとPUTコマンドによる2回の通信が行われる。したがって、デフラグ実行に伴う通信回数は膨大な数になり、膨大な通信料金が発生してしまう。
【0097】
図15は、第2の実施の形態におけるデフラグ処理手順を示す図である。
本実施の形態のクラウドストレージゲートウェイ100は、オブジェクトについての1回目のデフラグの実行要否をオブジェクト単位で判定するのではなく、複数のオブジェクトを含むオブジェクトグループ単位で判定する。
図9に示したデフラグ判定テーブル116は、オブジェクトグループ単位でデフラグの実行要否を判定するために利用される。クラウドストレージゲートウェイ100は、デフラグ判定テーブル116を用いて、オブジェクトグループに含まれる各オブジェクトでの無効チャンクの発生状況を監視する。そして、クラウドストレージゲートウェイ100は、オブジェクトグループ内の無効チャンク数の割合が一定割合を超えた場合に、そのオブジェクトグループ内の各オブジェクトについてデフラグの実行が必要と判定する。
【0098】
クラウドストレージゲートウェイ100は、あるオブジェクトグループについてデフラグの実行が必要と判定すると、そのオブジェクトグループ内の全オブジェクトを取得する。そして、クラウドストレージゲートウェイ100は、取得した全オブジェクトから無効チャンクを除去した上でオブジェクトを再構築し、再構築されたオブジェクトをクラウドストレージ240に再アップロードする。このオブジェクト再構築の際、クラウドストレージゲートウェイ100は、単に同じオブジェクト内の有効チャンク同士を結合するのではなく、次回以降のデフラグの発生回数やデフラグ時の通信回数が減るように、オブジェクト間で有効チャンクの組み替えを行う。上記のようにオブジェクトグループ単位でデフラグの実行要否を判定する目的は、このようにオブジェクトグループ内のオブジェクト間で有効チャンクを組み替え可能にする点にある。
【0099】
図15の例では、ファイルの書き込み要求に伴ってオブジェクトob31~ob35が生成され、クラウドストレージ240にアップロードされたとする(初回アップロード)。また、これらのオブジェクトob31~ob35によってオブジェクトグループgp1が形成されている。そして、その後のファイル削除やファイル更新の要求に伴ってオブジェクトグループgp1内に無効チャンクが発生し、無効チャンク数の割合が一定割合を超えて、オブジェクトグループgp1のデフラグ実行が必要と判定されたとする。なお、
図15中のオブジェクトob31,ob33,ob34に示されている斜線部分は、無効チャンクの領域を示す。
【0100】
クラウドストレージゲートウェイ100は、GETコマンドによりクラウドストレージ240からオブジェクトob31~ob35を取得し、これらについて一括してデフラグを実行する。このデフラグでは、クラウドストレージゲートウェイ100は、取得したオブジェクトob31~ob35に含まれる有効チャンクを組み替えてオブジェクトを再構築し、再構築されたオブジェクトをクラウドストレージ240にアップロードする。
図15の例では、再構築によりオブジェクトob41~ob45が生成され、クラウドストレージ240にアップロードされたとする。すなわち、クラウドストレージ240には元のオブジェクトob31~ob35の代わりに再構築されたオブジェクトob41~ob45が格納される。
【0101】
なお、再構築されたオブジェクトob41~ob45についても、元のオブジェクトob31~ob35と同じオブジェクトグループgp1に属するものとして管理される。正確には、元のオブジェクトob31~ob35内の有効チャンク(すなわち、再構築されたオブジェクトob41~ob45内のチャンク)が、再構築前と同じオブジェクトグループgp1に属するものとして管理される。したがって、デフラグ判定テーブル116(
図9参照)においては、再構築されたオブジェクトob41~ob45内のチャンクは再構築前と同じレコードに対応付けて管理される。
【0102】
一方、図示しないが、クラウドストレージゲートウェイ100は、オブジェクトグループgp1についての2回目以降のデフラグについては、オブジェクトグループ単位でなく、オブジェクト単位で実行する。例えば、再構築されたオブジェクトob41~ob45については、オブジェクト単位で無効チャンク数が監視され、無効チャンク数の割合が一定割合を超えたオブジェクトについて、そのオブジェクト単独で2回目のデフラグが行われる。デフラグの方法としては、
図12、
図14に示したように、単一オブジェクト内の有効チャンクのみを結合することでオブジェクトが再構築される。
【0103】
ここで、オブジェクトグループgp1についての1回目のデフラグでは、オブジェクトの再構築の際に、チャンク管理テーブル113に登録された、有効チャンクに対応する参照数およびチャンク番号が参照される。クラウドストレージゲートウェイ100は、基本方針として、参照数およびチャンク番号が互いに近いチャンクを同一のオブジェクトにまとめるようにする。
【0104】
チャンク番号が近いチャンクは、同じファイルから切り出された可能性が高い。また、バックアップ用途でNASクライアント210からファイルが書き込まれる場合には、複数のファイルについてまとめて書き込みや削除が要求されることが多い。このような理由から、チャンク番号が近いチャンクを1つのオブジェクトにまとめて再アップロードすることで、そのオブジェクト内のチャンクの参照数が同じ時期に減算される可能性が高くなる。また、参照数が近いチャンクを1つのオブジェクトにまとめることで、オブジェクト内の各チャンクの参照数が均等に減少していく可能性が高くなる。
【0105】
その結果、オブジェクト内の分散した位置で無効チャンクが長時間をかけて徐々に発生する可能性が低くなり、逆にオブジェクト内で多数の無効チャンクが一度に発生しやすくなる。これにより、このオブジェクトについてデフラグが必要と判定されたときに、一度に多数の無効チャンクを削除できる可能性が高まる。その結果、オブジェクト内で無効チャンクが長時間をかけて少しずつ増えていく場合と比較して、同じオブジェクトについてのデフラグの実行回数が減少する可能性が高くなる。したがって、クラウドストレージゲートウェイ100とクラウドストレージ240との間の通信回数が減少する可能性が高くなる。また、通信回数の減少により、クラウドストレージゲートウェイ100とクラウドストレージ240との間の通信量も削減される。
【0106】
ここで、
図16は、2回目以降のデフラグの実行例を示す第1の図である。
図16の左側では、
図15で再構築されたオブジェクトob41についての状態遷移の例を示す。一方、
図16の右側では、状態遷移の比較例として、元のオブジェクトob31について有効チャンクのみを結合することで得られたオブジェクトob51についての状態遷移の例を示す。
【0107】
オブジェクトob41については、まとまった大きな領域で無効チャンクが発生しやすくなる。一方、オブジェクトob51については、まとまった領域のチャンクで参照数が減少されたとしても、各チャンクの参照数に差があるため、無効チャンクの小さな領域が分散して発生しやすくなる。その結果、オブジェクトob41の方が、デフラグが必要と判定されたときに削除される無効チャンク数が多くなる可能性が高くなる。その結果、オブジェクトob41の方が、オブジェクト全体が削除されるまでに実行されるデフラグの回数が減少する可能性が高くなる。
【0108】
以下、
図15を用いて説明を続ける。
上記のようにオブジェクト内の各チャンクの参照数が均等に減少していく可能性が高い場合には、オブジェクトのサイズが小さいほど、そのオブジェクトについてデフラグが必要と判定されたときに、オブジェクト内の全チャンクが無効になる可能性が高くなる。そこで、クラウドストレージゲートウェイ100は、オブジェクトグループgp1の1回目のデフラグの際、オブジェクトに含める参照数が小さいほど、オブジェクトのサイズを小さくする(オブジェクトに含めるチャンク数を少なくする)。これにより、オブジェクトについてデフラグが必要と判定されたときに、オブジェクト内の全チャンクが無効になっている場合には、そのオブジェクトの削除(DELETE)のみ実行されればよくなり、オブジェクトの取得(GET)と再アップロード(PUT)は不要になる。したがって、クラウドストレージゲートウェイ100とクラウドストレージ240との間の通信回数をさらに低減できる可能性が高くなる。また、通信回数の減少により、クラウドストレージゲートウェイ100とクラウドストレージ240との間の通信量のさらなる削減も期待できる。
【0109】
図15の例では、再構築されたオブジェクトob41,ob42に含まれるチャンクの参照数より、再構築されたオブジェクトob43~ob45に含まれるチャンクの参照数の方が小さい。そこで、オブジェクトob41,ob42のサイズより、オブジェクトob43~ob45のサイズが小さくなっている。これにより、オブジェクトob41,ob42と比較して、オブジェクトob43~ob45の方が、DELETEコマンドによってオブジェクト単位で削除されやすくなる。したがって、デフラグが必要と判定されたときに、オブジェクトob43~ob45の方が通信回数を低減できる可能性が高まる。また、オブジェクト全体のチャンクが削除されることで、オブジェクトの再構築が不要になり、クラウドストレージゲートウェイ100の処理負荷を軽減できる。
【0110】
図17は、2回目以降のデフラグの実行例を示す第2の図である。
図17の左側では、
図15で再構築されたオブジェクトob41についての状態遷移の例を示す。また、
図17の右側には、
図15で再構築されたオブジェクトob43についての状態遷移の例を示す。前述のように、オブジェクトob41に含まれるチャンクの参照数より、オブジェクトob43に含まれるチャンクの参照数の方が小さい。また、オブジェクトob41のサイズよりオブジェクトob43のサイズの方が小さい。
【0111】
オブジェクトob41,ob43のいずれでも、オブジェクト内の各チャンクの参照数が均等に減少していく可能性が高い。そして、オブジェクトob41,ob43のいずれでも、デフラグの実行が必要と判定されたときに削除される無効チャンク数が多くなる可能性が高い。ただし、オブジェクトob43に含まれるチャンクの参照数の方が小さいので、オブジェクトob43の方が早期に全体のチャンクが無効になりやすい。また、オブジェクトob43の方が1回で全体のチャンクが無効になる可能性も高い。したがって、オブジェクトob43の方が、クラウドストレージゲートウェイ100とクラウドストレージ240との間の通信回数をさらに低減できる可能性が高くなる。
【0112】
以下、
図15を用いて説明を続ける。
クラウドストレージゲートウェイ100は、オブジェクトについての1回目のデフラグの際に生成するオブジェクトのサイズを、初回アップロード時に生成するオブジェクトのサイズより小さくしてもよい。これは、クラウドストレージ240についての次のような特性に基づいて行われる。
【0113】
クラウドストレージゲートウェイ100とクラウドストレージ240との間では、オブジェクトのサイズを大きくするほど、通信性能を高めることができる。これは、合計サイズが同じデータを複数のオブジェクトに分割して複数回送信するよりも、1つのオブジェクトにまとめて1回で送信した方が、全体として通信速度が高くなるからである。
【0114】
本実施の形態では、初回アップロードは、NASクライアント210からのファイル書き込みやファイル更新の要求に応じて実行される一連の処理として実行される。すなわち、必要なオブジェクトのアップロードが完了するまで、ファイル書き込みやファイル更新に対する応答がNASクライアント210に返されない。このため、初回アップロードは高速に実行される必要がある。そこで、初回アップロード時には、例えば平均50MB前後の比較的大きなサイズのオブジェクトが生成されて、そのオブジェクトがクラウドストレージ240に送信される。これにより、ファイル書き込みやファイル更新に対する応答時間を短縮できる。
【0115】
一方、デフラグは、NASクライアント210からの要求に応じたI/O(Input/Output)処理に対してバックグラウンドで実行される。このため、デフラグにおける通信速度は、初回アップロード時ほど高くなくてよい。このことから、オブジェクトについての1回目のデフラグの際に生成するオブジェクトのサイズを、初回アップロード時に生成するオブジェクトのサイズより小さくすることができる。例えば、チャンクの参照数が大きい場合、オブジェクトのサイズが平均で数MB程度になるようにし、チャンクの参照数が小さい場合、オブジェクトのサイズが平均で1MB程度になるようにする。このようにオブジェクトのサイズを小さくすることで、2回目以降のデフラグの際のデータ通信量を削減することができる。
【0116】
次に、クラウドストレージゲートウェイ100の処理について、フローチャートを用いて説明する。
図18、
図19は、ファイル書き込み処理の手順を示すフローチャートの例である。
【0117】
[ステップS11]ファイル入出力部120は、NASクライアント210からファイルの書き込み要求およびファイルのデータを受信する。重複排除処理部130の重複判定部131は、書き込みが要求されたファイルのデータを取得し、ディレクトリテーブル111に、そのファイルのディレクトリ情報を示すレコードを追加する。このとき、ファイルにファイル番号が付与される。また、重複判定部131は、ファイルのデータを可変長のチャンクに分割する。
【0118】
[ステップS12]重複判定部131は、ファイルの先頭側から順に、処理対象のチャンクを1つ選択する。また、重複判定部131は、選択されたチャンクのデータに基づくハッシュキーを算出する。
【0119】
[ステップS13]重複判定部131は、チャンクマップテーブル112にレコードを追加し、このレコードに次のような情報を登録する。ファイル番号の項目には、書き込みが要求されたファイルのファイル番号が登録され、オフセットおよびサイズの項目には、処理対象のチャンクについての情報が登録される。
【0120】
[ステップS14]重複判定部131は、ハッシュキーテーブル114を参照し、ステップS13で算出されたハッシュキーが登録されたレコードが存在するかを判定する。これにより、ステップS12で選択されたチャンクと同じ内容のチャンクがすでに格納済みか(重複しているか)が判定される。重複判定部131は、該当するレコードが見つかった場合、ステップS15の処理を実行し、該当するレコードが存在しない場合、
図19のステップS21の処理を実行する。
【0121】
[ステップS15]重複判定部131は、ステップS14でハッシュキーテーブル114から検索されたレコードからチャンク番号を取得し、取得したチャンク番号をステップS13でチャンクマップテーブル112に追加したレコードに登録する。
【0122】
[ステップS16]重複判定部131は、チャンク管理テーブル113のレコードのうち、ステップS15で取得したチャンク番号を含むレコードを参照し、このレコードに登録されている参照数をカウントアップする。
【0123】
[ステップS17]重複判定部131は、ステップS11で分割されたすべてのチャンクについて処理済みかを判定する。重複判定部131は、未処理のチャンクがある場合は処理をステップS12に進め、未処理のチャンクを先頭側から1つ選択して処理を継続する。一方、重複判定部131は、すべてのチャンクを処理済みの場合、ファイル書き込みが完了したことをファイル入出力部120に通知する。通知を受けたファイル入出力部120は、NASクライアント210に対してファイル書き込みの完了を示す応答情報を送信する。
【0124】
以下、
図19を用いて説明を続ける。
[ステップS21]重複判定部131は、ステップS12で選択されたチャンクについての新たなチャンク番号を算出する。このチャンク番号は、チャンク管理テーブル113に登録されているチャンク番号の最大値に「1」を加算した値とされる。重複判定部131は、チャンク管理テーブル113に新たなレコードを追加し、このレコードに対し、算出された新たなチャンク番号と、チャンクのサイズと、参照数「1」とを登録する。
【0125】
[ステップS22]重複判定部131は、ステップS12で選択されたチャンクのデータをデータキャッシュ117に格納する。このとき、データの格納位置とチャンク番号との対応付けが行われる。また、重複判定部131は、ハッシュキーテーブル114に新たなレコードを追加し、このレコードに対し、ステップS21で算出された新たなチャンク番号と、ステップS12で算出されたハッシュキーとを登録する。
【0126】
[ステップS23]重複判定部131は、ステップS21で算出された新たなチャンク番号を、ステップS13でチャンクマップテーブル112に追加したレコードに登録する。
【0127】
[ステップS24]チャンク管理部132は、クラウドストレージ240に対して未送信のチャンク数が所定の閾値(Mとする)に達したかを判定する。未送信のチャンク数とは、アクティブ状態のオブジェクトに含まれるチャンクの数である。また、閾値Mは、例えば10000個程度に設定される。チャンク管理部132は、未送信のチャンク数が閾値Mに達した場合、ステップS25に処理を進め、未送信のチャンク数が閾値Mに達していない場合、ステップS27に処理を進める。
【0128】
[ステップS25]チャンク管理部132は、未送信のM個のチャンクを結合して生成したオブジェクトをクラウドストレージ240にアップロードするように、クラウド通信部140に依頼する。これにより、当該オブジェクトは非アクティブの状態となる。クラウド通信部140は、PUTコマンドによりオブジェクトをクラウドストレージ240にアップロードする。
【0129】
[ステップS26]チャンク管理部132は、ステップS12で選択されたチャンクに新たなオブジェクト番号を割り当てる。このオブジェクト番号は、ステップS25でアップロードされたオブジェクトのオブジェクト番号に「1」を加算した値とされる。チャンク管理部132は、ステップS21でチャンク管理テーブル113に追加されたレコードに、新たなオブジェクト番号と、オフセット「0」とを登録する。新たなオブジェクト番号に対応するオブジェクトは、アクティブ状態となる。また、チャンク管理部132は、オブジェクト管理テーブル115に新たなレコードを追加し、このレコードに新たなオブジェクト番号を登録する。
【0130】
[ステップS27]チャンク管理部132は、ステップS12で選択されたチャンクに、既存の最大のオブジェクト番号を割り当てる。このオブジェクト番号は、ステップS24で判定の対象となった未送信のチャンクに割り当てられているオブジェクト番号である。したがって、ステップS27では、これらのチャンクに割り当てられている未送信のオブジェクト(アクティブ状態のオブジェクト)に対して、ステップS12で選択されたチャンクがさらに割り当てられる。
【0131】
チャンク管理部132は、ステップS21でチャンク管理テーブル113に追加されたレコードに、割り当てられたオブジェクト番号と、対応するオブジェクトにおけるオフセットとを登録する。登録されるオフセットは、1つ前のレコードに登録されたオフセットとサイズとから算出される。
【0132】
[ステップS28]チャンク管理部132は、オブジェクト管理テーブル115およびデフラグ判定テーブル116に対して、有効チャンク数の登録または更新を行う。
ステップS26が実行された場合、チャンク管理部132は、ステップS26でオブジェクト管理テーブル115に追加したレコードに、有効チャンク数としてMを登録する。また、チャンク管理部132は、このレコードに対応するオブジェクトが含まれるオブジェクトグループに対応するレコードをデフラグ判定テーブル116から特定し、特定したレコードに登録された有効チャンク数にMを加算する。ただし、該当するオブジェクトグループがデフラグ判定テーブル116に存在しない場合、チャンク管理部132は、デフラグ判定テーブル116に新たにレコードを追加し、そのレコードに有効チャンク数としてMを登録し、デフラグ済みフラグとして「0」を登録する。
【0133】
一方、ステップS27が実行された場合、チャンク管理部132は、オブジェクト管理テーブル115からステップS27で割り当てられたオブジェクト番号を含むレコードを特定し、特定したレコードに登録された有効チャンク数にMを加算する。また、チャンク管理部132は、このレコードに対応するオブジェクトが含まれるオブジェクトグループに対応するレコードをデフラグ判定テーブル116から特定し、特定したレコードに登録された有効チャンク数にMを加算する。
【0134】
以上のステップS28の処理が完了すると、処理が
図18のステップS17に進められる。
図20は、ファイル削除処理の手順を示すフローチャートの例である。
【0135】
[ステップS31]ファイル入出力部120は、NASクライアント210からファイルの削除要求を受信する。重複排除処理部130の重複判定部131は、削除が要求されたファイルのファイル番号をディレクトリテーブル111に基づいて特定する。
【0136】
[ステップS32]重複判定部131は、ステップS31で特定したファイル番号が登録されたレコードをチャンクマップテーブル112から特定して、特定したレコードの1つを選択する。これにより、削除が要求されたファイルから生成されたチャンクの1つが選択される。
【0137】
[ステップS33]重複判定部131は、ステップS32で選択されたレコードからチャンク番号を取得する。重複判定部131は、チャンク管理テーブル113において、取得したチャンク番号に対応付けられた参照数を「1」だけカウントダウンする。
【0138】
[ステップS34]重複判定部131は、カウントダウン後の参照数が「0」かを判定する。重複判定部131は、参照数が「0」の場合、処理をステップS35に進め、参照数が「0」でない場合(「1」以上の場合)、処理をステップS40に進める。
【0139】
[ステップS35]このケースでは、ステップS33で取得したチャンク番号に対応するチャンクが無効になっている。チャンク管理部132は、チャンク管理テーブル113から、ステップS33で取得したチャンク番号に対応付けられたオブジェクト番号を特定する。チャンク管理部132は、オブジェクト管理テーブル115を参照して、特定したオブジェクト番号に対応付けられた無効チャンク数に「1」を加算し、当該オブジェクト番号に対応付けられた有効チャンク数から「1」を減算する。
【0140】
また、チャンク管理部132は、特定したオブジェクト番号が示すオブジェクトが含まれるオブジェクトグループを特定し、デフラグ判定テーブル116から、特定したオブジェクトグループに対応するレコードを特定する。チャンク管理部132は、特定したレコードに登録された無効チャンク数に「1」を加算し、当該レコードに登録された有効チャンク数から「1」を減算する。
【0141】
[ステップS36]チャンク管理部132は、ステップS35での有効チャンク数の減算により、オブジェクト管理テーブル115の該当レコードに登録された有効チャンク数が「0」になったかを判定する。チャンク管理部132は、有効チャンク数が「0」の場合、処理をステップS37に進め、有効チャンク数が「0」でない場合(「1」以上の場合)、処理をステップS38に進める。
【0142】
[ステップS37]このケースでは、ステップS33で取得したチャンク番号に対応するチャンクが属するオブジェクトについて、オブジェクト内の全チャンクが無効になっている。このため、このオブジェクトが不要である。そこで、チャンク管理部132は、このオブジェクトを削除するようにクラウド通信部140に依頼する。クラウド通信部140は、DELETEコマンドによりクラウドストレージ240に対してオブジェクトの削除を要求する。これにより、クラウドストレージ240からオブジェクトが削除される。
【0143】
[ステップS38]チャンク管理部132は、ステップS35で有効チャンク数および無効チャンク数を更新した、デフラグ判定テーブル116のレコードを参照する。チャンク管理部132は、このレコードに現在登録されている有効チャンク数と無効チャンク数とに基づいて、全チャンク数(有効チャンク数+無効チャンク数)に対する無効チャンク数の割合を算出する。この無効チャンク数の割合は、ステップS33で取得したチャンク番号に対応するチャンクを含むオブジェクトが属するオブジェクトグループについて、このオブジェクトグループにおける全チャンク数に対する無効チャンク数の割合を示す。
【0144】
チャンク管理部132は、無効チャンク数の割合が所定の閾値(例えば20%)を超えたかを判定する。チャンク管理部132は、無効チャンク数の割合が閾値を超えた場合、処理をステップS39に進め、無効チャンク数の割合が閾値以下の場合、処理をステップS40に進める。
【0145】
[ステップS39]ステップS38で無効チャンク数の割合が閾値を超えた場合、ステップS33で取得したチャンク番号に対応するチャンクが属するオブジェクトグループ(ステップS38で参照されたレコードに対応するオブジェクトグループ)について、デフラグによるデータ削減効果が高いと判断される。この場合、チャンク管理部132は、このオブジェクトグループをデフラグ対象に設定する。このとき例えば、該当するオブジェクトグループに現在の時刻(デフラグ対象に設定された時刻)が付与される。
【0146】
[ステップS40]重複判定部131は、ステップS32で特定された全レコードに対応するチャンク(すなわち、削除が要求されたファイルから生成されたすべてのチャンク)について処理済みかを判定する。重複判定部131は、未処理のチャンクがある場合は処理をステップS32に進め、未処理のチャンクを1つ選択して処理を継続する。一方、重複判定部131は、すべてのチャンクを処理済みの場合、ファイル削除が完了したことをファイル入出力部120に通知する。通知を受けたファイル入出力部120は、NASクライアント210に対してファイル削除の完了を示す応答情報を送信する。
【0147】
図21、
図22は、デフラグ処理の手順を示すフローチャートの例である。
[ステップS51]重複排除処理部130のデフラグ処理部133は、
図20のステップS39の処理によってあるオブジェクトグループがデフラグ対象に設定されてから、一定時間経過するのを待つ。そして、デフラグ処理部133は、一定時間が経過すると、当該オブジェクトグループを処理対象として処理をステップS52に進める。
【0148】
実際の処理としては、例えば、デフラグ処理部133は、デフラグ対象に設定されたオブジェクトグループ(デフラグ判定テーブル116のレコード)に付与された時刻(デフラグ対象に設定された時刻)に基づき、その時刻から一定時間が経過したオブジェクトグループを検知すると、ステップS52以降の処理を実行する。
【0149】
ここで、オブジェクトグループがデフラグ対象に設定されてからデフラグをすぐに実行するのではなく、一定時間後に実行するのは、以下の理由による。NASクライアント210でのバックアップ処理では、関連する複数のファイルが一括して削除されることが多い。このため、オブジェクトグループがデフラグ対象に設定されてから一定時間が経過する間に、同じオブジェクトグループにおいてさらに多くの無効チャンクが発生することが期待できる。オブジェクトグループについてのデフラグでは、無効チャンクが多いほどクラウドストレージ240の使用容量を効率的に削減できる。また、特にステップS53以降の処理(2回目以降のデフラグ)では、無効チャンクが多いほど1つのオブジェクトに含まれる全チャンクが無効になる可能性が高くなり、そのようなオブジェクトのデフラグに伴う通信回数や通信量を削減できる。
【0150】
[ステップS52]デフラグ処理部133は、処理対象のオブジェクトグループについて、今回のデフラグが初回のデフラグであるかを判定する。デフラグ判定テーブル116のレコードのうち、処理対象のオブジェクトグループに対応するレコードにおいて、デフラグ済みフラグが「0」であれば初回のデフラグと判定され、「1」であれば2回目以降のデフラグと判定される。デフラグ処理部133は、初回のデフラグの場合、処理を
図22のステップS61に進め、初回のデフラグでない場合、処理をステップS53に進める。
【0151】
以下、
図22を用いて説明を続ける。初回のデフラグの場合、ステップS61以降の処理が実行される。
[ステップS61]デフラグ処理部133は、処理対象のオブジェクトグループに属するすべてのオブジェクトを取得するように、クラウド通信部140に依頼する。クラウド通信部140は、GETコマンドにより該当する全オブジェクトをクラウドストレージ240からダウンロードする。
【0152】
[ステップS62]デフラグ処理部133は、新規オブジェクトに結合されたチャンク数を示す変数N(チャンク数N)を、「0」にリセットする。これにより、1つの新規オブジェクトの生成(再構築)が開始される。
【0153】
[ステップS63]デフラグ処理部133は、ステップS61で取得されたオブジェクトグループの各オブジェクトに含まれる有効チャンクの中に、未結合のチャンクがあるかを判定する。「未結合のチャンク」とは、当該有効チャンクのうち、現在生成中の新規オブジェクトと、すでに生成済みの(完成した)新規オブジェクトのどちらにも結合されていない有効チャンクを示す。デフラグ処理部133は、未結合のチャンクがある場合、処理をステップS64に進め、未結合のチャンクがない場合、処理をステップS70に進める。
【0154】
[ステップS64]デフラグ処理部133は、チャンク管理テーブル113に基づき、未結合の有効チャンクの中から、参照数が最大で、かつチャンク番号が最小の有効チャンクを検索する。この処理で検索されたチャンクについての参照数をNとする。また、デフラグ処理部133は、チャンク数Nに「1」を加算する。
【0155】
[ステップS65]デフラグ処理部133は、ステップS61で取得されたオブジェクトグループの各オブジェクトに含まれる有効チャンクの中から、次のような有効チャンクを特定する。ステップS64の次に実行された場合、ステップS64で検索された有効チャンクの次の有効チャンク(チャンク番号が次に大きい有効チャンク)が特定される。また、ステップS66,S67の次に実行された場合、ステップS66でオブジェクトに結合された有効チャンクの次の有効チャンクが特定される。
【0156】
デフラグ処理部133は、チャンク管理テーブル113の該当レコードに基づき、特定した有効チャンクの参照数が(2/3)R以上かを判定する。デフラグ処理部133は、参照数が(2/3)R以上である場合、処理をステップS66に進め、参照数が(2/3)Rより小さい場合、処理をステップS68に進める。なお、係数「2/3」は一例である。ステップS65では、特定した有効チャンクの参照数がRに近い値であるか否かが判定されればよい。
【0157】
[ステップS66]デフラグ処理部133は、ステップS65で特定した有効チャンクを、現在生成中の新規オブジェクトに結合する。そして、デフラグ処理部133は、チャンク数Nに「1」を加算する。
【0158】
[ステップS67]デフラグ処理部133は、チャンク数Nが所定の閾値M_Hより大きいかを判定する。この閾値M_Hは、初回アップロードのためのオブジェクト生成に用いられる閾値M(
図19のステップS24参照)より小さく、かつ、後述するステップS68で用いられる閾値M_Lより大きい。デフラグ処理部133は、チャンク数Nが閾値M_Hより大きい場合、処理をステップS69に進め、チャンク数Nが閾値M_H以下である場合、処理をステップS65に進める。
【0159】
[ステップS68]デフラグ処理部133は、チャンク数Nが所定の閾値M_Lより大きいかを判定する。前述のように、閾値M_Lは、ステップS66で用いられる閾値M_Hより小さい。デフラグ処理部133は、チャンク数Nが閾値M_Lより大きい場合、処理をステップS69に進め、チャンク数Nが閾値M_L以下である場合、処理をステップS63に進める。
【0160】
ここで、処理がステップS63に進められた場合、ステップS63,S64では、ステップS61で取得されたオブジェクトグループの各オブジェクトに含まれる有効チャンクのうち、ステップS65で特定された有効チャンクを先頭とした範囲の有効チャンクが処理対象となる。また、ステップS65で特定したチャンクは現在生成中の新規オブジェクトには結合されずに、未結合のチャンクとして残る。
【0161】
[ステップS69]デフラグ処理部133は、現在生成中である、N個の有効チャンクを含む新規オブジェクトの生成を完了する。デフラグ処理部133は、生成された(完成された)新規オブジェクトに新規のオブジェクト番号を割り当て、このオブジェクト番号を指定して新規オブジェクトのアップロードをクラウド通信部140に依頼する。クラウド通信部140は、PUTコマンドによりこの新規オブジェクトをクラウドストレージ240にアップロードする(再アップロード)。
【0162】
また、デフラグ処理部133は、生成された新規オブジェクトに対応するレコードをオブジェクト管理テーブル115に追加する。デフラグ処理部133はこのレコードに対し、オブジェクト番号を登録するとともに、有効チャンク数として新規オブジェクトに含まれるチャンク数を登録し、無効チャンク数として「0」を登録する。
【0163】
さらに、デフラグ処理部133は、チャンク管理テーブル113のレコードのうち、生成された新規オブジェクトに含まれる各チャンクに対応するレコードについて、オブジェクト番号とオフセットを更新する。これにより、各チャンクのチャンク番号と新規オブジェクトとの対応関係がチャンク管理テーブル113に登録される。
【0164】
ステップS69が実行された後、処理はステップS62に進められ、別の新規オブジェクトの生成が開始される。
[ステップS70]デフラグ処理部133は、デフラグ判定テーブル116から、処理対象のオブジェクトグループに対応するレコードを特定する。デフラグ処理部133は、特定したレコードに登録された無効チャンク数から、ステップS61でダウンロードしたオブジェクトに含まれていた無効チャンクの数を減算する。また、デフラグ処理部133は、特定したレコードのチャンク番号の項目から、これらの無効チャンクのチャンク番号を削除する。さらに、デフラグ処理部133は、ステップS61でダウンロードした各オブジェクトの削除をクラウド通信部140に依頼し、オブジェクト管理テーブル115から、これらのオブジェクトに対応するレコードを削除する。以上の処理が完了すると、デフラグ処理が終了される。
【0165】
以上のステップS61~S70に示したように、オブジェクトグループについての初回のデフラグでは、オブジェクトグループ内の全オブジェクトに含まれる有効チャンクが元のオブジェクトに関係なく組み替えられることで、新規オブジェクトが再構築される。
【0166】
ここで、例えば、ステップS65~S67の処理が繰り返される場合、チャンク番号が近く、参照数も近い((2/3)R以上R以下)有効チャンクが連続してオブジェクトに組み込まれる。このようなケースでは、閾値M_Hにより比較的大きなサイズのオブジェクトが生成される。
【0167】
一方、ステップS65でNoと判定される場合、参照数の差が大きい有効チャンクが現れたことになる。この場合、異なるファイルや関連性の低いファイルの有効チャンクなど、性質の異なる有効チャンクが現れた可能性が高い。すなわち、ステップS65でNoと判定されるケースでは、オブジェクトに組み込むかの判定対象となっている領域に、性質の異なる有効チャンクが存在している可能性が高い。このような領域の有効チャンクをオブジェクトに結合した場合、オブジェクト内で無効チャンクが分散した位置に異なるタイミングで発生しやすくなり、オブジェクトのサイズを大きくしてしまうとデフラグの効率が悪化する可能性が高い。そこで、ステップS68で閾値M_Hより小さい閾値M_Lを用いることで、小さいサイズのオブジェクトが生成される。
【0168】
また、ステップS68でYesと判定されるケースでは、参照数のバラツキが大きい領域の有効チャンクがオブジェクトに組み込まれるので、それらの有効チャンクの参照数は傾向として比較的小さな値となる。そのため、閾値M_Lを用いることで、参照数が比較的小さい有効チャンクを含むオブジェクトのサイズが小さくなることを期待できる。
【0169】
以下、
図21を用いて説明を続ける。2回目以降のデフラグの場合、ステップS53以降の処理が実行される。
[ステップS53]デフラグ処理部133は、処理対象のオブジェクトグループに属するオブジェクトを1つ選択する。なお、処理対象のオブジェクトグループに属するオブジェクトは、このオブジェクトグループに対応するデフラグ判定テーブル116のレコードに登録されたチャンク番号と、チャンク管理テーブル113においてこのチャンク番号に対応付けられたオブジェクト番号とから特定される。
【0170】
[ステップS54]デフラグ処理部133は、オブジェクト管理テーブル115のレコードのうち、ステップS53で選択したオブジェクトに対応するレコードを参照し、このレコードから有効チャンク数と無効チャンク数を取得する。デフラグ処理部133は、全チャンク数(有効チャンク数と無効チャンク数との合計値)に対する無効チャンク数の割合を算出し、無効チャンク数の割合が所定の閾値(例えば30%)を超えたかを判定する。デフラグ処理部133は、無効チャンク数の割合が閾値を超えた場合、処理をステップS55に進め、無効チャンク数の割合が閾値以下の場合、処理をステップS59に進める。
【0171】
[ステップS55]デフラグ処理部133は、ステップS53で選択したオブジェクトの取得をクラウド通信部140に依頼する。クラウド通信部140は、GETコマンドによりオブジェクトをクラウドストレージ240からダウンロードする。
【0172】
[ステップS56]デフラグ処理部133は、ステップS55で取得したオブジェクトに含まれるチャンクのうち有効チャンクのみを結合してオブジェクトを再構築する。
[ステップS57]デフラグ処理部133は、オブジェクト管理テーブル115のレコードのうち、ステップS55で取得したオブジェクトに対応するレコードに登録された無効チャンク数を「0」にリセットする。また、デフラグ処理部133は、デフラグ判定テーブル116から、当該オブジェクトが属するオブジェクトグループに対応するレコード(当該オブジェクトに含まれるチャンクのチャンク番号が登録されたレコード)を特定する。デフラグ処理部133は、特定したレコードのチャンク番号の項目から、オブジェクト再構築によって除外した無効チャンクのチャンク番号を削除し、特定したレコードに登録された無効チャンク数から、除外した無効チャンクの数を減算する。
【0173】
[ステップS58]デフラグ処理部133は、ステップS56で再構築されたオブジェクトのアップロードをクラウド通信部140に依頼する。クラウド通信部140は、PUTコマンドによりオブジェクトをクラウドストレージ240にアップロードする。実際には、ステップS55でダウンロードされた元のオブジェクトが削除された後、再構築されたオブジェクトがアップロードされる。
【0174】
[ステップS59]デフラグ処理部133は、処理対象のオブジェクトグループに属するすべてのオブジェクトについて処理済みかを判定する。デフラグ処理部133は、未処理のオブジェクトがある場合、処理をステップS53に進めて未処理のオブジェクトの1つを選択する。一方、デフラグ処理部133は、すべてのオブジェクトについて処理済みの場合、デフラグ処理を終了する。
【0175】
以上のステップS53~S59に示したように、オブジェクトグループについての2回目以降のデフラグでは、単一オブジェクト内の有効チャンクを結合してオブジェクト化するというオブジェクト単位のデフラグが実行される。
【0176】
ところで、
図22に示した処理を、参照数が比較的小さいチャンクが結合された新規オブジェクトのサイズが、参照数が大きいチャンクが結合された新規オブジェクトと比較してより高確率で小さくなるように変形することもできる。例えば、
図22のステップS67の判定処理を次の
図23のように変形することができる。
【0177】
図23は、デフラグ処理の変形例を示すフローチャートである。
[ステップS67a]デフラグ処理部133は、現在の参照数Rが所定の閾値以上かを判定する。この閾値としては、2以上の整数が設定される。デフラグ処理部133は、参照数Rが閾値以上の場合、処理をステップS67bに進め、参照数Rが閾値より小さい場合、処理をステップS67cに進める。
【0178】
[ステップS67b]デフラグ処理部133は、チャンク数Nが閾値M_Hより大きいかを判定する。デフラグ処理部133は、チャンク数Nが閾値M_Hより大きい場合、処理をステップS69に進め、チャンク数Nが閾値M_H以下である場合、処理をステップS65に進める。
【0179】
[ステップS67c]デフラグ処理部133は、チャンク数Nが閾値M_Lより大きいかを判定する。デフラグ処理部133は、チャンク数Nが閾値M_Lより大きい場合、処理をステップS69に進め、チャンク数Nが閾値M_L以下である場合、処理をステップS65に進める。
【0180】
このような処理により、参照数がステップS67aの閾値より小さいチャンクが結合された新規オブジェクトのサイズを、参照数がその閾値以上のチャンクが結合された新規オブジェクトのサイズと比較して、より高確率で小さくすることができる。なお、ステップS67b,S67cで用いられる閾値はそれぞれ閾値M_H,M_Lとは別の値であってもよい。すなわち、ステップS67bで用いられる閾値は閾値M(
図19のステップS24参照)より小さければよく、ステップS67cで用いられる閾値はステップS67bで用いられる閾値より小さければよい。
【0181】
なお、前述のように、第2の実施の形態では、所定個数のチャンクがオブジェクトに割り当てられると、そのオブジェクトが非アクティブ化される。しかし、他の方法として、例えば、オブジェクトに割り当てられたチャンクの合計サイズが所定サイズを超えた場合に、そのオブジェクトが非アクティブ化されてもよい。
【0182】
この場合、
図19のステップS24では、未送信のチャンクの合計サイズが所定サイズ(SZとする)を超えたかが判定され、超えた場合にステップS25の処理が実行され、超えていない場合にステップS27の処理が実行される。また、
図22のステップS67では、生成中のオブジェクトのサイズが所定サイズ(SZ_Hとする)より大きいかが判定され、大きい場合にステップS69の処理が実行され、大きくない場合にステップS65の処理が実行される。さらに、
図22のステップS68では、生成中のオブジェクトのサイズが所定サイズ(SZ_Lとする)より大きいかが判定され、大きい場合にステップS69の処理が実行され、大きくない場合にステップS63の処理が実行される。ただし、SZ>SZ_H>SZ_Lである。
【0183】
また、
図23のステップS67bでは、生成中のオブジェクトのサイズがSZ_Hより大きいかが判定され、大きい場合にステップS69の処理が実行され、大きくない場合にステップS65の処理が実行される。また、
図23のステップS67cでは、生成中のオブジェクトのサイズがSZ_Lより大きいかが判定され、大きい場合にステップS69の処理が実行され、大きくない場合にステップS65の処理が実行される。
【0184】
なお、上記の各実施の形態に示した装置(例えば、情報処理装置10、クラウドストレージゲートウェイ100)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
【0185】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0186】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【0187】
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 書き込みが要求された複数の書き込みデータセットの重複を排除することで得られた複数のデータセットを、外部ストレージに格納する格納処理であって、前記複数のデータセットから出現順に選択された2以上のデータセットをオブジェクトにまとめて前記外部ストレージに格納する前記格納処理を実行し、
前記外部ストレージに格納された前記オブジェクトのうち2以上の前記オブジェクトを生成順にまとめたオブジェクトグループを単位としてデフラグの実行要否を判定し、
前記オブジェクトグループのうち一のオブジェクトグループのデフラグを実行すると判定すると、前記一のオブジェクトグループに含まれるすべての前記オブジェクトをそれぞれ第1のオブジェクトとして前記外部ストレージから取得し、前記第1のオブジェクトに含まれるデータセットのうち参照数が1以上である有効データセットを、前記有効データセットの生成順と参照数とに基づいて組み合わせて1以上の第2のオブジェクトを生成し直し、前記第2のオブジェクトを前記第1のオブジェクトの代わりに前記外部ストレージに格納する第1のデフラグ処理を実行する、処理部、
を有する情報処理装置。
【0188】
(付記2) 前記第1のデフラグ処理では、前記有効データセットの中から前記生成順が近く、かつ前記参照数が近いと判定されるデータセットを、同一の前記第2のオブジェクトに組み込む、
付記1記載の情報処理装置。
【0189】
(付記3) 前記第1のデフラグ処理では、組み込まれた前記有効データセットの前記参照数と所定の基準値との比較結果に基づいて、前記第2のオブジェクトのサイズを可変する、
付記2記載の情報処理装置。
【0190】
(付記4) 前記第1のデフラグ処理では、組み込まれた前記有効データセットの前記参照数が所定の基準値に基づいて小さいと判定される前記第2のオブジェクトのサイズを、組み込まれた前記有効データセットの前記参照数が前記基準値に基づいて大きいと判定される前記第2のオブジェクトのサイズより小さくする、
付記2記載の情報処理装置。
【0191】
(付記5) 前記処理部は、
前記外部ストレージに格納された前記第2のオブジェクトについてのデフラグの実行要否を、前記第2のオブジェクトごとに個別に判定し、
前記第2のオブジェクトのうち一のオブジェクトのデフラグを実行すると判定すると、前記一のオブジェクトを前記外部ストレージから取得し、前記一のオブジェクトに含まれるデータセットのうち前記参照数が1以上のデータセットだけをまとめて第3のオブジェクトを生成し直し、前記第3のオブジェクトを前記一のオブジェクトの代わりに前記外部ストレージに格納する第2のデフラグ処理を実行する、
付記1乃至4のいずれか1つに記載の情報処理装置。
【0192】
(付記6) 前記オブジェクトグループを単位とした実行要否の判定では、それぞれの前記オブジェクトグループに含まれるデータセットのうち前記参照数が0のデータセットの数に基づいて実行要否を判定し、
前記処理部は、前記一のオブジェクトグループのデフラグを実行すると判定してから所定時間が経過した後に、前記第1のデフラグ処理の実行を開始する、
付記1乃至5のいずれか1つに記載の情報処理装置。
【0193】
(付記7) コンピュータに、
書き込みが要求された複数の書き込みデータセットの重複を排除することで得られた複数のデータセットを、外部ストレージに格納する格納処理であって、前記複数のデータセットから出現順に選択された2以上のデータセットをオブジェクトにまとめて前記外部ストレージに格納する前記格納処理を実行し、
前記外部ストレージに格納された前記オブジェクトのうち2以上の前記オブジェクトを生成順にまとめたオブジェクトグループを単位としてデフラグの実行要否を判定し、
前記オブジェクトグループのうち一のオブジェクトグループのデフラグを実行すると判定すると、前記一のオブジェクトグループに含まれるすべての前記オブジェクトをそれぞれ第1のオブジェクトとして前記外部ストレージから取得し、前記第1のオブジェクトに含まれるデータセットのうち参照数が1以上である有効データセットを、前記有効データセットの生成順と参照数とに基づいて組み合わせて1以上の第2のオブジェクトを生成し直し、前記第2のオブジェクトを前記第1のオブジェクトの代わりに前記外部ストレージに格納する第1のデフラグ処理を実行する、
処理を実行させる情報処理プログラム。
【0194】
(付記8) 前記第1のデフラグ処理では、前記有効データセットの中から前記生成順が近く、かつ前記参照数が近いと判定されるデータセットを、同一の前記第2のオブジェクトに組み込む、
付記7記載の情報処理プログラム。
【0195】
(付記9) 前記第1のデフラグ処理では、組み込まれた前記有効データセットの前記参照数と所定の基準値との比較結果に基づいて、前記第2のオブジェクトのサイズを可変する、
付記8記載の情報処理プログラム。
【0196】
(付記10) 前記第1のデフラグ処理では、組み込まれた前記有効データセットの前記参照数が所定の基準値に基づいて小さいと判定される前記第2のオブジェクトのサイズを、組み込まれた前記有効データセットの前記参照数が前記基準値に基づいて大きいと判定される前記第2のオブジェクトのサイズより小さくする、
付記8記載の情報処理プログラム。
【0197】
(付記11) 前記処理部は、
前記外部ストレージに格納された前記第2のオブジェクトについてのデフラグの実行要否を、前記第2のオブジェクトごとに個別に判定し、
前記第2のオブジェクトのうち一のオブジェクトのデフラグを実行すると判定すると、前記一のオブジェクトを前記外部ストレージから取得し、前記一のオブジェクトに含まれるデータセットのうち前記参照数が1以上のデータセットだけをまとめて第3のオブジェクトを生成し直し、前記第3のオブジェクトを前記一のオブジェクトの代わりに前記外部ストレージに格納する第2のデフラグ処理を実行する、
付記7乃至10のいずれか1つに記載の情報処理プログラム。
【0198】
(付記12) 前記オブジェクトグループを単位とした実行要否の判定では、それぞれの前記オブジェクトグループに含まれるデータセットのうち前記参照数が0のデータセットの数に基づいて実行要否を判定し、
前記第1のデフラグ処理の実行は、前記一のオブジェクトグループのデフラグを実行すると判定してから所定時間が経過した後に開始される、
付記7乃至11のいずれか1つに記載の情報処理プログラム。
【符号の説明】
【0199】
10 情報処理装置
11 処理部
20 外部ストレージ
GP1,GP2 オブジェクトグループ
OB1~OB6,OB11,OB12 オブジェクト