JP2022074654A - 情報処理装置、情報処理方法および情報処理プログラム - Google Patents

情報処理装置、情報処理方法および情報処理プログラム Download PDF

Info

Publication number
JP2022074654A
JP2022074654A JP2020184880A JP2020184880A JP2022074654A JP 2022074654 A JP2022074654 A JP 2022074654A JP 2020184880 A JP2020184880 A JP 2020184880A JP 2020184880 A JP2020184880 A JP 2020184880A JP 2022074654 A JP2022074654 A JP 2022074654A
Authority
JP
Japan
Prior art keywords
chunk
objects
data sets
file
chunks
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2020184880A
Other languages
English (en)
Inventor
知寛 宇納
Tomohiro Uno
智徳 古田
Tomonori Furuta
頌太 山下
Shota Yamashita
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2020184880A priority Critical patent/JP2022074654A/ja
Publication of JP2022074654A publication Critical patent/JP2022074654A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Transfer Between Computers (AREA)

Abstract

Figure 2022074654000001
【課題】外部ストレージとの通信回数が減少する可能性を高める。
【解決手段】処理部11は、重複が排除された複数のデータセットを外部ストレージ20に格納する際、2以上のデータセットをオブジェクトOB1,OB2,・・・にまとめて格納する。処理部11は、オブジェクトOB1,OB2,・・・のうちオブジェクトOB11~OB13の再構築処理を実行する際、オブジェクトOB11~OB13に含まれる有効データセットのうち参照数が所定数以下のデータセットを、複数のファイルのうち同じファイルから参照されるデータセットごとにまとめてオブジェクトOB23,OB24を生成し直し、オブジェクトOB23,OB24を外部ストレージ20に格納する。
【選択図】図1

Description

