JP2017097437A - 情報処理システム、情報処理装置、及びプログラム - Google Patents

情報処理システム、情報処理装置、及びプログラム Download PDF

Info

Publication number
JP2017097437A
JP2017097437A JP2015225923A JP2015225923A JP2017097437A JP 2017097437 A JP2017097437 A JP 2017097437A JP 2015225923 A JP2015225923 A JP 2015225923A JP 2015225923 A JP2015225923 A JP 2015225923A JP 2017097437 A JP2017097437 A JP 2017097437A
Authority
JP
Japan
Prior art keywords
data
hash value
fragment
storage
information processing
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.)
Granted
Application number
JP2015225923A
Other languages
English (en)
Other versions
JP6113816B1 (ja
Inventor
石山 政浩
Masahiro Ishiyama
政浩 石山
秀則 松崎
Hidenori Matsuzaki
秀則 松崎
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2015225923A priority Critical patent/JP6113816B1/ja
Application granted granted Critical
Publication of JP6113816B1 publication Critical patent/JP6113816B1/ja
Publication of JP2017097437A publication Critical patent/JP2017097437A/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】情報処理システムにおいてデータの重複排除を行う。
【解決手段】データ保存先装置3は、データに基づいて生成された保存単位サイズの複数の保存データのうちの第1の保存データと、保存単位サイズよりも大きい重複検出サイズの第1の断片データに対応する第1のハッシュ値と、第1の保存データの少なくとも一部に対応する第2のハッシュ値とを受信する。外部の装置2によって保存対象データに基づいて生成された保存単位サイズの第2の保存データを受信する。第1の保存データの少なくとも一部に対応する第2のハッシュ値が、第2の保存データの少なくとも一部に対応する第3のハッシュ値と一致する場合に、第1の断片データに対応する第1のハッシュ値が、複数の装置に保存されており第2の保存データを含み重複検出サイズの第2の断片データに対応する第4のハッシュ値と一致するか判断し、一致する場合に、第2の断片データに対する重複を検出する。
【選択図】図1

Description

本実施形態は、情報処理システム、情報処理装置、及びプログラムに関する。
大規模ストレージに用いられるオブジェクトストレージでは、耐障害性の実現のために消失符号が用いられる。
米国特許第7992037号明細書 特開2010−79886号公報
Rabin, Michael O. Fingerprinting by random polynomials. Center for Research in Computing Techn., Aiken Computation Laboratory, Univ., 1981. openstack CLOUD SOFTWARE, "The Rings − swift 2.5.1.dev128 documentation - Open Stack Docs", [2015年11月18日検索], インターネット<URL:http://docs.openstack.org/developer/swift/overview_ring.html>
本実施形態は、データの重複排除を行う情報処理システム、情報処理装置、及びプログラムを提供する。
本実施形態に係る情報処理システムは、第1の情報処理装置と複数の第2の情報処理装置とを含む。第1の情報処理装置は、生成部と計算部と送信部とを含む。生成部は、データに基づいて保存単位サイズの複数の保存データを生成する。計算部は、データに含まれており保存単位サイズよりも大きい重複検出サイズの第1の断片データに対応する第1のハッシュ値を計算するとともに、第1の断片データに含まれている第1の保存データの少なくとも一部に対応する第2のハッシュ値を計算する。送信部は、第1の保存データと第1のハッシュ値と第2のハッシュ値とを、複数の第2の情報処理装置のうちの保存先装置へ送信する。保存先装置は、受信部と処理部とを含む。受信部は、第1の保存データと第1のハッシュ値と第2のハッシュ値とを受信するとともに、外部の情報処理装置によって保存対象データに基づいて生成された保存単位サイズの第2の保存データを受信する。処理部は、第1の保存データの少なくとも一部に対応する第2のハッシュ値が、受信部によって受信された第2の保存データの少なくとも一部に対応する第3のハッシュ値と一致するか否か判断し、第2のハッシュ値が第3のハッシュ値と一致する場合に、第1の断片データに対応する第1のハッシュ値が、複数の第2の情報処理装置に保存されており第2の保存データを含み重複検出サイズの第2の断片データに対応する第4のハッシュ値と一致するか判断し、第1のハッシュ値が第4のハッシュ値と一致する場合に、第2の断片データに対する重複を検出する。
第1の実施形態に係る情報処理システムの構成を例示するブロック図。 第1の実施形態に係る情報処理システムの構成を例示する概念図。 オブジェクトとフラグメントサーバのディスクとの関係の一例を示す概念図。 ディスク選択インデックスファイルを例示する図。 重複排除方法の第1乃至第3の方式を例示する図。 通常のハッシュ計算とローリングハッシュ計算との比較結果を例示する図。 フラグメント保存処理を例示するフローチャート。 フラグメント保存処理を例示する概念図。 オブジェクトの読み出し手順を例示するフローチャート。 重複するフラグメントの排除処理の具体例を示す図。 フィンガープリントセットを例示する図。 フィンガープリントセットの保存形式と探索方法を例示する図。 自由位置での重複排除処理を例示するフローチャート。 重複排除処理におけるフラグメントの第1の読み出し処理を例示する図。 重複排除処理におけるフラグメントの第2の読み出し処理を例示する図。 自由位置での重複排除処理の第1の例を示す図。 自由位置での重複排除処理の第2の例を示す図。 フロントエンドサーバによるオブジェクトの再配置の第1の例を示す図。 フロントエンドサーバによるオブジェクトの再配置の第2の例を示す図。
以下、図面を参照しながら本発明の実施の形態について説明する。なお、以下の説明において、略又は実質的に同一の機能及び構成要素については、同一符号を付し、必要に応じて説明を行う。
[第1の実施形態]
大規模ストレージで用いられるオブジェクトストレージは、保存対象のデータを抽象化されたオブジェクト単位で管理するため、例えばHDD(Hard Disk Drive)又はSSD(Solid State Drive)といった保存先のハードウェアの種類、台数の制限、又はファイルシステムの仕様による制限を受けない。このため、オブジェクトストレージは、ハードウェアの入れ替え及び容量の増設などを簡単に行うことができるといった高い拡張性を持ち、大規模なストレージシステムを安価に構築可能である。
本実施形態に係る情報処理システムは、オブジェクトストレージを用い、消失符号(Erasure Coding)を用いて高い耐障害性を実現する。また、本実施形態に係る情報処理システムは、消失符号の信頼性を維持しながらシステム全体で保存されるデータの重複排除を適用し、記憶容量を削減、換言すれば記憶効率を向上させる。
本実施形態では、複数の物理ディスクに分散されて保存されるオブジェクト及び消失符号の集合を管理しながら重複排除を適用することにより、物理ディスクの故障に対する信頼性を維持する。
本実施形態に係る情報処理システムは、記憶容量の拡張性を維持するため、IP(Internet Protocol)接続型ドライブのような高機能なドライブの利用を想定している。しかしながら、IP接続ではない複数台接続可能なドライブであってもよい。ドライブは、例えば、不揮発性の半導体メモリを含むとしてもよい。不揮発性メモリは、例えばNAND型フラッシュメモリとするが、NOR型フラッシュメモリ、MRAM(Magnetoresistive Random Access Memory:磁気抵抗メモリ)、PRAM(Phase change Random Access Memory:相変化メモリ)、ReRAM(Resistive Random Access Memory:抵抗変化型メモリ)、FeRAM(Ferroelectric Random Access Memory)など他の不揮発性半導体メモリでもよい。例えば、不揮発性メモリは、不揮発性の半導体メモリではない他の不揮発性メモリ、磁気メモリなどでもよい。例えば、不揮発性メモリは、3次元構造のフラッシュメモリでもよい。例えば、不揮発性メモリは、ディスク(例えばdisc又はdisk)でもよい。
本実施形態に係る情報処理システムでは、複数のドライブが重複位置の探索を分担して行う。これにより、データの記憶量の増加に対するフロントエンドサーバの負荷を軽減する。
本実施形態において、ユーザの使用する端末(又は端末上で動作するアプリケーション)は、例えばREST(Representational State Transfer) API(Application Programming Interface)などのような所定の規約を使用してオブジェクトを保存又は取得する。このAPIを担当する情報処理装置を、フロントエンドサーバと呼ぶ。フロントエンドサーバは、オブジェクトの保存要求をユーザの端末又はユーザの使用する端末のアプリケーションから受け取ると,オブジェクトを適切な数の断片(以下、ストライドと呼ぶ)へと分解し、それぞれの断片に消失符号を使用して符号化を行う。ストライドは、重複検出サイズを持つ。
ストライドは、符号化によって消失符号適用の最小分割単位(以下、フラグメントと呼ぶ)に分割される。フラグメントは、保存単位サイズを持つ。フロントエンドサーバは、これらのフラグメントを、例えばKVS(Key-Value Store) APIを使用して、最終的なデータの保存先である複数のフラグメントサーバへ保存する。
その後、フラグメントサーバは、保存したフラグメントに対し、重複排除を行う。例えば、消失符号の信頼性を維持するため、重複排除は、ストライド単位で行う。
なお、ユーザの使用する端末とフロントエンドサーバとの間でデータを送受信する際のAPI、及びフロントエンドサーバとフラグメントサーバとの間でデータを送受信する際のAPIは、上述のものに限られない。
図1は、本実施形態に係る情報処理システムの構成を例示するブロック図である。
情報処理システム1は、1台以上のフロントエンドサーバ2、複数のフラグメントサーバ3を備える。この図1では、フロントエンドサーバ2が1台の場合を説明する。また、複数のフラグメントサーバ3のうちの1台のフラグメントサーバを代表して説明する。
フロントエンドサーバ2は、オブジェクトから複数のストライドを生成し、さらに複数のストライドのそれぞれから複数のフラグメントを生成し、複数のフラグメントを複数のフラグメントサーバ3へ分散して送信する。
複数のフラグメントサーバ3のそれぞれは、自機の記憶部31に保存されているフラグメントの少なくとも一部と、受信されたフラグメントの少なくとも一部とが一致するか否か判断する。複数のフラグメントサーバ3のそれぞれは、保存されているフラグメントの少なくとも一部と、受信されたフラグメントの少なくとも一部とが一致する場合に、当該保存されているフラグメントを含み複数のフラグメントサーバ3に保存されている1ストライド分のデータと、受信されたフラグメントを含みオブジェクトに含まれている1ストライド分のデータとが一致するか判断する。そして、複数のフラグメントサーバ3のそれぞれは、保存されている1ストライド分のデータと、オブジェクトに含まれている1ストライド分のデータとが一致する場合に、オブジェクトにおける重複位置を示す重複位置情報をフロントエンドサーバ2へ送信する。
フロントエンドサーバ2は、重複位置情報に基づいて、重複部分が同一のストライドに含まれるように、オブジェクトから複数のストライドを再生成し、さらに再生成された複数のストライドのそれぞれから複数のフラグメントを再生成し、再生成された複数のフラグメントを複数のフラグメントサーバ3へ分散して送信する。
複数のフラグメントサーバ3のそれぞれは、再生成され受信されたフラグメントが自機の記憶部31に保存されているフラグメントと一致する場合に、重複排除を行う。
フロントエンドサーバ2は、コントローラ20、記憶部21を含む。
コントローラ20は、送受信部22、プロセッサ23、メモリ24、制御部25を含む。
送受信部22は、ユーザUの使用する端末11(又は端末11上で動作するアプリケーション)、及びフラグメントサーバ3と、例えばコマンド、アドレス、データ、情報、指示、信号などを送受信する。
ユーザUの使用する端末11は、例えばコンピュータ、PDA(Personal Digital Assistant)、スマートフォン、タブレット型端末などであってもよい。
プロセッサ23は、送受信部22及び制御部25からの指示に基づき、制御処理及び演算処理を実行する。プロセッサ1としては、例えば、CPU(Central Processing Unit)、MPU(Micro-Processing Unit)、又は、DSP(Digital Signal Processor)などが利用される。
メモリ24は、主記憶装置であり、プロセッサ23からの制御に従う。メモリ24には、プロセッサ23の制御に基づいて、送受信部22により送受信されるデータ又は制御部25により生成されたデータなどが一時的に格納される。
制御部25は、オブジェクト分割部201、消失符号計算部202、フィンガープリント計算部203を含む。
オブジェクト分割部201は、ユーザUの使用する端末11より送受信部22を介して受信したオブジェクトを、ストライドに分割する。ストライドのサイズは、システムにより任意に定められる。
オブジェクトのサイズがストライドのサイズの整数倍でない場合は、整数倍となるまでオブジェクトに意味を持たないパディングデータ(例えばゼロデータ)を付加、すなわちパディングする。なお、パディングは、オブジェクトを複数のストライドに分割し、この分割されたストライドのうち所定のサイズに満たないストライドに、パディングデータを補充することで実現されてもよい。
消失符号計算部202は、オブジェクト分割部201により得られた各ストライドに対する消失符号を計算する符号化を行う。具体的には、消失符号計算部202は、ストライドに基づいて複数のフラグメントを生成する。ストライドに対応する複数のフラグメントは、情報シンボル部と、パリティシンボル部とを含む。消失符号の詳細については、図3で後述する。
フィンガープリント計算部203は、任意のデータに対してフィンガープリントを計算する。計算対象のデータは、例えばストライド単位、フラグメント単位、フラグメントの半分の単位(1/2フラグメント単位と呼ぶ)などであってもよい。フィンガープリントは、例えばハッシュ値であり、データの内容に基づいて一意に定まる値である。すなわち、例えば同一のデータからなるストライドのフィンガープリントは、必ず同一となる。従って、フィンガープリントが同一であれば、同じデータである可能性が高いため、フィンガープリントの比較は、重複排除処理において重複データを探索する場合に有効である。本実施形態では、複数のデータに対応するフィンガープリントを比較することで、複数のデータの一致又は不一致を判断する。
また、フィンガープリント計算部203は、算出したフィンガープリントを記憶部21に保存する。
記憶部21は、オブジェクト記憶部211と、フィンガープリントセット212と、ディスク選択インデックスファイル213とを含む。
オブジェクト記憶部211は、送受信部22が受信したオブジェクトを保存する。
フィンガープリントセット212は、重複排除処理に用いられる各ストライド又はフラグメントのフィンガープリントの集合である。フィンガープリントセット212は、例えば1以上のファイルの集合であってもよい。
フィンガープリントセット212は、フィンガープリントが一定量記録されると、コントローラ20の送受信部22からフラグメントサーバ3に送信される。
ディスク選択インデックスファイル213は、フラグメントの保存先となるフラグメントサーバの集合を示す。ディスク選択インデックスファイル213は、参照ハッシュ値と前記参照ハッシュ値に対応して決定される保存先識別情報とを関係付けている。制御部25は、フィンガープリント計算部203により計算されたフィンガープリントに基づいて定まる値をキーとして、ディスク選択インデックスファイル213を参照することにより、各フラグメントの保存先を決定する。フィンガープリントからディスク選択インデックスファイル213を参照するためのキー情報の算出は、例えばハッシュ関数などを用いて行われてもよい。
ディスク選択インデックスファイル213を用いたフラグメントの保存先の決定については、図4を用いて後述する。なお、ディスク選択インデックスファイル213は、ファイル形式で保存されていなくてもよい。
フラグメントサーバ3は、コントローラ30、記憶部31を含む。
コントローラ30は、送受信部32、プロセッサ33、メモリ34、制御部35を含む。
送受信部32は、フロントエンドサーバ2と、例えばコマンド、アドレス、データ、情報、指示、信号などの送受信を行う。
プロセッサ33は、送受信部32及び制御部35からの指示に基づき、制御処理及び演算処理を実行する。プロセッサ33としては、プロセッサ23と同様に、例えばCPU、MPU、又は、DSPなどが利用される。
メモリ34は、主記憶装置であり、プロセッサ33からの制御に従う。メモリ34には、プロセッサ33の制御に基づいて、送受信部32により送受信されるデータ又は制御部35により生成されたデータなどが一時的に格納される。
制御部35は、重複排除処理部301を含む。
重複排除処理部301は、フィンガープリントセット311を用い、フラグメント記憶部312に保存されたフラグメントのうち重複する部分を探索し、重複排除を行う。
また、重複排除はストライド単位で行われるため、フロントエンドサーバ2は、例えば重複部分の起点がストライドの途中に存在する場合は、ストライドの起点と重複部分の起点を一致させるために、重複部分の起点でストライドを分割することによりストライドを再配置する。このように、重複排除のためにストライドを再配置する必要が生じた場合は、重複排除処理部301は、ストライドの再配置の指示をフロントエンドサーバ2に送信する。重複排除処理の詳細については後述する。
記憶部31は、フィンガープリントセット311、フラグメント記憶部312、重複位置情報313を含む。以下、本実施形態では、記憶部31をディスクとする。しかしながら、記憶部31をディスクとすることは、記憶部31がディスクに限定されることを意味しない。記憶部31としては様々な不揮発性メモリを用いることができる。
フィンガープリントセット311は、フロントエンドサーバ2より、フラグメントサーバ3のコントローラ30の送受信部32を経由して、記憶部31に受信され、記憶部31に保存される。フィンガープリントセット311は、重複排除の際に参照される。
フラグメント記憶部312は、フロントエンドサーバ2より、フラグメントサーバ3のコントローラ30の送受信部32を経由して、記憶部31に受信されたフラグメントを保存する。
重複位置情報313は、保存対象のオブジェクトにおける重複データの存在を示す情報、例えば重複データが存在する場合に、フロントエンドサーバ2がストライド再配置を実行する際に参照する重複データの位置を含む。より具体的には、重複位置情報313は、重複排除処理部301が重複検出を行った結果、1ストライド分の重複データがあると判断された重複データの起点を含む。制御部35は、重複位置情報313が一定量保存されると、送受信部32を通じてフロントエンドサーバ2へ送信する。
重複排除処理の詳細については、後述する。
図2は、本実施形態に係る情報処理システム1の構成を例示する概念図である。
情報処理システム1は、複数のフロントエンドサーバ2と複数のフラグメントサーバ3とを含む。フロントエンドサーバ2を増設することにより、ユーザUの使用する端末11及びフラグメントサーバ3から受信したデータの処理能力が向上する、すなわち情報処理システム1全体としての処理能力が向上する。
ユーザUの端末11又は端末11のアプリケーションは、複数のフロントエンドサーバ2のうちのいずれかのフロントエンドサーバに例えばREST APIに基づいてオブジェクトOBを送る。オブジェクトは、例えばファイルでもよい。
本実施形態において、フラグメントサーバ3は、消失符号化後にストライドから生成されるフラグメント数以上の台数で構成される。また、フラグメントサーバ3を増設することにより、オブジェクトOBの最終的な保存先が増える、すなわち情報処理システム1全体としての保存容量が増加する。
まず、フロントエンドサーバ2は、オブジェクトOBを複数のストライドSTに分割する。次に、フロントエンドサーバ2は、各ストライドSTに対して消失符号による符号化を行い、複数のフラグメントを生成する。複数のフラグメントは、情報シンボル部ISとパリティシンボル部PSとを含む。この図2では、1つのストライドから、4つのフラグメントを含む情報シンボル部ISと、2つのフラグメントを含むパリティシンボル部PSとが生成される。情報シンボル部ISに含まれるフラグメントの数と、パリティシンボル部PSに含まれるフラグメントの数とは、1以上で変更可能である。
フロントエンドサーバ2は、生成された各フラグメントの保存先のフラグメントサーバ3を、ディスク選択インデックスファイル213に基づいて選択し、選択結果に応じて各フラグメントを例えばKVS APIに基づいて保存先のフラグメントサーバ3に送る。
図3は、オブジェクトOBとフラグメントサーバ3のディスク31との関係の一例を示す概念図である。図3では、オブジェクトOBから複数のストライドSTへの分割は省略している。
オブジェクトOBは、分割され、消失符号を用いて符号化される。符号化された結果、k個の情報シンボル部ISと、m個のパリティシンボル部PSのフラグメントが生成される。
個々のフラグメントは、k+m個の異なるフラグメントサーバ3のディスク31へ保存される。このようにして保存されたデータは、m個までの任意のフラグメントを喪失しても元データであるオブジェクトOBを復元できる。
この図3は、k=6、m=3とした場合を例示している。この場合は、フラグメントをそれぞれ9台以上の異なるフラグメントサーバ3のディスク31へ保存する。そして、任意の3個のフラグメントの喪失、例えば3台のフラグメントサーバ3の故障まで許容される。
なお、消失符号化後の保存容量の増加率R(%)は、R=(m/k)×100で求められる。図3の例では、保存容量の増加率Rは50%である。
図4は、ディスク選択インデックスファイル213を例示する図である。
ディスク選択インデックスファイル213は、フラグメントの保存先となるフラグメントサーバ3の集合を示す。各フラグメントサーバ3のディスク31には、各ディスク31を識別する固有のID(以下、ディスクIDとする)が付与される。フラグメントの保存先となるフラグメントサーバ3の集合は、ディスクIDの集合で表され、その集合ごとに固有のID(以下、ディスクセットIDとする)が付与される。
ディスク選択インデックスファイル213は、フラグメントサーバ3の追加又は削除の際に事前に計算される。各フロントエンドサーバ2は、ディスク選択インデックスファイル213を保持する。
例えば、ディスク選択インデックスファイル213におけるそのディスクIDの出現確率は各フラグメントサーバ3のデータ記憶容量に比例する。例えばディスクID=xのフラグメントサーバ3のデータ記憶容量が1TB、ディスクID=yのフラグメントサーバ3のデータ記憶容量が2TBである場合、yの出現確率はxの2倍となる。また、ディスク選択インデックスファイル213において、各ディスクIDは、この出現確率を満たした上でランダムに分布している。ただし、各フラグメントは必ず異なるディスクへ保存されるため、同一の列には必ず異なるディスクIDが現れ、同じディスクIDは同じ列に2以上含まれない。
ディスク選択インデックスファイル213をあるディスクセットID(zとする)に基づいて参照する、といった場合、ディスク選択インデックスファイル213のz列の集合値が返却される。この集合をディスクセットと呼ぶ。前述のとおり、ディスクセットには複数のディスクIDが含まれるが、1つのディスクセット上でディスクIDが重複することはない。例えば、ディスクセットID=3の保存先は[0,3,8,6,7,4, ... ]となる。
フロントエンドサーバ2は、保存したいデータ(具体的にはあるストライドから生成されたフラグメントの集合)に対してディスクセットIDを決定し、決定されたディスクセットIDに基づいてディスク選択インデックスファイル213を参照し、ディスクセットIDに対応するディスクIDに従ってデータを保存する。これにより、各フラグメントを必ず異なるフラグメントサーバ3へ保存できる。また、ディスクIDの出現確率はフラグメントサーバ3のデータ記憶容量に比例している。このため、データ記憶容量の異なるフラグメントサーバ3があっても、フラグメントサーバ3のデータ記憶容量に従ってフラグメントが適度な分布で保存される。
図5は、重複排除方法の第1乃至第3の方式を例示する図である。同じ符号を付したデータ内容は、同じであるとする。
オブジェクトO1とオブジェクトO2は、先頭のデータ内容A、及び中間のデータ内容Bは同一であるものの、末尾のデータ内容がCとZとで異なっている。オブジェクトO3は、オブジェクトO2に対して、先頭にデータ内容Yが挿入され、またデータ内容Aとデータ内容Bの間にXが挿入され、データ内容Zが削除された点で異なっている。
オブジェクトストレージにおける重複排除には、例えば第1乃至第3の方式が考えられる。
第1の方式は、オブジェクト(例えばファイル)単位での重複排除である。しかしながら、第1の方式はある2つのオブジェクトにおいて、例えば1ビットの差異があっただけで重複排除を行うことができなくなり、重複排除の効率は高くない。
図5では、オブジェクトO1とオブジェクトO2は、重複するデータ内容A,Bを含むが、互いに重複しないデータ内容C,Zを含むため、不一致である。また、オブジェクトO2とオブジェクトO3は、重複するデータ内容A,Bを含むが、オブジェクトO2はオブジェクトO3が含まないデータ内容Zを含み、オブジェクトO3はオブジェクトO2が含まないデータ内容Y,Xを含むため、不一致である。したがって、第1の方式において、オブジェクトO1〜O3の間で重複排除は実行されない。
第2の方式は、重複排除を行う固定長でオブジェクトを分割し、その固定長単位で重複排除を行う方式である(以下、固定位置による重複排除と呼ぶ)。この第2の方式では、複数のオブジェクトにおける同じ位置に現れる固定長単位の重複は排除できる。しかしながら、挿入などにより同じデータ内容が複数のオブジェクトの異なる位置にある場合にはこの同じデータ内容の重複を排除することはできない。例えば、第2の方式では、前述の1ビットの差異がある部分には重複排除が適用されないが、同じ位置に固定長単位で同じデータ内容があれば、この同じ位置で同じデータ内容の重複排除が行われる。図5の第2の方式では、オブジェクトO1とオブジェクトO2との間で、データ内容Aとデータ内容Bとは、位置と値が一致するため重複排除可能である。オブジェクトO2とオブジェクトO3との間で、データ内容A,Bは同じ値であるが、位置が異なる。このため、オブジェクトO2とオブジェクトO3との間で、固定長単位でデータ内容は不一致となり、重複排除されない。第2の方式は、第1の方式に対してより多くの重複排除が行える。しかしながら、この第2の方式は、例えばあるファイルの先頭に1バイトのデータが挿入された場合に、重複排除されない。
第3の方式は、重複部分の検出位置を固定せず、自由位置で重複排除を行う方式である。(以下、自由位置による重複排除と呼ぶ)。この第3の方式では、たとえオブジェクトにおける位置が異なっていても固定長単位でデータ内容が同じであれば重複する部分を排除できる。図5の第3の方式では、オブジェクトO1とオブジェクトO2との間で、データ内容A及びデータ内容Bの重複排除が可能である。オブジェクトO2とオブジェクトO3との間で、位置が異なるが一致するデータ内容A,Bの重複排除が可能である。第3の方式では、例えば前述のように1バイトのデータが挿入された場合でも、その1バイトのデータのみが重複排除の対象にならず、残りの部分は重複排除の対象となり、高い重複排除効果が得られる。
第3の方式では、オブジェクト間で一致か否かを判断する単位である固定長にも依存するが、ファイル全体に対する重複排除である第1の方式と比較して15%から20%程度のデータ量を削減可能である。
本実施形態に係る情報処理システム1では、オブジェクト単位で重複排除を行う第1の方式、固定長で同じデータ内容がオブジェクトにおける同じ位置に配置されている場合に重複排除を行う第2の方式、オブジェクトにおける位置が同じであっても異なる場合であっても固定長で同じデータ内容を重複排除する第3の方式を併用可能である。
なお、以下では重複を排除するために一致か否かを判断する固定長(重複排除単位)をストライド長と呼ぶ。図5において、データ内容A,B,C,Zのバイト長は、ストライド長である。
図6は、通常のハッシュ計算とローリングハッシュ計算との比較結果を例示する図である。
本実施形態において、例えば、フィンガープリントの計算には、ローリングハッシュと呼ばれる方法を用いる。ローリングハッシュは、通常のハッシュ計算と比べて、計算量を低減することができる。しかしながら、ローリングハッシュに代えて、データ内容が一致しているか否か判断可能な他の方法を用いてもよい。
通常のハッシュ関数Hで固定位置の重複排除を行う場合は、ストライド毎のフィンガープリントを計算すればよく、例えばハッシュ関数Hにストライドの文字列を引数として渡し、計算させる。この場合の計算量は、文字列の長さをn(nは整数)とすると、O(n)である。
しかしながら、通常のハッシュ関数Hで自由位置の重複排除を行う際には、重複排除を行う文字列の箇所を、例えば1バイト(1文字)ずつずらしながら探索を行うため、文字列長nの全ての位置でハッシュ関数Hにより計算を行うと、計算量はO(n)となる。
これに対し、ローリングハッシュ関数Ruは、ある長さLについてのハッシュ値(フィンガープリント)に対して、例えば1バイト付加した値及び1バイト削除した値を計算することができる関数である。このローリングハッシュ関数Ruを用いることにより、最初の文字列のハッシュ値の計算より後の1回あたりのハッシュ値の計算量をO(1)に低減することができる。
図6では、例えば、文字列長nの文字列「ABCDEFGH…」に対し、L=5の文字列のフィンガープリントを計算する場合を例示する。
図6において、Stを内部状態、Ctをハッシュ値とする(tは整数)。通常のハッシュ関数H、ローリングハッシュ関数Ruは、それぞれハッシュ計算結果として、(St,Ct)の組み合わせを出力する。
通常のハッシュ関数Hを用いる場合、最初の文字列「ABCDE」に対する計算量はO(n)である。1文字ずらして得られる全ての文字列の組み合わせで同じ計算量、すなわちO(n)が必要であることから、全体で近似的にO(n)の計算量が必要となる。
これに対し、ローリングハッシュ関数Ruを用いる場合は、最初の文字列「ABCDE」に対しては、通常のハッシュ関数Hを用いるため、計算量はO(n)である。しかしながら、次の文字列「BCDEF」に対しては、ローリングハッシュ関数Ruに対して、最初の計算で得られた内部状態S0と、最初の文字列に対しAを除く旨の引数(-”A”)、及びFを追加する旨の引数(+”F”)を与えることにより、計算O(1)で計算可能である。残りの文字列に対しても同様にO(1)の計算量となるため、全体では近似的にO(n)となり、ハッシュ関数Hのみを用いた場合に比べ、計算量を大幅に低減することができる。
なお、上記で示した全体での計算量は、文字列の長さnが文字列Lの長さに対して十分に長い場合の収束値である。
以下、図7及び図8を用いて、具体的にフラグメントの保存処理を説明する。
図7は、フラグメント保存処理を例示するフローチャートである。
図8は、フラグメント保存処理を例示する概念図である。図8に付した番号は、図7の各ステップに付した番号と対応する。
まず、保存する各オブジェクトには、ユーザU又は端末11のアプリケーションが識別子を与える。これをオブジェクトIDと呼ぶ。オブジェクトIDは、例えば従来のファイルシステムにおけるファイル名の役割を持つ。
ステップS701において、フロントエンドサーバ2は、ユーザUの端末11又は端末11のアプリケーションからオブジェクトOBの保存要求を受けると、送受信部22を経由して、オブジェクト記憶部211にオブジェクトOBを格納する。
なお、送受信部22を経由して受信したオブジェクトOBが直接メモリ24に格納される場合は、オブジェクトOBはオブジェクト記憶部211に保存されなくてもよい。
ステップS702において、オブジェクト分割部201は、オブジェクトOBをメモリ24に読み出し、ストライドSTに分割する。この際、オブジェクトOBのサイズがストライドSTのサイズの整数倍でない場合は、オブジェクトOBに対しストライドSTの整数倍と等しいサイズまでパディングする。図8(S702)の例では、オブジェクト分割部201は、オブジェクトOBのサイズがストライドのサイズの3倍となるようにパディングが行われ、ストライドA,B,Cに分割される。
ステップS703において、消失符号計算部202は、各ストライドA,B,Cに対して消失符号による符号化を行い、情報シンボル部ISとパリティシンボル部PSに含まれるそれぞれのフラグメントを生成する。図8(S703)の例では、消失符号のパラメータはk=4、m=2であるとする。消失符号計算部202がストライドAに対して符号化を行った結果、情報シンボル部ISとして4つのフラグメントA1,A2,A3,A4、パリティシンボル部PSとして2つのフラグメントA5,A6が生成される。ストライドB及びCについても、情報シンボル部ISとして4つのフラグメントが生成され、パリティシンボル部PSとして2つのフラグメントが生成される。
ステップS704において、フィンガープリント計算部203は、各ストライドA,B,Cに対してローリングハッシュを用いてフィンガープリントを計算する。計算されたフィンガープリントは、フィンガープリントセット212に格納される。図8(S704)の例では、フロントエンドサーバ2が各ストライドA,B,Cに対してローリングハッシュを用いてフィンガープリントを計算した結果、それぞれフィンガープリントFP_A,FP_B,FP_Cが生成される。
ステップS705において、制御部25は、各ストライドA,B,Cに対するフィンガープリントFP_A,FP_B,FP_Cを用いてディスク選択インデックスファイル213を参照し、各フラグメントの保存先のフラグメントサーバ3を決定する。各ストライドA,B,Cに対するフィンガープリントFP_A,FP_B,FP_Cにより保存先のフラグメントサーバ3が決まるため、同一の内容を持つストライドSTは必ず同一のフラグメントサーバ3に保存される。図8(S705)の例では、FP_Aの値よりディスクセットID=2が決定され、図4に示されるディスク選択インデックスファイル213を参照することにより、ストライドAに属するフラグメントの保存先の配列が[6,1,0,9,3,7]と決定される。配列[6,1,0,9,3,7]のそれぞれの要素は、フラグメントA1〜A6に対応する保存先のフラグメントサーバ3の番号を示す。ストライドB及びCについても同様にフラグメントの保存先が決定される。
ステップS706において、制御部25は、送受信部22を通じて、各フラグメントを保存先のフラグメントサーバ3に送信する。図8(S706)の例において、ステップS705で参照されたディスク選択インデックスファイル213の内容に沿って、各フラグメントがフラグメントサーバ3へ保存される。例えば、ストライドAに属するフラグメントA1〜A6であれば、フラグメントA1がフラグメントサーバK6に、フラグメントA2がフラグメントサーバK1に、フラグメントA3がフラグメントサーバK0に、フラグメントA4がフラグメントサーバK9に、フラグメントA5がフラグメントサーバK3に、フラグメントA6がフラグメントサーバK7に保存される。ストライドB及びCについても同様に各フラグメントが保存先のフラグメントサーバ3へ保存される。
なお、各フラグメントを保存する際、各フラグメントと共にメタデータを保存する。本実施形態では、メタデータの一例として、保存対象のフラグメントを先頭とする1ストライド分のフィンガープリントと、ローリングハッシュを用いて計算した際に得られる内部状態とを保存する(これを、ロールサム状態(roll sum state)とする)。また、重複排除処理が行われたかどうかを示すフラグを保存する(これを、参照カウンタ値とする)。例えば、参照カウンタ値の初期値は1であり、重複排除のために参照されるたびに数値が増加してもよい。メタデータの詳細については表1乃至表5にて後述する。
以下表1乃至表5を用いて、各フラグメントに付すメタデータについて説明する。
表1は、本実施形態で用いるメタデータを例示する表である。
Figure 2017097437
フラグメントをフラグメントサーバ3へ保存する際、オブジェクトOB全体の構成情報及び各ストライドSTの構成情報など、様々な付随情報が必要となる。この付随情報をメタデータと呼ぶ。メタデータは、オブジェクトOBの保存時にフラグメントサーバ3に保存される。
なお、表1で例示する各メタデータは、例えばキー・バリュー構成をとる。キー・バリュー構成とは、データがキー情報と値の組み合わせで保存されており、キー情報を指定することで値を読み出せる構成である。
各メタデータ値には、メタデータを参照するためのキー情報が与えられるが、異なるメタデータ値に対して同一のキーが使用される場合がある。そのため、各メタデータにはキー・プレフィックスが割り当てられ、保存時の実キーにはこのキー・プレフィックスとキー情報を結合した値が使用される。
表1中の「複製可能?」欄はそのメタデータが複製されて保存されるか否かを示している。フラグメントそのものに関するメタデータは複製されず、他のメタデータについては複製される。
各キー及びメタデータの概要は以下のとおりである。
本実施形態において、オブジェクトOBには、オブジェクトIDに加えて、内部の識別子が与えられる。この内容の識別子をカウンタと呼ぶ。例えば、カウンタは、符号なし64ビットの単調増加する値とする。本実施形態において、カウンタは、例えば、第1の情報、第2の情報、フロントエンドサーバIDを含む。
第1の情報は、対応するオブジェクトOBが内部的に割り当てられた際の第1の時刻における秒の部分を示す。
第2の情報は、第1の時刻と第2の時刻との差をマイクロ秒で表した時刻の値を所定の値(例えば25)で割った値である。
フロントエンドサーバIDは、各フロントエンドサーバ2に割り当てられる固有の識別子である。カウンタにこのフロントエンドサーバIDが含まれることで、例えば同一の時刻に異なるフロントエンドサーバ2でカウンタが割り当てられたとしても、このカウンタの値は異なることが保証される。
また、ユーザU又は端末11のアプリケーションが異なるオブジェクトに同じオブジェクトIDを与えて保存する場合であっても、カウンタの値は異なることが保証される。
本実施形態において、各フロントエンドサーバ2で管理されている時刻は、同期されていると仮定する。この場合、カウンタを比較することで、複数のオブジェクトOB又はオブジェクトOBに関連する複数のメタデータのいずれが新しいかを比較することが可能である。
オブジェクト・メタ・カウンタは、キー情報に使用されているオブジェクトIDを持つオブジェクトのカウンタのリストであり、最大のカウンタが最新のオブジェクトとなる。オブジェクト・メタデータは、オブジェクトのメタデータの集合であり、一例を後述の表2に示す。ストライド・メタデータは、各ストライドに関するメタデータの集合であり、一例を後述の表3に示す。ストライドIDは、そのオブジェクトで何番目のストライドかを示す番号である。フラグメント・メタデータは、各フラグメントに関するメタデータであり、一例を後述の表4に示す。フラグメント位置情報は、フラグメントの位置によりフラグメントの実体を特定するためのメタデータであり、カウンタ、外部ストライドID(後述)、フラグメントIDにより定まる。参照カウント値は、フラグメント参照数であり、重複排除されている場合には2以上の値を持つ。誤り訂正符号は、例えばCyclic Redundancy Check(CRC)などの誤り検出に用いられる符号である。ピボットは、ドライブ側で探索された想定重複位置であり、内部ストライドID、オフセット、ピボット長の3つの組で表現される。ピボットの詳細については、後述する。
同じ誤り訂正符号を持つフラグメントIDの集合は、比較前(NC:not compared)の集合と比較後(CC:compared)の集合の2種類の集合に分類されて保存される。フロントエンドサーバ2による保存時には比較前の集合として保存される。
表2は、オブジェクト・メタデータの内容を例示する表である。
Figure 2017097437
表3は、ストライド・メタデータの内容を例示する表である。
Figure 2017097437
表4は、フラグメント・メタデータの内容を例示する表である。
Figure 2017097437
また、各メタデータの保存先については、メタデータが複製される場合にはディスクセットIDを求める必要があり、メタデータが複製されない場合にはディスクIDを求める必要がある。
表5は、メタデータとメタデータの保存先との関係を例示する表である。
Figure 2017097437
表5のHR(x)は、ハッシュ関数H(引数x)で求まる値を、ディスク選択インデックスファイル213の列数で割った余り値である。ディスクセットIDが得られる場合には、そのディスクセットの先頭からフラグメントID番目のディスクIDに対応するフラグメントサーバ3にメタデータが保存される。
メタデータ間の関係を明らかにするために、ユーザUの使用する端末11がオブジェクトを読み出す際の手順を例に各メタデータの関係について述べる。
図9は、オブジェクトID=o1であるオブジェクトの読み出し手順を例示するフローチャートである。
ステップS901において、フロントエンドサーバ2は、オブジェクトIDであるo1をキー情報として、フラグメントサーバ3に保存されているオブジェクトカウンタを読み出す。オブジェクトカウンタの保存先のディスクセットIDは、ハッシュ関数HR(引数o1)により求められる。
ステップS902において、フロントエンドサーバ2は、得られたオブジェクトカウンタから、最大のカウンタを求め(この値をc1とする)、c1をキーとしてオブジェクト・メタデータを読み出す。オブジェクト・メタデータの保存先のディスクセットIDは、ハッシュ関数HR(引数c1)により求められる。
ステップS903において、フロントエンドサーバ2は、得られたオブジェクト・メタデータに含まれるルートストライドディスクセットID(最初のストライド・メタデータが保存されているディスクセットID、表2参照)を得て、カウンタc1をキーとしてストライド・メタデータを読み出す。
次に、フロントエンドサーバ2は、ストライド内のフラグメントを読み出す。
ステップS904において、フロントエンドサーバ2は、ストライド・メタデータと同一のディスクセットIDを用いて、例えばi番目のフラグメント・メタデータを得る。
ステップS905において、フロントエンドサーバ2は、フラグメント・メタデータに含むまれるフラグメントID(表4参照)を得て、フラグメント・メタデータと同一のディスクIDからフラグメント位置情報を読み出す。そして、フロントエンドサーバ2は、フラグメント位置情報に基づいて、フラグメントの内容を読み出す。
ステップS906において、フロントエンドサーバ2は、すべてのフラグメントを読み出した後、ストライド・メタデータに含まれる次ストライドディスクセットID(次のストライドが含まれるディスクセットID、表3参照)を得て、次のストライド・メタデータを読み出す。
ステップS907において、フロントエンドサーバ2は、次のストライドが存在する場合は、ステップS904に戻り、フラグメントの読み出し処理を繰り返す。最後のストライドを読み出した場合、フロントエンドサーバ2は、オブジェクトの読み出し処理を終了する。
図10は、重複するフラグメントの排除処理の具体例を示す図である。
前述のように、フロントエンドサーバ2は、同じストライドに対して同じフィンガープリントを計算し、同じストライドから分割されたフラグメントを同じフラグメントサーバ3に保存する。また、同一の誤り訂正符号を持つフラグメントは同一の内容を持つフラグメントである可能性が高い。フラグメントサーバ3は、定期的にNC(重複排除のための比較前のフラグメントIDの集合、表1参照)に含まれる同じ誤り訂正符号を持つフラグメントを比較し、同じ誤り訂正符号を持つフラグメントが同一の内容であれば重複排除を行う。フラグメントサーバ3は、同じ誤り訂正符号を持つフラグメントが同一の内容でなければ、比較されたフラグメントのフラグメントIDをNCからCC(重複排除のための比較後のフラグメントIDの集合、表1参照)へと移動する。
重複排除処理を行う場合、重複排除処理部301は、次の第1乃至第4の重複排除処理を実行する。なお、重複排除で残すフラグメントをfrag_o、重複排除で削除するフラグメントをfrag_nと表記する。
第1の処理は、フラグメント・メタデータ内のフラグメントfrag_nのフラグメントIDを、フラグメントfrag_oのフラグメントIDに変更する処理である。
第2の処理は、フラグメントfrag_oの参照カウント値をインクリメントする処理である。
第3の処理は、同一の誤り訂正符号を持つフラグメントIDの比較前の集合から、フラグメントfrag_nのフラグメントIDを削除する処理である。
第4の処理は、フラグメントfrag_nを削除する処理である。
メタデータ1001は、重複排除処理前のフラグメントfrag_oのメタデータである。メタデータ1001におけるフラグメントfrag_oのオブジェクトIDをoid_o、ストライドIDをsi_o、フラグメントIDをfid_oとする。
メタデータ1002は、重複排除処理前のフラグメントfrag_nのメタデータである。メタデータ1002におけるフラグメントfrag_nのオブジェクトIDをoid_n、ストライドIDをsi_n、フラグメントIDをfid_nとする。
フロントエンドサーバ2によって保存される時点で、フラグメントfrag_nとフラグメントfrag_oが同一だったと仮定する。この場合、フラグメントfrag_oの誤り訂正符号crc_oとフラグメントfrag_nの誤り訂正符号crc_nは同一の値となる。従って、重複排除処理部301は、(CC,crc_o)をキーとして参照されるフラグメントIDfid_oと、(NC,crc_o)をキーとして参照されるフラグメントIDfid_nとを比較対象として決定する。
次に、重複排除処理部301は、(BK,fid_o)、(BK,fid_n)を参照することで、フラグメントIDfid_o,fid_nそれぞれが示すフラグメントの実体として、フラグメントfrag_o,frag_nを取得し、重複排除処理を実行する。
メタデータ1003は重複排除処理後のfrag_oのメタデータである。メタデータ1004は、重複排除処理後のfrag_nのメタデータである。重複排除処理部301は、メタデータ1004において、フラグメントfrag_oとフラグメントfrag_nとが一致するため、フラグメントfrag_nを削除し、frag_nのフラグメント・メタデータにおいて、フラグメントIDfid_nをフラグメントIDfid_oに代える。すなわち、重複排除処理部301は、フラグメントfrag_nの実体を指し示す先をフラグメントfrag_oへ変更する。
また、重複排除処理部301は、メタデータ1003において、フラグメントfid_oの参照カウント値を2に変更し、メタデータ1003に重複排除が行われたことを記録する。
上述の処理によって、固定位置での重複排除を実現することができる。続いて、自由位置での重複排除の方法について述べる。
図11は、フィンガープリントセットを例示する図である。
フロントエンドサーバ2は、ストライドSTの最初のフラグメントを1/2ずつに分割して得られる前半部分のフィンガープリント及び後半部分のフィンガープリントを計算する。フロントエンドサーバ2は、最初のフラグメントに含まれる前半部分及び後半部分の2種類のフィンガープリントと、ストライドSTのフィンガープリントを保存する。この集合をフィンガープリントセットと呼ぶ。
図11の例では、ストライドAについてフロントエンドサーバ2が保持するフィンガープリントセット212には、フラグメントA1の前半部分のフィンガープリントFP_a1、フラグメントA1の後半部分のフィンガープリントFP_a2、ストライドA全体のフィンガープリントFP_Aが含まれる。なお、ストライドB及びストライドCについても同様である。以下では、フラグメント長の半分の長さのフィンガープリントを、1/2フィンガープリントと呼ぶ。
図12は、フロントエンドサーバ2におけるフィンガープリントセットの保存形式と探索方法を例示する図である。
フロントエンドサーバ2は、フィンガープリントセット212の保存量が一定量に達した場合、フィンガープリントセット212をフラグメントサーバ3へ送信する。フラグメントサーバ3は、受信したフィンガープリントセット212を、記憶部31に保存する。フィンガープリントセット212及びフィンガープリントセット311の内容は、例えばブルームフィルタ(bloom filter)を用いることにより圧縮して保存されてもよい。ブルームフィルタが用いられる場合、フィンガープリントセットの内容は、1つのブルームフィルタにまとめられて保存される。
ブルームフィルタは、ビット配列で表される確率的データ構造であり、要素が集合のメンバーに含まれるか否かを判定する際に有用である。例えば、文字列検索にブルームフィルタを適用する場合では、ある文字列Vがあらかじめ定められた文字列の集合Wに含まれる場合は真を返し、文字列Vが集合Wに含まれない場合は偽を返す。
ブルームフィルタの具体的な計算方法は、まず複数の文字列の集合Wの全要素を、任意に定められたハッシュ関数を用いて1つのビット配列に変換する。次に、比較対象の文字列Vに対しても同じようにハッシュ関数を適用し、ビット配列を得る。そして、得られた文字列Vのビット配列と集合Wのビット配列とをビット単位で比較することにより、文字列の集合Wに比較対象の文字列Vが含まれるかどうかを判定する。具体的には、文字列Vのビット配列が1である位置に対応する集合Wのビット配列中に1つでも0が存在する場合は、文字列Vは文字列Wに含まれていないと判定される。
本実施形態において、フィンガープリント計算部203は、図11に示した各フィンガープリント値を計算する。各フィンガープリント値は、フィンガープリントの種類に応じて任意に決められた固定値を連結した値で、各ハッシュ値を計算することで得られる。得られたブルームフィルタには、カウンタが割り当てられ、ブルームフィルタはカウンタをキー情報として保存される(表1のFSに該当する)。
また、フィンガープリントセットFPSの探索を容易にするために、フィンガープリントセットFPSに使用されたカウンタの集合を保存できるフィンガープリントセットリストFPSLが生成される。フィンガープリントセットリストFPSLの生成時には、カウンタが割り当てられ、カウンタをキー情報としてフィンガープリントセットリストFPSLが保存される(表1のFLに該当する)。フィンガープリントセットリストFPSLのカウンタが一定値以上となった場合には、新しいフィンガープリントセットリストが生成される。
さらに、フィンガープリントセットリストFPSLで使用されているカウンタの集合を保持するために、フィンガープリントセットリストヘッドFPSLHが生成される。フィンガープリントセットリストヘッドFPSLHのキー情報は固定値として、システム全体で共有される。
図12に示すとおり、フィンガープリントセットリストFPSL及びフィンガープリントセットFPSの保存先のディスクセットIDは、例えばカウンタを引数としてハッシュ関数HRで求める。また、フィンガープリントセットリストヘッドFPSLHの保存先のディスクセットIDは、システム全体で共有される固定値である。
フィンガープリントセットFPSを探索するには、まずフィンガープリントセットリストヘッドFPSLHを読み出し、フィンガープリントセットリストFPSLのカウンタのリストを得る。このカウンタから、フィンガープリントセットリストFPSLを読み出し、フィンガープリントセットFPSのカウンタのリストを得る。そしてこのカウンタから、フィンガープリントセットFPSを順に得ることができる。
また、各フィンガープリントセットFPSにはカウンタが与えられているため、本実施形態では、複数のフィンガープリントセットFPSの間での生成順序をカウンタの値から判定することが可能である。
以下、自由位置での重複排除処理の処理内容について述べる。
自由位置での重複排除処理において、重複排除処理部301は、次の第1乃至第6の処理を実行する。
第1の処理は、保存される第1のデータにおける第1の部分について、第1の部分的ハッシュ値を予め計算する処理である。また、第1のデータにおける第1の部分から始まる重複検出範囲に対応する第1のハッシュ値を予め計算する処理である。
第2の処理は、第1のデータの後に記憶される第2のデータの第2の部分について、第2の部分的ハッシュ値を計算する処理である。
第3の処理は、第1の部分的ハッシュ値と第2の部分的ハッシュ値とが一致するか判断する処理である。
第4の処理は、第3の処理で第1の部分的ハッシュ値と第2の部分的ハッシュ値とが一致する場合、第1のデータにおける第1の部分から始まる重複検出範囲に対応する第1のハッシュ値を読み出すとともに、第2のデータにおける第2の部分から始まる重複検出範囲に対応する第2のハッシュ値を計算する処理である。
第5の処理は、第1のハッシュ値と第2のハッシュ値とが一致するか判断する処理である。
第6の処理は、第5の処理において第1のハッシュ値と第2のハッシュ値とが一致する場合、第2のデータにおける第2の部分から始まる重複検出範囲が、第1のデータにおける第1の部分から始まる重検出範囲と重複するため、重複を排除した状態でデータの保存を行うための処理である。
以下、図13乃至図19を用いて、より具体的に自由位置での重複排除処理を説明する。
図13は、自由位置での重複排除処理を例示するフローチャートである。
ステップS1301において、フロントエンドサーバ2は、フラグメントサーバ3に対し、フィンガープリントセット212を送信する。送信のタイミングは任意でよく、例えばフィンガープリントセット212のサイズが一定量に達した場合に送信するとしてもよい。また、すべてのフラグメントサーバ3に対し、同じフィンガープリントセットを送信するとしてもよい。
ステップS1302において、フラグメントサーバ3は、フロントエンドサーバ2よりフィンガープリントセットを受信し、記憶部31に保存する。
ステップS1303において、フラグメントサーバ3の重複排除処理部301は、記憶部31に保存したフィンガープリントセット311の内容を読み込み、一時的に保存する。
重複排除処理部301は、フラグメント記憶部312に保存されたフラグメントの先頭からフラグメントの1/2の長さで1バイトずつずらしながら、1/2フィンガープリントを計算する。1/2フィンガープリントの計算には、図6で示したローリングハッシュを適用してもよい。なお、フロントエンドサーバ2が複数存在する場合は、フラグメント記憶部312に保存されたフラグメントは、どのフロントエンドサーバ2から受信したものであってもよい。
ステップS1304において、重複排除処理部301は、ステップS1303において計算されたフィンガープリントと、読み込んだフィンガープリントセットに保存されているフラグメントの前半又は後半部分の1/2フィンガープリントとを比較する。すなわち重複排除処理部301は、第1の重複探索を行う。読み込むフィンガープリントセットは複数でもよい。
1/2フィンガープリントが一致しない場合、処理はステップS1304に戻り、1/2フィンガープリントが一致するまで、順次1バイトずつずらしながら1/2フィンガープリントの計算と比較とが行われる。
1/2フィンガープリントが一致する場合、ステップS1305において、重複排除処理部301は、1/2フィンガープリントの一致位置から1ストライド分のフラグメントのうち、先頭のフラグメントと最後のフラグメントを自機の又は他のフラグメントサーバから読み出し、一致した位置から1ストライド分のフィンガープリントを計算する。フラグメントの読み出し処理の詳細については、図14で後述する。
1ストライド分のフィンガープリントの計算には、例えば図6で示したローリングハッシュを適用してもよい。ローリングハッシュでは、あるフラグメントの先頭よりnバイトずれた位置から1ストライド分のフィンガープリントを計算する場合、そのフラグメントを先頭とした1ストライド分のローリングハッシュ計算の内部状態と、計算対象となるストライドの先頭と最後を含む2つのフラグメントの内容が分かればよく、その間のフラグメントは計算には不要である。具体的には、重複排除処理部301は、フラグメント・メタデータとして保存されているロールサム状態を初期値とし、図6に示したように1バイトずらしてフィンガープリントを計算する。これをn回繰り返すことにより、フラグメントの先頭からnバイト離れた1ストライド分のフィンガープリントを計算できる。1バイトずつずらす際に、除く1バイトと加える1バイトは、前述の先頭と最後を含む2つのフラグメントより知ることができる。
ステップS1306において、重複排除処理部301は、ステップS1305において計算された1ストライドのフィンガープリントと、読み込んだフィンガープリントセットに保存されている1ストライドのフィンガープリントとを比較する。すなわち重複排除処理部301は、第2の重複探索を行う。
ストライド単位でのフィンガープリントが一致した場合、一致した場所をピボットと呼ぶ。ピボットは、前述のとおり、内部ストライドID、オフセット、ピボット長を含む値で表される。オフセットはその一致位置がそのストライドの何バイト目かを表している。ピボット長は、ピボットが連続している場合の長さを示している。内部ストライドIDは、ピボットでオブジェクトを再分割した際に、何番目のストライドに属するかを示す番号である。内部ストライドについての詳細は、後述する。
ステップS1307において、重複排除処理部301は、得られたピボットを重複位置情報313へ保存する。
ストライド単位でのフィンガープリントが一致しない場合、処理はステップS1304に戻る。
ステップS1308において、フラグメントサーバ3は、重複位置情報313に保存されたピボットが一定量になっているものについて、フロントエンドサーバ2へと送信する。送信のタイミングは、例えばピボットを重複位置情報313に保存するタイミングであってもよい。
ステップS1309において、フロントエンドサーバ2は、ピボットのリストを受信すると、ピボット位置が開始ストライドの先頭となるようにストライドを再配置する。再配置処理の詳細は、図18及び図19で後述する。
図14は、フラグメントの第1の読み出し処理を例示する図である。
図15は、フラグメントの第2の読み出し処理を例示する図である。
前述のように、重複排除処理部301で計算した1/2フィンガープリントと、フィンガープリントセットに保存されている1/2フィンガープリントが一致した場合、重複排除処理部301は、一致位置から1ストライド分のフラグメントのうち先頭と最後のフラグメントを読み出し、読み出された先頭と最後のフラグメントに基づいて一致位置から1ストライド分のフィンガープリントを計算する。そして、重複排除処理部301は、計算結果とフィンガープリントセットに保存されている1ストライドのフィンガープリントとを比較する。
ここで、フィンガープリントセットに保存されている1/2フィンガープリントのうち、フラグメントの前半部分の1/2フィンガープリントと一致したか、フラグメントの後半部分の1/2フィンガープリントと一致したかによって、1ストライド分のフィンガープリントを計算する際に読み出すフラグメントが異なる場合がある。
図14は、前半部分の1/2フィンガープリントと一致した場合の読み出し処理を例示する。図14の上段はフラグメントサーバ3に保存されているフラグメントを表し、図14の下段はフィンガープリントセットに保存されているフィンガープリント(図11に対応)を表す。
図14では、重複排除処理部301によって探索中の1/2フラグメント1401のフィンガープリントとFP_a1(フラグメントA1の前半部分の1/2フィンガープリント)が一致する。従って、重複排除処理部301は、次にFP_A(ストライドAのフィンガープリント)との一致を調べるため、フラグメントA1の先頭に相当する位置から1ストライド分のフィンガープリントを計算する。この際、フラグメントA1の先頭に相当する位置から1ストライド長のストライドの先頭を含むフラグメント(又は部分)と最後を含むフラグメント(又は部分)があればよい。ストライドの先頭を含むフラグメントについては、すでに重複排除処理部301の計算対象となっている1/2フラグメント1401の先頭と同じであるため、フラグメントの読み込みは不要である。従って、重複排除処理部301は、ストライドの最後を含むフラグメント1402を他のフラグメントサーバより読み出す。
一方、図15では、重複排除処理部301によって探索中の1/2フラグメント1403のフィンガープリントとFP_a2(フラグメントA1の後半部分の1/2フィンガープリント)が一致する。従って、重複排除処理部301は、次にFP_A(ストライドAのフィンガープリント)との一致を調べるため、フラグメントA1の先頭に相当する位置から1ストライド分のフィンガープリントを計算する。この際、フラグメントA1の先頭に相当する位置から1ストライド長のストライドの先頭を含むフラグメント(又は部分)と最後を含むフラグメント(又は部分)があればよい。従って、重複排除処理部301は、ストライドの先頭を含むフラグメント1404及びストライドの最後を含むフラグメント1405を他のフラグメントサーバより読み出す。
図16は、自由位置での重複排除処理の第1の例を示す図である。
図17は、自由位置での重複排除処理の第2の例を示す図である。この図17は、図16における重複の検出をより理解しやすく表現している。
図16及び図17に付した番号は、図13の各ステップに付した番号と対応する。
図16及び図17の例では、フロントエンドサーバP1が、フラグメントサーバK1へ、フィンガープリントセット212を送信する。フラグメントサーバK1は、受信されたフィンガープリントセット212を、フィンガープリントセット311として記憶部31に保存する。
フラグメントサーバK1では、フラグメントA3が探索の対象となっているとする。フラグメントサーバK1の重複排除処理部301は、フラグメントA3に対して先頭から1/2フラグメント長のローリングハッシュを順に計算し、保持しているフィンガープリントセット311の前半又は後半部分のフラグメントのフィンガープリントと比較する。
フラグメントサーバK1の重複排除処理部301は、フラグメントA3の先頭からnバイト進んだところで同一の1/2フィンガープリントを発見した場合、1ストライド後のフラグメントであるフラグメントB3を他のフラグメントサーバK0から読み込む。
フラグメントサーバK1の重複排除処理部301は、フラグメントB3とフラグメントA3のフラグメント・メタデータに保存されているロールサム状態を使用してフラグメントA3の先頭からnバイト進んだ地点から始まる1ストライドのフィンガープリントを計算し、計算された1ストライドのフィンガープリントとフィンガープリントセット311のストライドフィンガープリントとを比較する。
ストライドフィンガープリント中に、計算された1ストライドのフィンガープリントと一致する部分がある場合、フラグメントサーバK1の重複排除処理部301は、このピボット位置を追加する。なお、ピボット位置は、具体的には、ストライドの先頭であるフラグメントA1からのバイト数であってもよい。
フラグメントサーバK1の重複排除処理部301は、ピボット位置を重複位置情報313へ保存する。その後フラグメントサーバK1は、再配置するオブジェクトを特定するカウンタ値及び重複位置情報313をフロントエンドサーバP1へ送信する。
図18は、フロントエンドサーバ2によるオブジェクトの再配置の第1の例を示す図である。
フロントエンドサーバ2は、フラグメントサーバ3より再配置するオブジェクトを特定するカウンタ値及び重複位置情報313を受信すると、カウンタ値からディスク選択インデックスファイル213を参照し、ピボットを保存するフラグメントサーバ3を特定する。さらに、フロントエンドサーバ2は、ストライドの再配置のため対象のオブジェクトを読み出す。この際、フロントエンドサーバ2は、フラグメントごとにすでに重複排除済であるかどうかを示す参照カウント値も読み出す。参照カウント値は、初期状態すなわち重複排除が行われていない状態では1であり、重複排除のための参照が行われる毎に1ずつ増加するものとする。
フロントエンドサーバ2は、読み出したオブジェクトを各ピボットに合わせてストライドへと分割する。この時生成されるストライドは内部ストライドと呼ばれ、実際の保存単位のストライドは外部ストライドと呼ばれる。外部ストライドの長さは必ずストライド長、すなわちフラグメント長の整数倍に等しいが、内部ストライドはストライド長よりも短くてよい。また、内部ストライドに対して順に与えられる番号を、内部ストライドIDと呼ぶ。ただし、内部ストライドは、すでに重複排除されているフラグメント(参照カウント値が2以上)については移動させないように生成される。
図18の例では、フラグメントA3の途中にピボットがあると仮定する。まず、状態(1−1)では、すべてのフラグメントがまだ重複排除の対称となっていない、すなわち参照カウント値が1である。フラグメントA3のピボット位置から1ストライド分、すなわちフラグメントB3の途中までに重複部分が存在する可能性がある場合、状態(1−2)で示すように、ピボットの位置にストライドの境界が作られるように内部ストライドis1〜is4が生成される。
また、複数の内部ストライドが、ストライド長よりある程度短い場合には、これらをまとめて一つの外部ストライドとすることができる。このようなストライドを集合ストライドと呼ぶ。状態(1−3)では、内部ストライドis1と内部ストライドis4とを含む集合ストライドが例示されている。状態(1−3)における集合ストライドでは、フラグメントC4がパディングされている。集合ストライドでは、内部ストライドを組み合わせた後の残りのサイズに、さらに他の内部ストライドを挿入できるか、評価される。なお、内部ストライドis1、内部ストライドis4、及び集合ストライドに内部ストライドis1及び内部ストライドis4をまとめたことにより必要となるヘッダ、のそれぞれの長さの和がストライド長よりも短かった場合には、外部ストライドos1に対してパディングが行われる。
フロントエンドサーバ2は、外部ストライドos1〜os3に対して消失符号を計算し、外部ストライドos1〜os3をフラグメント長に分割して保存する。このため、オブジェクトを読み出す際には、外部ストライドos1〜os3が順に読み出される。
ただし、オブジェクトを読み出す際には、外部ストライドos1〜os3に含まれている内部ストライドis1〜is4を、内部ストライドIDの順に並べる必要がある。そのため、集合ストライドを生成するために内部ストライドis1〜is4の位置関係を変更する場合には、内部ストライドis1〜is4の新たな位置が内部ストライドis1〜is4のもとの位置に近いほど、読み出し効率が良くなる。
図19は、フロントエンドサーバ2によるオブジェクトの再配置の第2の例を示す図である。
図19の状態(2−1)では、フラグメントC1〜C4から構成されるストライドに対してすでに重複排除が適用されている。この場合、フラグメントC1〜C4の参照カウント値は2以上となる。パディングは、ピボットの位置にストライドの境界が位置するように行われる。状態(2−2)では、すでに重複が生じているフラグメントC1〜C4を移動することができないため、フラグメントB4の後にパディングデータが挿入されている。
フロントエンドサーバ2は、この再配置されたストライドを保存する。この保存処理は最初にオブジェクトを保存する場合と同様であり、再帰的に各フラグメントサーバ3による重複排除処理が適用される。上記の手順により、自由位置の重複排除を実現することができる。
以上説明した本実施形態に係る情報処理システム1では、各フラグメントサーバ3が重複位置の探索を分担して行う。これにより、データの記憶量が増加しても、フロントエンドサーバ2の負荷が増加しない。そのため、上述の重複排除方式は、記憶容量の増加に対してもパフォーマンスを落とすことなく実行可能である。
本実施形態に係る情報処理システム1は、低価格・大容量・高信頼なストレージの実現を目標としており、以下のような特徴を持つ。
本実施形態に係る情報処理システム1においては、記憶容量の増減はフラグメントサーバの追加又は削除により実現され、フロントエンドサーバ2の台数及び構成などへの依存は存在しない。そのため、ストレージ管理者は記憶容量の増減についてはフラグメントサーバ3の台数のみを管理すればよく、管理が容易である。
本実施形態に係る情報処理システム1においては、システム全体の処理能力はフロントエンドサーバ2の台数に比例して向上する。そのため、例えばストレージ利用者の増加などで性能が不足した場合には、フロントエンドサーバ2を増設するだけでシステム全体の処理能力を向上させることができる。フロントエンドサーバ2はデータの最終的な保存場所ではなく、またフロントエンドサーバ2の台数及び構成は、フラグメントサーバ3の台数及び構成に影響しない。そのため、ストレージ管理者は性能についてはフロントエンドサーバ2の台数のみを管理すればよく、管理が容易である。
本実施形態に係る情報処理システム1においては、固定位置による重複排除及び自由位置による重複排除を行う際、ストライド単位で重複排除を行う。すなわち、重複排除処理後であっても、重複排除処理前と同じく、1つのストライドから生成されたフラグメントは異なるディスクに保存される。その結果、重複排除処理後も消失符号の信頼性が維持されるため、耐障害性が確保される。
本実施形態に係る情報処理システム1においては、フロントエンドサーバ2とフラグメントサーバ3は通常のIPネットワークで接続される。そのため、例えば繁忙期だけはフロントエンドサーバ2を社内クラウド上の仮想マシンなどで一時的に補うといった運用も容易となる。また、フラグメントサーバ3の追加又は削除を行う際には、ディスク選択インデックスファイル213をメンテナンスするだけでよいため、ユーザ所望の容量を得ることも容易である。すなわち、必要に応じてシステム構成の拡張又は縮小を行うことができるため、システム導入時に将来の処理量増加を考慮してあらかじめ大規模なシステムを導入する必要がなくなり、情報処理システムの導入コストを削減することができる。
本実施形態に係る情報処理システム1において、例えば構成要素をフロントエンドサーバ2とフラグメントサーバ3との2種類とすることにより、容易に故障原因を分析することができる。
また、ユーザによって保存されるデータは最終的にフラグメントサーバ3にのみ保存される。すなわち、データを保持する構成要素が1種類に限られるため、障害時の復旧及び分析を容易化することができる。
本実施形態に係る情報処理システム1においては、信頼性の確保のため消失符号を利用する。従って、大規模ストレージに対して用いられるデータを複製することにより信頼性を確保する手法(例えば、RAID(Redundant Arrays of Inexpensive Disks)1など)よりも、データの記憶効率を向上させることができる。
本実施形態においては、例えばハッシュ値の比較によりデータの一致又は不一致を判断している。しかしながら、効率的に処理可能であれば、他の手法によりデータの一致又は不一致を判断してもよい。例えば、ハッシュ値に代えて、データの一致又は不一致を判断するための他の情報を用いてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…情報処理システム、2…フロントエンドサーバ、3…フラグメントサーバ、20,30…コントローラ、21,31…記憶部、22,32…送受信部、23,33…プロセッサ、24,34…メモリ、25,35…制御部、201…オブジェクト分割部、202…消失符号計算部、203…フィンガープリント計算部、211…オブジェクト記憶部、212,311…フィンガープリントセット、213…ディスク選択インデックスファイル、301…重複排除処理部、312…フラグメント記憶部、313…重複位置情報。

Claims (11)

  1. 第1の情報処理装置と複数の第2の情報処理装置とを具備し、
    前記第1の情報処理装置は、
    データに基づいて保存単位サイズの複数の保存データを生成する生成部と、
    前記データに含まれており前記保存単位サイズよりも大きい重複検出サイズの第1の断片データに対応する第1のハッシュ値を計算するとともに、前記第1の断片データに含まれている第1の保存データの少なくとも一部に対応する第2のハッシュ値を計算する計算部と、
    前記第1の保存データと前記第1のハッシュ値と前記第2のハッシュ値とを、前記複数の第2の情報処理装置のうちの保存先装置へ送信する送信部と、
    を具備し、
    前記保存先装置は、
    前記第1の保存データと前記第1のハッシュ値と前記第2のハッシュ値とを受信するとともに、外部の情報処理装置によって保存対象データに基づいて生成された前記保存単位サイズの第2の保存データを受信する受信部と、
    前記第1の保存データの少なくとも一部に対応する前記第2のハッシュ値が、前記受信部によって受信された前記第2の保存データの少なくとも一部に対応する第3のハッシュ値と一致するか否か判断し、前記第2のハッシュ値が前記第3のハッシュ値と一致する場合に、前記第1の断片データに対応する前記第1のハッシュ値が、前記複数の第2の情報処理装置に保存されており前記第2の保存データを含み前記重複検出サイズの第2の断片データに対応する第4のハッシュ値と一致するか判断し、前記第1のハッシュ値が前記第4のハッシュ値と一致する場合に、前記第2の断片データに対する重複を検出する処理部と、
    を具備する、情報処理システム。
  2. 前記処理部は、前記第1のハッシュ値が前記第4のハッシュ値と一致する場合に、前記保護対象データにおける一致位置を示す重複位置情報を、前記外部の情報処理装置へ送信し、
    前記外部の情報処理装置は、前記重複位置情報に基づいて、重複部分が同一の断片データに含まれるように、前記保存対象データに対する複数の新たな断片データを生成し、前記複数の新たな断片データに基づいて複数の新たな保存データを生成し、前記複数の新たな保存データを、前記複数の第2の情報処理装置へ送信し、
    前記受信部は、前記新たな保存データを受信し、
    前記処理部は、前記新たな保存データと前記第1の保存データとが一致する場合に、前記新たな保存データの重複排除を行う、
    請求項1に記載の情報処理システム。
  3. 前記第1の情報処理装置は、
    参照ハッシュ値と前記参照ハッシュ値に対応して決定される保存先識別情報とを関係付けた選択情報を保存する記憶部と、
    前記第1のハッシュ値と前記選択情報とに基づいて、前記複数の保存データのそれぞれの保存先となる第2の情報処理装置を決定する制御部と、
    をさらに具備し、
    前記送信部は、前記複数の保存データのそれぞれを、決定された前記第2の情報処理装置へ送信する、
    請求項1に記載の情報処理システム。
  4. 前記処理部は、前記第2の保存データの少なくとも一部に対応する前記第3のハッシュ値を、前記第2の保存データ内で計算範囲をずらしながら、ローリングハッシュ関数に基づいて計算する、
    請求項1に記載の情報処理システム。
  5. 前記第2のハッシュ値は、前記第1の断片データに含まれている先頭の保存データの前半部分のハッシュ値及び後半部分のハッシュ値を含み、
    前記処理部は、前記前半部分のハッシュ値又は前記後半部分のハッシュ値が、前記第3のハッシュ値と一致する場合に、前記第1のハッシュ値が前記第4のハッシュ値と一致するか判断し、前記第1のハッシュ値が前記第4のハッシュ値と一致する場合に、前記第2の断片データに対する重複を検出する、
    請求項1に記載の情報処理システム。
  6. 前記処理部は、前記第2のハッシュ値が前記第3のハッシュ値と一致する場合に、一致位置から始まる前記重複検出サイズ分の前記第2の断片データに対応する前記第4のハッシュ値を計算し、前記第1のハッシュ値が前記第4のハッシュ値と一致する場合に、前記第2の断片データに対する重複を検出する、
    請求項1に記載の情報処理システム。
  7. 前記生成部は、前記保存対象データを分割した複数の分割データと前記複数の分割データに対応する誤り訂正データとを含む前記複数の保存データ、を生成する、
    請求項1に記載の情報処理システム。
  8. データに基づいて保存単位サイズの複数の保存データを生成する生成部と、
    前記データに含まれており前記保存単位サイズよりも大きい重複検出サイズの第1の断片データに対応する第1のハッシュ値を計算するとともに、前記第1の断片データに含まれている第1の保存データの少なくとも一部に対応する第2のハッシュ値を計算する計算部と、
    前記第1の保存データと前記第1のハッシュ値と前記第2のハッシュ値とを、複数の情報処理装置のうちの保存先装置へ送信する送信部と、
    を具備する情報処理装置。
  9. データに基づいて生成された保存単位サイズの複数の保存データのうちの第1の保存データと、前記データに含まれており前記保存単位サイズよりも大きい重複検出サイズの第1の断片データに対応する第1のハッシュ値と、前記第1の断片データに含まれている第1の保存データの少なくとも一部に対応する第2のハッシュ値とを受信するとともに、外部の情報処理装置によって保存対象データに基づいて生成された前記保存単位サイズの第2の保存データを受信する受信部と、
    前記第1の保存データの少なくとも一部に対応する前記第2のハッシュ値が、前記受信部によって受信された前記第2の保存データの少なくとも一部に対応する第3のハッシュ値と一致するか否か判断し、前記第2のハッシュ値が前記第3のハッシュ値と一致する場合に、前記第1の断片データに対応する前記第1のハッシュ値が、複数の情報処理装置に保存されており前記第2の保存データを含み前記重複検出サイズの第2の断片データに対応する第4のハッシュ値と一致するか判断し、前記第1のハッシュ値が前記第4のハッシュ値と一致する場合に、前記第2の断片データに対する重複を検出する処理部と、
    を具備する情報処理装置。
  10. コンピュータを、
    データに基づいて保存単位サイズの複数の保存データを生成する生成部と、
    前記データに含まれており前記保存単位サイズよりも大きい重複検出サイズの第1の断片データに対応する第1のハッシュ値を計算するとともに、前記第1の断片データに含まれている第1の保存データの少なくとも一部に対応する第2のハッシュ値を計算する計算部と、
    前記第1の保存データと前記第1のハッシュ値と前記第2のハッシュ値とを、複数の情報処理装置のうちの保存先装置へ送信する送信部と、
    して機能させるためのプログラム。
  11. コンピュータを、
    データに基づいて生成された保存単位サイズの複数の保存データのうちの第1の保存データと、前記データに含まれており前記保存単位サイズよりも大きい重複検出サイズの第1の断片データに対応する第1のハッシュ値と、前記第1の断片データに含まれている第1の保存データの少なくとも一部に対応する第2のハッシュ値とを受信するとともに、外部の情報処理装置によって保存対象データに基づいて生成された前記保存単位サイズの第2の保存データを受信する受信部と、
    前記第1の保存データの少なくとも一部に対応する前記第2のハッシュ値が、前記受信部によって受信された前記第2の保存データの少なくとも一部に対応する第3のハッシュ値と一致するか否か判断し、前記第2のハッシュ値が前記第3のハッシュ値と一致する場合に、前記第1の断片データに対応する前記第1のハッシュ値が、複数の情報処理装置に保存されており前記第2の保存データを含み前記重複検出サイズの第2の断片データに対応する第4のハッシュ値と一致するか判断し、前記第1のハッシュ値が前記第4のハッシュ値と一致する場合に、前記第2の断片データに対する重複を検出する処理部と、
    して機能させるためのプログラム。
JP2015225923A 2015-11-18 2015-11-18 情報処理システム、情報処理装置、及びプログラム Expired - Fee Related JP6113816B1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015225923A JP6113816B1 (ja) 2015-11-18 2015-11-18 情報処理システム、情報処理装置、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015225923A JP6113816B1 (ja) 2015-11-18 2015-11-18 情報処理システム、情報処理装置、及びプログラム

Publications (2)

Publication Number Publication Date
JP6113816B1 JP6113816B1 (ja) 2017-04-12
JP2017097437A true JP2017097437A (ja) 2017-06-01

Family

ID=58666671

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015225923A Expired - Fee Related JP6113816B1 (ja) 2015-11-18 2015-11-18 情報処理システム、情報処理装置、及びプログラム

Country Status (1)

Country Link
JP (1) JP6113816B1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018211744A1 (ja) 2017-05-16 2018-11-22 株式会社ブリヂストン 発泡成形体
WO2022044458A1 (ja) * 2020-08-24 2022-03-03 富士フイルム株式会社 情報処理装置、情報処理方法、及び情報処理プログラム

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11347653B2 (en) * 2018-08-31 2022-05-31 Nyriad, Inc. Persistent storage device management

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010512565A (ja) * 2006-12-01 2010-04-22 エヌイーシー ラボラトリーズ アメリカ インク 多数の選択基準を用いるデータ管理方法およびシステム
JP2011065314A (ja) * 2009-09-16 2011-03-31 Hitachi Ltd ファイル管理方法及びストレージシステム
JP2013190891A (ja) * 2012-03-13 2013-09-26 Hitachi Ltd データ転送システム
WO2014184857A1 (ja) * 2013-05-13 2014-11-20 株式会社日立製作所 重複排除システム及びその方法
WO2015097757A1 (ja) * 2013-12-24 2015-07-02 株式会社日立製作所 ストレージシステム及び重複排除制御方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010512565A (ja) * 2006-12-01 2010-04-22 エヌイーシー ラボラトリーズ アメリカ インク 多数の選択基準を用いるデータ管理方法およびシステム
JP2011065314A (ja) * 2009-09-16 2011-03-31 Hitachi Ltd ファイル管理方法及びストレージシステム
JP2013190891A (ja) * 2012-03-13 2013-09-26 Hitachi Ltd データ転送システム
WO2014184857A1 (ja) * 2013-05-13 2014-11-20 株式会社日立製作所 重複排除システム及びその方法
WO2015097757A1 (ja) * 2013-12-24 2015-07-02 株式会社日立製作所 ストレージシステム及び重複排除制御方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018211744A1 (ja) 2017-05-16 2018-11-22 株式会社ブリヂストン 発泡成形体
WO2022044458A1 (ja) * 2020-08-24 2022-03-03 富士フイルム株式会社 情報処理装置、情報処理方法、及び情報処理プログラム

Also Published As

Publication number Publication date
JP6113816B1 (ja) 2017-04-12

Similar Documents

Publication Publication Date Title
US11281531B2 (en) Serial storage node processing of data functions
US10303797B1 (en) Clustering files in deduplication systems
US9934237B1 (en) Metadata optimization for network replication using representative of metadata batch
US9690802B2 (en) Stream locality delta compression
US9798728B2 (en) System performing data deduplication using a dense tree data structure
US8386521B2 (en) System for backing up and restoring data
US9367448B1 (en) Method and system for determining data integrity for garbage collection of data storage systems
US9110964B1 (en) Metadata optimization for network replication using differential encoding
US8712963B1 (en) Method and apparatus for content-aware resizing of data chunks for replication
US9298726B1 (en) Techniques for using a bloom filter in a duplication operation
US8185498B2 (en) Data deduplication by separating data from meta data
US10496494B1 (en) Multilayer manifest for data storage systems
KR101694984B1 (ko) 비대칭 클러스터링 파일시스템에서의 패리티 산출 방법
US9904480B1 (en) Multiplexing streams without changing the number of streams of a deduplicating storage system
WO2013086969A1 (zh) 重复数据查找方法、装置及系统
US9063664B1 (en) Method and system for processing checksum of a data stream to optimize deduplication
WO2017020576A1 (zh) 一种键值存储系统中文件压实的方法和装置
US10838923B1 (en) Poor deduplication identification
CN110998537B (zh) 一种过期备份处理方法及备份服务器
US10229127B1 (en) Method and system for locality based cache flushing for file system namespace in a deduplicating storage system
US9087086B1 (en) Method and system for handling object boundaries of a data stream to optimize deduplication
WO2015145661A1 (ja) ストレージシステム及び重複データ排除方法
CN108475508B (zh) 音频数据和保存在块处理存储系统中的数据的简化
JP6113816B1 (ja) 情報処理システム、情報処理装置、及びプログラム
US10120875B1 (en) Method and system for detecting boundaries of data blocks for deduplication

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170203

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170214

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170315

R151 Written notification of patent or utility model registration

Ref document number: 6113816

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees