IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-13
(45)【発行日】2023-06-21
(54)【発明の名称】情報処理装置および情報処理プログラム
(51)【国際特許分類】
   G06F 16/174 20190101AFI20230614BHJP
   G06F 3/06 20060101ALI20230614BHJP
   G06F 11/14 20060101ALI20230614BHJP
【FI】
G06F16/174
G06F3/06 301W
G06F11/14
【請求項の数】 7
(21)【出願番号】P 2019164546
(22)【出願日】2019-09-10
(65)【公開番号】P2021043642
(43)【公開日】2021-03-18
【審査請求日】2022-05-17
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】古田 智徳
(72)【発明者】
【氏名】宇納 知寛
【審査官】齊藤 貴孝
(56)【参考文献】
【文献】特開2012-018549(JP,A)
【文献】特開2011-076421(JP,A)
【文献】特開2018-041245(JP,A)
【文献】特表2012-513069(JP,A)
【文献】米国特許出願公開第2015/0293817(US,A1)
【文献】米国特許出願公開第2014/0114934(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
G06F 3/06
G06F 11/14
(57)【特許請求の範囲】
【請求項1】
書き込みデータの書き込み要求を受けるたびに、前記書き込みデータを一定サイズの複数の単位ビット列に分割し、前記複数の単位ビット列のそれぞれが示すデータ値の複雑度を計算し、前記複雑度の変動量に基づいて前記書き込みデータにおける分割位置を決定し、前記書き込みデータを前記分割位置で分割することで前記書き込みデータを複数のチャンクに分割する分割処理部と、
前記複数のチャンクのデータを重複を排除して記憶装置に格納する重複排除部と、
を有する情報処理装置。
【請求項2】
前記分割処理部は、前記変動量が極値をとる位置に基づいて前記分割位置を決定する、
請求項1記載の情報処理装置。
【請求項3】
前記分割処理部は、前記変動量が極値をとる位置と平均チャンクサイズの目標値とに基づいて前記分割位置を決定する、
請求項1記載の情報処理装置。
【請求項4】
前記分割処理部は、前記変動量が極値をとる第1の位置を検出したとき、最大チャンクサイズと平均チャンクサイズの目標値とに基づいて極値の探索範囲を設定し、前記第1の位置を起点とした前記探索範囲内から前記変動量の次の極値が検出されなかった場合、前記第1の位置を前記分割位置に決定する、
請求項1記載の情報処理装置。
【請求項5】
前記分割処理部は、前記第1の位置を検出したとき、前記探索範囲の長さが、直近に決定された前記分割位置からの距離が遠くなるほど短くなり、かつ、前記平均チャンクサイズ以下になるように、前記探索範囲を設定する、
請求項4記載の情報処理装置。
【請求項6】
前記分割処理部は、前記複雑度の増加量または減少量を、前記データ値の連続性を示す指標で補正した値に基づいて、前記分割位置を決定する、
請求項1乃至5のいずれか1つに記載の情報処理装置。
【請求項7】
コンピュータに、
書き込みデータの書き込み要求を受けるたびに、前記書き込みデータを一定サイズの複数の単位ビット列に分割し、前記複数の単位ビット列のそれぞれが示すデータ値の複雑度を計算し、前記複雑度の変動量に基づいて前記書き込みデータにおける分割位置を決定し、前記書き込みデータを前記分割位置で分割することで前記書き込みデータを複数のチャンクに分割し、
前記複数のチャンクのデータを重複を排除して記憶装置に格納する、
処理を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置および情報処理プログラムに関する。
【背景技術】
【0002】
ストレージ装置に保存されるデータ量を削減する技術として、保存されるデータをチャンクに分割し、チャンク単位で同一データが重複して保存されないように書き込み動作を制御する重複排除技術がある。この重複排除技術では、固定長のチャンクを用いる場合と可変長のチャンクを用いる場合とがあり、一般的には後者の方が重複排除効率が高い。
【0003】
可変長チャンクを生成する技術としては、例えば、書き込みデータ上で一定サイズのウィンドウを移動させ、各ウィンドウ内のデータのハッシュ値に基づいてチャンクの分割位置を決定する技術が知られている。また、重複排除技術に関して、チャンクの切り出し点を求めるために用いられたハッシュ値を、重複検出のために用いることができるようにしたストレージシステムが提案されている。
【先行技術文献】
【特許文献】
【0004】
【文献】特表2014-514618号公報
【文献】特開2011-65268号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、移動させたウィンドウ内のデータのハッシュ値に基づいてチャンクの分割位置を決定する上記技術では、ウィンドウ内のビット列の内容に基づいて分割位置が決定される。この技術は、分割されたチャンク内のビット列全体でなく、そのビット列の一部(すなわち、ウィンドウ内のビット列)だけに基づいてチャンクが生成される。このため、必ずしも、重複排除効率が高まるような適切な区間が個々のチャンクとして分割されるとは限らないという問題がある。
【0006】
1つの側面では、本発明は、データの重複排除効率を向上させることが可能な情報処理装置および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
1つの案では、分割処理部と重複排除部とを有する次のような情報処理装置が提供される。この情報処理装置において、分割処理部は、書き込みデータの書き込み要求を受けるたびに、書き込みデータを一定サイズの複数の単位ビット列に分割し、複数の単位ビット列のそれぞれが示すデータ値の複雑度を計算し、複雑度の変動量に基づいて書き込みデータにおける分割位置を決定し、書き込みデータを分割位置で分割することで書き込みデータを複数のチャンクに分割する。重複排除部は、複数のチャンクのデータを重複を排除して記憶装置に格納する。
【0008】
また、1つの案では、上記の情報処理装置と同様の処理をコンピュータに実行させる情報処理プログラムが提供される。
【発明の効果】
【0009】
1つの側面では、データの重複排除効率を向上させることができる。
【図面の簡単な説明】
【0010】
図1】第1の実施の形態に係る情報処理装置の構成例および処理例を示す図である。
図2】第2の実施の形態に係る情報処理システムの構成例を示す図である。
図3】クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。
図4】クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。
図5】チャンクマップテーブルの構成例を示す図である。
図6】チャンクメタテーブルおよびチャンクデータテーブルの構成例を示す図である。
図7】チャンクグループの構成例を示す図である。
図8】実データの格納量と管理データの容量との関係を示すグラフの例である。
図9】可変長でのチャンク分割方法の例を示す図である。
図10】チャンクの平均サイズとデータ量削減率との関係の例を示す第1の図である。
図11】チャンクの平均サイズとデータ量削減率との関係の例を示す第2の図である。
図12】書き込みデータにおけるデータ値の分布の例を示す図である。
図13】エネルギー場の計算例を示す図である。
図14】エネルギー場の一例を示すグラフである。
図15】チャンクの分割位置決定処理の例を示す図である。
図16】チャンキング処理の例を示すフローチャートである。
図17】重みテーブルの構成例を示す図である。
図18】エネルギー場計算処理の例を示すフローチャートである。
図19】連続性カウンタ更新処理の例を示すフローチャートである。
図20】エネルギー場における最小点探索について説明するための図である。
図21】分割位置判定処理の例を示すフローチャートである。
図22】ファイル書き込み処理の例を示すフローチャート(その1)である。
図23】ファイル書き込み処理の例を示すフローチャート(その2)である。
図24】クラウド転送処理の例を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る情報処理装置の構成例および処理例を示す図である。図1に示す情報処理装置10は、分割処理部11と重複排除部12を有する。分割処理部11および重複排除部12の処理は、例えば、情報処理装置10が備える図示しないプロセッサがプログラムを実行することで実現される。また、情報処理装置10には、記憶装置20が接続されている。なお、記憶装置20は、情報処理装置10の内部に搭載されていてもよい。
【0012】
分割処理部11は、記憶装置20に対する書き込みデータの書き込み要求を受けるたびに、書き込みデータを複数のチャンクに分割する。この分割処理においては、可変長のチャンクが生成される。重複排除部12は、各書き込みデータから分割された複数のチャンクのそれぞれのデータを、重複を排除して記憶装置20に格納する。
【0013】
以下、分割処理部11の処理についてさらに説明する。図1の例では、書き込みデータWD1,WD2,WD3,・・・の書き込みが順に要求されたとする。分割処理部11は、書き込みデータWD1,WD2,WD3,・・・のそれぞれをチャンクに分割する際、まず、書き込みデータWD1,WD2,WD3,・・・のそれぞれを一定サイズの単位ビット列に分割する。単位ビット列は、例えば、1バイトのビット列である。
【0014】
図1の例では、書き込みデータWD1が単位ビット列DT1~DT10に分割されたとする。分割処理部11は、単位ビット列DT1~DT10のそれぞれのデータ値に基づき、データ値の複雑度を計算する。データ値とは、単位ビット列が表す数値である。図1のグラフ1は、単位ビット列DT1~DT10のそれぞれのデータ値の複雑度についての分布例を示している。
【0015】
分割処理部11は、算出された複雑度の変動量に基づいて、書き込みデータをチャンクに分割するための分割位置を決定する。例えば、複雑度の分布範囲が大きく異なる2つの領域がある場合、各領域のビット列は異なるデータパターンを有すると推定される。そこで、分割処理部11は例えば、複雑度が大きく変動する位置(例えば、複雑度の傾きの絶対値が極値となる位置)を、分割位置として決定する。
【0016】
図1の例では、単位ビット列DT3と単位ビット列DT4との間で複雑度が大きく変動しており、単位ビット列DT7と単位ビット列DT8との間でも複雑度が大きく変動している。この場合、単位ビット列DT3と単位ビット列DT4との間の位置2aと、単位ビット列DT7と単位ビット列DT8との間の位置2bが、分割位置として決定される。この場合、分割処理部11は、書き込みデータWD1を位置2a,2bで分割することにより、書き込みデータWD1をチャンクCK1,CK2,CK3に分割する。
【0017】
書き込みデータWD2,WD3,・・・についても同様の手順でチャンクに分割される。
以上の分割処理部11の処理では、単位ビット列のデータ値の複雑度が計算され、複雑度の変動量に基づいてチャンクの分割位置が決定される。これにより、書き込みデータのビット列から、何らかの規則性を有する特定のデータパターンの範囲を特定し、その範囲の開始位置と終端位置とをチャンクの分割位置に決定できる。
【0018】
ここで、例えば、移動させたウィンドウ内のデータのハッシュ値に基づいてチャンクの分割位置を決定する方法では、ウィンドウ内のビット列だけに基づいて分割位置が決定される。このため、書き込みデータのビット列に特定のビットパターンの範囲が存在した場合、その範囲の終端位置を分割位置に決定できたとしても、その範囲の開始位置を分割位置に決定できるとは限らない。
【0019】
これに対して、分割処理部11の処理によれば、このような特定のデータパターンの範囲における開始位置と終端位置の両方を、チャンクの分割位置として決定できる可能性が高まる。このため、このような方法で複数の書き込みデータをチャンクに分割し、分割されたチャンクのデータを重複を排除して記憶装置20に格納することで、同じデータパターンを含む箇所を検出して重複を排除できる可能性が高まる。これにより、重複排除効率を高めることができ、記憶装置20に格納されるデータの容量を削減できる。
【0020】
特に、書き込みデータの一部に挿入や変更が行われることで書き込みデータが更新された場合に、挿入や変更が行われた範囲の開始位置と終端位置とを分割位置として決定できる可能性が高まる。このため、開始位置の直前のビット列と終端位置の直後のビット列が、記憶装置20に格納済みのビット列と重複していると判定される可能性が高まり、重複排除効率が向上する。
【0021】
〔第2の実施の形態〕
図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)である。
【0022】
ストレージシステム220は、ネットワーク232を介してクラウドストレージサービスを提供する。以下の説明では、ストレージシステム220が提供するクラウドストレージサービスによってサービス利用者(ここではクラウドストレージゲートウェイ100)が利用可能な記憶領域を、「クラウドストレージ」と記載する場合がある。
【0023】
また、本実施の形態では例として、ストレージシステム220は、データがオブジェクト単位で管理されるオブジェクトストレージによって実現される。例えば、ストレージシステム220は、制御サーバ221aとストレージ装置221bとをそれぞれ含むストレージノード221を複数有する、分散型のストレージシステムとして実現される。この場合、各ストレージノード221において、制御サーバ221aはストレージ装置221bに対するアクセスを制御し、ストレージ装置221bの記憶領域によってクラウドストレージの一部が実現される。また、サービス利用者(クラウドストレージゲートウェイ100)からのオブジェクトの格納先とされるストレージノード221は、オブジェクト固有の情報に基づいて決定される。
【0024】
一方、NASクライアント210は、クラウドストレージゲートウェイ100を、ファイルシステムによって管理される記憶領域を提供するNASサーバとして認識する。この記憶領域とは、ストレージシステム220によって提供されるクラウドストレージによる記憶領域である。そして、NASクライアント210は、例えばNFS(Network File System)プロトコルやCIFS(Common Internet File System)プロトコルにしたがって、クラウドストレージゲートウェイ100に対してファイル単位でデータの読み書きを要求する。すなわち、NASクライアント210は、クラウドストレージゲートウェイ100のNASサーバ機能により、クラウドストレージを大容量の仮想的なネットワークファイルシステムとして利用できるようになる。
【0025】
NASクライアント210は、例えば、データバックアップのためのバックアップソフトウェアを実行する。この場合NASクライアント210は、NASクライアント210に記憶されたファイル、またはNASクライアント210に接続されたサーバ(例えば業務サーバ)に記憶されたファイルを、NASサーバから提供される記憶領域にバックアップする。
【0026】
クラウドストレージゲートウェイ100は、図1に示した情報処理装置10の一例である。クラウドストレージゲートウェイ100は、NASクライアント210とクラウドストレージとの間で転送されるデータを中継する。
【0027】
例えば、クラウドストレージゲートウェイ100は、NASサーバ機能により、NASクライアント210からファイルの書き込み要求を受信し、書き込みが要求されたファイルを内部にキャッシュする。クラウドストレージゲートウェイ100は、書き込みが要求されたファイルをチャンク単位に分割し、チャンク内の実データ(以下、「チャンクデータ」と記載する)をクラウドストレージに格納する。このとき、合計サイズが一定サイズを超える複数のチャンクデータが「チャンクグループ」としてグループ化され、チャンクグループがオブジェクトとしてクラウドストレージに転送される。
【0028】
また、クラウドストレージゲートウェイ100は、ファイルをキャッシュする時点で、ファイルをチャンク単位に分割し、同一内容のチャンクデータが重複して保存されないようにする「重複排除」を行う。さらに、チャンクデータは圧縮された状態で格納されてもよい。例えば、クラウドストレージサービスでは、格納されるデータ量に応じて課金が行われる場合がある。重複排除やデータ圧縮を行うことで、クラウドストレージに格納されるデータ量を削減し、サービス利用コストを抑制することができる。
【0029】
図3は、クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。クラウドストレージゲートウェイ100は、例えば、図3に示すようなコンピュータとして実現される。
【0030】
クラウドストレージゲートウェイ100は、プロセッサ101、RAM(Random Access Memory)102、HDD(Hard Disk Drive)103、グラフィックインタフェース(I/F)104、入力インタフェース(I/F)105、読み取り装置106および通信インタフェース(I/F)107を備える。
【0031】
プロセッサ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以上の要素の組み合わせであってもよい。
【0032】
RAM102は、クラウドストレージゲートウェイ100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ101による処理に必要な各種データが格納される。
【0033】
HDD103は、クラウドストレージゲートウェイ100の補助記憶装置として使用される。HDD103には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置を使用することもできる。
【0034】
グラフィックインタフェース104には、表示装置104aが接続されている。グラフィックインタフェース104は、プロセッサ101からの命令にしたがって、画像を表示装置104aに表示させる。表示装置としては、液晶ディスプレイや有機EL(Electroluminescence)ディスプレイなどがある。
【0035】
入力インタフェース105には、入力装置105aが接続されている。入力インタフェース105は、入力装置105aから出力される信号をプロセッサ101に送信する。入力装置105aとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【0036】
読み取り装置106には、可搬型記録媒体106aが脱着される。読み取り装置106は、可搬型記録媒体106aに記録されたデータを読み取ってプロセッサ101に送信する。可搬型記録媒体106aとしては、光ディスク、半導体メモリなどがある。
【0037】
通信インタフェース107は、ネットワーク107aを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、クラウドストレージゲートウェイ100の処理機能を実現することができる。なお、NASクライアント210や制御サーバ221aも、図3と同様のハードウェア構成を有するコンピュータとして実現可能である。
【0038】
図4は、クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。クラウドストレージゲートウェイ100は、記憶部110、NASサービス処理部120およびクラウド転送処理部130を備える。
【0039】
なお、記憶部110は、例えば、RAM102やHDD103など、クラウドストレージゲートウェイ100が備える記憶装置の記憶領域として実現される。また、NASサービス処理部120およびクラウド転送処理部130の処理は、例えば、プロセッサ101が所定のプログラムを実行することで実現される。
【0040】
記憶部110には、ディレクトリテーブル111、チャンクマップテーブル112、チャンクメタテーブル113、チャンクデータテーブル114および重みテーブル115が記憶される。
【0041】
ディレクトリテーブル111は、ファイルシステムにおけるディレクトリ構造を表現するための管理テーブルである。ディレクトリテーブル111には、ディレクトリ構造上のディレクトリ(フォルダ)、またはディレクトリ内のファイルに対応するレコードが登録される。各レコードには、ディレクトリまたはファイルを識別するためのinode番号が登録されている。また、例えば、各レコードに親ディレクトリのinode番号が登録されることで、ディレクトリ間、およびディレクトリとファイルとの関係が表現される。
【0042】
チャンクマップテーブル112およびチャンクメタテーブル113は、ファイルとチャンクデータとの関係や、チャンクデータとチャンクグループとの関係を管理するための管理テーブルである。チャンクグループは、合計サイズが所定サイズ以上となる複数のチャンクデータを含み、チャンクデータをクラウドストレージ240に転送する際の転送単位となる。チャンクデータテーブル114は、チャンクデータを保持する。すなわち、チャンクデータテーブル114は、ファイルの実データのキャッシュ領域となる。
【0043】
重みテーブル115は、ファイルをチャンク単位に分割するチャンキング処理において参照される管理テーブルである。重みテーブル115には、データ列の複雑度を計算するために利用される重みがあらかじめ登録される。
【0044】
NASサービス処理部120は、NASサーバとしてのインタフェース処理を実行する。すなわち、NASサービス処理部120は、NASクライアント210からのファイルの読み書き要求を受け付け、要求された内容に応じた処理を実行して、NASクライアント210に応答する。
【0045】
NASサービス処理部120は、チャンキング処理部121と重複排除処理部122を備える。なお、チャンキング処理部121は図1に示した分割処理部11の一例であり、重複排除処理部122は、図1に示した重複排除部12の一例である。
【0046】
チャンキング処理部121は、書き込みが要求されたファイルの実データをチャンク単位に分割する。重複排除処理部122は、チャンク単位に分割された実データを、重複を排除しながら記憶部110に格納する。
【0047】
クラウド転送処理部130は、NASサービス処理部120による記憶部110へのデータ書き込み処理とは非同期に、記憶部110に書き込まれたチャンクデータをクラウドストレージ240に転送する。前述のように、クラウドストレージ240に対してはオブジェクト単位でデータが転送される。本実施の形態において、クラウド転送処理部130は、1つのチャンクグループに含まれるチャンクデータを用いて1つのチャンクグループオブジェクト131を生成し、クラウドストレージ240に送信する。
【0048】
次に、重複排除処理で利用される管理テーブルについて、図5図7を用いて説明する。
図5は、チャンクマップテーブルの構成例を示す図である。チャンクマップテーブル112は、ファイルとチャンクデータとを関連付けるための管理テーブルである。チャンクマップテーブル112には、「ino」「offset」「size」「gno」「gindex」の各項目を有するレコードが登録される。各レコードは、ファイルの実データを分割して生成された1つのチャンクに対応付けられている。
【0049】
「ino」は、チャンクが含まれるファイルのinode番号を示す。「offset」は、ファイルの実データの先頭からチャンクの先頭までのオフセット量を示す。「ino」と「offset」との組み合わせによって、ファイル内のチャンクが一意に識別される。
【0050】
「size」は、チャンクのサイズを示す。本実施の形態では、チャンクのサイズは可変であるものとする。後述するように、チャンキング処理部121は、同一データを含むチャンクが生成されやすいようにファイルの実データの分割位置を決定する。これにより、可変長のチャンクが生成される。
【0051】
「gno」は、チャンクに含まれるチャンクデータが属するチャンクグループのグループ番号を示し、「gindex」は、チャンクグループにおけるチャンクデータのインデックス番号を示す。レコードに「ino」および「offset」と「gno」および「gindex」とが登録されることで、ファイル内のチャンクとチャンクデータとが関連付けられる。
【0052】
図5の例では、inode番号「i1」のファイルは2つのチャンクに分割されており、inode番号「i2」のファイルは4つのチャンクに分割されている。また、前者のファイルに含まれる2つのチャンクのデータと、後者のファイルに含まれるチャンクのうち先頭から2つのチャンクのデータとが、グループ番号「g1」のチャンクグループに属するチャンクデータとして記憶部110に格納されている。さらに、後者のファイルに含まれるチャンクのうち先頭から3番目および4番目のチャンクのデータは、グループ番号「g2」のチャンクグループに属するチャンクデータとして記憶部110に格納されている。
【0053】
図6は、チャンクメタテーブルおよびチャンクデータテーブルの構成例を示す図である。
チャンクメタテーブル113は、主として、チャンクデータとチャンクグループとを関連付けるための管理テーブルである。チャンクメタテーブル113には、「gno」「gindex」「offset」「size」「hash」「refcnt」の各項目を有するレコードが登録される。各レコードは、1つのチャンクデータに対応付けられている。
【0054】
「gno」は、チャンクデータが属するチャンクグループの番号を示す。「gindex」は、チャンクグループにおけるチャンクデータのインデックス番号を示す。「offset」は、チャンクグループの先頭からチャンクデータの先頭までのオフセット量を示す。「gno」と「gindex」との組み合わせにより1つのチャンクデータが識別され、「gno」と「offset」との組み合わせにより1つのチャンクデータの格納位置が特定される。「size」は、チャンクデータのサイズを示す。
【0055】
「hash」は、チャンクデータを基に算出されたハッシュ値を示す。このハッシュ値は、書き込みが要求されたファイル内のチャンクのデータと同一のチャンクデータを検索するために利用される。「refcnt」は、チャンクデータに対応する参照カウンタの値を示す。参照カウンタの値は、チャンクデータがいくつのチャンクから参照されているかを示す。すなわち、この値は、チャンクデータがいくつのチャンクの間で重複しているかを示す。例えば、ある「gno」「gindex」の値に対応する参照カウンタの値が「2」の場合、同じ「gno」「gindex」の値が登録された2つのレコードが、チャンクマップテーブル112に存在することになる。
【0056】
チャンクデータテーブル114には、「gno」「gindex」「data」の各項目を有するレコードが登録される。「data」には、「gno」「gindex」によって識別されるチャンクデータが格納される。
【0057】
図7は、チャンクグループの構成例を示す図である。この図7を用いて、チャンクグループの生成方法について説明する。
なお、図7に示すテーブル114aは、チャンクデータテーブル114から、グループ番号「1」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。同様に、図7に示すテーブル114bは、チャンクデータテーブル114から、グループ番号「2」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。また、図7に示すテーブル114cは、チャンクデータテーブル114から、グループ番号「3」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。
【0058】
NASクライアント210から新規のファイルの書き込みや既存のファイルの更新が要求されると、チャンキング処理部121は、ファイルの実データをチャンク単位に分割する。図7の例では、ファイルの実データが13個のチャンクに分割されたものとする。各チャンクのデータを先頭から順にデータD1~D13と表す。なお、ここでは説明を簡単にするために、データD1~D13の内容はすべて異なる(すなわち、重複していない)ものとする。この場合、重複排除処理部122により、データD1~D13にそれぞれ対応するチャンクデータが記憶部110に対して個別に格納される。
【0059】
各チャンクデータには、グループ番号(gno)と、その番号が示すチャンクグループにおけるインデックス番号(gindex)とが割り当てられる。インデックス番号は、ファイルの分割によって重複していないチャンクデータが生成された順に割り当てられる。また、同じグループ番号に割り当てられたチャンクデータの合計サイズが一定量に達すると、グループ番号がカウントアップされ、次のチャンクデータにはカウントアップ後のグループ番号が割り当てられる。
【0060】
なお、チャンクデータの合計サイズが一定量に達していないチャンクグループの状態を、次のチャンクデータを受け入れ可能な「アクティブ」と呼ぶことにする。また、チャンクデータの合計サイズが一定量に達したチャンクグループの状態を、次のチャンクデータを受け入れ不可能な「非アクティブ」と呼ぶことにする。
【0061】
図7の例では、まず、データD1~D5がグループ番号「1」のチャンクグループに割り当てられる。そして、この段階で、グループ番号「1」のチャンクグループのサイズが一定量に達し、このチャンクグループが非アクティブになったとする。すると、次のデータD6には、新たなグループ番号「2」が割り当てられる。
【0062】
この後、データD6~D11が、グループ番号「2」のチャンクグループに割り当てられ、この段階でこのチャンクグループが非アクティブになったとする。すると、次のデータD12には、新たなグループ番号「3」が割り当てられる。図7の例では、データD12,D13がグループ番号「3」のチャンクグループに割り当てられるが、この段階ではこのチャンクグループはアクティブの状態である。この場合、次に生成されるチャンクデータ(図示せず)には、グループ番号「3」とインデックス番号「3」とが割り当てられることになる。
【0063】
非アクティブ化されたチャンクグループは、ファイル内の実データがクラウドストレージ240に転送される際のデータ単位となる。あるチャンクグループが非アクティブになると、そのチャンクグループから1つのチャンクグループオブジェクト131がクラウド転送処理部130によって生成される。チャンクグループオブジェクト131においては、例えば、対応するチャンクグループのグループ番号がオブジェクト名として設定され、オブジェクト値として、チャンクグループに含まれる各チャンクデータが設定される。このように生成されたチャンクグループオブジェクト131は、クラウド転送処理部130からクラウドストレージ240に対して転送される。
【0064】
以上の図7では、データの重複がない場合について説明した。例えば、この後に書き込みが要求されたファイル内のチャンクに、データD1~D13のいずれかと同じ内容のデータを含むチャンクが存在した場合、そのチャンクのデータはチャンクデータテーブル114に新たに格納されず、クラウドストレージ240にも転送されない。すなわち、このチャンクについては実データの書き込みが行われず、チャンクとチャンクデータとを対応付けるためのメタデータのみがチャンクマップテーブル112に書き込まれる。このようにして、重複するデータが記憶されないようにする「重複排除処理」が実行される。
【0065】
ところで、上記の例のように、重複排除処理では、実データの格納量が削減される代わりに、多くの管理データを保持する必要がある。特に、管理データの中には実データに対応するフィンガープリント(ハッシュ値)が含まれる。フィンガープリントは格納されるチャンクごとに生成されるので、そのようなフィンガープリントを保持しておくためには大容量の記憶領域が必要になる。また、重複データを効率よく検索するための技術として、ブルームフィルタを用いる方法がある。しかし、ブルームフィルタのデータ構造を保持するためにも大容量の記憶領域が必要になる。
【0066】
図8は、実データの格納量と管理データの容量との関係を示すグラフの例である。図8では、保持される管理データをチャンク管理用データとその他のデータとに分けて示している。チャンク管理用データには、前述のチャンクマップテーブル112およびチャンクメタテーブル113が含まれ、チャンクメタテーブル113にはフィンガープリント(ハッシュ値)が含まれる。
【0067】
図8の例のように、チャンク管理用データは、保持される管理データの大半を占める。例えば、64TB(テラバイト)のデータを16KB(キロバイト)のチャンクに分割した場合、40億個のチャンクが生成される。この場合、各チャンクに対応する160ビットのフィンガープリントを保持するためには、80GB(ギガバイト)の記憶領域が必要になる。
【0068】
ここで、チャンク管理用データの容量とチャンクのサイズとの間には関連性がある。同じ重複排除率でチャンクの平均サイズを2倍にすることができれば、チャンクの数が半減し、その分だけチャンク管理用データの容量を削減できる。例えば、フィンガープリントのサイズが同じであれば、チャンク管理用データの容量を半減させることができる。
【0069】
一方、重複排除処理における他の技術的な注目点として、チャンクの分割位置をどのように決定するか、という点がある。この点に関し、チャンクの分割方法としては、固定長での分割と可変長での分割とがある。固定長での分割には、処理が簡単で負荷が小さいというメリットがある。一方、可変長での分割には、重複排除率を高められるというメリットがある。
【0070】
図9は、可変長でのチャンク分割方法の例を示す図である。この図9では、一例としてRabin-KarpのRolling-Hash(RH)法を用いた可変長チャンキングを示す。
RH法では、書き込みが要求されたデータ(書き込みデータ)の先頭から、所定サイズのウィンドウが1バイトずつずらして設定されて、ウィンドウ内のデータのハッシュ値が計算される。算出されたハッシュ値が特定のパターンと一致した場合に、そのウィンドウの末尾がチャンクの分割位置に決定される。
【0071】
図10は、チャンクの平均サイズとデータ量削減率との関係の例を示す第1の図である。また、図11は、チャンクの平均サイズとデータ量削減率との関係の例を示す第2の図である。図10および図11の横軸は、RH法により可変長で分割されたチャンクの平均サイズを示す。また、図10および図11の縦軸は、元のデータ量に対する重複排除後のデータ量の割合を示す。
【0072】
図10は、文書作成ソフトウェアにより生成された文書データを格納した場合の例を示している。一方、図11は、VM(Virtual Machine)イメージのデータを格納した場合の例を示している。これらのいずれの場合も、固定長より可変長の方が重複排除率が高くなっている。特に、文書データが更新された場合、文書データのビット列内の特定の位置にバイト単位のビット列が挿入されるケースが多く見られる。このようなケースでは、文書データのビット列の一部がバイト単位でずれる。RH法は、このようなビット列の位置ズレが発生した場合に、ズレが生じた範囲のビット列の区切りを正確に検出しやすいという特徴があり、図10の例のように重複排除率が高まりやすいという傾向がある。
【0073】
ここで、前述のように、重複排除率を低下させずにチャンクの平均サイズを大きくすることができれば、チャンク管理用データの容量を削減できる。一方、図10および図11の例のように、チャンクの平均サイズが大きくなるほどデータ量削減率は低下する。特に図10の例では、チャンクの平均サイズが64KB程度にまで達すると、データ量削減率は60%を超えてしまい、重複排除率は非常に悪くなる。このように、チャンクの平均サイズが小さいほど重複排除率を高めることができるが、チャンク管理用データの容量が大きくなってしまう。一方、チャンクの平均サイズが大きいほど重複排除率が低下してしまう。
【0074】
また、重複排除率を高める方法としては、書き込みデータの種別に応じて文脈を解析し、その解析結果に基づいてチャンクの分割位置を決定する方法がある。しかし、この方法は書き込みデータの種別がわかっている場合には効果を発揮するものの、未知の種別の書き込みデータに対しては効果を発揮しない。
【0075】
以下で説明する本実施の形態でのチャンキング処理では、チャンクの平均サイズが大きくなっても重複排除率が低下しにくくする。例えば、文書データを格納した場合に、平均チャンクサイズが64KB程度でも、図10において平均チャンクサイズが16KB程度での重複排除率が達成されるようにする。また、本実施の形態でのチャンキング処理では、上記のRH法を用いた可変長チャンキングと同様に、ビット列の位置ズレが発生した場合に効率的に重複排除できるようにする。さらに、本実施の形態でのチャンキング処理では、これらの効果を書き込みデータの種別に依存せずに発揮できるようにする。
【0076】
ここで、書き込みデータから変更が発生しやすい場所を検出する方法について考察する。上記のRH法を用いた可変長チャンキングは、書き込みデータの文脈を解釈せずに、そのビット列の内容に基づいてチャンクの分割位置を決定するものである。このため、データの種別に依存せずに重複排除を行う方法といえる。しかし、基本的に、ウィンドウに含まれるビット列の内容だけに基づいて分割位置が決定される。このため、ビット列の位置ズレが発生した可能性の高い箇所を検出しやすいものの、ビット列が変更された可能性の高い範囲自体を(すなわち、その範囲の起点と終点とを)検出できる訳ではない。
【0077】
本実施の形態では、ビット列が変更された可能性の高い範囲自体を検出できるようにする。そのために、高分子解析の考え方を利用する。例えば、試料に対して分解酵素を与えた場合、分子配列における分子の結合エネルギーが低い場所において高分子の結合が切り離される。これを利用して、書き込みデータのビット列を解析して、結合エネルギーが低く、切れやすい場所を探索することで、ビット列が変更された可能性の高い範囲を検出する。
【0078】
図12は、書き込みデータにおけるデータ値の分布の例を示す図である。図12の横軸に示すオフセットxとは、書き込みデータのビット列を先頭から一定サイズの単位ビット列に分割したときに、各単位ビット列の先頭からの番号(アドレス)を示す。本実施の形態では例として、単位ビット列のサイズを1バイトとする。そこで、これ以後、単位ビット列を「バイト列」と記載する。
【0079】
また、各バイト列が示す数値をバイト列の「データ値」と記載する。図12の縦軸に示すデータ値関数f(x)は、バイト列のオフセットxに対するバイト列のデータ値を示す関数である。このようなデータ値関数f(x)に対して切れやすさを示す関数、すなわちポテンシャルエネルギー(位置エネルギー)を示す関数Pot(x)を対応付ける作用素を生成できれば、書き込みデータのビット列から結合エネルギーの低い箇所を検出できる。
【0080】
書き込みデータのビット列における変更範囲(例えば、ビット列が挿入された範囲)の両端は、データパターンが変わる位置であると推定される。このため、作用素としては、データ値の分散度合いの変化を導出するものが好ましい。そこで、本実施の形態では、データ値関数f(x)の複雑度を示すエントロピーの関数Ent(x)が算出され、この関数Ent(x)を以下の式(1)のように微分することで、関数Pot(x)が算出される。なお、関数Pot(x)は、データ値関数f(x)についてのポテンシャルエネルギーの場(エネルギー場)を示す。
Pot(x)=-|dEnt(x)/dx| ・・・(1)
図13は、エネルギー場の計算例を示す図である。図13において、グラフ151は、バイト列に対するデータ値関数f(x)の例を示している。グラフ152は、グラフ151のデータ値関数f(x)に基づいて算出されるエントロピーの関数Ent(x)を示している。グラフ153は、グラフ152の関数Ent(x)に基づき、式(1)を用いて算出された関数Pot(x)の正負を逆転した関数-Pot(x)を示している。
【0081】
グラフ152から、グラフ151における領域151bのデータ値のエントロピーは、グラフ151における領域151a,151cと比較して顕著に高くなっていることがわかる。このような場合、書き込みデータにおいては、領域151aと領域151bとの間でデータ値の複雑度が大きく異なり、領域151bと領域151cとの間でもデータ値の複雑度が大きく異なっている。このため、書き込みデータにおける領域151a,151b,151cのそれぞれのビットパターンが異なっていることが推定される。その理由として、例えば、領域151aのビット列と領域151cのビット列との間に領域151bのビット列が挿入された可能性が推定される。また、例えば領域151a,151cのデータ値が近い場合には、領域151bの範囲のビット列が変更された可能性も推定される。
【0082】
そこで、本実施の形態において、チャンキング処理部121は基本的に、バイト列のオフセット位置ごとのデータ値のエネルギー場を示す関数Pot(x)を計算する。そしてチャンキング処理部121は、この関数Pot(x)に基づいてデータ値のエントロピーの変動量が大きい位置をチャンクの分割位置に決定する。例えば、チャンキング処理部121は、関数Pot(x)の区間最小値(極小値)(-Pot(x)の極大値)の位置を分割位置に決定する。これにより、データが挿入された範囲やデータが変更された範囲を1つのチャンクの範囲とすることができる可能性が高まる。図13の例では、グラフ153に示す矢印153a,153bの位置がチャンクの分割位置に決定される。
【0083】
図14は、エネルギー場の一例を示すグラフである。図13で説明したチャンクの分割位置決定方法によれば、書き込みデータの文脈を解釈せず、ビット列の内容の解析のみによって、ビット列が挿入された範囲やビット列が変更された範囲の前後をチャンクの分割位置に決定できる可能性が高まる。ビット列全体の解析結果から分割位置が決定されることで、ウィンドウ内のビット列だけに依存する前述のRH法と比較して、重複排除率を高めることができる。
【0084】
しかしながら、前述のように、チャンク管理用データの容量を削減するためには、チャンクの長さをある程度長く、かつ同等にできることが望ましい。例えば、図14に丸印で示す位置のように、バイト列のオフセットの間隔がある程度空いており、かつ同等になる位置を、チャンクの分割位置に決定することが望ましい。しかし、単純にエネルギー場の区間最小値(極小値)を選択するだけでは、このような条件が満たされるとは限らない。そこで、次の図15に示すような方法が採用されてもよい。
【0085】
図15は、チャンクの分割位置決定処理の例を示す図である。なお、図15のグラフ161~163は、図14と同様のエネルギー場を示している。
チャンクの分割位置をできるだけ等間隔にするために、互いに斥力が働く荷電粒子を用いた次のような考え方を用いて、チャンクの分割位置が決定される。まず、グラフ161に示すように、荷電粒子が等間隔で配置される。図15において、荷電粒子は丸印によって示されている。荷電粒子の間隔は、チャンクの平均サイズの目標値に設定される。そして、これらの荷電粒子がエネルギー場に落とされると、グラフ162に示すように荷電粒子は位置エネルギーの低い位置に移動する。さらに、グラフ163に示すように、荷電粒子にトンネル効果のような運動を行わせて、局所最適解に陥らないようにする。グラフ163に示すような荷電粒子の位置をチャンクの分割位置に決定することで、チャンクのサイズが目標とするサイズに近づくようにチャンクの分割位置を決定できる。
【0086】
次に、チャンキング処理の具体例についてさらに説明する。
図16は、チャンキング処理の例を示すフローチャートである。図16に示すように、チャンキング処理部121によるチャンキング処理は、エネルギー場計算処理(ステップS11)とチャンクの分割位置判定処理(ステップS12)とに大別される。
【0087】
バイト列のオフセット位置ごとにデータ値のエントロピー(複雑度)およびエネルギー場の値を計算する処理には、その処理負荷が高いという課題がある。そこで、チャンキング処理部121は、複雑度Eの計算に用いるバイト列を処理対象のオフセット位置の近傍に限定することで、計算を局所化し、計算処理負荷を低減する。具体的には、チャンキング処理部121は、疑似正規分布に応じた重み係数を用いて、処理対象のオフセット位置の近傍のバイト列のみを用いて複雑度Eを計算する。この方法により、複雑度Eの計算精度の低下を抑制しつつ、その計算負荷を低減できる。その結果、エネルギー場の計算負荷を軽減できる。
【0088】
また、複雑度Eの変動状況を基に分割位置を決定する際、複雑度Eが急上昇する位置と急下降する位置の両方を分割位置として選択しなくても、十分な間隔で分割位置を決定できればそれらの一方の位置のみが分割位置として選択されればよい。そこで、チャンキング処理部121は、複雑度Eの微分を計算せず、複雑度Eの増分のみを計算することでエネルギー場の値を求める。これにより、エネルギー場の計算負荷を軽減する。なお、本実施の形態では複雑度の増分を計算するものとするが、その代わりに複雑度の減少分を計算してもよい。
【0089】
ただし、上記のように重み係数を用いて複雑度Eの計算を局所化すると、1つの長いデータパターンが出現した場合(例えば、何らかの規則性を有する1つのデータパターンが出現した場合)に、そのデータパターンの出現を認識できない可能性がある。そこで、チャンキング処理部121は、データ値の連続性Cを考慮してエネルギー場の値を計算する。この連続性Cは、データパターンの連続性(特定のデータパターンが続いているか)を示す指標である。すなわち、複雑度Eの増分が大きい場合でも、データ値の連続性Cが高いと判定される場合、データパターンの途中であると推定して分割位置と判定しないような計算方法が利用される。そこで、チャンキング処理部121は、-(Ei-Ei-1)+Ciによりオフセット番号iでのエネルギー場の値(エネルギー値)Piの値を計算する。
【0090】
以下、図17および図18を用いて、ステップS11のエネルギー場計算処理の例を説明する。
図17は、重みテーブルの構成例を示す図である。図17に示す重みテーブル115において、列番号jは重みテーブル115における列の番号を示し、各列にオフセット値offと重みWとが対応付けてあらかじめ登録されている。
【0091】
オフセット値offは、処理対象のオフセット位置(処理位置)に対して前側のオフセット番号を示す。処理位置のバイト列のオフセット番号をiとすると、off=1はオフセット番号(i-1)のバイト列を示し、off=2はオフセット番号(i-2)のバイト列を示す。本実施の形態では例として、処理位置の近傍のバイト列として、処理位置に対応するオフセット番号iに加えてオフセット番号(i-1),(i-2),(i-3),(i-5),(i-7),(i-11)の各バイト列を用いて複雑度Eiが計算されるものとする。また、重みWは、オフセット番号iを中心とした疑似正規分布の確立変数に応じた重み係数である。
【0092】
図18は、エネルギー場計算処理の例を示すフローチャートである。この図18の処理は、図16のステップS11の処理に対応する。また、図18の処理は、図17の重みテーブル115を参照しながら実行される。
【0093】
[ステップS21]チャンキング処理部121は、書き込みが要求されたファイルを1バイトごとの単位ビット列(バイト列)D0,D1,・・・に分割する。
[ステップS22]チャンキング処理部121は、処理位置を示すオフセット番号iを初期化する。図17の重みテーブル115が用いられる場合、初期状態ではオフセット番号「0」からオフセット番号「11」までのバイト列が計算に用いられるので、オフセット番号iの初期値として「11」が設定される。
【0094】
[ステップS23]チャンキング処理部121は、連続性の指標である連続性カウンタの値を初期化する。本実施の形態では例として、連続性カウンタの値としてカウント値c0,c1が用いられるものとし、チャンキング処理部121はカウント値c0,c1のいずれも「0」に設定する。カウント値c0,c1は、それぞれ異なる規則性を有するデータパターンの連続性を判定するための値である。後述するように、カウント値c0はデータ値「0」のバイト列が連続している可能性の高さを示し、カウント値c1はデータ値「127」以下のバイト列が連続している可能性の高さを示す。
【0095】
[ステップS24]チャンキング処理部121は、次の式(2)を用いてオフセット番号iにおける複雑度Eiを計算する。
【0096】
【数1】
【0097】
式(2)において、offj,Wjは、図17の重みテーブル115において列番号jに対応付けられたオフセット値offおよび重みWをそれぞれ示す。したがって複雑度Eiは、オフセット番号iのデータ値とオフセット番号(i-1),(i-2),(i-3),(i-5),(i-7),(i-11)の各データ値との差分の絶対値に対して、対応する重みWが乗算された値をすべて加算することで算出される。
【0098】
なお、式(2)は複雑度Eiの計算式の一例であり、他の計算式によって複雑度Eiが計算されてもよい。
[ステップS25]チャンキング処理部121は、処理位置のオフセット番号iを「1」だけインクリメントして、処理対象のバイト列を次のバイト列に移動させる。また、チャンキング処理部121は、直近に計算された複雑度Eiをオフセット番号(i-1)に対応する複雑度Ei-1として設定する。
【0099】
[ステップS26]チャンキング処理部121は、処理位置のバイト列Diがファイルの終端であるかを判定する。処理位置のバイト列Diがファイルの終端である場合、チャンキング処理部121は、処理位置のバイト列Diの終端をチャンクの分割位置に設定して、チャンキング処理を終了する。一方、処理位置のバイト列Diがファイルの終端でない場合、チャンキング処理部121はステップS27の処理を実行する。
【0100】
[ステップS27]チャンキング処理部121は、前述の式(2)を用いて現在のオフセット番号iにおける複雑度Eiを計算する。
[ステップS28]チャンキング処理部121は、連続性カウンタのカウント値c0,c1についての更新処理を実行する。この処理については、後の図19を用いて詳述する。
【0101】
[ステップS29]チャンキング処理部121は、次の式(3)を用いてオフセット番号iにおけるエネルギー場の値(エネルギー値)Piを計算する。
i=-(Ei-Ei-1)+a0×c0+a1×c1 ・・・(3)
式(3)において、a0,a1はそれぞれカウント値c0,c1に対応する重み係数である。例えば、a0=100,a1=10に設定される。この場合、データ値「0」のバイト列が連続しているデータパターンの方が、データ値「127」以下のバイト列が連続しているデータパターンより、1つのチャンクに含まれるデータパターンとして重要視して検出されることを示す。
【0102】
ステップS29の処理が完了すると、処理がステップS25に進められ、処理対象のバイト列が次のバイト列に移動される。
図19は、連続性カウンタ更新処理の例を示すフローチャートである。この図19の処理は、図18のステップS28の処理に対応する。
【0103】
まず、ステップS31~S33ではカウント値c0の更新処理が実行される。
[ステップS31]チャンキング処理部121は、処理位置のバイト列Diのデータ値が「0」であるかを判定する。チャンキング処理部121は、データ値が「0」の場合はステップS32の処理を実行し、データ値が「0」でない場合はステップS33の処理を実行する。
【0104】
[ステップS32]チャンキング処理部121は、カウント値c0を「1」だけインクリメントする。
[ステップS33]チャンキング処理部121は、カウント値c0を「0」に初期化する。
【0105】
以上のステップS31~S33の処理により、カウント値c0はデータ値「0」のバイト列が連続している可能性の高さを示すようになる。続いて、ステップS34~S36ではカウント値c1の更新処理が実行される。
【0106】
[ステップS34]チャンキング処理部121は、処理位置のバイト列Diのデータ値が「127」以下であるかを判定する。チャンキング処理部121は、データ値が「127」以下の場合はステップS35の処理を実行し、データ値が「127」より大きい場合はステップS36の処理を実行する。
【0107】
[ステップS35]チャンキング処理部121は、カウント値c1を「1」だけインクリメントする。
[ステップS36]チャンキング処理部121は、カウント値c1を「0」に初期化する。
【0108】
以上のステップS34~S36の処理により、カウント値c1はデータ値「127」以下のバイト列が連続している可能性の高さを示すようになる。
なお、カウント値c0,c1は、ビット列が何らかの規則性を有する可能性を示す指標の一例であり、これに限定されるものではなく、他の指標を用いることも可能である。
【0109】
以上説明した図18図19の処理により、複雑度(エントロピー)の計算精度の低下を抑制しつつ、その計算負荷を低減できる。そして、そのような効果を、書き込みデータの文脈を解釈せず、ビット列の解析によって得ることができる。
【0110】
次に、図16のステップS12に示した分割位置判定処理について説明する。
分割位置判定処理では、図15で説明したように、チャンクの分割位置の間隔ができるだけ一定の大きさ以上、かつ等しくなるように、チャンクの平均サイズの目標値を考慮した処理が行われる。また、エネルギー場の区間最小値(極値)に基づいて分割位置を決定する際に、トンネル効果が生じるような処理を行うことで、区間最小値の算出結果が局所最適解とならないようにする。このための1つの方法としては、例えば、区間最小値が検出された後、その位置の後の区間においてさらに小さい値となる位置が検出された場合に、位置の差に対して値の差が十分大きければ区間最小値を後の位置における値に更新する方法がある。
【0111】
本実施の形態ではこの方法を応用した別の方法が用いられる。以下、図20図21を用いて別の方法を説明する。
図20は、エネルギー場における最小点探索について説明するための図である。図20では、エネルギー場の値(エネルギー値)Pがチャンク起点側から走査されて最小値(極小値)が探索される。チャンク起点とは、現在終端位置(分割点)を決定しようとしているチャンクの開始位置であり、書き込みデータ(ファイル)の先頭位置、または直前のチャンク分割位置を示す。
【0112】
探索により最小値が見つかった場合、その位置を起点として最小値の探索範囲をどれだけ延長するかを示す延長探索距離が設定される。最小値が見つかった位置から延長探索距離だけ進んだ位置までの範囲(延長探索範囲)において新たな最小値が見つからなかった場合には、元の最小値の位置がチャンクの分割位置に決定される。
【0113】
延長探索距離は、チャンク起点から最小値が見つかった位置までの距離と、平均チャンクサイズの目標値とに応じて設定される。延長探索範囲はチャンク起点からの距離が長いほど短く設定され、チャンク起点からの距離が規定の最大チャンクサイズに達すると、探索の延長は行われない。これにより、最小値の探索範囲が最大チャンクサイズ以下の長さの範囲に制限される。
【0114】
また、延長探索距離の最大値が平均チャンクサイズの目標値に設定される。これにより、最小値の探索範囲は、目標とする平均チャンクサイズ以上の長さになるように確保される。そして、チャンク起点からの距離が短く、目標とする平均チャンクサイズに満たない小さなチャンクが生成されそうになると、目標とする平均チャンクサイズに近い長さの分だけ探索範囲が延長される。これにより、生成されるチャンクサイズの平均が目標値に近づくようにチャンクの分割位置が決定される。
【0115】
図20において、i0は、チャンク起点のオフセット番号を示し、iminは、現在の最小点(最小値が検出された位置)のオフセット番号を示し、iは、現在の処理位置のオフセット番号を示す。Sminは最小チャンクサイズであり、例えば16KBに設定される。Smaxは最大チャンクサイズであり、例えば256KBに設定される。Saveは平均チャンクサイズの目標値であり、例えば64KBに設定される。
【0116】
図20のグラフ171は、i0,imin,i,Smin,Saveの関係を示している。延長探索範囲の長さ(延長探索距離)は、(i-imin)となる。なお、グラフ171の横軸のx’は、チャンク起点からのバイト列のオフセット番号を示す。
【0117】
最新の最小点をチャンクの分割位置とするか否かの判定は、例えば、次の式(4)に示す条件を用いて行われる。
i-imin≧Save-(i-i0)×Save/Smax ・・・(4)
図20のグラフ172は、チャンク起点からの距離と、式(4)の右辺によって示される延長探索距離の最大値との関係を示している。すなわち、最新の最小点からの延長探索距離が式(4)の右辺によって示される値に達した場合に、最新の最小点がチャンクの分割点に決定される。
【0118】
図21は、分割位置判定処理の例を示すフローチャートである。この図21の処理は、図16のステップS12の処理に対応する。
[ステップS41]チャンキング処理部121は、図16のステップS11で算出された、バイト列ごとのエネルギー値P0,P1,・・・を取得する。
【0119】
[ステップS42]チャンキング処理部121は、処理の開始位置(チャンク起点)を示すオフセット番号i0を「0」に初期化する。また、チャンキング処理部121は、現在の処理位置を示すオフセット番号iを、最小チャンクサイズSminに設定して初期化する。これにより、チャンク起点から最小チャンクサイズ分だけ進んだ位置から最小値の探索が開始される。
【0120】
[ステップS43]チャンキング処理部121は、エネルギー値の最小値Pminを、処理位置iのエネルギー値Piに設定する。また、チャンキング処理部121は、最小値Pminが検出された位置(最小点)を示すオフセット番号iminをiに設定する。
【0121】
[ステップS44]チャンキング処理部121は、処理位置iがファイル終端のバイト列を示すかを判定する。チャンキング処理部121は、処理位置iがファイル終端のバイト列を示さない場合、ステップS45の処理を実行し、処理位置iがファイル終端のバイト列を示す場合、処理を終了する。なお、後者のケースでは、ステップS49で決定された分割位置と、ファイルの終端位置とが、チャンクの分割位置として最終的に決定される。
【0122】
[ステップS45]チャンキング処理部121は、処理位置のエネルギー値Piが現在の最小値Pminより小さいかを判定する。チャンキング処理部121は、エネルギー値Piが現在の最小値Pminより小さい場合、ステップS46の処理を実行し、エネルギー値Piが現在の最小値Pmin以上である場合、ステップS47の処理を実行する。
【0123】
[ステップS46]チャンキング処理部121は、最小値Pminを処理位置のエネルギー値Piによって更新する。また、チャンキング処理部121は、最小点を示すオフセット番号iminを現在の処理位置を示すオフセット番号iに更新する。
【0124】
[ステップS47]チャンキング処理部121は、延長探索距離(i-imin)が前述の式(4)の条件を満たすかを判定する。チャンキング処理部121は、条件を満たす場合、ステップS49の処理を実行し、条件を満たさない場合、ステップS48の処理を実行する。
【0125】
[ステップS48]チャンキング処理部121は、処理位置のオフセット番号iを「1」だけインクリメントして、処理位置を次のオフセット番号の位置に進める。このケースでは、最小値の探索が継続される。
【0126】
[ステップS49]チャンキング処理部121は、オフセット番号iminが示すバイト列の後端をチャンクの分割位置に決定する。
[ステップS50]チャンキング処理部121は、処理の開始位置(チャンク起点)を示すオフセット番号i0を、オフセット番号iminに更新する。また、チャンキング処理部121は、現在の処理位置を示すオフセット番号iを、(imin+Smin)に更新する。この後、処理がステップS43に進められる。これにより、ステップS49で決定されたチャンクの分割点から最小チャンクサイズ分だけ進んだ位置から、最小値の探索が再度開始される。
【0127】
次に、ファイルの書き込みが要求された際のクラウドストレージゲートウェイ100の処理について、フローチャートを用いて説明する。
図22図23は、ファイル書き込み処理の例を示すフローチャートである。NASサービス処理部120は、NASクライアント210からファイルの書き込み要求を受信すると、図16の処理を実行する。なお、この書き込み要求は、新規ファイルの書き込み要求または既存ファイルの更新要求である。
【0128】
[ステップS61]新規ファイルの書き込み要求の場合、NASサービス処理部120のチャンキング処理部121は、ディレクトリテーブル111に、書き込みが要求されたファイルのディレクトリ情報を示すレコードを追加する。このとき、ファイルにinode番号が付与される。なお、既存ファイルの更新要求の場合、ディレクトリテーブル111にはすでに該当レコードが登録されている。
【0129】
また、チャンキング処理部121は、図16に示した手順で、書き込みが要求されたファイルに対するチャンキング処理を実行する。すなわち、チャンキング処理部121は、書き込みが要求されたファイルの実データを可変長チャンクに分割する。
【0130】
[ステップS62]NASサービス処理部120の重複排除処理部122は、ファイルの先頭側から順に、処理対象のチャンクを1つ選択する。重複排除処理部122は、選択されたチャンクのチャンクデータ(以下、「選択されたチャンクデータ」と略称する)に基づくハッシュ値を算出する。
【0131】
[ステップS63]重複排除処理部122は、チャンクマップテーブル112にレコードを追加し、このレコードに次のような情報を登録する。「ino」には、書き込みが要求されたファイルのinode番号が登録され、「offset」および「size」には、処理対象のチャンクについての情報が登録される。
【0132】
[ステップS64]重複排除処理部122は、チャンクメタテーブル113を参照し、「hash」の項目にステップS62で算出されたハッシュ値が登録されたレコードが存在するかを判定する。これにより、選択されたチャンクデータがすでに存在するか(重複しているか)が判定される。重複排除処理部122は、該当するレコードが見つかった場合、ステップS65の処理を実行し、該当するレコードが存在しない場合、図23のステップS71の処理を実行する。
【0133】
[ステップS65]重複排除処理部122は、ステップS64でチャンクメタテーブル113から検索されたレコードの情報に基づいて、ステップS63でチャンクマップテーブル112に追加したレコードを更新する。具体的には、重複排除処理部122は、チャンクメタテーブル113の該当レコードから「gno」および「gindex」の設定値を読み出す。重複排除処理部122は、読み出した「gno」および「gindex」の設定値を、チャンクマップテーブル112に追加したレコードの「gno」および「gindex」にそれぞれ登録する。
【0134】
[ステップS66]重複排除処理部122は、ステップS64でチャンクメタテーブル113から検索されたレコードの「refcnt」に登録された参照カウンタの値をカウントアップする。
【0135】
[ステップS67]重複排除処理部122は、ステップS61で分割されたすべてのチャンクについて処理済みかを判定する。重複排除処理部122は、未処理のチャンクがある場合は処理をステップS62に進め、未処理のチャンクを先頭側から1つ選択して処理を継続する。一方、重複排除処理部122は、すべてのチャンクを処理済みの場合、処理を終了する。
【0136】
以下、図23を用いて説明を続ける。
[ステップS71]重複排除処理部122は、チャンクデータテーブル114を参照し、最後尾のレコードに登録されたグループ番号(すなわち、現時点で最大のグループ番号)を取得する。
【0137】
[ステップS72]重複排除処理部122は、ステップS71で取得されたグループ番号のチャンクグループに含まれるチャンクデータの合計サイズが、所定値以上であるかを判定する。重複排除処理部122は、合計サイズが所定値以上である場合、ステップS73の処理を実行し、合計サイズが所定値未満である場合、ステップS74の処理を実行する。
【0138】
[ステップS73]重複排除処理部122は、ステップS71で取得されたグループ番号をカウントアップすることで、新たなグループ番号を生成する。
[ステップS74]重複排除処理部122は、ステップS63でチャンクマップテーブル112に追加したレコードを次のように更新する。ステップS72でYesと判定された場合、「gno」にはステップS73で生成されたグループ番号が登録され、「gindex」には先頭のチャンクを示すインデックス番号が登録される。一方、ステップS72でNoと判定された場合、「gno」にはステップS71で取得されたグループ番号が登録される。また、「gindex」の項目には、このグループ番号に対応するチャンクグループに含まれている最後尾のチャンクデータの次の順番を示すインデックス番号が登録される。
【0139】
[ステップS75]重複排除処理部122は、チャンクメタテーブル113に新たなレコードを追加し、このレコードに対して次のような情報を登録する。「gno」および「gindex」には、ステップS74と同様の情報が登録される。「offset」および「size」には、処理対象のチャンクについての情報が登録される。「hash」には、ステップS62で算出されたハッシュ値が登録される。「refcnt」には、初期値「1」が登録される。
【0140】
[ステップS76]重複排除処理部122は、チャンクデータテーブル114に新たなレコードを追加し、このレコードに対して次のような情報を登録する。「gno」および「gindex」には、ステップS74と同様の情報が登録される。「data」には、チャンクデータが登録される。
【0141】
[ステップS77]重複排除処理部122は、ステップS74~S76で各レコードに記録したグループ番号のチャンクグループに含まれるチャンクデータの合計サイズが、所定値以上であるかを判定する。重複排除処理部122は、合計サイズが所定値以上である場合、ステップS78の処理を実行し、合計サイズが所定値未満である場合、図22のステップS67の処理を実行する。
【0142】
[ステップS78]重複排除処理部122は、ステップS74~S76で各レコードに記録したグループ番号のチャンクグループを非アクティブ化して、このチャンクグループをクラウド転送処理部130による転送対象に設定する。例えば、このチャンクグループを示すグループ番号が図示しない転送キューに登録されることで、このチャンクグループが転送対象に設定される。この後、図22のステップS67に処理が進められる。
【0143】
なお、図示しないが、既存ファイルの更新要求の場合、図22図23の処理に続いて、更新された旧ファイルのチャンクに対応する参照カウンタがカウントダウンされる。
図24は、クラウド転送処理の例を示すフローチャートである。なお、クラウド転送処理部130による図24の処理は、図23図24に示したNASサービス処理部120の処理とは非同期で実行される。
【0144】
[ステップS81]クラウド転送処理部130は、チャンクデータテーブル114に登録されたチャンクグループの中から、図23のステップS78の処理により転送対象に設定されたチャンクグループを特定する。例えば、転送対象のチャンクグループを示すグループ番号が転送キューに登録されている場合、クラウド転送処理部130は、この転送キューからグループ番号を1つ抽出する。
【0145】
[ステップS82]クラウド転送処理部130は、チャンクグループオブジェクト131を生成する。
[ステップS83]クラウド転送処理部130は、生成されたチャンクグループオブジェクト131をクラウドストレージ240に送信して、チャンクグループオブジェクト131の格納を要求する。
【0146】
以上説明した図22図24の処理により、書き込みが要求されたファイルが可変長のチャンクに分割され、チャンクのデータが重複を排除した状態でチャンクデータテーブル114やクラウドストレージ240に格納される。前述のように図22のステップS61では、追加や変更が発生した可能性の高い範囲の先頭および末尾の位置でチャンクが分割されるようになり、しかもチャンクの平均サイズの目標値を設定してある程度長いチャンクが生成されやすくなる。このため、重複排除処理における重複排除率を高めつつ、チャンクメタテーブル113などのチャンク管理用データの容量を削減できる。
【0147】
なお、上記の各実施の形態に示した装置(例えば、情報処理装置10およびクラウドストレージゲートウェイ100)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
【0148】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0149】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【0150】
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 書き込みデータの書き込み要求を受けるたびに、前記書き込みデータを一定サイズの複数の単位ビット列に分割し、前記複数の単位ビット列のそれぞれが示すデータ値の複雑度を計算し、前記複雑度の変動量に基づいて前記書き込みデータにおける分割位置を決定し、前記書き込みデータを前記分割位置で分割することで前記書き込みデータを複数のチャンクに分割する分割処理部と、
前記複数のチャンクのデータを重複を排除して記憶装置に格納する重複排除部と、
を有する情報処理装置。
【0151】
(付記2) 前記分割処理部は、前記変動量が極値をとる位置に基づいて前記分割位置を決定する、
付記1記載の情報処理装置。
【0152】
(付記3) 前記分割処理部は、前記変動量が極値をとる位置と平均チャンクサイズの目標値とに基づいて前記分割位置を決定する、
付記1記載の情報処理装置。
【0153】
(付記4) 前記分割処理部は、前記変動量が極値をとる第1の位置を検出したとき、最大チャンクサイズと平均チャンクサイズの目標値とに基づいて極値の探索範囲を設定し、前記第1の位置を起点とした前記探索範囲内から前記変動量の次の極値が検出されなかった場合、前記第1の位置を前記分割位置に決定する、
付記1記載の情報処理装置。
【0154】
(付記5) 前記分割処理部は、前記第1の位置を検出したとき、前記探索範囲の長さが、直近に決定された前記分割位置からの距離が遠くなるほど短くなり、かつ、前記平均チャンクサイズ以下になるように、前記探索範囲を設定する、
付記4記載の情報処理装置。
【0155】
(付記6) 前記分割処理部は、前記複雑度の増加量または減少量を、前記データ値の連続性を示す指標で補正した値に基づいて、前記分割位置を決定する、
付記1乃至5のいずれか1つに記載の情報処理装置。
【0156】
(付記7) コンピュータに、
書き込みデータの書き込み要求を受けるたびに、前記書き込みデータを一定サイズの複数の単位ビット列に分割し、前記複数の単位ビット列のそれぞれが示すデータ値の複雑度を計算し、前記複雑度の変動量に基づいて前記書き込みデータにおける分割位置を決定し、前記書き込みデータを前記分割位置で分割することで前記書き込みデータを複数のチャンクに分割し、
前記複数のチャンクのデータを重複を排除して記憶装置に格納する、
処理を実行させる情報処理プログラム。
【0157】
(付記8) 前記分割位置の決定では、前記変動量が極値をとる位置に基づいて前記分割位置を決定する、
付記7記載の情報処理プログラム。
【0158】
(付記9) 前記分割位置の決定では、前記変動量が極値をとる位置と平均チャンクサイズの目標値とに基づいて前記分割位置を決定する、
付記7記載の情報処理プログラム。
【0159】
(付記10) 前記分割位置の決定では、前記変動量が極値をとる第1の位置を検出したとき、最大チャンクサイズと平均チャンクサイズの目標値とに基づいて極値の探索範囲を設定し、前記第1の位置を起点とした前記探索範囲内から前記変動量の次の極値が検出されなかった場合、前記第1の位置を前記分割位置に決定する、
付記7記載の情報処理プログラム。
【0160】
(付記11) 前記分割位置の決定では、前記第1の位置を検出したとき、前記探索範囲の長さが、直近に決定された前記分割位置からの距離が遠くなるほど短くなり、かつ、前記平均チャンクサイズ以下になるように、前記探索範囲を設定する、
付記10記載の情報処理プログラム。
【0161】
(付記12) 前記分割位置の決定では、前記複雑度の増加量または減少量を、前記データ値の連続性を示す指標で補正した値に基づいて、前記分割位置を決定する、
付記7乃至11のいずれか1つに記載の情報処理プログラム。
【符号の説明】
【0162】
1 グラフ
2a,2b 位置
10 情報処理装置
11 分割処理部
12 重複排除部
20 記憶装置
CK1~CK3 チャンク
DT1~DT10 単位ビット列
WD1~WD3 書き込みデータ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24