本発明は、情報処理装置、情報処理方法および情報処理プログラムに関する。
オンラインストレージサービス、クラウドストレージサービスなど、ネットワークを介してストレージ領域を提供するストレージサービスが普及している。また、このようなストレージサービスと顧客のコンピュータとの間でゲートウェイとして機能するストレージゲートウェイがある。
例えば、顧客のコンピュータとクラウドストレージなどの外部ストレージとの間で書き込みデータを中継するストレージゲートウェイが提案されている。このストレージゲートウェイは、顧客のコンピュータからファイル単位でデータの書き込み要求を受け付け、書き込みが要求されたデータの重複を排除し、重複が排除されたデータをオブジェクト単位で外部ストレージに転送する。
特開2019-95925号公報 特開2019-95986号公報
上記のストレージゲートウェイでは、外部ストレージに転送されたオブジェクトの再構築が行われるものがある。このオブジェクト再構築では、例えば、外部ストレージに転送されたオブジェクトのうち、どのファイルからも参照されない無効なチャンクを多く含むオブジェクトが、ストレージゲートウェイに取得される。そして、そのオブジェクト内の有効なチャンクだけを用いてオブジェクトが再構築され、再構築されたオブジェクトが外部ストレージに再転送される。
しかし、このようなオブジェクト再構築では、再構築処理が実行されるたびにストレージゲートウェイと外部ストレージとの間で往復のオブジェクト転送が実行されるので、通信回数が増大するという問題がある。例えば外部ストレージの一例であるクラウドストレージのサービスでは、通信回数に応じて課金される場合があり、この場合には通信回数が増大するほど課金される金額も増大してしまう。
1つの側面では、本発明は、外部ストレージとの通信回数が減少する可能性を高めた情報処理装置、情報処理方法および情報処理プログラムを提供することを目的とする。
1つの案では、次のような処理部を有する情報処理装置が提供される。この情報処理装置において、処理部は、書き込みが要求された複数のファイルのそれぞれを分割することで得られた複数の分割データセットから、重複を排除することで得られた複数のデータセットを、外部ストレージに格納する格納処理を実行する。この格納処理では、処理部は、複数のデータセットから選択された2以上のデータセットをオブジェクトにまとめて外部ストレージに格納する。また、処理部は、外部ストレージに格納されたオブジェクトの中から複数の第1オブジェクトを取得し、複数の第1オブジェクトに含まれるデータセットのうち参照数が1以上である有効データセットを組み合わせて1以上の第2オブジェクトを生成し直し、1以上の第2オブジェクトを複数の第1オブジェクトの代わりに外部ストレージに格納するオブジェクト再構築処理を実行する。このオブジェクト再構築処理では、処理部は、複数の第1オブジェクトに含まれる有効データセットのうち参照数が所定数以下のデータセットを、複数のファイルのうち同じファイルから参照されるデータセットごとにまとめて1以上の第3オブジェクトを生成し直し、1以上の第2オブジェクトの少なくとも一部として1以上の第3オブジェクトを外部ストレージに格納する。
また、1つの案では、上記の情報処理装置と同様の処理をコンピュータが実行する情報処理方法が提供される。
さらに、1つの案では、上記の情報処理装置と同様の処理をコンピュータに実行させる情報処理プログラムが提供される。
1つの側面では、外部ストレージとの通信回数が減少する可能性が高まる。
第1の実施の形態に係るストレージシステムの構成例および処理例を示す図である。 第2の実施の形態に係る情報処理システムの構成例を示す図である。 クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。 クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。 チャンクマップテーブルの構成例を示す図である。 チャンク管理テーブルおよびハッシュキーテーブルの構成例を示す図である。 オブジェクトの生成例を示す図である。 チャンクグループ管理テーブルの構成例を示す図である。 オブジェクト再構築処理の第1の比較例を示す図(その1)である。 オブジェクト再構築処理の第1の比較例を示す図(その2)である。 オブジェクト再構築処理の第1の比較例を示す図(その3)である。 オブジェクト再構築処理の第1の比較例を示す図(その4)である。 オブジェクト再構築処理の第1の比較例を示す図(その5)である。 オブジェクト再構築処理の第2の比較例を示す図(その1)である。 オブジェクト再構築処理の第2の比較例を示す図(その2)である。 第2の実施の形態におけるオブジェクト再構築処理例を示す図(その1)である。 第2の実施の形態におけるオブジェクト再構築処理例を示す図(その2)である。 オブジェクト再構築時における管理情報の利用方法を示す図(その1)である。 オブジェクト再構築時における管理情報の利用方法を示す図(その2)である。 ファイル書き込み処理の手順を示すフローチャートの例(その1)である。 ファイル書き込み処理の手順を示すフローチャートの例(その2)である。 ファイル削除処理の手順を示すフローチャートの例である。 アップロード済みオブジェクトの管理処理の手順を示すフローチャートの例である。 チャンク使用管理テーブルの作成処理の手順を示すフローチャートの例である。 オブジェクト再構築処理の手順を示すフローチャートの例(その1)である。 オブジェクト再構築処理の手順を示すフローチャートの例(その2)である。
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例および処理例を示す図である。図1に示すストレージシステムは、情報処理装置10と、この情報処理装置10の外部に接続された外部ストレージ20とを有する。情報処理装置10は、外部ストレージ20に対するデータの読み書きを制御する制御装置である。外部ストレージ20は、情報処理装置10に対して図示しないネットワークを介して接続され、情報処理装置10に対してネットワークを介してデータの記憶領域を提供する。また、外部ストレージ20は、オブジェクト単位でデータが読み書きされるオブジェクトストレージである。
情報処理装置10は、処理部11を有する。処理部11は、例えば、情報処理装置10が備える図示しないプロセッサとして実現される。この場合、処理部11の処理は、プロセッサがプログラムを実行することで実現される。
処理部11は、例えば図示しないホスト装置から、複数のファイルの書き込み要求を受ける。処理部11は、これらの複数のファイルのそれぞれを分割することによって、複数の分割データセットを取得する。処理部11は、このような複数の分割データセットの重複を排除することで得られた複数のデータセットを、外部ストレージ20に格納する。この格納処理では、処理部11は、複数のデータセットから選択された2以上のデータセットを、それぞれオブジェクトにまとめて外部ストレージ20に格納する。
図1の例では、重複排除によって得られた複数のデータセットからオブジェクトOB1,OB2,・・・が生成されている。処理部11は、これらのオブジェクトOB1,OB2,・・・を外部ストレージ20に格納する。
また、処理部11は、外部ストレージ20に格納されたオブジェクトの中から、オブジェクト再構築の処理対象として複数のオブジェクトを選択し、選択された複数のオブジェクトを取得する。例えば、生成されたオブジェクトはそれぞれ2以上のオブジェクトを含むオブジェクトグループによって管理されており、処理部11は、それらのオブジェクトグループの中からオブジェクト再構築を実行すべきオブジェクトグループを選択する。例えば、あるオブジェクトグループに属するオブジェクトに含まれるデータセットのうち、参照数が「0」になった無効なデータセットの数または割合が所定の閾値を超えた場合に、そのオブジェクトグループがオブジェクト再構築の処理対象として選択される。なお、参照数とは、データセットが元の書き込みデータセットのうちのいくつから参照されているかを示す数値である。
図1の例では、オブジェクトOB11~OB13がオブジェクト再構築の処理対象として選択されたとする。すると、これらのオブジェクトOB11~OB13を用いた次のようなオブジェクト再構築処理が実行される。
処理部11は、オブジェクトOB11~OB13を取得し、オブジェクトOB11~OB13に含まれるデータセットのうち参照数が1以上である有効データセットを組み合わせて、1以上のオブジェクトを生成し直す(再構築する)。処理部11は、再構築されたオブジェクトを元のオブジェクトOB11~OB13の代わりに外部ストレージ20に格納する。
図1の例では、オブジェクトOB11~OB13に含まれる有効データセットのうち、参照数が所定の閾値THより大きい有効データセットを組み合わせることで、オブジェクトOB21,OB22が生成される。なお、閾値THは1以上の整数である。これらの有効データセットについては、例えば、参照数が近いと判定される有効データセットをまとめることで、オブジェクトOB21,OB22が生成される。
一方、オブジェクトOB11~OB13に含まれる有効データセットのうち参照数が閾値TH以下の有効データセットについては、同じファイルから参照される有効データセットごとにまとめることで1以上のオブジェクトが再構築される。図1の例では、参照数が閾値TH以下の有効データセットのうち、ファイルFL1から参照される有効データセットによりオブジェクトOB23が生成され、ファイルFL2から参照される有効データセットによりオブジェクトOB24が生成されている。
このようにして生成されたオブジェクトOB21~OB24が、元のオブジェクトOB11~OB13の代わりに外部ストレージ20に格納される。
ここで、オブジェクトOB21,OB22のように、参照数が近い有効データセットをまとめて生成されたオブジェクトを外部ストレージ20に格納することにより、そのオブジェクト内の各データセットの参照数が均等に減少していく可能性が高くなる。その結果、オブジェクト内の分散した位置で無効のデータセットが長時間をかけて徐々に発生する可能性が低くなり、逆にオブジェクト内で多数の無効データセットが一度に発生しやすくなる。これにより、このオブジェクトについて再度オブジェクト再構築が必要と判定されたときに、一度に多数の無効データセットを削除できる可能性が高まる。その結果、同じオブジェクトについてのオブジェクト再構築の実行回数が減少する可能性が高くなる。したがって、情報処理装置10と外部ストレージ20との間の通信回数が減少する可能性が高くなる。
参照数が閾値TH以下の有効データセットについても、参照数が互いに近いと考えられるので、上記のようにこれらをまとめてオブジェクトが生成されることで上記の効果が得られる。しかし、この方法で再構築されたオブジェクトについては、オブジェクトに含まれるデータセットが複数のファイルから参照されている場合には、それらのうちの一部のファイルが削除されたとしても、オブジェクト全体のデータセットが同時期に無効になるとは限らない。このため、オブジェクト全体のデータセットが無効になる前に、このオブジェクトがオブジェクト再構築の処理対象になる可能性がある。その場合には、外部ストレージ20から情報処理装置10へのオブジェクトの転送と、再構築されたオブジェクトの外部ストレージ20への転送が発生してしまうので、通信回数の削減効果が十分とはいえない。
これに対して、本実施の形態の情報処理装置10は、元のオブジェクトOB11~OB13に含まれる有効データセットのうち参照数が閾値TH以下の有効データセットについては、同じファイルから参照される有効データセットごとにまとめることでオブジェクトOB23,OB24を再構築する。オブジェクトOB23については、1つのファイルFL1の削除に伴って削除可能になる。オブジェクトOB24については、1つのファイルFL2の削除に伴って削除可能になる。このため、オブジェクトOB23,OB24については、オブジェクト全体のデータセットが無効になる前に、オブジェクトがオブジェクト再構築の処理対象になることはない。オブジェクトがオブジェクト再構築の処理対象になった段階では、このオブジェクトが削除されるだけであり、オブジェクトの転送が発生しない。したがって、外部ストレージ20との通信回数が減少する可能性を高めることができる。
ここで、元のオブジェクトOB11~OB13に含まれる有効データセットのうち参照数が閾値THを超える有効データセットについても、参照元のファイルごとにまとめてオブジェクトを再構築することが考えられる。しかし、この場合には再構築されるオブジェクトの数が増大してしまい、その結果、外部ストレージ20へのオブジェクトの送信回数が増加してしまう。上記のように、有効データセットを参照元のファイルごとにまとめてオブジェクトを生成する方法を、参照数が閾値TH以下の有効データセットに制限して適用することで、再構築されたオブジェクトの送信回数を抑制できるので、通信回数の削減効果を高めることができる。
〔第2の実施の形態〕
次に、図1の外部ストレージ20としてクラウドストレージが用いられ、図1の情報処理装置10としてクラウドストレージゲートウェイが用いられた場合の例について説明する。
図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)である。
ストレージシステム220は、ネットワーク232を介してクラウドストレージサービスを提供する。以下の説明では、ストレージシステム220が提供するクラウドストレージサービスによってサービス利用者(ここではクラウドストレージゲートウェイ100)が利用可能な記憶領域を、「クラウドストレージ」と記載する場合がある。
また、本実施の形態では例として、ストレージシステム220は、データがオブジェクト単位で管理されるオブジェクトストレージによって実現される。例えば、ストレージシステム220は、制御サーバ221aとストレージ装置221bとをそれぞれ含むストレージノード221を複数含む、分散型のストレージシステムとして実現される。この場合、各ストレージノード221において、制御サーバ221aはストレージ装置221bに対するアクセスを制御し、ストレージ装置221bの記憶領域によってクラウドストレージの一部が実現される。また、サービス利用者(クラウドストレージゲートウェイ100)からのオブジェクトの格納先とされるストレージノード221は、オブジェクト固有の情報に基づいて決定される。
一方、NASクライアント210は、クラウドストレージゲートウェイ100を、ファイルシステムによって管理される記憶領域を提供するNASサーバとして認識する。この記憶領域とは、ストレージシステム220によって提供されるクラウドストレージによる記憶領域である。そして、NASクライアント210は、例えばNFS(Network File System)プロトコルやCIFS(Common Internet File System)プロトコルにしたがって、クラウドストレージゲートウェイ100に対してファイル単位でデータの読み書きを要求する。すなわち、NASクライアント210は、クラウドストレージゲートウェイ100のNASサーバ機能により、クラウドストレージを大容量の仮想的なネットワークファイルシステムとして利用できるようになる。
NASクライアント210は、例えば、データバックアップのためのバックアップソフトウェアを実行する。この場合、NASクライアント210は、NASクライアント210に記憶されたファイル、またはNASクライアント210に接続されたサーバ(例えば業務サーバ)に記憶されたファイルを、NASサーバから提供される記憶領域にバックアップする。
クラウドストレージゲートウェイ100は、図1に示した情報処理装置10の一例である。クラウドストレージゲートウェイ100は、NASクライアント210とクラウドストレージとの間で転送されるデータを中継する。
例えば、クラウドストレージゲートウェイ100は、NASサーバ機能により、NASクライアント210からファイルの書き込み要求を受信し、書き込みが要求されたファイルを内部にキャッシュする。クラウドストレージゲートウェイ100は、書き込みが要求されたファイルをチャンク単位に分割し、チャンク内の実データ(チャンクデータ)をクラウドストレージに格納する。このとき、所定個数のチャンクデータがグループ化されてオブジェクトが生成され、生成されたオブジェクトがクラウドストレージに転送される。
また、クラウドストレージゲートウェイ100は、NASクライアント210からのファイルをキャッシュする時点で、ファイルをチャンク単位に分割し、同一内容のチャンクデータが重複して保存されないようにする「重複排除」を行う。さらに、チャンクデータは圧縮された状態で格納されてもよい。例えば、クラウドストレージサービスでは、格納されるデータ量に応じて課金が行われる場合がある。重複排除やデータ圧縮を行うことで、クラウドストレージに格納されるデータ量を削減し、サービス利用コストを抑制することができる。
図3は、クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。クラウドストレージゲートウェイ100は、例えば、図3に示すようなコンピュータとして実現される。
クラウドストレージゲートウェイ100は、プロセッサ101、RAM(Random Access Memory)102、HDD(Hard Disk Drive)103、グラフィックインタフェース(I/F)104、入力インタフェース(I/F)105、読み取り装置106および通信インタフェース(I/F)107を備える。
プロセッサ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以上の要素の組み合わせであってもよい。
RAM102は、クラウドストレージゲートウェイ100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ101による処理に必要な各種データが格納される。
HDD103は、クラウドストレージゲートウェイ100の補助記憶装置として使用される。HDD103には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置を使用することもできる。
グラフィックインタフェース104には、表示装置104aが接続されている。グラフィックインタフェース104は、プロセッサ101からの命令にしたがって、画像を表示装置104aに表示させる。表示装置としては、液晶ディスプレイや有機EL(Electroluminescence)ディスプレイなどがある。
入力インタフェース105には、入力装置105aが接続されている。入力インタフェース105は、入力装置105aから出力される信号をプロセッサ101に送信する。入力装置105aとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
読み取り装置106には、可搬型記録媒体106aが脱着される。読み取り装置106は、可搬型記録媒体106aに記録されたデータを読み取ってプロセッサ101に送信する。可搬型記録媒体106aとしては、光ディスク、半導体メモリなどがある。
通信インタフェース107は、ネットワーク107aを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、クラウドストレージゲートウェイ100の処理機能を実現することができる。なお、NASクライアント210や制御サーバ221aも、図3と同様のハードウェア構成を有するコンピュータとして実現可能である。
図4は、クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。クラウドストレージゲートウェイ100は、記憶部110、ファイル入出力部120、重複排除処理部130およびクラウド通信部140を備える。
なお、記憶部110は、例えば、RAM102やHDD103など、クラウドストレージゲートウェイ100が備える記憶装置の記憶領域として実現される。また、ファイル入出力部120、重複排除処理部130およびクラウド通信部140の処理は、例えば、プロセッサ101が所定のプログラムを実行することで実現される。
記憶部110には、ディレクトリテーブル111、チャンクマップテーブル112、チャンク管理テーブル113、ハッシュキーテーブル114およびチャンクグループ管理テーブル115が記憶される。また、記憶部110の記憶領域の一部は、データキャッシュ116として利用される。
ディレクトリテーブル111は、ファイルシステムにおけるディレクトリ構造を表現するための管理情報である。ディレクトリテーブル111には、ディレクトリ構造上のディレクトリ(フォルダ)、またはディレクトリ内のファイルに対応するレコードが登録される。各レコードには、ディレクトリまたはファイルを識別するためのinode番号が登録されている。また、例えば、各レコードに親ディレクトリのinode番号が登録されることで、ディレクトリ間、およびディレクトリとファイルとの関係が表現される。
チャンクマップテーブル112は、ファイルと重複排除されたチャンクとの対応関係を管理するための管理情報である。チャンク管理テーブル113は、チャンクとオブジェクトとの対応関係を管理するための管理情報である。ハッシュキーテーブル114は、チャンクに対応するハッシュキーを管理するための管理情報である。
チャンクグループ管理テーブル115は、チャンクグループごとに、チャンクグループに関連するファイルを管理するための管理情報である。チャンクグループとは、1または複数のオブジェクトに属するチャンクの集合である。チャンクグループ管理テーブル115により、チャンクグループに対応するオブジェクトに含まれるチャンクを参照するファイルが管理される。後述するように、チャンクグループ管理テーブル115は、オブジェクトを再構築する際に利用される。
データキャッシュ116は、重複排除されたチャンクをキャッシュするための記憶領域である。NASクライアント210から書き込みが要求されたファイルに対応するチャンクのデータは、重複排除された上で一旦データキャッシュ116に格納された後、オブジェクトに組み込まれてクラウドストレージ240に格納される。チャンクの格納によりデータキャッシュ116の容量が少なくなると、クラウドストレージ240に格納済みで、NASクライアント210からのアクセス頻度が低いチャンクは、データキャッシュ116から削除される。
ファイル入出力部120は、NASサーバとしてのインタフェース処理を実行する。例えば、ファイル入出力部120は、NASクライアント210からのファイルの読み書き要求を受け付け、要求された内容に応じた処理を重複排除処理部130に依頼して、NASクライアント210に応答する。
クラウド通信部140は、重複排除処理部130からの要求に応じてクラウドストレージ240との間の通信処理を実行する。例えば、重複排除処理部130は、オブジェクトストレージであるクラウドストレージ240との間でオブジェクトの送受信を行う。重複排除処理部130は、PUTコマンドによりオブジェクトをクラウドストレージ240にアップロードする。また、重複排除処理部130は、GETコマンドによりオブジェクトをクラウドストレージ240から取得する。また、重複排除処理部130は、DELETEコマンドによりクラウドストレージ240上のオブジェクトを削除する。
重複排除処理部130は、ファイルの実データを重複を排除した状態で格納するための処理を実行する。重複排除処理部130は、重複判定部131、チャンク管理部132およびオブジェクト再構築部133を備える。
重複判定部131は、書き込みが要求されたファイルの実データをチャンク単位に分割し、分割された実データを重複を排除しながらデータキャッシュ116に格納する。
チャンク管理部132は、重複判定部131によってデータキャッシュ116に格納されたチャンクを、適切なサイズになるように複数まとめてオブジェクトを生成し、クラウド通信部140を介してクラウドストレージ240に格納する。本実施の形態では例として、所定個数のチャンクによってオブジェクトが生成される。
オブジェクト再構築部133は、ファイルの更新や削除の要求に伴って参照されなくなったチャンク(無効チャンク)を監視し、その監視結果に基づいてオブジェクト再構築を実行する。オブジェクト再構築とは、発生した無効チャンクをクラウドストレージ240から削除して、クラウドストレージ240の使用容量を削減するための処理である。オブジェクト再構築では基本的に、無効チャンクを含むオブジェクトがクラウドストレージ240から取得され、無効チャンクデータを削除した残りのチャンクによってオブジェクトが再構築されて、再構築されたオブジェクトがクラウドストレージ240に格納される。
次に、重複排除処理で利用される管理情報について、図5~図7を用いて説明する。
図5は、チャンクマップテーブルの構成例を示す図である。チャンクマップテーブル112は、ファイルと重複排除されたチャンクとの対応関係を管理するための管理情報である。図5に示すように、チャンクマップテーブル112には、ファイル番号、オフセット、サイズおよびチャンク番号の各項目を有するレコードが登録される。各レコードは、ファイルの実データを分割して生成された1つのチャンクに対応付けられている。
ファイル番号は、ファイルの識別番号を示す。オフセットは、ファイルの先頭からチャンクの先頭までのオフセット量を示す。サイズは、チャンクのサイズを示す。オフセットおよびサイズの値によって、ファイルにおけるチャンクの領域が特定される。
チャンク番号は、ファイル上のチャンクに対応する、重複排除されたチャンクの識別番号を示す。あるファイル上の第1のチャンクと、それと同じファイルまたは他のファイル上の第2のチャンクとの間でデータの内容が同じ場合、第1のチャンクに対応するレコードと第2のチャンクに対応するレコードには同じチャンク番号が登録される。例えば図5では、ファイル番号「f1」およびオフセット「o1」で識別されるチャンクのレコードと、ファイル番号「f2」およびオフセット「o14」で識別されるチャンクのレコードとには、同じチャンク番号「ck1」が登録されている。これは、前者のチャンクと後者のチャンクとの間ではデータの内容が同じであり、このデータがチャンク番号「ck1」のチャンクとしてデータキャッシュ116やクラウドストレージ240に格納されていることを示す。
なお、チャンク番号は、重複していないユニークなチャンクが出現し、データキャッシュ116に格納された順に付与される。したがって、チャンク番号は、重複排除されたチャンクの出現順や格納順を示す。
図6は、チャンク管理テーブルおよびハッシュキーテーブルの構成例を示す図である。
チャンク管理テーブル113は、重複排除されたチャンクとオブジェクトとの対応関係を管理するための管理情報である。図6に示すように、チャンク管理テーブル113には、チャンク番号、オブジェクト番号、オフセットおよびサイズの各項目を有するレコードが登録される。各レコードは、重複排除された1つのチャンクに対応付けられている。
オブジェクト番号は、チャンクが属するオブジェクトの識別番号を示す。オフセットは、オブジェクトの先頭からチャンクの先頭までのオフセット量を示す。サイズは、チャンクのサイズを示す。オフセットおよびサイズの値によって、オブジェクトにおけるチャンクの領域が特定される。
ここで、図5の例では、ファイル番号「f1」のファイルは2つのチャンクに分割されており、ファイル番号「f2」のファイルは4つのチャンクに分割されている。また、図6の例では、前者のファイルに含まれる2つのチャンクのデータと、後者のファイルに含まれるチャンクのうち先頭から2つのチャンクのデータとが、オブジェクト番号「ob1」のオブジェクトに属するチャンクとしてクラウドストレージ240に格納されている。
ハッシュキーテーブル114は、重複排除されたチャンクに対応するハッシュキーを管理するための管理情報である。図6に示すように、ハッシュキーテーブル114には、ハッシュキーがチャンク番号に対応付けて登録されている。ハッシュキーは、チャンクのデータに基づいて算出されたハッシュ値であり、書き込みが要求されたファイル内のチャンクのデータと同一のチャンクを検索するために利用される。
図7は、オブジェクトの生成例を示す図である。この図7を用いて、オブジェクトの生成方法について説明する。
なお、図7に示すテーブル113aは、チャンク管理テーブル113から、オブジェクト番号「ob11」のオブジェクトに属するチャンクに対応するレコードのチャンク番号およびオブジェクト番号の各項目を抽出したものである。同様に、図7に示すテーブル113bは、チャンク管理テーブル113から、オブジェクト番号「ob12」のオブジェクトに属するチャンクに対応するレコードのチャンク番号およびオブジェクト番号の各項目を抽出したものである。また、図7に示すテーブル113cは、チャンク管理テーブル113から、オブジェクト番号「ob13」のオブジェクトに属するチャンクに対応するレコードのチャンク番号およびオブジェクト番号の各項目を抽出したものである。
NASクライアント210から新規のファイルの書き込みや既存のファイルの更新が要求されると、重複判定部131は、ファイルの実データをチャンク単位に分割する。図7の例では、ファイルf11の実データが8個のチャンクに分割され、ファイルf12の実データが5個のチャンクに分割されたものとする。
ここでは説明を簡単にするために、これらのチャンクのデータはすべて異なる(重複していない)ものとする。このため、ファイルf11を分割して得られたチャンクのデータには個別のチャンク番号「ck11」~「ck18」が付与され、ファイルf12を分割して得られたチャンクのデータには個別のチャンク番号「ck19」~「ck23」が付与されている。そして、チャンク番号「ck11」~「ck23」にそれぞれ対応するチャンクのデータ(チャンクck11~ck23)は、データキャッシュ116に個別に格納される。
各チャンクにはオブジェクトのオブジェクト番号が割り当てられ、そのオブジェクト番号がチャンク管理テーブル113に登録される。また、本実施の形態では、同じオブジェクト番号に割り当てられたチャンクの個数が所定数に達すると、オブジェクト番号がカウントアップされ、次のチャンクにはカウントアップ後のオブジェクト番号が割り当てられる。これにより、同一のオブジェクトに対しては所定個数のチャンクが割り当てられる。
なお、チャンクの個数が所定数に達していないオブジェクトの状態を、次のチャンクを受け入れ可能な「アクティブ」と呼ぶことにする。アクティブなオブジェクトは、クラウドストレージ240への格納準備が整っていない未完成なオブジェクトである。また、チャンクの個数が所定数に達したオブジェクトの状態を、次のチャンクを受け入れ不可能な「非アクティブ」と呼ぶことにする。非アクティブなオブジェクトは、クラウドストレージ240への格納準備が整ったオブジェクトとなり、所定のタイミングでクラウドストレージ240へ転送される。
図7の例では、まず、チャンクck11~ck15がオブジェクト番号「ob11」のオブジェクト(オブジェクトob11)に割り当てられる。そして、この段階で、オブジェクトob11に含まれるチャンクの個数が所定数(図7では例として5個)に達し、オブジェクトob11が非アクティブになったとする。すると、次のチャンクck16には新たなオブジェクト番号「ob12」が割り当てられる。
この後、チャンクck16~ck20がオブジェクト番号「ob12」のオブジェクト(オブジェクトob12)に割り当てられ、この段階でオブジェクトob12が非アクティブになったとする。すると、次のチャンクck21には新たなオブジェクト番号「ob13」が割り当てられる。図7の例では、チャンクck21~ck23がオブジェクト番号「ob13」のオブジェクト(オブジェクトob13)に割り当てられるが、この段階ではオブジェクトob13はアクティブの状態である。この場合、次に生成されるチャンク(図示せず)にはオブジェクト番号「ob13」が割り当てられることになる。
以上の手順により、ファイルの書き込みに伴うオブジェクトの生成では、重複排除によって所定個数のチャンクが新たに出現するたびに新たなオブジェクトが完成される。オブジェクトには、生成順にオブジェクト番号が付与される。また、1つのオブジェクトには、連続するチャンク番号を有するチャンクが割り当てられる。
この図7では、データの重複がない場合について説明した。例えば、この後に書き込みが要求されたファイル内のチャンクに、チャンクck11~ck23のいずれかと同じ内容のデータを含むチャンクが存在した場合、そのチャンクのデータはデータキャッシュ116に新たに格納されず、クラウドストレージ240にも転送されない。すなわち、このチャンクについては実データの書き込みが行われず、ファイルと格納済みのチャンクとを対応付けるためのメタデータのみがチャンクマップテーブル112に書き込まれる。このようにして、重複するデータが記憶されないようにする「重複排除処理」が実行される。
なお、本実施の形態では、所定個数のチャンクがオブジェクトに割り当てられると、そのオブジェクトが非アクティブ化される。しかし、他の方法として、例えば、オブジェクトに割り当てられたチャンクの合計サイズが所定サイズを超えた場合に、そのオブジェクトが非アクティブ化されてもよい。
図8は、チャンクグループ管理テーブルの構成例を示す図である。チャンクグループ管理テーブル115は、チャンクグループと関連するファイルとの対応関係を管理するための管理情報である。図8に示すように、チャンクグループ管理テーブル115はチャンクグループ番号ごとのレコードを含み、各レコードには、チャンクグループ番号、チャンク番号およびファイル番号が登録される。チャンクグループ番号は、チャンクグループの識別番号を示す。チャンク番号は、チャンクグループに含まれるチャンクのチャンク番号を示す。ファイル番号は、チャンクグループに含まれるチャンクを参照するファイルのファイル番号を示す。
前述のように、チャンクグループは、1または複数のオブジェクトに属するチャンクの集合である。このため、チャンクグループは、1以上のオブジェクトを含む「オブジェクトグループ」を示すということもできる。本実施の形態では基本的に、オブジェクトは一定数(M個とする)のチャンクによって形成される。また、基本的にチャンクグループは、一定数(N個とする)のオブジェクトによって形成される。このため、通常、各チャンクグループには(M×N)個のチャンクが含まれる。
図7に示したように、オブジェクトに対してはチャンクが出現順に割り当てられる。また、チャンクグループに対してもチャンクが出現順に割り当てられる。したがって、図8に示すように、各チャンクグループには基本的に連続するチャンク番号を有するチャンクが含まれる。チャンクの出現に応じて、チャンクグループに対してチャンクが出現順に割り当てられ、そのチャンクグループに(M×N)個のチャンクが割り当てられると、次のチャンクは次のチャンクグループに割り当てられる。
このように、基本的に各チャンクグループには一定数のチャンクが出現順に割り当てられるので、チャンクグループ管理テーブル115には、各チャンクグループに対応するレコードがあらかじめ生成されていればよい。各レコードが生成された初期状態では、チャンクグループ番号と、チャンクグループに含まれるチャンクのチャンク番号とが各レコードに登録される。
ここで、オブジェクトの再構築は、チャンクグループ単位(オブジェクトグループ単位)で実行される。これは後述するように、複数のオブジェクトに含まれるチャンクの参照数や関連するファイルなどを考慮して、オブジェクトの再アップロードや再ダウンロードの回数が減少するような適切なオブジェクトを再構築できるようにするためである。チャンクグループ管理テーブル115は、オブジェクトを再構築する際に、オブジェクトに含まれるチャンクを参照するファイルを特定するために参照される。
なお、オブジェクトの再構築が行われると、1つのチャンクグループに対して再構築された1つのオブジェクトが割り当てられる。したがって、1回でも再構築されたオブジェクトは、その後にはオブジェクトグループ単位ではなく、オブジェクト単位で再構築が行われることになる。また、オブジェクトが再構築されると、チャンクグループ管理テーブル115にはそのオブジェクトに対応するオブジェクトグループのレコードが追加されていく。
ところで、クラウドストレージ240のようなオブジェクトストレージを提供するサービスでは、一般的に、使用容量に応じて課金される。また、GETコマンドやPUTコマンド等による通信に対して課金されるサービスもある。例えば、コマンドによる通信回数、あるいは通信データ量に応じて課金される場合がある。
クラウドストレージゲートウェイ100は、重複排除技術により、内容が同じデータがクラウドストレージ240に重複して格納されないように制御する。これにより、クラウドストレージ240における使用容量が削減される。また、ファイルの削除や更新によって、どのファイルからも参照されない無効のチャンクが発生する場合がある。クラウドストレージゲートウェイ100は、オブジェクトの再構築により、クラウドストレージ240から無効なチャンクを削除する。これにより、クラウドストレージ240における使用容量のさらなる削減が図られる。
しかし、クラウドストレージ240のようなオブジェクトストレージを提供するサービスでは、一般的に、オブジェクト内の一部のデータ領域だけを削除するようなコマンドは用意されていない。このため、オブジェクトの再構築では基本的に、無効なチャンクを含むオブジェクトを取得し、無効なチャンクを除去してオブジェクトを再構築した上で、再構築したオブジェクトを送信する、という手順が実行される。
このように、1回のオブジェクト再構築を実行するためには、クラウドストレージ240とクラウドストレージゲートウェイ100との間で複数回の通信が行われる場合が多い。このため、通信に対して課金されるサービスでは、オブジェクト再構築の実行により通信コストが増大してしまう。したがって、オブジェクトの再構築時における通信回数や通信データ量をできるだけ削減したいという点に課題がある。
ここで、オブジェクト再構築処理についての2つの比較例を説明し、その後に第2の実施の形態におけるオブジェクト再構築処理について説明する。
まず、図9~図13を用いて、オブジェクト再構築処理の第1の比較例について説明する。
図9は、オブジェクト再構築処理の第1の比較例を示す図(その1)である。図9の例では、NASクライアント210からクラウドストレージゲートウェイ100に対して、ファイルf21~f24の書き込みが順に要求されたとする。
可変長チャンキングにより、ファイル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のデータが重複している。
このようなファイルf21~f24の書き込みが要求された場合、重複排除処理により、チャンクA~Iが1つずつデータキャッシュ116に格納される。また、チャンクA~Iに対応する参照数(重複数)は、それぞれ「4」、「1」、「2」、「1」、「3」、「1」、「2」、「2」、「1」となる。
また、図9では例として、オブジェクトには3個のチャンクが割り当てられるものとする。この場合、チャンクA~Cによりオブジェクトob21が生成され、チャンクD~Fによりオブジェクトob22が生成され、チャンクG~Iによりオブジェクトob23が生成される。そして、オブジェクトob21~ob23は、PUTコマンドによりクラウドストレージゲートウェイ100からクラウドストレージ240にアップロードされる。
図10は、オブジェクト再構築処理の第1の比較例を示す図(その2)である。クラウドストレージゲートウェイ100においては、データキャッシュ116の残容量が所定量以下になると、クラウドストレージ240にアップロード済みのオブジェクトのうちアクセス頻度が低いオブジェクトが、データキャッシュ116から削除される。図10では、オブジェクトob21~ob23がデータキャッシュ116から削除されているとする。
この状態で、NASクライアント210からファイルf21の削除が要求されたとする。これに伴い、チャンクAの参照数は「4」から「3」に減少し、チャンクBの参照数は「1」から「0」に減少し、チャンクCの参照数は「2」から「1」に減少し、チャンクDの参照数は「1」から「0」に減少する。これにより、チャンクB,Dは無効なデータとなる。
図11は、オブジェクト再構築処理の第1の比較例を示す図(その3)である。この図11では、無効になったチャンクB,Dの各データをクラウドストレージ240から削除するためのオブジェクト再構築処理の一例を示している。
図11の例では、チャンクBを含むオブジェクトob21が、GETコマンドによりクラウドストレージゲートウェイ100に取得される。そして、チャンクBを除くチャンクA,Cによりオブジェクトob21が再構築され、再構築されたオブジェクトob21がPUTコマンドによりクラウドストレージ240に再アップロードされる。
また、チャンクDを含むオブジェクトob22が、GETコマンドによりクラウドストレージゲートウェイ100に取得される。そして、チャンクDを除くチャンクE,Fによりオブジェクトob22が再構築され、再構築されたオブジェクトob22がPUTコマンドによりクラウドストレージ240に再アップロードされる。
図12は、オブジェクト再構築処理の第1の比較例を示す図(その4)である。図12では、データキャッシュ116の残容量低下に伴い、再構築されたオブジェクトob21,ob22はデータキャッシュ116から削除されている。
この状態で、NASクライアント210からさらにファイルf22の削除が要求されたとする。これに伴い、チャンクAの参照数は「3」から「2」に減少し、チャンクEの参照数は「3」から「2」に減少し、チャンクCの参照数は「1」から「0」に減少し、チャンクFの参照数は「1」から「0」に減少する。これにより、チャンクC,Fは無効なデータとなる。
図13は、オブジェクト再構築処理の第1の比較例を示す図(その5)である。この図13では、無効になったチャンクC,Fをクラウドストレージ240から削除するためのオブジェクト再構築処理手順の一例を示している。
図13の例では、チャンクCを含むオブジェクトob21が、GETコマンドによりクラウドストレージゲートウェイ100に取得される。そして、チャンクCを除くチャンクAによりオブジェクトob21が再構築され、再構築されたオブジェクトob21がPUTコマンドによりクラウドストレージ240に再アップロードされる。
また、チャンクFを含むオブジェクトob22が、GETコマンドによりクラウドストレージゲートウェイ100に取得される。そして、チャンクFを除くチャンクEによりオブジェクトob22が再構築され、再構築されたオブジェクトob22がPUTコマンドによりクラウドストレージ240に再アップロードされる。
以上のオブジェクト再構築処理により、無効になったチャンクB,C,D,Fがクラウドストレージ240から削除され、クラウドストレージ240の使用容量が削減される。しかしながら、図11に示す1回目のオブジェクト再構築処理と図13に示す2回目のオブジェクト再構築処理のどちらでも、各オブジェクトについて2回のコマンド送信が実行されており、通信回数が多くなっている。
図9~図13では説明を簡単にするためにオブジェクト数やオブジェクト内のチャンク数を少なく記載しているが、実際には数万以上のオブジェクトが生成され、各オブジェクトにも数千以上のチャンクが含まれる。このため、無効チャンクが発生するオブジェクトは大量に出現し、しかも、同じオブジェクトについて無効チャンクが複数回発生し得る。そして、それらのオブジェクトそれぞれについてGETコマンドとPUTコマンドによる2回の通信が行われる。したがって、オブジェクト再構築実行に伴う通信回数は膨大な数になり、膨大な通信料金が発生してしまう。
次に、図14、図15を用いて、オブジェクト再構築処理の第2の比較例について説明する。第2の比較例では、各オブジェクトについての1回目の再構築処理が、個々のオブジェクト単位でなく、複数のオブジェクトを含むオブジェクトグループ単位で実行される。オブジェクトグループとは、前述したチャンクグループに含まれるオブジェクトである。このような方法により、単に同じオブジェクト内の有効チャンク同士を結合するのではなく、次回以降のオブジェクト再構築の発生回数やオブジェクト再構築時の通信回数が減るように、オブジェクト間で有効チャンクの組み替えを行うことができるようになる。第2の比較例では、オブジェクトグループ内の有効チャンクのうち、参照数が近い有効チャンク同士が1つのオブジェクトとして再構築される。
図14は、オブジェクト再構築処理の第2の比較例を示す図(その1)である。図14では、図9の手順で生成されたオブジェクトob21~ob23が、1つのオブジェクトグループを形成しているものとする。そして、この状態から、ファイルf21が削除されたことを契機として、このオブジェクトグループについてのオブジェクト再構築が実行されるものとする。
この場合、オブジェクトグループに含まれるオブジェクトob21~ob23が、GETコマンドによりクラウドストレージゲートウェイ100に取得される。そして、参照数が「0」となったチャンクB,Dを除く残りのチャンクを用いて、オブジェクトが再構築される。このとき、チャンクA,Eの参照数は「3」であり、チャンクG,Hの参照数は「2」であり、チャンクC,F,Iの参照数は「1」である。このことから、チャンクA,Eを含むオブジェクトob31と、チャンクG,Hを含むオブジェクトob32と、チャンクC,F,Iを含むオブジェクトob33とが新たに生成され、PUTコマンドによってクラウドストレージ240にアップロードされる。
このように、参照数が近い(この例では同一)チャンクをオブジェクトにまとめることで、そのオブジェクト内の各チャンクの参照数が均等に減少していく可能性が高くなる。その結果、オブジェクト内の分散した位置で無効チャンクが長時間をかけて徐々に発生する可能性が低くなり、逆に、同一オブジェクト内で多くの無効チャンクが一度に発生しやすくなる。したがって、このオブジェクトについてさらに再構築が必要と判定されたときに、一度に多数の無効のチャンクを削除できる可能性が高まる。そのため、同じオブジェクトについてのオブジェクト再構築の実行回数が減少する可能性が高くなり、結果として、クラウドストレージゲートウェイ100とクラウドストレージ240との間の通信回数が減少する可能性が高くなる。また、通信回数の減少により、クラウドストレージゲートウェイ100とクラウドストレージ240との間の通信量も削減される。
なお、実際には、参照数が近いだけでなくチャンク番号も近いチャンクが同一オブジェクトにまとめられることが望ましい。チャンク番号が近いチャンクは同じファイルから切り出された可能性が高く、ファイル削除に伴ってこれらが同時に無効になる可能性が高くなる。したがって、通信回数や通信量の削減効果を高めることができる。
図14の例では、前述の第1の比較例と比較して、オブジェクトob31,ob32,ob33のそれぞれについて、同一オブジェクト内のチャンクが同時に無効になる可能性が高くなる。同一オブジェクト内のチャンクが同時に無効になれば、単にそのオブジェクトを削除すればよくなり、そのオブジェクトを再ダウンロードしたり、オブジェクトを再構築して再アップロードする必要がなくなる。その結果、通信回数や通信量を削減できる。
ところが、例えば、図14に示すオブジェクトob33に含まれるすべてのチャンクが無効になるには、ファイルf22とファイルf24の両方が削除されなければならない。このため、ファイルf22,f24の一方のみが削除された時点では、オブジェクトob33内に有効なチャンクが残ってしまい、他方のファイルが削除されるまでの間に再構築のためにオブジェクトob33が再ダウンロードされる可能性が残ってしまう。
図15は、オブジェクト再構築処理の第2の比較例を示す図(その2)である。図15では、図14の状態からファイルf22が削除されたものとする。この場合、オブジェクトob33に含まれるチャンクC,Fの参照数は「0」になるが、チャンクIは有効なままである。このため、オブジェクトob33が再構築の対象になる可能性が残る。オブジェクトob33が再構築される場合、図15に示すように、GETコマンドによりオブジェクトob33がクラウドストレージゲートウェイ100に取得される。そして、オブジェクトob33に含まれる有効なチャンクIによってオブジェクトob41が再構築され、PUTコマンドによりクラウドストレージ240に再アップロードされる。
このように、参照数が近いチャンクによりオブジェクトを再構築するだけでは、オブジェクトグループに含まれるオブジェクトについての2回目の再構築が発生する可能性を十分抑制できておらず、その分だけ通信回数や通信量の削減効果が低いという課題がある。
以下、図16、図17を用いて、第2の実施の形態におけるオブジェクト再構築処理について説明する。本実施の形態では、オブジェクトグループ単位でのオブジェクト再構築の際に、参照数が一定数を超えるチャンクについては、第2の比較例と同様、参照数が近いチャンクをまとめてオブジェクトが再構築される。好ましくは、参照数が近く、かつ、チャンク番号が近いチャンクをまとめてオブジェクトが再構築される。一方、参照数が一定数以下のチャンクについては、このような条件に加えて、同じファイルから参照されるチャンクをまとめてオブジェクトが再構築される。
以下の説明では、例として、チャンク番号が近く、かつ、参照数が同じチャンクをまとめてオブジェクトが再構築されるものとする。そして、参照数が「1」のチャンクについてのみ、さらに参照元ファイルを考慮したオブジェクト再構築が行われるものとする。
図16は、第2の実施の形態におけるオブジェクト再構築処理例を示す図(その1)である。図16では例として、図14と同様に、ファイルf21が削除されたことを契機として、オブジェクトob21~ob23を含むオブジェクトグループについてオブジェクト再構築が実行されるものとする。
この場合、クラウドストレージゲートウェイ100は、オブジェクトグループに含まれるオブジェクトob21~ob23のすべてを、GETコマンドによりクラウドストレージ240から取得する。そして、クラウドストレージゲートウェイ100は、参照数が「0」となったチャンクB,Dを除く残りのチャンクを用いて、オブジェクト再構築を実行する。
クラウドストレージゲートウェイ100は、参照数が「3」であるチャンクA,Eをまとめてオブジェクトob31を生成する。また、クラウドストレージゲートウェイ100は、参照数が「2」であるチャンクG,Hをまとめてオブジェクトob32を生成する。しかし、参照数が「1」であるチャンクC,F,Iについては、さらに参照元ファイルを考慮した処理が実行される。
チャンクC,Fはファイルf22から参照されており、チャンクIはファイルf24から参照されている。そこで、クラウドストレージゲートウェイ100は、チャンクC,Fをまとめてオブジェクトob33を生成し、チャンクIのみによってオブジェクトob34を生成する。
クラウドストレージゲートウェイ100は、このように再構築されたオブジェクトob31~ob34を、PUTコマンドによりクラウドストレージ240に再アップロードする。なお、元のオブジェクトob21~ob23は、DELETEコマンドにより削除される。
図17は、第2の実施の形態におけるオブジェクト再構築処理例を示す図(その2)である。図17では、図16のように再構築されたオブジェクトob31~ob34がアップロードされた状態から、ファイルf22が削除されたとする。
クラウドストレージゲートウェイ100は、再構築されたオブジェクトob31~ob34については、それぞれ個別のチャンクグループ(オブジェクトグループ)に属するものとして管理する。すなわち、オブジェクトob31~ob34については、オブジェクト再構築の実行要否がオブジェクトごとに個別に判定され、オブジェクト再構築も個別に実行される。
ファイルf22が削除されると、チャンクA,Eの参照数は「2」に減少し、チャンクC,Fの参照数は「0」に減少する。オブジェクトob33に含まれるすべてのチャンクC,Fが無効チャンクになることから、クラウドストレージゲートウェイ100は、DELETEコマンドによりオブジェクトob33を削除する。
このように、ファイルf22の削除に伴って無効化されたチャンクC,Fの分だけクラウドストレージ240の使用容量を削減する際、図15に示した第2の比較例では、チャンクC,Fを含むオブジェクトob33のダウンロードと新たなオブジェクトob41の再アップロードが必要であった。これに対して、図17の例では、オブジェクトのダウンロードやアップロードを行うことなく、1つのオブジェクトob33を削除するだけでクラウドストレージ240の使用容量を削減できる。したがって、クラウドストレージゲートウェイ100とクラウドストレージ240との間の通信回数や通信量を削減できる。
ここで、参照数やチャンク番号に加えて参照元ファイルも考慮してオブジェクトが再構築されると、再構築後のオブジェクト数が増加し得る。例えば、参照数が多いチャンクについても参照元ファイルごとにオブジェクトが生成されると、再構築後のオブジェクト数が膨大になり、それらをクラウドストレージ240にアップロードするための通信回数(コマンド発行数)が増大してしまう。また、その後にこれらのオブジェクトの再構築が実行される際にも通信回数が増加してしまう。
一方、参照数が少ないチャンクをまとめて生成されたオブジェクトは、その後のより早い段階でオブジェクト内の各チャンクの参照数が「0」になりやすく、オブジェクト単位で削除される可能性が高くなる。このため、このような特性を有する、参照数が少ないチャンクについてのみ、ファイルごとにオブジェクトが生成されることで、全体としてクラウドストレージゲートウェイ100とクラウドストレージ240との間の通信回数や通信量が削減される可能性を高めることができる。
ところで、本実施の形態において、クラウドストレージゲートウェイ100は、図16のようにオブジェクトグループ(チャンクグループ)に属する複数のオブジェクトの再構築を実行する際、各オブジェクト内のチャンクを参照するファイルを認識する必要がある。オブジェクトとチャンク、およびチャンクとファイルとの対応関係は、例えば、それぞれチャンク管理テーブル113、チャンクマップテーブル112から認識することが可能である。この場合、オブジェクトに含まれるチャンクのチャンク番号がチャンク管理テーブル113から特定され、特定されたチャンク番号ごとにチャンクマップテーブル112がスキャンされることで、チャンク番号に対応するファイルが特定される。しかし、この場合には、オブジェクトグループに含まれる多数のチャンクのチャンク番号ごとにチャンクマップテーブル112がスキャンされる(すなわち、各チャンク番号をキーとしてレコードが検索される)ので、処理負荷が増大するという問題がある。
これに対して、本実施の形態では、オブジェクトグループ(チャンクグループ)と、そのオブジェクトグループ内の各オブジェクトに含まれるチャンクを参照するファイルとの対応関係が、チャンクグループ管理テーブル115によって管理される。そして、オブジェクトグループについてのオブジェクト再構築を実行する際、クラウドストレージゲートウェイ100は、チャンクグループ管理テーブル115を参照することで、そのオブジェクトグループに関連するファイル番号を容易に特定できる。
これにより、クラウドストレージゲートウェイ100は、オブジェクトグループに関連するファイル番号ごとにチャンクマップテーブル112をスキャンすることで、オブジェクトグループに含まれる各チャンク番号に対応するファイルを特定できる。オブジェクトグループに関連するファイル数は、オブジェクトグループに関連するチャンク数より少ない。このため、ファイル番号ごとにチャンクマップテーブル112をスキャンすることで、スキャンの実行回数(キーを用いた検索回数)を低減でき、各チャンクとファイルとの対応関係を認識するための処理負荷を軽減できる。
図18、図19は、オブジェクト再構築時における管理情報の利用方法を示す図である。図18、図19では、図16に示したように、ファイルf21が削除された後、オブジェクトob21~ob23を含むオブジェクトグループについて、オブジェクト再構築が実行される場合について例示する。なお、オブジェクトob21~ob23を含むオブジェクトグループに対応するチャンクグループのチャンクグループ番号を「cg11」とし、このチャンクグループを「チャンクグループcg11」と表す。
図18に示すように、チャンクグループ管理テーブル115には、チャンクグループcg11に対応するレコードに、チャンク番号「A」~「I」(チャンクA~I)と、ファイル番号「f21」~「f24」(ファイルf21~f24)が登録されている。ファイルf21が削除されると、このレコードからファイルf21が削除される。
クラウドストレージゲートウェイ100は、この状態からチャンクグループcg11についてのオブジェクト再構築を実行する際には、チャンクグループ管理テーブル115を参照する。そして、クラウドストレージゲートウェイ100は、チャンクグループcg11に対応するレコードから、チャンクグループcg11に関連するファイルのファイル番号として「f22」~「f24」を抽出する。
次に、クラウドストレージゲートウェイ100は、オブジェクト再構築のために一時的に参照される管理情報として、チャンク使用管理テーブル117を作成する。作成されたチャンク使用管理テーブル117は、例えばRAM102に一時的に記憶される。図18に示すように、チャンク使用管理テーブル117には、チャンクグループ(オブジェクトグループ)に含まれる各チャンクについて、チャンク番号、参照数、チャンクを参照するファイルのファイル番号が登録される。
クラウドストレージゲートウェイ100は、チャンクグループ管理テーブル115から抽出されたファイル番号ごとにチャンクマップテーブル112をスキャンして、各ファイル番号が示すファイルが参照しているチャンクを特定する。そして、クラウドストレージゲートウェイ100は、このスキャンの結果を用いてチャンク使用管理テーブル117を作成する。このように、チャンクグループに含まれるチャンクごとではなく、チャンクグループに関連するファイルごとにチャンクマップテーブル112がスキャンされることで、スキャン回数が低減される。これにより、チャンク使用管理テーブル117を作成するための処理負荷が軽減され、その結果として、オブジェクト再構築の処理負荷が軽減される。
また、クラウドストレージゲートウェイ100は、スキャンによって各チャンクとファイルとの対応関係を認識した際に、各チャンクについての参照数をカウントしてチャンク使用管理テーブル117に登録する。ここで、チャンクの参照数については、例えば、ファイルの書き込みや更新の際にカウントされたカウント値をチャンク管理テーブル113で管理しておく方法も考えられる。しかし、本実施の形態では上記のように、オブジェクト再構築の際に必要なチャンクの参照数を容易にカウントできることから、チャンクの参照数をチャンク管理テーブル113などによってあらかじめ管理しておく必要がなくなる。
クラウドストレージゲートウェイ100は、図18のように作成されたチャンク使用管理テーブル117を参照することで、チャンクグループ(オブジェクトグループ)に含まれるチャンクの中から、参照数が同じチャンクを特定できる。図18の例では、参照数が「3」のチャンクとしてチャンクA,Eが特定され、参照数が「2」のチャンクとしてチャンクG,Hが特定される。また、参照数が「1」であるチャンクC,F,Iについては、チャンク使用管理テーブル117から、さらに同じファイルから参照されているチャンクが特定される。図18の例では、チャンクC,Fがファイルf22から参照されており、チャンクIがファイルf24から参照されていることが特定される。
このような処理の結果、図19に示すように、クラウドストレージゲートウェイ100は、チャンクA,Eを含むオブジェクトob31と、チャンクG,Hを含むオブジェクトob32と、チャンクC,Fを含むオブジェクトob33と、チャンクIを含むオブジェクトob34を新たに生成する。クラウドストレージゲートウェイ100は、これらのオブジェクトob31~ob34をクラウドストレージ240にアップロードする。これとともに、クラウドストレージゲートウェイ100は、チャンクグループcg11に対応する元のオブジェクトob21~ob23をクラウドストレージ240から削除する。
また、クラウドストレージゲートウェイ100は、このような新オブジェクトの生成・アップロードと旧オブジェクトの削除に伴って、チャンクグループ管理テーブル115を更新する。図19に示すように、オブジェクトob31が属するチャンクグループcg101と、オブジェクトob32が属するチャンクグループcg102と、オブジェクトob33が属するチャンクグループcg103と、オブジェクトob34が属するチャンクグループcg104とが新規に生成される。そして、これらのチャンクグループcg101~cg104にそれぞれ対応するレコードがチャンクグループ管理テーブル115に追加される。また、元のチャンクグループcg11に対応するレコードはチャンクグループ管理テーブル115から削除される。
次に、クラウドストレージゲートウェイ100の処理について、フローチャートを用いて説明する。
図20、図21は、ファイル書き込み処理の手順を示すフローチャートの例である。
[ステップS11]ファイル入出力部120は、NASクライアント210からファイルの書き込み要求およびファイルのデータを受信する。重複排除処理部130の重複判定部131は、書き込みが要求されたファイルのデータを取得し、ディレクトリテーブル111に、そのファイルのディレクトリ情報を示すレコードを追加する。このとき、ファイルにファイル番号が付与される。また、重複判定部131は、ファイルのデータを可変長のチャンクに分割する。
[ステップS12]重複判定部131は、ファイルの先頭側から順に、処理対象のチャンクを1つ選択する。また、重複判定部131は、選択されたチャンクのデータに基づくハッシュキーを算出する。
[ステップS13]重複判定部131は、チャンクマップテーブル112にレコードを追加し、このレコードに次のような情報を登録する。ファイル番号の項目には、書き込みが要求されたファイルのファイル番号が登録され、オフセットおよびサイズの項目には、処理対象のチャンクについての情報が登録される。
[ステップS14]重複判定部131は、ハッシュキーテーブル114を参照し、ステップS13で算出されたハッシュキーが登録されたレコードが存在するかを判定する。これにより、ステップS12で選択されたチャンクと同じ内容のチャンクがすでに格納済みか(重複しているか)が判定される。重複判定部131は、該当するレコードが見つかった場合、ステップS15の処理を実行し、該当するレコードが存在しない場合、図21のステップS21の処理を実行する。
[ステップS15]重複判定部131は、ステップS14でハッシュキーテーブル114から検索されたレコードからチャンク番号を取得し、取得したチャンク番号をステップS13でチャンクマップテーブル112に追加したレコードに登録する。
[ステップS16]チャンク管理部132は、チャンクグループ管理テーブル115のレコードのうち、該当するチャンクグループに対応するレコードに対して、書き込みが要求されたファイルのファイル番号を追加する。この「該当するチャンクグループ」とは、ステップS14でハッシュキーテーブル114に存在したチャンクが属するチャンクグループである。なお、同じファイル番号が上記レコードにすでに登録されている場合、ステップS16の処理はスキップされる。
[ステップS17]重複判定部131は、ステップS11で分割されたすべてのチャンクについて処理済みかを判定する。重複判定部131は、未処理のチャンクがある場合は処理をステップS12に進め、未処理のチャンクを先頭側から1つ選択して処理を継続する。一方、重複判定部131は、すべてのチャンクを処理済みの場合、ファイル書き込みが完了したことをファイル入出力部120に通知する。通知を受けたファイル入出力部120は、NASクライアント210に対してファイル書き込みの完了を示す応答情報を送信する。
以下、図21を用いて説明を続ける。
[ステップS21]重複判定部131は、ステップS12で選択されたチャンクについての新たなチャンク番号を算出する。このチャンク番号は、チャンク管理テーブル113に登録されているチャンク番号の最大値に「1」を加算した値とされる。重複判定部131は、チャンク管理テーブル113に新たなレコードを追加し、このレコードに対し、算出された新たなチャンク番号と、チャンクのサイズを登録する。
[ステップS22]重複判定部131は、ステップS12で選択されたチャンクのデータをデータキャッシュ116に格納する。このとき、データの格納位置とチャンク番号との対応付けが行われる。また、重複判定部131は、ハッシュキーテーブル114に新たなレコードを追加し、このレコードに対し、ステップS21で算出された新たなチャンク番号と、ステップS12で算出されたハッシュキーとを登録する。
[ステップS23]重複判定部131は、ステップS21で算出された新たなチャンク番号を、ステップS13でチャンクマップテーブル112に追加したレコードに登録する。
[ステップS24]チャンク管理部132は、ステップS12で選択されたチャンクに、既存の最大のオブジェクト番号を割り当てる。チャンク管理部132は、ステップS21でチャンク管理テーブル113に追加されたレコードに、割り当てられたオブジェクト番号と、対応するオブジェクトにおけるオフセットとを登録する。登録されるオフセットは、1つ前のレコードに登録されたオフセットとサイズとから算出される。
[ステップS25]チャンク管理部132は、チャンクグループ管理テーブル115のレコードのうち、該当するチャンクグループに対応するレコードに対して、書き込みが要求されたファイルのファイル番号を追加する。この「該当するチャンクグループ」とは、ステップS21で算出されたチャンク番号が示すチャンクが属するチャンクグループである。なお、同じファイル番号が上記レコードにすでに登録されている場合、ステップS25の処理はスキップされる。
[ステップS26]チャンク管理部132は、ステップS24での割り当て先のオブジェクトに含まれるチャンク数が、所定の閾値Mに達したかを判定する。閾値Mは、例えば10000個程度に設定される。チャンク管理部132は、オブジェクト内のチャンク数が閾値Mに達した場合、処理をステップS27に処理を進め、オブジェクト内のチャンク数が閾値Mに達していない場合、処理を図20のステップS17に進める。
[ステップS27]チャンク管理部132は、ステップS24でのチャンクの割り当て先のオブジェクトをクラウドストレージ240にアップロードするように、クラウド通信部140に依頼する。これにより、当該オブジェクトは非アクティブの状態となる。クラウド通信部140は、PUTコマンドによりオブジェクトをクラウドストレージ240にアップロードする。なお、オブジェクトのアップロードは、この後の非同期のタイミングで実行されてもよい。
また、アップロードが依頼されたオブジェクトは、この時点ではデータキャッシュ116にも残される。データキャッシュ116の制御については図示しないが、データキャッシュ116の残容量が一定量以下になったとき、データキャッシュ116に記憶されたアップロード済みのオブジェクトのうちアクセス頻度の低いオブジェクトが、データキャッシュ116から削除される。
[ステップS28]チャンク管理部132は、既存のオブジェクト番号の最大値をインクリメントする。これにより、次に新たに生成されるチャンクは、インクリメントされたオブジェクト番号が示すオブジェクトに割り当てられるようになる。ステップS28の処理が終了すると、処理が図20のステップS17に進められる。
図22は、ファイル削除処理の手順を示すフローチャートの例である。
[ステップS31]ファイル入出力部120は、NASクライアント210からファイルの削除要求を受信する。重複排除処理部130の重複判定部131は、削除が要求されたファイルのファイル番号をディレクトリテーブル111に基づいて特定する。
[ステップS32]重複判定部131は、ステップS31で特定されたファイル番号が登録されたレコードを、チャンクマップテーブル112から1つ特定して選択する。これにより、削除が要求されたファイルから生成されたチャンクの1つが選択される。また、重複判定部131は、チャンクマップテーブル112から特定されたレコードから、チャンク番号を抽出する。
[ステップS33]重複判定部131は、ステップS32で特定されたレコードをチャンクマップテーブル112から削除する。
[ステップS34]チャンク管理部132は、チャンクグループ管理テーブル115のレコードの中から、ステップS32でチャンクマップテーブル112のレコードから抽出されたチャンク番号が含まれるレコードを特定する。チャンク管理部132は、特定されたレコードから、ステップS31で特定したファイル番号を削除する。
[ステップS35]重複判定部131は、削除が要求されたファイルから生成されたすべてのチャンクについて処理済みかを判定する。この判定処理では、チャンクマップテーブル112のレコードのうち、ステップS31で特定されたファイル番号が登録されたすべてのレコードがステップS32で選択済みの場合に、すべてのチャンクについて処理済みと判定される。未処理のチャンクがある場合、処理がステップS32に進められ、未処理の中からチャンクが1つ選択される。一方、すべてのチャンクを処理済みの場合、重複判定部131は、ファイル削除が完了したことをファイル入出力部120に通知する。通知を受けたファイル入出力部120は、NASクライアント210に対してファイル削除の完了を示す応答情報を送信する。
図23は、アップロード済みオブジェクトの管理処理の手順を示すフローチャートの例である。
[ステップS41]重複排除処理部130のオブジェクト再構築部133は、チャンクグループ管理テーブル115に登録されたチャンクグループの中から、チャンクグループを1つ選択する。
ここで、図23の処理は、例えば一定周期で、あるいは所定のスケジュールにしたがって繰り返し実行される。この場合、図23の処理の実行のたびに、ステップS41で異なるチャンクグループが選択される。
また、図23の処理は、ファイルが削除されたことに伴って実行されてもよい。この場合、ステップS41では、削除されたファイルが参照していたチャンクが属していたチャンクグループが選択される。あるいは、図22のステップS34が実行されたときに、ステップS34で特定されたレコードに対応するチャンクグループが選択されて(ステップS41)、ステップS42以降の処理が実行されてもよい。
[ステップS42]オブジェクト再構築部133は、ステップS41で選択されたチャンクグループに対応するレコードをチャンクグループ管理テーブル115から特定し、特定されたレコードからファイル番号を取得する。
[ステップS43]オブジェクト再構築部133は、ステップS42で取得されたファイル番号を用いて、チャンク使用管理テーブル117の作成処理を実行する。
[ステップS44]オブジェクト再構築部133は、作成されたチャンク使用管理テーブル117を参照し、所定の判定条件を満たすかを判定することにより、ステップS41で選択されたチャンクグループに属するオブジェクトについての再構築処理を実行するかを判定する。例えば、チャンクグループ(オブジェクトグループ)に属する各オブジェクトに含まれるチャンクに関して、次の判定条件のうちの少なくとも1つを満たす場合に、オブジェクト再構築を実行すると判定される。
(判定条件1)全チャンクのうち、参照数「0」のチャンクが一定割合以上存在する。
(判定条件2)参照数「1」のチャンクが含まれるオブジェクトについて、そのオブジェクト内の全チャンクが1つのファイルから参照されている。
(判定条件3)参照数が同一で、かつ、それぞれ複数のファイルから参照されている複数のチャンクの中に、ファイルに対するオフセット値が近いものが一定数以上含まれている。
なお、判定条件2を満たす場合、参照数「1」のチャンクを含み、かつ同一ファイルから参照されるオブジェクトが必ず再構築される。再構築されたオブジェクトは、対応するファイルの削除に応じて一括して削除される。また、判定条件3を満たす場合、再構築されたオブジェクトがクラウドストレージ240にアップロードされた後に、ファイルの読み出しが要求され、かつキャッシュミスしたときに再アップロードされる際に、ファイルに対応するチャンクが複数オブジェクトに分散せず、1つのオブジェクトから取得されやすくなる。これにより、キャッシュミスに伴う再アップロード時の処理効率を高めることができる。
以上のステップS44では、オブジェクト再構築処理を実行すると判定された場合、処理がステップS45に進められ、実行しないと判定された場合、処理が終了する。
[ステップS45]オブジェクト再構築部133は、ステップS41で選択されたチャンクグループに対応するオブジェクトについての再構築処理を実行する。
図24は、チャンク使用管理テーブルの作成処理の手順を示すフローチャートの例である。この図24の処理は、図23のステップS43の処理に対応する。
[ステップS51]オブジェクト再構築部133は、図23のステップS42でチャンクグループ管理テーブル115のレコードから取得されたファイル番号の中から、1つを選択する。
[ステップS52]オブジェクト再構築部133は、チャンクマップテーブル112のレコードを先頭側からスキャンして、ステップS51で選択されたファイル番号に対応付けられたチャンク番号を1つ選択する。これにより、選択されたファイル番号が示すファイルが参照している参照先のチャンクの1つが選択される。
[ステップS53]オブジェクト再構築部133は、ステップS52で選択されたチャンク番号が示すチャンクが、図23のステップS41で選択されたチャンクグループに属するかを判定する。チャンクがチャンクグループに属する場合、処理がステップS54に進められ、チャンクがチャンクグループに属さない場合、処理がステップS57に進められる。
[ステップS54]オブジェクト再構築部133は、ステップS52で選択されたチャンク番号がチャンク使用管理テーブル117に登録済みであるかを判定する。このチャンク番号が未登録の場合、処理がステップS55に進められ、登録済みの場合、処理がステップS56に進められる。
[ステップS55]オブジェクト再構築部133は、チャンク使用管理テーブル117にレコードを追加する。オブジェクト再構築部133は、追加されたレコードに対して、ステップS52で選択されたチャンク番号と、参照数「1」と、ステップS51で選択されたファイル番号を登録する。
[ステップS56]オブジェクト再構築部133は、チャンク使用管理テーブル117における、ステップS52で選択されたチャンク番号が登録されたレコードに対して、ステップS51で選択されたファイル番号を追加登録するとともに、そのレコードの参照数をインクリメントする。なお、このファイル番号がすでに登録されていた場合には、参照数のインクリメントのみが実行される。
[ステップS57]オブジェクト再構築部133は、ステップS51で選択されたファイル番号が示すファイルの参照先チャンク(ファイル番号に対応付けられたチャンク番号が示すチャンク)について、すべて選択済みかを判定する。未選択の参照先チャンクがある場合、処理がステップS52に進められ、スキャンの続行によって未選択の参照先チャンクの中から1つが選択される。一方、すべての参照先チャンクを選択済みの場合、チャンクマップテーブル112の1回のスキャンが終了した(選択されたファイル番号をキーとした検索が終了した)ことになり、処理がステップS58に進められる。
[ステップS58]オブジェクト再構築部133は、ステップS42で取得されたファイル番号について、すべて選択済みかを判定する。未選択のファイル番号がある場合、処理がステップS51に進められ、未選択のファイル番号の中から1つが選択される。一方、すべてのファイル番号を選択済みの場合、チャンク使用管理テーブル117の作成が完了し、処理が図23のステップS44に進められる。
図25、図26は、オブジェクト再構築処理の手順を示すフローチャートの例である。この図25、図26の処理は、図23のステップS45の処理に対応する。
[ステップS61]オブジェクト再構築部133は、図23のステップS43で作成されたチャンク使用管理テーブル117のレコードを、まず参照数をキーとして降順にソートする。オブジェクト再構築部133はさらに、参照数が同じレコードを、ファイル番号をキーとして昇順にソートする。
[ステップS62]オブジェクト再構築部133は、チャンク使用管理テーブル117に、参照数が「2」以上のチャンクが登録されているかを判定する。該当チャンクが登録されている場合、処理がステップS63に進められ、該当チャンクが登録されていない場合、処理がステップS66に進められる。
[ステップS63]オブジェクト再構築部133は、参照数が「2」以上のチャンクのうち、データキャッシュ116に格納されていないチャンクについては、クラウドストレージ240から取得する。すなわち、オブジェクト再構築部133は、該当チャンクを含むオブジェクトのダウンロードをクラウド通信部140に依頼する。この依頼に応じて、GETコマンドによりオブジェクトがクラウドストレージ240からダウンロードされ、データキャッシュ116に格納される。
[ステップS64]オブジェクト再構築部133は、参照数が「2」以上のチャンクを参照数の降順にソートし、同じ参照数のチャンクをまとめることでオブジェクトを再構築する。
オブジェクト再構築部133は、再構築されたオブジェクトのそれぞれに対応するチャンクグループのレコードを、チャンクグループ管理テーブル115に追加する。追加された各レコードには、新規のチャンクグループ番号が登録されるとともに、対応するオブジェクトに含まれるチャンクのチャンク番号と、チャンクの参照元のファイルを示すファイル番号とが登録される。また、オブジェクト再構築部133は、チャンク管理テーブル113を参照し、再構築されたオブジェクトに含まれるチャンクのレコードに対し、そのチャンクが属する再構築後のオブジェクトのオブジェクト番号と、そのオブジェクトにおけるチャンクの位置を示すオフセットおよびサイズとを上書きして登録する。
[ステップS65]オブジェクト再構築部133は、再構築されたオブジェクトのアップロードをクラウド通信部140に依頼する。クラウド通信部140は、PUTコマンドによりオブジェクトをクラウドストレージ240にアップロードする。なお、オブジェクトのアップロードは、この後の非同期のタイミングで実行されてもよい。
[ステップS66]オブジェクト再構築部133は、チャンク使用管理テーブル117に、参照数が「1」のチャンクが登録されているかを判定する。該当チャンクが登録されている場合、処理がステップS67に進められ、該当チャンクが登録されていない場合、処理が図26のステップS71に進められる。
[ステップS67]オブジェクト再構築部133は、参照数が「1」のチャンクのうち、データキャッシュ116に格納されていないチャンクについては、クラウドストレージ240から取得する。すなわち、オブジェクト再構築部133は、該当チャンクを含むオブジェクトのダウンロードをクラウド通信部140に依頼する。この依頼に応じて、GETコマンドによりオブジェクトがクラウドストレージ240からダウンロードされ、データキャッシュ116に格納される。
[ステップS68]オブジェクト再構築部133は、チャンク使用管理テーブル117に基づき、参照数が「1」のチャンクを参照元のファイルのファイル番号ごとにまとめることでオブジェクトを再構築する。
オブジェクト再構築部133は、再構築されたオブジェクトのそれぞれに対応するチャンクグループのレコードを、チャンクグループ管理テーブル115に追加する。追加された各レコードには、新規のチャンクグループ番号が登録されるとともに、対応するオブジェクトに含まれるチャンクのチャンク番号と、チャンクの参照元のファイルを示すファイル番号とが登録される。また、オブジェクト再構築部133は、チャンク管理テーブル113を参照し、再構築されたオブジェクトに含まれるチャンクのレコードに対し、そのチャンクが属する再構築後のオブジェクトのオブジェクト番号と、そのオブジェクトにおけるチャンクの位置を示すオフセットおよびサイズとを上書きして登録する。
[ステップS69]オブジェクト再構築部133は、再構築されたオブジェクトのアップロードをクラウド通信部140に依頼する。クラウド通信部140は、PUTコマンドによりオブジェクトをクラウドストレージ240にアップロードする。なお、オブジェクトのアップロードは、この後の非同期のタイミングで実行されてもよい。
なお、ステップS64,S68では、再構築されたオブジェクトはそれぞれ個別のチャンクグループに割り当てられる。これにより、2回目以降のオブジェクト再構築は、複数のオブジェクトを含むオブジェクトグループ単位ではなく、個々のオブジェクト単位で実行されるようになる。
以下、図26を用いて説明を続ける。
[ステップS71]オブジェクト再構築部133は、チャンク使用管理テーブル117に、参照数が「0」のチャンクが登録されているかを判定する。該当チャンクが登録されている場合、処理がステップS72に進められ、該当チャンクが登録されていない場合、処理がステップS75に進められる。
[ステップS72]オブジェクト再構築部133は、チャンクグループに属するすべてのチャンクの参照数が「0」であるかを判定する。すべての参照数が「0」である場合、処理がステップS73に進められ、参照数が「0」以外のチャンクが1つ以上ある場合、処理がステップS74に進められる。
[ステップS73]このケースは、以前にステップS69の処理によってアップロードされたオブジェクト(同一ファイルから参照される、参照数「1」のチャンク)が、再構築処理対象として再度選択されたケースを示す。この場合、チャンクグループには1つのオブジェクトのみ属しており、このオブジェクト内のすべてのチャンクの参照数が「0」である。このため、このオブジェクトのダウンロードや、再構築後のオブジェクトのアップロードは実行されず、単にオブジェクトがクラウドストレージ240から削除されればよい。
したがって、オブジェクト再構築部133は、該当オブジェクトの削除をクラウド通信部140に依頼する。クラウド通信部140は、DELETEコマンドによりオブジェクトをクラウドストレージ240から削除する。なお、オブジェクトの削除は、この後の非同期のタイミングで実行されてもよい。
[ステップS74]オブジェクト再構築部133は、参照数が「0」の各チャンクを無効化する。すなわち、オブジェクト再構築部133は、チャンク管理テーブル113およびハッシュキーテーブル114から、該当チャンクのレコードを削除する。
[ステップS75]オブジェクト再構築部133は、図23のステップS41で選択された既存のチャンクグループのレコードを、チャンクグループ管理テーブル115から削除する。これにより、該当チャンクグループが削除される。また、オブジェクト再構築部133は、参照していたチャンク使用管理テーブル117をその記憶場所(例えばRAM102)から消去する。
なお、上記の各実施の形態に示した装置(例えば、情報処理装置10、クラウドストレージゲートウェイ100)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
10 情報処理装置
11 処理部
20 外部ストレージ
FL1、FL2 ファイル
OB1,OB2,OB11~OB13,OB21~OB24 オブジェクト
TH 閾値

Claims (6)

  1. 書き込みが要求された複数のファイルのそれぞれを分割することで得られた複数の分割データセットから、重複を排除することで得られた複数のデータセットを、外部ストレージに格納する格納処理であって、前記複数のデータセットから選択された2以上のデータセットをオブジェクトにまとめて前記外部ストレージに格納する前記格納処理を実行し、
    前記外部ストレージに格納された前記オブジェクトの中から複数の第1オブジェクトを取得し、前記複数の第1オブジェクトに含まれるデータセットのうち参照数が1以上である有効データセットを組み合わせて1以上の第2オブジェクトを生成し直し、前記1以上の第2オブジェクトを前記複数の第1オブジェクトの代わりに前記外部ストレージに格納するオブジェクト再構築処理を実行する、処理部、
    を有する情報処理装置であって、
    前記オブジェクト再構築処理では、前記複数の第1オブジェクトに含まれる前記有効データセットのうち参照数が所定数以下のデータセットを、前記複数のファイルのうち同じファイルから参照されるデータセットごとにまとめて1以上の第3オブジェクトを生成し直し、前記1以上の第2オブジェクトの少なくとも一部として前記1以上の第3オブジェクトを前記外部ストレージに格納する、
    情報処理装置。
  2. 前記処理部はさらに、前記1以上の第3オブジェクトのうち第4オブジェクトに含まれるすべてのデータセットの参照数が0になった場合、前記第4オブジェクトを前記外部ストレージから削除する、
    請求項1記載の情報処理装置。
  3. 前記オブジェクト再構築処理では、前記複数の第1オブジェクトに含まれる前記有効データセットの中から参照数が近いと判定されるデータセットをまとめることで前記1以上の第2オブジェクトを生成する、
    請求項1または2記載の情報処理装置。
  4. 前記情報処理装置は、
    前記外部ストレージに格納された2以上の前記オブジェクトをグループ化したオブジェクトグループごとに、前記複数のデータセットのうち前記オブジェクトグループに属するデータセットを参照するファイルが登録された第1の管理情報と、
    前記複数のデータセットと前記複数のファイルとの対応関係を示す第2の管理情報と、
    を記憶する記憶部をさらに有し、
    前記オブジェクト再構築処理では、
    前記オブジェクトグループのうち一のオブジェクトグループに含まれる前記オブジェクトとして前記複数の第1オブジェクトを選択し、前記第1の管理情報に基づいて、前記複数のファイルの中から前記一のオブジェクトグループに属するデータセットを参照するファイルを特定し、前記特定したファイルをキーとして前記第2の管理情報に対する検索を実行することで、前記一のオブジェクトグループに属するデータセットのそれぞれについて、参照数および参照元のファイルを特定する、
    請求項1乃至3のいずれか1項に記載の情報処理装置。
  5. コンピュータが、
    書き込みが要求された複数のファイルのそれぞれを分割することで得られた複数の分割データセットから、重複を排除することで得られた複数のデータセットを、外部ストレージに格納する格納処理であって、前記複数のデータセットから選択された2以上のデータセットをオブジェクトにまとめて前記外部ストレージに格納する前記格納処理を実行し、
    前記外部ストレージに格納された前記オブジェクトの中から複数の第1オブジェクトを取得し、前記複数の第1オブジェクトに含まれるデータセットのうち参照数が1以上である有効データセットを組み合わせて1以上の第2オブジェクトを生成し直し、前記1以上の第2オブジェクトを前記複数の第1オブジェクトの代わりに前記外部ストレージに格納するオブジェクト再構築処理を実行する、
    情報処理方法であって、
    前記オブジェクト再構築処理では、前記複数の第1オブジェクトに含まれる前記有効データセットのうち参照数が所定数以下のデータセットを、前記複数のファイルのうち同じファイルから参照されるデータセットごとにまとめて1以上の第3オブジェクトを生成し直し、前記1以上の第2オブジェクトの少なくとも一部として前記1以上の第3オブジェクトを前記外部ストレージに格納する、
    情報処理方法。
  6. コンピュータに、
    書き込みが要求された複数のファイルのそれぞれを分割することで得られた複数の分割データセットから、重複を排除することで得られた複数のデータセットを、外部ストレージに格納する格納処理であって、前記複数のデータセットから選択された2以上のデータセットをオブジェクトにまとめて前記外部ストレージに格納する前記格納処理を実行し、
    前記外部ストレージに格納された前記オブジェクトの中から複数の第1オブジェクトを取得し、前記複数の第1オブジェクトに含まれるデータセットのうち参照数が1以上である有効データセットを組み合わせて1以上の第2オブジェクトを生成し直し、前記1以上の第2オブジェクトを前記複数の第1オブジェクトの代わりに前記外部ストレージに格納するオブジェクト再構築処理を実行する、
    処理を実行させる情報処理プログラムであって、
    前記オブジェクト再構築処理では、前記複数の第1オブジェクトに含まれる前記有効データセットのうち参照数が所定数以下のデータセットを、前記複数のファイルのうち同じファイルから参照されるデータセットごとにまとめて1以上の第3オブジェクトを生成し直し、前記1以上の第2オブジェクトの少なくとも一部として前記1以上の第3オブジェクトを前記外部ストレージに格納する、
    情報処理プログラム。
JP2020184880A 2020-11-05 2020-11-05 情報処理装置、情報処理方法および情報処理プログラム Pending JP2022074654A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2020184880A JP2022074654A (ja) 2020-11-05 2020-11-05 情報処理装置、情報処理方法および情報処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020184880A JP2022074654A (ja) 2020-11-05 2020-11-05 情報処理装置、情報処理方法および情報処理プログラム

Publications (1)

Publication Number Publication Date
JP2022074654A true JP2022074654A (ja) 2022-05-18

Family

ID=81606458

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020184880A Pending JP2022074654A (ja) 2020-11-05 2020-11-05 情報処理装置、情報処理方法および情報処理プログラム

Country Status (1)

Country Link
JP (1) JP2022074654A (ja)

Similar Documents

Publication Publication Date Title
US11461296B2 (en) Systems and methods for database management using append-only storage devices
JP6778795B2 (ja) データを記憶するための方法、装置及びシステム
JP6304406B2 (ja) ストレージ装置、プログラム、情報処理方法
US9880746B1 (en) Method to increase random I/O performance with low memory overheads
JP6033241B2 (ja) データー重複排除のためのバックアップおよび復元方策
JP5878548B2 (ja) 重複排除ストレージ・システム、その内部の合成バックアップを容易にする方法、及び、プログラム
US11093387B1 (en) Garbage collection based on transmission object models
CN103635900B (zh) 基于时间的数据分割
US9189494B2 (en) Object file system
JP7323804B2 (ja) データ処理装置およびデータ処理プログラム
EP3495964B1 (en) Apparatus and program for data processing
US10628298B1 (en) Resumable garbage collection
US9405761B1 (en) Technique to determine data integrity for physical garbage collection with limited memory
CN110347643B (zh) 一种磁盘间ntfs卷克隆方法及装置
US10359964B2 (en) Reducing time to read many files from tape
JP2018181202A (ja) ストレージ制御装置、ストレージ制御方法及びストレージ制御プログラム
JP7295422B2 (ja) 情報処理装置および情報処理プログラム
EP3819754B1 (en) Information processing apparatus and recording medium storing information processing program
US20070299890A1 (en) System and method for archiving relational database data
JP2022074654A (ja) 情報処理装置、情報処理方法および情報処理プログラム
Rao Data duplication using Amazon Web Services cloud storage
US7836030B2 (en) Data library optimization
JP2023150248A (ja) ストレージ制御プログラム、ストレージ制御方法およびストレージ制御装置
US11645333B1 (en) Garbage collection integrated with physical file verification
JP6794827B2 (ja) ストレージ管理装置、ストレージシステム、方法およびプログラム