(57)【要約】  転送データ量の削減率を向上させる。送信実績のあるオブジェクトの識別情報と該オブジェクトのデータブロックの識別情報とを記憶する第１の記憶部と、該オブジェクトのデータブロックを記憶する第２の記憶部と、送信対象オブジェクトと第２の記憶部内のオブジェクトとのデータの比較を行う第１の処理と、送信対象オブジェクトからデータブロックを抽出し、該データブロックの識別情報で第１の記憶部を検索する第２の処理と、を行う制御部とを備える情報処理装置である。制御部は、第１の処理において、送信対象オブジェクトと第２の記憶部内のオブジェクトとのデータの不一致部分を検出し、第２の記憶部内のオブジェクトにおける一致部分の位置情報を送信し、送信対象オブジェクトにおける不一致部分の開始位置以降のデータについて、第２の処理を行い、第２の処理において、第１の記憶部に識別情報がないデータブロックを送信する。
2017022034.tif 000002
【特許請求の範囲】
【請求項１】
送信実績のあるオブジェクトの識別情報と、前記オブジェクトの、所定パターンのビット列の出現位置で区切られた複数のデータブロックそれぞれの識別情報と、を対応付けて記憶する第１の記憶部と、
前記送信実績のあるオブジェクトの識別情報と、該オブジェクトの前記複数のデータブロックとを対応付けて記憶する第２の記憶部と、
送信対象オブジェクトと、該送信対象オブジェクトの識別情報と合致する前記第２の記憶部に記憶されるオブジェクトと、の間でデータの比較を行う第１の処理と、前記送信対象オブジェクトのデータを前記所定のパターンのビット列の出現位置で区切ってデータブロックを抽出し、該データブロックの識別情報を算出し、該データブロックの識別情報で前記第１の記憶部を検索する第２の処理と、を行う制御部とを備え、
前記制御部は、
前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのデータの不一致部分を検出し、該不一致部分より前に一致部分がある場合には、少なくとも前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の位置情報を送信し、前記送信対象オブジェクトにおける前記不一致部分の開始位置以降のデータについて、前記第２の処理を行い、
前記第２の処理において、データブロックの識別情報が前記第１の記憶部にない場合には、該データブロックを送信し、該データブロックの識別情報が前記第１の記憶部にある場合には、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのそれぞれにおける該データブロック以降のデータについて、前記第１の処理を行う、
情報処理装置。
【請求項２】
前記第２の記憶部は、前記送信実績のあるオブジェクトに対して確保される連続する領域に、前記複数のデータブロックを順番通りに連続して記憶し、
前記制御部は、前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのデータの前記不一致部分より前に一致部分がある場合には、前記送信対象オブジェクトにおける前記一致部分の開始位置と、前記一致部分の長さと、前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の開始位置と、を送信する、
請求項１に記載の情報処理装置。
【請求項３】
前記制御部は、前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとの間のデータの比較の結果、不一致部分を検出しない場合には、前記送信対象オブジェクトの送信元装置に対して代理応答を行う、
請求項１又は２に記載の情報処理装置。
【請求項４】
コンピュータが、
送信実績のあるオブジェクトの識別情報と、前記オブジェクトの、所定パターンのビット列の出現位置で区切られた複数のデータブロックそれぞれの識別情報と、を対応付けて第１の記憶部に記憶し、
前記送信実績のあるオブジェクトの識別情報と、該オブジェクトの前記複数のデータブロックとを対応付けて第２の記憶部に記憶し、
送信対象オブジェクトと、該送信対象オブジェクトの識別情報と合致する前記第２の記憶部に記憶されるオブジェクトと、の間でデータの比較を行う第１の処理と、前記送信対象オブジェクトのデータを前記所定のパターンのビット列の出現位置で区切ってデータブロックを抽出し、該データブロックの識別情報を算出し、該データブロックの識別情報で前記第１の記憶部を検索する第２の処理と、を行い、
前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのデータの不一致部分を検出し、該不一致部分より前に一致部分がある場合には、少なくとも前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の位置情報を送信し、前記送信対象オブジェクトにおける前記不一致部分の開始位置以降のデータについて、前記第２の処理を行い、
前記第２の処理において、データブロックの識別情報が前記第１の記憶部にない場合には、該データブロックを送信し、該データブロックの識別情報が前記第１の記憶部にある場合には、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのそれぞれにおける該データブロック以降のデータについて、前記第１の処理を行う、
情報処理方法。
【請求項５】
コンピュータに、
送信実績のあるオブジェクトの識別情報と、前記オブジェクトの、所定パターンのビット列の出現位置で区切られた複数のデータブロックそれぞれの識別情報と、を対応付けて第１の記憶部に記憶させ、
前記送信実績のあるオブジェクトの識別情報と、該オブジェクトの前記複数のデータブロックとを対応付けて第２の記憶部に記憶させ、
送信対象オブジェクトと、該送信対象オブジェクトの識別情報と合致する前記第２の記憶部に記憶されるオブジェクトと、の間でデータの比較を行う第１の処理と、前記送信対象オブジェクトのデータを前記所定のパターンのビット列の出現位置で区切ってデータブロックを抽出し、該データブロックの識別情報を算出し、該データブロックの識別情報で前記第１の記憶部を検索する第２の処理と、を行わせ、
前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのデータの不一致部分を検出し、該不一致部分より前に一致部分がある場合には、少なくとも前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の位置情報を送信し、前記送信対象オブジェクトにおける前記不一致部分の開始位置以降のデータについて、前記第２の処理を行わせ、
前記第２の処理において、データブロックの識別情報が前記第１の記憶部にない場合には、該データブロックを送信し、該データブロックの識別情報が前記第１の記憶部にある場合には、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのそれぞれにおける該データブロック以降のデータについて、前記第１の処理を行わせる、
ための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及び、情報処理プログラムに関する。
【背景技術】
【０００２】
通信の高速化を実現する方法の一つに、転送データ量を削減する方法がある。転送データ量を削減する方法として、例えば、重複して送信されるデータを除去する方法がある。【０００３】
重複して送信されるデータを除去する方法では、送信側装置及び受信側装置は予め送信又は受信実績のあるデータをキャッシュに保存する。送信側装置は、送信対象データがキャッシュに格納されている場合には、送信対象データの代わりに送信対象データの参照情報を送信する。受信側装置は、データの参照情報を受信すると、キャッシュから該参照情報に該当するデータを読み出し、宛先装置に転送する。送信対象データのサイズに比べて送信対象データの参照情報のサイズは小さいため、転送データ量を削減することができ、送信側装置と受信側装置との間の使用帯域を抑えることができる。以降、重複して送信されるデータを除去する処理及び方法を、重複除去処理及び方法と称する。【０００４】
図１は、Ｃｏｎｔｅｎｔ  Ｄｅｆｉｎｅｄ  Ｃｈｕｎｋｉｎｇの処理の一例を示す図である。Ｃｏｎｔｅｎｔ  Ｄｅｆｉｎｅｄ  Ｃｈｕｎｋｉｎｇは、重複除去方法の一つである。Ｃｏｎｔｅｎｔ  Ｄｅｆｉｎｅｄ  Ｃｈｕｎｋｉｎｇでは、転送データは、１回目の転送の際に、チャンクと呼ばれる可変長ブロックに分割され、各チャンクがキャッシュに保存される。また、各チャンクについて、ハッシュ値が計算され、ハッシュ値とチャンクの保存位置とが対応付けられる。２回目以降の転送では、転送データはチャンクに分割され、各チャンクのハッシュ値が計算され、該ハッシュ値でキャッシュが検索される。転送データのハッシュ値とチャンクの保存位置との対応付けがある場合には、該転送データのチャンクの代わりにハッシュ値が送信される。転送データのハッシュ値とチャンクの保存位置との対応付けがない場合には、該チャンクが送信される。【０００５】
チャンクのサイズは、平均１キロバイトである。ハッシュ値のサイズは、例えば、２０バイトである。したがって、チャンクの代わりにハッシュ値が転送されることによって、転送データ量が削減される。【０００６】
Ｃｏｎｔｅｎｔ  Ｄｅｆｉｎｅｄ  Ｃｈｕｎｋｉｎｇでは、重複データが除去されるか否かは、転送データの中身（コンテンツ）に依存している。そのため、データの一部分が更新された場合も、更新されていない部分のチャンクについては、ハッシュ値によりキャッシュに保存されていることを検出でき、チャンクの代わりにハッシュ値を転送することで、重複除去を行うことができる。【０００７】
図２は、Ｏｂｊｅｃｔ  Ｌｅｖｅｌ  Ｃａｃｈｉｎｇの処理の一例を示す図である。Ｏｂｊｅｃｔ  Ｌｅｖｅｌ  Ｃａｃｈｉｎｇは、重複除去方法の一つである。Ｏｂｊｅｃｔ  Ｌｅｖｅｌ  Ｃａｃｈｉｎｇでは、例えば、既知の転送プロトコルから転送対象のファイルが割り出され、該ファイルがキャッシュに保存される。ファイルは、オブジェクトの一例である。キャッシュに保存されているファイルに対するアクセス要求に対しては、該キャッシュに保存されているファイルがアクセス要求元に転送される。【０００８】
図２に示される例では、プロキシサーバは、端末からのオブジェクトＡに対するアクセス要求を受けると、オブジェクトＡを保持するウェブサーバからオブジェクトＡを取得し、該オブジェクトＡを端末に転送するとともに、自身のキャッシュに保存する。別の端末からオブジェクトＡに対するアクセス要求がある場合には、プロキシサーバは、キャッシュ内のオブジェクトＡを該端末に送信する。【０００９】
Ｏｂｊｅｃｔ  Ｌｅｖｅｌ  Ｃａｃｈｉｎｇでは、キャッシュに保存されているファイルに対するアクセス要求がある場合には、ウェブサーバからプロキシサーバへの該ファイルの送信が省略される。したがって、ファイルのサイズが大きいほど、転送データの削減率が向上する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特表２０１４−５０８９９０号公報
【特許文献２】特表２０１５−５０２１１５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、従来の重複除去方法には、以下のような問題がある。Ｃｏｎｔｅｎｔ  Ｄｅｆｉｎｅｄ  Ｃｈｕｎｋｉｎｇでは、転送データの削減率に限界がある、という問題がある。例えば、チャンクの平均サイズは、１キロバイトである。ハッシュ値は、例えば、２０バイトである。この場合には、転送データの削減率は、約２０バイト／１キロバイトで約１／５０が限界となる。また、Ｃｏｎｔｅｎｔ  Ｄｅｆｉｎｅｄ  Ｃｈｕｎｋｉｎｇでは、チャンクのハッシュ値の計算処理の負荷が大きく、ＣＰＵ（Central Processing Unit）の負荷が高い、という問題がある。【００１２】
Ｏｂｊｅｃｔ  Ｌｅｖｅｌ  Ｃａｃｈｉｎｇでは、オブジェクト単位、つまり、ファイルごとにキャッシュに保存されるため、ファイルの一部分が変更される場合でも、オリジナルファイルを有する装置からファイル全体の転送をやり直すことになる、という問題がある。頻繁に更新されるファイルについては、Ｏｂｊｅｃｔ  Ｌｅｖｅｌ  Ｃａｃｈｉｎｇでは重複除去できなくなる事態に陥るため、例えば、遠隔地でのファイル編集などでは、転送データの削減が十分に行われない。【００１３】
本発明の一態様は、転送データの重複除去において、転送データ量の削減率の向上可能な情報処理装置、情報処理システム、情報処理方法、及び情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の態様の一つは、第１の記憶部と、第２の記憶部と、制御部とを備える情報処理装置である。第１の記憶部は、送信実績のあるオブジェクトの識別情報と、オブジェクトの、所定パターンのビット列の出現位置で区切られた複数のデータブロックそれぞれの識別情報と、を対応付けて記憶する。第２の記憶部は、送信実績のあるオブジェクトの識別情報と、該オブジェクトの複数のデータブロックとを対応付けて記憶する。制御部は、送信対象オブジェクトと、該送信対象オブジェクトの識別情報と合致する第２の記憶部に記憶されるオブジェクトと、の間でデータの比較を行う第１の処理を行う。また、制御部は、送信対象オブジェクトのデータを所定のパターンのビット列の出現位置で区切ってデータブロックを抽出し、該データブロックの識別情報を算出し、該データブロックの識別情報で第１の記憶部を検索する第２の処理を行う。制御部は、第１の処理において、送信対象オブジェクトと第２の記憶部に記憶されるオブジェクトとのデータの不一致部分を検出し、該不一致部分より前に一致部分がある場合には、少なくとも第２の記憶部に記憶されるオブジェクトにおける一致部分の位置情報を送信する。また、制御部は、送信対象オブジェクトにおける不一致部分の開始位置以降のデータについて、第２の処理を行う。また、制御部は、第２の処理において、データブロックの識別情報が第１の記憶部にない場合には、該データブロックを送信し、該データブロックの識別情報が第１の記憶部にある場合には、送信対象オブジェクトと第２の記憶部に記憶されるオブジェクトとのそれぞれにおける該データブロック以降のデータについて、第１の処理を行う。
【発明の効果】
【００１５】
開示の情報処理装置、情報処理システム、情報処理方法、及び情報処理プログラムによれば、転送データの重複除去において、転送データ量の削減率を向上することができる。
【図面の簡単な説明】
【００１６】
【図１】Ｃｏｎｔｅｎｔ  Ｄｅｆｉｎｅｄ  Ｃｈｕｎｋｉｎｇの処理の一例を示す図である。
【図２】Ｏｂｊｅｃｔ  Ｌｅｖｅｌ  Ｃａｃｈｉｎｇの処理の一例を示す図である。
【図３】第１実施形態の転送データのキャッシュへの登録方法の一例を示す図である。
【図４】第１実施形態の、送信対象のオブジェクトに更新がある場合の処理の一例を示す図である。
【図５】第１実施形態に係る重複除去システムの一例を示す図である。
【図６】重複除去装置のハードウェア構成の一例を示す図である。
【図７】重複除去システムの機能構成の一例を示す図である。
【図８】重複除去装置のキャッシュの内部構成の一例を示す図である。
【図９】ハッシュテーブルの一例を示す図である。
【図１０】送信側重複除去装置が受信側重複除去装置へデータを転送する際のデータフォーマットの一例を示す図である。
【図１１】データ種別の一例を示す図である。
【図１２】データのチャンクへの分割方法の一例を示す図である。
【図１３】データバッファ内のデータの末尾でのチャンク分割処理の一例を示す図である。
【図１４】送信側重複除去装置の処理の全体フローの一例を示す図である。
【図１５】重複除去処理のフローチャートの一例である。
【図１６】Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ登録処理のフローチャートの一例である。
【図１７Ａ】Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ更新処理のフローチャートの一例である。
【図１７Ｂ】Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ更新処理のフローチャートの一例である。
【図１８】データ終了処理のフローチャートの一例である。
【図１９】受信側重複除去装置の処理のフローチャートの一例を示す図である。
【図２０】ファイルの上書き更新の具体例の一例を示す図である。
【図２１】第１実施形態の作用効果の一例を示す図である。
【発明を実施するための形態】
【００１７】
以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００１８】
＜第１実施形態＞
図３は、第１実施形態の転送データのキャッシュへの登録方法の一例を示す図である。第１実施形態では、転送データであるオブジェクトは、１回目の転送時に、チャンクに分割されて、該チャンクは、キャッシュ内のオブジェクトＩＤごとに割り当てられた連続領域に、順番通りに連続して格納される。各チャンクは、ハッシュ値が算出される。各チャンクのハッシュ値と、オブジェクトＩＤと、キャッシュにおけるオブジェクト内のチャンクの開始位置と、オブジェクト内におけるチャンクの長さと、が対応付けられてハッシュテーブルに格納される。
【００１９】
第１実施形態では、端末からのデータを転送する重複除去装置は、転送実績のあるオブジェクトのキャッシュと、上記ハッシュテーブルとを保持する。端末からオブジェクトの送信要求を受けると、重複除去装置は、送信対象のオブジェクトに更新があるか否かを判定し、更新がない場合には、宛先装置に該オブジェクトを送信せずに、送信元の端末に代理で応答を送信する。
【００２０】
図４は、第１実施形態の、送信対象のオブジェクトに更新がある場合の処理の一例を示す図である。図４に示される例では、送信元装置２、送信側重複除去装置１Ａ、受信側重複除去装置１Ｂ、宛先装置３が抽出されている。送信側重複除去装置１Ａと受信側重複除去装置１Ｂとは、地理的に離れて位置しており、例えば、インターネット等のネットワークを介して接続されている。宛先装置３は、例えば、ファイルサーバである。以降、宛先装置３は、ファイルサーバ３とも表現される。送信元装置２は、例えば、エクスプローラを実行して、ファイルサーバ３上のファイルに遠隔アクセスし、ファイル編集を行っている。
【００２１】
図４に示される例では、送信元装置２がアクセス中であり、更新前のファイルは、送信側重複除去装置１Ａ及び受信側重複除去装置１Ｂのそれぞれのキャッシュに既に保存されていることとする。また、該ファイルは送信元装置２によって編集され更新されており、送信側重複除去装置１Ａ及び受信側重複除去装置１Ｂのそれぞれのキャッシュに保存されているものとは一部異なっていることとする。
【００２２】
Ｓ１では、送信元装置２において、例えば、アクセス中のファイルの上書き保存の操作が行われると、送信元装置２から送信側重複除去装置１Ａにファイルの書き込み要求が届く。Ｓ２では、送信側重複除去装置１Ａは、書き込み対象のファイルについて、自身のキャッシュに保存されるファイルと、ファイルサーバ３内のファイルとが同期していることを確認する。
【００２３】
Ｓ３では、１回の書き込み要求の対象となる、送信元装置２から送信されたデータ（送信対象データ）が、送信側重複除去装置１Ａのキャッシュに保存されているデータと一致しているので、送信側重複除去装置１Ａは、送信元装置２に代理応答を行う。このとき、送信側重複除去装置１Ａは、ファイルサーバ３に該当のデータの送信を行わない。
【００２４】
Ｓ４では、１回の書き込み要求の対象となる、送信元装置２からの送信対象データは、更新部分（図中斜線部分）を含んでおり、送信側重複除去装置１Ａのキャッシュに保存されているデータと一致していない。この場合には、送信側重複除去装置１Ａは、１回の書き込み要求の対象となる送信対象データのうち、更新部分を含むチャンクの箇所については、該チャンクの実データをファイルサーバ３に送信する。
【００２５】
Ｓ４での更新部分は、更新前と更新後とでサイズが異なる。そのため、Ｓ４での、更新部分以降のデータは、送信元装置２からの送信対象データと送信側重複除去装置１Ａのキャッシュに保存されているデータとで内容が一致している場合でも、該一致部分のファイルにおける開始位置が異なる。送信側重複除去装置１Ａは、更新部分以降のデータで、送信元装置２からの送信対象データとキャッシュ内のデータとで内容が一致しているデータについては、データそのものは送信せずに該データの更新前のファイルにおけるキャッシュ開始位置と、更新後のファイルにおける開始位置とを送信する。Ｓ４の後に、書き込み要求の対象となるデータについても、キャッシュ開始位置が送信される。
【００２６】
一方、受信側重複除去装置１Ｂでは、更新部分のチャンクの実データと、更新部分以降の一致部分の更新前のファイルにおけるキャッシュ開始位置と、更新後のファイルにおける開始位置とを受信する。受信側重複除去装置１Ｂは、受信したチャンクと、キャッシュ内の受信したキャッシュ開始位置から読み出したデータとを、それぞれ、更新後のファイルの開始位置に書き出し、ファイルサーバ３に転送する。ファイルサーバ３は、受信側重複除去装置１Ｂから受信した、更新部分を含むチャンクと、受信側重複除去装置１Ｂのキャッシュから読み出されたデータとで、対象のファイルを更新する。
【００２７】
更新部分以降で、送信元装置２からの送信対象データと送信側重複除去装置１Ａのキャッシュに保存されているデータとで内容が一致しているデータについては、ファイルの更新前の該一致部分のキャッシュ開始位置が送信される。受信側重複除去装置１Ｂに対して、該一致部分のデータのキャッシュからの読み出し位置を通知することになる。これによって、更新部分のサイズ変更があり、該一致部分の開始位置が移動した場合でも、受信側重複除去装置１Ｂは、更新部分以降の一致部分のデータをキャッシュ内の適正な位置から読み出すことができる。これによって、ファイルサーバ３上で更新部分以降の一致部分のデータを適切に移動させることができ、送信元装置２とファイルサーバ３とでファイルの整合性を保つことができる。
【００２８】
また、ファイルの上書き更新時には、アプリケーション間でもやり取りが多くなるが、第１実施形態によれば、重複除去処理において、送信元装置２とファイルサーバ３とでファイルの整合性が保たれるので、アプリケーション間のやり取りを削減ができる。チャンクは、「データブロック」の一例である。
【００２９】
＜システム構成＞
図５は、第１実施形態に係る重複除去システム１００の一例を示す図である。重複除去システム１００は、送信側重複除去装置１Ａと、受信側重複除去装置１Ｂと、送信元装置２、宛先装置３を含む。送信側重複除去装置１Ａと受信側重複除去装置１Ｂとは、例えば、ネットワークの境界に位置する装置であって、互いにインターネット等を介して接続されている。送信元装置２は送信側重複除去装置１Ａの配下の装置であって、送信元装置２が送受信するデータはすべて、送信側重複除去装置１Ａを経由する。宛先装置３は受信側重複除去装置１Ｂの配下の装置であって、宛先装置３が送受信するデータはすべて、受信側重複除去装置１Ｂを経由する。
【００３０】
＜装置構成＞
図６は、重複除去装置１のハードウェア構成の一例を示す図である。送信側重複除去装置１Ａ、受信側重複除去装置１Ｂは、同種の装置であって、区別しない場合には、総称して重複除去装置１と称される。重複除去装置１は、例えば、専用又は汎用のコンピュータである。
【００３１】
重複除去装置１は、ＣＰＵ（Central Processing Unit）１１、主記憶装置１２、入力装置１３、出力装置１４、補助記憶装置１５、ネットワークインタフェース１７を備える。また、これらはバス１９により互いに接続されている。
【００３２】
入力装置１３は、例えば、キーボード、キーパッド等である。入力装置１３から入力されたデータは、ＣＰＵ  １１に出力される。
【００３３】
補助記憶装置１５は、様々なプログラムや、各プログラムの実行に際してＣＰＵ  １１が使用するデータを格納する。補助記憶装置１５は、例えば、ＥＰＲＯＭ（Erasable Programmable ROM）、フラッシュメモリ、又はハードディスクドライブ（Hard Disk Drive）等の不揮発性のメモリである。補助記憶装置１５は、例えば、オペレーティングシステム（ＯＳ）、重複除去プログラム、その他様々なアプリケーションプログラムを保持する。重複除去プログラムは、転送データの重複除去処理のためのプログラムである。
【００３４】
主記憶装置１２は、ＣＰＵ  １１に、補助記憶装置１５に格納されているプログラムをロードする記憶領域および作業領域を提供したり、バッファ、一時メモリとして用いられたりする。主記憶装置１２は、例えば、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）のような半導体メモリを含む。
【００３５】
ＣＰＵ  １１は、補助記憶装置１５に保持されたＯＳや様々なアプリケーションプログラムを主記憶装置１２にロードして実行することによって、様々な処理を実行する。ＣＰＵ  １１は、１つに限られず、複数備えられてもよい。ＣＰＵ  １１は、「制御部」の一例である。
【００３６】
ネットワークインタフェース１７は、ネットワークとの情報の入出力を行うインタフェースである。ネットワークインタフェース１７は、有線のネットワークと接続するインタフェース、無線のネットワークと接続するインタフェースを含む。ネットワークインタフェース１７は、例えば、ＮＩＣ（Network Interface Card）、無線ＬＡＮ（Local Area Network）カード等である。ネットワークインタフェース１７で受信されたデータ等は、ＣＰＵ  １１に出力される。
【００３７】
出力装置１４は、ＣＰＵ  １１の処理の結果を出力する。出力装置１４は、ディスプレイ、プリンタ、スピーカ等の音声出力装置を含む。
【００３８】
なお、図６に示される重複除去装置１のハードウェア構成は、一例であり、上記に限られず、実施の形態に応じて適宜構成要素の省略や置換、追加が可能である。例えば、重複除去装置１は、可搬記録媒体駆動装置を備え、可搬記録媒体に記録されたプログラムを実行してもよい。可搬記録媒体は、例えば、ＳＤカード、ｍｉｎｉＳＤカード、ｍｉｃｒｏＳＤカード、ＵＳＢ（Universal Serial Bus）フラッシュメモリ、ＣＤ（Compact Disc）、ＤＶＤ(Digital Versatile Disc)、Ｂｌｕ−ｒａｙ（登録商標）  Ｄｉｓｃ、又はフラッシュメモリカードのような記録媒体である。また、重複除去装置１が専用のサーバである場合には、例えば、重複除去装置１は、入力装置１３、出力装置１４を備えていなくてもよい。
【００３９】
図７は、重複除去システム１００の機能構成の一例を示す図である。送信側重複除去装置１Ａは、機能構成として、接続受付部１１１、送信データ受信部１１２、送信データ削減部１１３、削減データ送信部１１４、応答転送受信部１１５、アプリ応答送信部１１６、切断受付部１１７、キャッシュ１１８、ハッシュテーブル１１９を備える。これらの機能構成は、ＣＰＵ  １１が補助記憶装置１５に格納されている重複除去プログラムを実行することによって達成される機能構成である。なお、図７中では、送信元装置２、宛先装置３の代わりに、それぞれ、クライアントアプリケーション、サーバアプリケーションが示されている。以降、送信元装置２は、クライアントアプリケーション２と表記されることもある。宛先装置３は、サーバアプリケーション３と表記されることもある。
【００４０】
接続受付部１１１は、クライアントアプリケーション２から接続要求を受信し、該接続要求をサーバアプリケーション３に転送する。送信データ受信部１１２は、クライアントアプリケーション２から送信対象データを受信する。送信データ受信部１１２は、例えば、データバッファを含み、該データバッファに溜まった送信対象データを送信データ削除部１１３に出力する。データバッファは、主記憶装置１２の作業領域の一部に設けられる。データバッファのサイズは、例えば、８０キロバイトである。ただし、データバッファのサイズはこれに限定されない。
【００４１】
送信データ削減部１１３は、送信データ受信部１１３から入力される送信対象データに過去の転送データとの重複があるか否かを判定し、重複するデータについては、代替情報を作成する。送信データ削減部１１３は、重複データの削減後であり代替情報を含む送信対象データを、削減データ送信部１１４に出力する。重複するデータの代替情報の詳細、送信データ削減部１１３の処理の詳細については後述される。送信データ削減部１１３は、「制御部」の一例である。削減データ送信部１１４は、送信データ削減部１１３から入力される、重複データの削減後の送信対象データを宛先装置３に送信する。
【００４２】
応答転送受信部１１５は、削減データ送信部１１４から送信されたデータに対する宛先装置３からの応答を受信する。応答転送受信部１１５は、受信した応答をアプリ応答送信部１１６に出力する。アプリ応答送信部１１６は、応答転送受信部１１５から入力される応答を、クライアントアプリケーション２に転送する。
【００４３】
切断受付部１１７は、クライアントアプリケーション２からの切断要求を受信し、該切断要求をサーバアプリケーション３に転送する。なお、送信側重複除去装置１Ａからサーバアプリケーション３に対して転送されるデータは、実際には、受信側重複除去装置１Ｂに転送されている。以降、送信側重複除去装置１Ａからサーバアプリケーション３に対して転送することを、受信側重複除去装置１Ｂに送信する、とも表記するが、いずれも、転送データは受信側重複除去装置１Ｂを経由してサーバアプリケーション３に届けられるという点で同じである。
【００４４】
キャッシュ１１８は、例えば、補助記憶装置１３の記憶領域に作成される。なお、キャッシュ１１８に用いられる補助記憶装置１３は、送信側重複除去装置１Ａに内蔵されていてもよく、外付けされていてもよい。キャッシュ１１８は、オブジェクトＩＤごとに連続領域が確保されており、各オブジェクトの連続領域には、該オブジェクトのチャンクが順番に連続して格納されている。キャッシュ１１８内の各オブジェクトに確保される連続領域のサイズは、予め決められたサイズであってもよいし、オブジェクトのサイズに応じて設定されてもよい。キャッシュ１１８は、「第２の記憶部」の一例である。
【００４５】
ハッシュテーブル１１９は、例えば、主記憶装置１２の記憶領域に作成される。ハッシュテーブル１１９には、キャッシュに格納されているチャンクの情報が保持される。ハッシュテーブル１１９の詳細については、後述される。ハッシュテーブル１１９は、「第１の記憶部」の一例である。
【００４６】
受信側重複除去装置１Ｂは、機能構成として、サーバ接続部１２１、削減データ受信部１２２、削減データ復元部１２３、復元データ送信部１２４、アプリ応答受信部１２５、アプリ応答転送部１２６、サーバ切断部１２７、キャッシュ１２８を備える。これらの機能構成は、ＣＰＵ  １１が補助記憶装置１５に格納されている重複除去プログラムを実行することによって達成される機能構成である。
【００４７】
サーバ接続部１２１は、送信元装置２からの接続要求を受信し、サーバアプリケーション３に転送する。削減データ受信部１２２は、送信側重複除去装置１Ａによって転送される転送データを受信する。受信したデータには、重複データの代替情報が含まれている場合がある。削減データ受信部１２２は、受信したデータを削減データ復元部１２３に出力する。
【００４８】
削減データ復元部１２３は、送信側重複除去装置１Ａによって転送されたデータに重複データの代替情報が含まれている場合には、該代替情報に合致するデータをキャッシュ１２８から読み出して復元する。削減データ復元部１２３は、復元したデータを含む受信データを復元データ送信部１２４に出力する。復元データ送信部１２４は、削減データ復元部１２３から入力されるデータを、サーバアプリケーション３に送信する。なお、削減データ復元部１２４は、送信側重複除去装置１Ａによって転送されたデータに、新規データが含まれている場合には、該新規データをキャッシュ１２８に保存する。
【００４９】
アプリ応答受信部１２５は、サーバアプリケーション３からの応答を受信し、該応答をアプリ応答転送部１２６に出力する。アプリ応答転送部１２６は、アプリ応答受信部１２５から入力されるサーバアプリケーション３からの応答を、送信元装置２に送信する。
【００５０】
サーバ切断部１２７は、送信元装置２からの切断要求を受信し、サーバアプリケーション３に転送する。なお、受信側重複除去装置１Ｂが、送信元装置２から受信するデータ、送信元装置２へ送信するデータは、実際には、受信側重複除去装置１Ｂを介している。
【００５１】
キャッシュ１２８は、例えば、受信側重複除去装置１Ｂの補助記憶装置１３の記憶領域に作成される。なお、キャッシュ１２８に用いられる補助記憶装置１３は、受信側重複除去装置１Ｂに内蔵されていてもよく、外付けされていてもよい。キャッシュ１２８には、送信側重複除去装置１Ａのキャッシュ１１８と同様に、オブジェクトＩＤごとに連続領域が確保されており、各オブジェクトの連続領域には、該オブジェクトのチャンクが順番に連続して格納されている。
【００５２】
図８は、重複除去装置１のキャッシュのデータ構造の一例を示す図である。キャッシュには、オブジェクトごとに連続領域が確保されており、各オブジェクトの連続領域には、該オブジェクトのチャンクが格納される。チャンクは、順番通りに連続して格納される。
【００５３】
各オブジェクトの領域には、ファイル変更フラグが含まれる。ファイル変更フラグは、該当のオブジェクトに変更があるか否かを示すフラグである。例えば、ファイル変更フラグがＯＮ（１）である場合には、該当のファイルに変更があることが示される。例えば、ファイル変更フラグがＯＦＦ（０）である場合には、該当のファイルに変更がないことが示される。
【００５４】
なお、送信側重複除去装置１Ａのキャッシュ１１８と、受信側重複除去装置１Ｂのキャッシュ１２８は、いずれも、図８に示されるような構成をしている。
【００５５】
図９は、ハッシュテーブル１１９の一例を示す図である。ハッシュテーブル１１９には、送信側重複除去装置１Ａのキャッシュ１１８に格納されているチャンクの情報が格納される。具体的には、ハッシュテーブル１１９のエントリには、ハッシュ値、オブジェクトＩＤ、開始位置、長さが格納される。ハッシュテーブル１１９はハッシュ値をキーとして検索される。
【００５６】
「ハッシュ値」には、例えば、ＳＨＡ１（Secure Hash Algorithm）の計算によって求められる、２０バイト程度の値が格納される。ハッシュ値は、「データブロックの識別情報」の一例である。「オブジェクトＩＤ」には、例えば、オブジェクトがファイルである場合には、ファイルＩＤが格納される。ファイルＩＤは、例えば、ファイル名であってもよい。
【００５７】
「開始位置」には、キャッシュ１１８内のオブジェクトにおけるチャンクの開始位置が、バイト単位で格納される。「長さ」には、チャンクの長さが格納される。チャンクの長さは、キャッシュ１１８内のオブジェクトにおけるチャンクの終了位置からチャンクの開始位置を差し引いて求められる。
【００５８】
ハッシュテーブル１１９は、クライアントアプリケーション２から受信される送信対象データと、送信側重複除去装置１Ａのキャッシュ１１８内のデータとで不一致が検出された場合に、不一致部分以降の一致部分の再開位置を見つける際に、用いられる。
【００５９】
＜送受信データフォーマット＞
図１０は、送信側重複除去装置１Ａが受信側重複除去装置１Ｂへデータを転送する際のデータフォーマットの一例を示す図である。データの先頭には、オブジェクトＩＤが格納される。次に、フラグとデータ部（データフィールド）との組合せが複数個連なる。フラグとデータ部との組合せが連なる個数は、可変である。
【００６０】
送信側重複除去装置１Ａは、クライアントアプリケーション２からの送信対象データを、データバッファサイズの単位で処理する。データバッファのサイズは、例えば、８０キロバイトである。そのため、図１０に示されるデータフォーマットは、データバッファのサイズのデータ１つに対して、１つ作成される。
【００６１】
図１１は、データ種別の一例を示す図である。図１１では、図１０に示される送信側重複除去装置１Ａが受信側重複除去装置１Ｂへデータを転送する際のデータフォーマットに含まれるデータ部の種別の一例が示されている。
【００６２】
フラグが０である場合には、データ部には実データが格納されていることが示される。フラグが０である場合には、データ部には、オブジェクト内のデータの開始位置、データ長、実データが格納される。オブジェクト内のデータの開始位置は、クライアントアプリケーション２から送信された送信対象オブジェクト内における当該データの開始位置である。オブジェクトの内のデータの開始位置の格納フィールドのサイズは、例えば、８バイトで固定されている。データ長の格納フィールドのサイズは、例えば、８バイトで固定されている。実データの格納フィールドのサイズは、実データのデータ長に合わせて可変である。
【００６３】
フラグが１である場合には、データ部には、重複データの情報が格納されていることが示される。フラグが１である場合には、データ部には、オブジェクト内のデータの開始位置、一致長、キャッシュ開始位置が含まれる。オブジェクト内のデータの開始位置は、クライアントアプリケーション２から送信された送信対象オブジェクト内における重複データの開始位置である。一致長は、クライアントアプリケーション２から送信された送信対象オブジェクトと送信側重複除去装置１Ａのキャッシュ１１８に格納されているオブジェクトとのデータの連続して一致する一致長である。キャッシュ開始位置は、送信側重複除去装置１Ａのキャッシュ１１８に格納されているオブエジェクト内の重複データの格納開始位置である。
【００６４】
フラグが１の場合のデータ部の開始位置、一致長、キャッシュ開始位置のそれぞれの格納フィールドのサイズは、例えば、８バイトで固定されている。
【００６５】
第１実施形態では、データバッファの単位で、図１０に示されるデータフォーマットのデータが作成される。データバッファに格納されているクライアントアプリケーション２から送信された送信対象オブジェクトのデータすべてが、送信側重複除去装置１Ａのキャッシュ１１８に格納されているオブジェクトのデータと一致する場合には、図１０に示されるデータフォーマットの送信パケットは作成されない。この場合には、クライアントアプリケーション２に対して代理応答が行われる。
【００６６】
データバッファに格納されているデータのうち、２０キロバイト目から３０キロバイト目までのデータが更新されており、更新部分が更新前２０キロバイトから更新後１０キロバイトになっている場合には、データフォーマットは、以下のようになる。データバッファサイズを８０キロバイトと仮定する。
・オブジェクトＩＤ
・フラグ（１）、開始位置（Ｘ）、一致長（２０キロバイト）、キャッシュ開始位置（Ｘ）
・フラグ（０）、開始位置（Ｘ＋２０キロバイト）、データ長（１０キロバイト）、実データ
・フラグ（１）、開始位置（Ｘ＋３０キロバイト）、一致長（５０キロバイト）、キャッシュ開始位置（Ｘ＋４０キロバイト）
【００６７】
３つめのフラグとデータ部との組合せにおけるキャッシュ開始位置は、キャッシュ１１８内のオブジェクトにおける重複データの格納開始位置であるので、Ｘ＋２０キロバイト（１つ目の一致長）＋２０キロバイト（更新部分のデータの更新前のサイズ）となる。これによって、受信側重複除去装置１Ｂは、更新部分に続く更新されていないデータを、キャッシュ１２８のキャッシュ開始位置Ｘ＋４０キロバイトの位置からから適正に読み出すことができる。
【００６８】
＜データのチャンクへの分割方法＞
図１２は、データのチャンクへの分割方法の一例を示す図である。チャンクは、データバッファから読み出されたデータを、領域をずらしながら、切断条件のビットパターンに合致するか否かを判定することで作成される。切断条件のビットパターンとは、例えば、１０２４分の１の確率でビット列に出現する所定のパターンである。切断条件のビットパターンに合致するビット列が出現すると、該ビット列の末尾でデータは切断され、チャンクに分割される。
【００６９】
図１２に示される例では、データバッファ内の部分データ７１０のビットパターンが、切断条件のビットパターンに合致していないので、部分データ７１０の末尾である現在位置では、チャンクに分割されない。データバッファ内の部分データ７２０のビットパターンは、切断条件のビットパターンに合致しているので、部分データ７２０の末尾である現在位置でチャンクに分割される。図１２に示されるデータの先頭から部分データ７２０の末尾までが１つのチャンクとして登録される。チャンクの終了位置は、次のチャンクの開始位置でもある。ただし、位置がバイトで表される場合には、次のチャンクの開始位置は、チャンクの終了位置＋１バイトである。
【００７０】
図１３は、データバッファ内のデータの末尾でのチャンク分割処理の一例を示す図である。データバッファ内のデータの末尾のビット列が切断条件のビットパターンに合致しない場合には、直前のチャンクの終了位置からデータバッファ内のデータの末尾までのデータは、実データのまま、キャッシュに登録される。該当部分については、チャンクではないので、ハッシュテーブル１１９にも登録されない。
【００７１】
＜処理の流れ＞
図１４は、送信側重複除去装置１Ａの処理の全体フローの一例を示す図である。図１４に示される処理は、送信側重複除去装置１Ａが起動するとともに、開始される。図１４に示される処理の実行主体は、ＣＰＵ  １１であるが、それぞれの処理について、ＣＰＵ  １１が重複除去プログラムを実行して達成される機能構成を主体として説明する。
【００７２】
ＯＰ１では、接続受付部１１１は、クライアントアプリケーション２から接続要求を受け付ける。ＯＰ２では、接続受付部１１１は、受け付けた接続要求をサーバアプリケーション３へ転送する。接続要求は、受信側重複除去装置１Ｂに届き、受信側重複除去装置１Ｂによってサーバアプリケーション３に転送される。
【００７３】
ＯＰ３では、受信されたイベントが振り分けられる。イベントがクライアントアプリケーション２からの送信対象データの受信である場合には、処理がＯＰ４に進む。イベントが受信側重複除去装置１Ｂからの応答データの受信である場合には、処理がＯＰ５に進む。イベントがクライアントアプリケーション２からの切断要求の受信である場合には、処理がＯＰ６に進む。
【００７４】
ＯＰ４では、クライアントアプリケーション２から受信された送信対象データについて、重複除去処理が行われる。重複除去処理の詳細については、後述される。重複除去処理が終了すると、処理がＯＰ３に進む。
【００７５】
ＯＰ５では、応答転送受信部１１５は、受信側重複除去装置１Ｂからの応答データをアプリ応答送信部１１６に出力し、アプリ応答送信部１１６は、クライアントアプリケーション２に応答データを転送する。その後、処理がＯＰ３に進む。
【００７６】
ＯＰ６では、切断受付部１１７は、クライアントアプリケーション２から受信した切断要求を受信側重複除去装置１Ｂに転送する。その後、図１４に示される処理が終了する。
【００７７】
図１５は、重複除去処理のフローチャートの一例である。図１５のフローチャートは、クライアントアプリケーション２から書込要求が受信されると開始される。図１５に示される処理の実行主体は、ＣＰＵ  １１であるが、便宜上、送信データ削減部１１３を主体として説明する。
【００７８】
ＯＰ１１では、送信データ削減部１１３は、送信データ受信部１１２から、書込要求の対象の、データバッファに蓄積された分の送信対象データを取得する。
【００７９】
ＯＰ１２では、送信データ削減部１１３は、書込要求の対象の送信対象データを含むファイルが、新規ファイルであるか否かを判定する。以降、書込み要求対象のデータを含むファイルのことを、単に、書込要求対象のファイル、と称する。例えば、キャッシュ１１８に書込要求の対象のファイルのオブジェクトＩＤとデータとが対応付けて格納されている場合には、書込要求の対象のファイルは新規ファイルではないと判定される。例えば、キャッシュ１１８に書込要求の対象のファイルのオブジェクトＩＤとデータとが対応付けて格納されていない場合には、書込要求の対象のファイルは新規ファイルであると判定される。ファイルのオブジェクトＩＤは、例えば、ファイル名である。ファイル名は、書込要求に含まれている。
【００８０】
書込要求の対象のファイルが新規ファイルである場合には（ＯＰ１２：ＹＥＳ）、処理がＯＰ１３に進む。書込要求の対象のファイルが新規ファイルでない場合には（ＯＰ１２：ＮＯ）、処理がＯＰ１５に進む。
【００８１】
ＯＰ１３では、送信データ削減部１１３は、新規ファイルをキャッシュ１１８に登録する処理であるＯｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ登録処理を実施する。Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ登録処理の詳細は後述される。
【００８２】
ＯＰ１４では、送信データ削減部１３は、書込要求の対象の送信対象データを、削減データ送信部１１４に出力する。削減データ送信部１１４によって、送信対象データが受信側重複除去装置１Ｂに転送される。その後、図１５に示される処理が終了する。
【００８３】
ＯＰ１５では、送信データ削減部１３は、書込要求に含まれるメッセージを判定する。書込要求に含まれるメッセージには、例えば、ファイルの開始を示す「ＯＰＥＮ」、ファイルの途中のデータであることを示す「ＲＥＡＤ」、ファイルの終了を示す「ＣＬＯＳＥ」がある。書込要求に含まれるメッセージが「ＯＰＥＮ」である場合には、処理がＯＰ１６に進む。書込要求に含まれるメッセージが「ＲＥＡＤ」である場合には、処理がＯＰ１８に進む。書込要求に含まれるメッセージが「ＣＬＯＳＥ」である場合には、処理がＯＰ２０に進む。
【００８４】
ＯＰ１６では、送信データ削減部１３は、書込要求の対象のファイルについて、キャッシュ１１８に格納されているデータと、サーバアプリケーション３が保持しているデータとが一致するか否かを問い合わせる。
【００８５】
ＯＰ１７では、送信データ削減部１３は、ＯＰ１６の問い合わせの結果をファイル変更フラグに設定する。書込要求の対象のファイルについて、キャッシュ１１８に格納されているデータと、サーバアプリケーション３が保持しているデータとが一致するか否かに応じて、ファイル変更フラグは、「変更無し」、「変更有り」のいずれかを示す値に設定される。
【００８６】
ＯＰ１８、ＯＰ２０では、送信データ削減部１３は、サーバアプリケーション３に保存されているデータを更新するための情報を生成する処理であるＯｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ更新処理を行う。Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ処理では、例えば、図１０に示されるフォーマットの送信パケットが作成される。Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ更新処理の詳細は、後述される。
【００８７】
ＯＰ１９、ＯＰ２１では、送信データ削減部１３は、ＯＰ１８、ＯＰ２０で作成される送信パケットを受信側重複除去装置１Ｂに送信する。ＯＰ１９の処理の後には、図１５に示される処理が終了する。
【００８８】
ＯＰ２２では、送信データ削減部１１３は、キャッシュ１１８内の書込要求の対象のファイルに更新がある場合には、キャッシュ１１８内の該ファイルを更新する。その後、図１５に示される処理が終了する。
【００８９】
図１６は、Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ登録処理のフローチャートの一例である。Ｏｂｊｅｃｔ−ｌｉｎｅｄ  ｃｈｕｎｋ登録処理は、新規ファイルのデータをキャッシュに登録する処理である。図１６に示される処理の実行主体は、ＣＰＵ  １１であるが、便宜上、送信データ削減部１１３を主体として説明する。
【００９０】
ＯＰ３１では、送信データ削減部１１３は、データバッファ内の送信対象データを取得する。このとき、送信データ削減部１１３は、送信対象データ含むファイルのファイル名、送信対象データを含むファイル内における送信対象データの書き込み開始位置、データバッファの長さ、データバッファ内の送信対象データを取得する。
【００９１】
ＯＰ３２では、送信データ削減部１１３は、オブジェクトＩＤを取得し、キャッシュ１１８内に該オブジェクトＩＤに対応する領域を確保する。キャッシュ１１８に確保される領域は、いずれのオブジェクトＩＤについても、一律に設定されたサイズで確保されてもよいし、ファイルのサイズを取得して、該ファイルのサイズよりも大きく確保されてもよい。
【００９２】
ＯＰ３３では、送信データ削減部１１３は、データ現在位置を書込み開始位置に、チャンク開始位置を書込み開始位置に設定する。データ現在位置は、送信対象データを含むファイルにおける現在参照中の位置を示すパラメータである。チャンク開始位置は、送信対象データを含むファイルにおけるチャンクの開始位置である。
【００９３】
ＯＰ３４では、送信データ削減部１１３は、送信対象データが終了したか否かを判定する。送信対象データが終了している場合には（ＯＰ３４：ＹＥＳ）、処理がＯＰ３８に進む。送信対象データが終了していない場合には（ＯＰ３４：ＮＯ）、処理がＯＰ３５に進む。
【００９４】
ＯＰ３５では、送信データ削減部１１３は、データ現在位置がチャンクの切断位置であるか否かを判定する。この処理は、データ現在位置から所定ビット長さかのぼったビット列が切断条件のビットパターンに合致するか否かを判定することによって行われる（図１２参照）。データ現在位置がチャンク切断位置である場合には（ＯＰ３５：ＹＥＳ）、処理がＯＰ３６に進む。データ現在位置がチャンク切断位置でない場合には（ＯＰ３５：ＮＯ）、処理がＯＰ３７に進む。
【００９５】
ＯＰ３６では、送信データ削減部１１３は、以下のことを行う。送信データ削減部１１３は、チャンク終了位置をデータ現在位置に設定する。送信データ削減部１１３は、チャンク開始位置からチャンク終了位置までのハッシュ値を算出し、算出したハッシュ値をハッシュテーブル１１９に登録する。ハッシュテーブル１１９には、ハッシュ値に加えて、オブジェクトＩＤ、チャンク開始位置、チャンクの長さも登録される。送信データ削減部１１３は、チャンク開始位置をデータ現在位置＋１バイトに更新する。送信データ削減部１１３は、チャンクをキャッシュ１１８に書き込む。
【００９６】
ＯＰ３７では、送信データ削減部１１３は、データ現在位置に１バイト加算して、データ現在位置を更新する。次に処理がＯＰ３４に進む。
【００９７】
ＯＰ３８では、データバッファ内の送信対象データが終了したので、送信対象データの末尾がチャンク切断位置でない場合には、送信データ削減部１１３は、直前のチャンクの終了位置から末尾までの実データをキャッシュ１１８に書き込む。その後、図１６に示される処理が終了する。
【００９８】
図１７Ａ及び図１７Ｂは、Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ更新処理のフローチャートの一例である。Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ更新処理は、サーバアプリケーション３に保存されているデータを更新するための情報を生成する処理である。図１７Ａ及び図１７Ｂに示される処理の実行主体は、ＣＰＵ  １１であるが、便宜上、送信データ削減部１１３を主体として説明する。
【００９９】
ＯＰ４１では、送信データ削減部１１３は、データバッファ内の送信対象データを取得する。このとき、送信データ削減部１１３は、送信対象データを含むファイルのファイル名、送信対象データを含むファイル内における該送信対象データの書き込み開始位置、データバッファの長さ、データバッファ内の送信対象データを取得する。
【０１００】
ＯＰ４２では、送信データ削減部１１３は、オブジェクトＩＤを取得し、キャッシュ１１８内の該オブジェクトＩＤに対応する領域を特定する。
【０１０１】
ＯＰ４３では、送信データ削減部１１３は、データ開始位置、データ現在位置、及びチャンク開始位置を書き込み開始位置に設定する。送信データ削減部１１３は、一致長を０に設定する。送信データ削減部１１３は、全一致長を０に設定する。送信データ削減部１１３は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅをｔｒｕｅに設定する。また、キャッシュ現在位置は、キャッシュ１１８内の該当するファイルにおける現在の参照位置を示すパラメータであり、送信対象データの書込み開始位置が０である場合に、０に設定され、以降は、同ファイルの前回の送信対象データの処理終了時の値が引き継いで用いられる。キャッシュ開始位置は、ＯＰ４３において、キャッシュ現在位置に設定される。
【０１０２】
一致長は、送信対象データとキャッシュ１１８内のデータとが連続して一致する長さを示すパラメータである。全一致長とは、送信対象データとキャッシュ１１８内のデータとが一致する長さの総合計を示すパラメータである。
【０１０３】
ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅは、送信対象データのチェック方法を示す。ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅの場合には、送信対象データとキャッシュ１１８内のデータとの単純なメモリ比較が行われる。ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｆａｌｓｅの場合には、送信対象データがチャンクに分割され、チャンクのハッシュ値が算出され、該ハッシュ値でハッシュテーブル１１９が検索される処理が行われる。ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅの場合の処理は、「第１の処理」の一例である。ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｆａｌｓｅの場合の処理は、「第２の処理」の一例である。
【０１０４】
ＯＰ４４では、送信データ削減部１１３は、送信対象データについて、処理が終了したか否かを判定する。送信対象データについて処理が終了した場合には（ＯＰ４４：ＹＥＳ）、処理がＯＰ４５に進む。送信対象データについて処理が終了していない場合には（ＯＰ４４：ＮＯ）、処理がＯＰ４６に進む。
【０１０５】
ＯＰ４５では、送信対象データについての処理が終了したので、データ終了処理が行われる。データ終了処理の詳細は後述される。データ終了処理の完了後、図１７Ａに示される処理が終了する。
【０１０６】
ＯＰ４６では、送信データ削減部１１３は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅであるか否かを判定する。ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅの場合には（ＯＰ４６：ＹＥＳ）、処理がＯＰ４７に進む。ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｆａｌｓｅの場合には、処理がＯＰ５１に進む。
【０１０７】
ＯＰ４７からＯＰ５０の処理は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅの場合の処理である。ＯＰ４７では、送信データ削減部１１３は、キャッシュ１１８のキャッシュ現在位置と送信対象データのデータ現在位置とのデータを照合する。
【０１０８】
ＯＰ４８では、送信データ削減部１１３は、キャッシュ１１８のキャッシュ現在位置と送信対象データのデータ現在位置とのデータが一致するか否かを判定する。キャッシュ１１８のキャッシュ現在位置と送信対象データのデータ現在位置とのデータが一致する場合には（ＯＰ４８：ＹＥＳ）、処理がＯＰ４９に進む。キャッシュ１１８のキャッシュ現在位置と送信対象データのデータ現在位置とのデータが一致しない場合には（ＯＰ４８：ＮＯ）、処理がＯＰ５０に進む。
【０１０９】
ＯＰ４９では、キャッシュ１１８のキャッシュ現在位置と送信対象データのデータ現在位置とのデータが一致するので、送信データ削減部１１３は、データ現在位置、キャッシュ現在位置、一致長、全一致長のそれぞれの値に１バイトを加算して更新する。次に処理がＯＰ４４に進む。
【０１１０】
ＯＰ５０では、送信データ削減部１１３は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅをｆａｌｓｅに設定する。送信データ削減部１１３は、一致長をデータ現在位置からデータ開始位置を減じた値に更新する。送信データ削減部１１３は、全一致長を、更新後の一致長を加算した値に更新する。送信データ削減部１１３は、一致長が０より大きい場合に、送信対象データにおける一致開始の位置（開始位置）とキャッシュ１１８内のデータにおける一致開始の位置（キャッシュ開始位置）と、更新後の一致長と、を送信パケットのフラグが１のデータ部に追加する。次に、送信データは一致長を０に設定する。送信データ削減部１１３は、チャンク開始位置をデータ現在位置に設定する。次に処理がＯＰ４４に進む。
【０１１１】
図１７ＢのＯＰ５１からＯＰ５６の処理は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｆａｌｓｅの場合の処理である。ＯＰ５１では、送信データ削減部１１３は、送信対象データのデータ現在位置がチャンク切断位置であるか否かを判定する。送信対象データのデータ現在位置がチャンク切断位置である場合には（ＯＰ５１：ＹＥＳ）、処理がＯＰ５２に進む。送信対象データのデータ現在位置がチャンク切断位置でない場合には（ＯＰ５１：ＮＯ）、処理がＯＰ５６に進む。
【０１１２】
ＯＰ５２では、送信データ削減部１１３は、チャンク開始位置からデータ現在位置までのデータについて、ハッシュ値を算出する。ＯＰ５３では、送信データ削減部１１３は、算出したハッシュ値がハッシュテーブル１１９内に存在するか否かを判定する。
【０１１３】
算出したハッシュ値がハッシュテーブル１１９内に存在する場合には（ＯＰ５３：ＹＥＳ）、処理がＯＰ５４に進む。算出したハッシュ値がハッシュテーブル１１９内に存在しない場合には（ＯＰ５３：ＮＯ）、処理がＯＰ５５に進む。
【０１１４】
ＯＰ５４では、送信データ削減部１１３は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅをｔｒｕｅに設定する。送信データ削減部１１３は、データ開始位置をチャンク開始位置に更新する。データ現在位置は、更新後のデータ開始位置とチャンク長とを加算した値から１バイト減じた値と一致する。送信データ削減部１１３は、キャッシュ開始位置をハッシュテーブルの該当エントリ内のキャッシュ開始位置に更新する。送信データ削減部１１３は、キャッシュ現在位置をキャッシュ開始位置にチャンク長を加算した値に更新する。送信データ削減部１１３は、一致長をチャンク長に更新する。
【０１１５】
ＯＰ５５では、送信データ削減部１１３は、算出したハッシュ値をハッシュテーブル１１９に登録する。送信データ削減部１１３は、チャンク開始位置からデータ現在位置までの新規データを、送信パケットのフラグが１のデータ部に追加する。送信データ削減部１１３は、チャンク開始位置をデータ現在位置に１バイト加算した値に更新する。
【０１１６】
ＯＰ５６では、送信データ削減部１１３は、データ現在位置に１バイトを加算して更新する。その後、処理がＯＰ４４に進む。
【０１１７】
図１８は、データ終了処理のフローチャートの一例である。データ終了処理は、送信対象データについての処理が終了した場合の処理である。
【０１１８】
ＯＰ６１では、送信データ削減部１１３は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅであるか否かを判定する。ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅの場合には（ＯＰ６１：ＹＥＳ）、処理がＯＰ６２に進む。ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｆａｌｓｅの場合には（ＯＰ６１：ＮＯ）、処理がＯＰ６６に進む。
【０１１９】
ＯＰ６２からＯＰ６５は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅの場合、すなわち、送信対象データの末尾とキャッシュ１１８内のデータとが一致している場合の処理である。ＯＰ６２では、送信データ削減部１１３は、一致長をデータ現在位置からデータ開始位置を減じた値に更新する。送信データ削減部１１３は、全一致長を、更新後の一致長を加算した値に更新する。送信データ削減部１１３は、一致長が０より大きい場合には、一致開始の送信対象データにおけるデータの位置とキャッシュ１１８内の位置と、更新後の一致長と、を送信パケットのフラグが１のデータ部に追加する。
【０１２０】
ＯＰ６３では、送信データ削減部１１３は、一致長とデータバッファ長が一致し、且つ、ファイル変更フラグが変更なしであり、且つ、データ開始位置がキャッシュ開始位置であるか否かを判定する。この判定によって、データバッファ内の送信対象データと、キャッシュ１１８内のデータが全一致し、対象のファイルの更新があるか否かが判定される。上記条件が満たされている場合には（ＯＰ６３：ＹＥＳ）、処理がＯＰ６５に進む。上記条件が満たされていない場合には（ＯＰ６３：ＮＯ）、処理がＯＰ６４に進む。
【０１２１】
ＯＰ６４では、上記条件が満たされていないので、データバッファ内の送信対象データとキャッシュ１１８内のデータとが、全一致していない、又は、全一致していても、ファイルの更新によって、開始位置が一致していないことが示される。そのため、送信データ削減部１１３は、送信パケットを送信する。その後、図１８に示される処理が終了する。
【０１２２】
ＯＰ６５では、上記条件が満たされており、データバッファ内の送信対象データとキャッシュ１１８内のデータと、が全一致しており、且つ、開始位置も一致しているので、送信データ削減部１１３は、クライアントアプリケーション２に対して代理応答を行う。このとき、サーバアプリケーション３に対してはデータは送信されない。その後、図１８に示される処理が終了する。
【０１２３】
ＯＰ６６からＯＰ６７の処理は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｆａｌｓｅである場合の処理である。ＯＰ６６では、送信データ削減部１１３は、フラグが１のデータ部の一致長をデータ現在位置からデータ開始位置を減じた値にし、送信パケットに追加する。
【０１２４】
ＯＰ６７では、送信データ削減部１１３は、送信パケットを送信する。その後、図１８に示される処理が終了する。
【０１２５】
図１９は、受信側重複除去装置１Ｂの処理のフローチャートの一例を示す図である。図１９に示される処理は、受信側重複除去装置１Ｂの起動とともに開始され、稼働中は繰り返し実行される。図１９の処理の実行主体はＣＰＵ  １１であるが、便宜上、削減データ復元部１２３を主体として説明する。
【０１２６】
ＯＰ７１では、削減データ復元部１２３は、削減データ受信部１２２を通じて、送信側重複除去装置１Ａからデータを受信する。ＯＰ７２では、削減データ復元部１２３は、データ内のオブジェクトＩＤから、キャッシュ１２８の領域を特定する。
【０１２７】
ＯＰ７３では、削減データ復元部１２３は、受信データが終了したか否かを判定する。受信データが終了している場合には（ＯＰ７３：ＹＥＳ）、図１９に示される処理が終了する。受信データが終了していない場合には（ＯＰ７３：ＮＯ）、処理がＯＰ７４に進む。
【０１２８】
ＯＰ７４では、削減データ復元部１２３は、フラグが０であるか否かを判定する。フラグが０である場合には（ＯＰ７４：ＹＥＳ）、処理がＯＰ７５に進む。フラグが１である場合には（ＯＰ７４：ＮＯ）、処理がＯＰ７９に進む。
【０１２９】
ＯＰ７５からＯＰ７８は、フラグが０である、すなわち、データ部に実データが含まれている場合の処理である。ＯＰ７５では、削減データ復元部１２３は、データ部内の開始位値を読み込む。ＯＰ７６では、削減データ復元部１２３はデータ部内のデータ長を読み込む。ＯＰ７７では、削減データ復元部１２３は、データ部の実データをデータ長分読み込む。
【０１３０】
ＯＰ７８では、削減データ復元部１２３は、読み込んだ実データを、主記憶装置１２内の一時メモリ領域の、ファイルにおける読み込んだ開始位置に書き込む。次に処理がＯＰ７３に進む。
【０１３１】
ＯＰ７９からＯＰ８３の処理は、フラグが１である場合、すなわち、重複データである場合の処理である。ＯＰ７９では、削減データ復元部１２３は、データ部内の開始位値を読み込む。ＯＰ８０では、削減データ復元部１２３はデータ部内の一致長を読み込む。ＯＰ８１では、削減データ復元部１２３は、データ部内のキャッシュ開始位置を読み込む。
【０１３２】
ＯＰ８２では、削減データ復元部１２３は、キャッシュ１２８の、受信データのデータ部から読み込んだキャッシュ開始位置から、受信データのデータ部から読み込んだ一致長分の実データを読み込む。ＯＰ８３では、削減データ復元部１２３は、読み込んだ実データを、主記憶装置１２内の一時メモリ領域のファイルにおける、受信データのデータ部から読み込んだ開始位置に書き込む。次に処理がＯＰ７３に進む。
【０１３３】
なお、ファイルが終了した場合には、一時メモリ領域に書き込まれたデータが、キャッシュ１２８内の該当のオブジェクトＩＤの領域に上書き保存される。また、一時メモリ領域に書き込まれたデータは、受信側重複除去装置１Ｂからサーバアプリケーション３に送信され、サーバアプリケーション３内の該当のファイルが上書き更新される。
【０１３４】
＜具体例＞
図２０は、ファイルの上書き更新の具体例の一例を示す図である。図２０では、クライアントアプリケーションから、ファイルＡの上書き更新要求が送信された場合の例が示される。ファイルＡの更新部分は斜線で示されている。図２０の「送信対象ファイル」は、クライアントアプリケーションから送信され、送信側重複除去装置１Ａのデータバッファに格納されるデータが示されている。図２０では、データバッファのサイズは、８０キロバイトとする。データＡ、データＢ、データＣは、それぞれ、データバッファに格納され、一回の書き込み要求の対象となるデータである。
【０１３５】
ファイルＡは、送信側重複除去装置１Ａのキャッシュ１１８、受信側重複除去装置１Ｂのキャッシュ１２８にそれぞれ更新前の状態で保存されている。なお、図２０に示される例では、クライアントアプリケーション２とサーバアプリケーション３間の接続は既に確立されているものとする。
【０１３６】
Ｓ１１では、送信データ削減部１１３は、クライアントアプリケーション２から、メッセージ「ＯＰＥＮ」が含まれる書き込み要求を受信する（図１５、ＯＰ１１、ＯＰ１２：ＮＯ、ＯＰ１５）。
【０１３７】
Ｓ１２では、送信データ削減部１１３は、サーバアプリケーション３にキャッシュ１１８のファイルＡとサーバアプリケーション３が保持するファイルＡとが一致するか否かを問い合わせる（図１５、ＯＰ１６）。図２０では、サーバアプリケーション３は省略されている。送信データ削減部１１３は、問合せの結果をファイル変更フラグに設定する（図１５、ＯＰ１７）。図２０では、キャッシュ１１８のファイルＡとサーバアプリケーション３が保持するファイルＡとが一致するため、ファイル変更フラグは、変更なしに設定される。
【０１３８】
送信対象データ＃１については、更新部分を含んでおらず、送信対象データとキャッシュ１１８内のデータとが一致するため、図１７ＡのＯＰ４６からＯＰ４９の処理が繰り返し行われる。データＡのデータ終了時には、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅはｔｒｕｅである（図１８、ＯＰ６１：ＹＥＳ）。一致長は８０キロバイトでデータバッファのサイズと一致する。ファイル変更フラグは、変更なしである。データ開始位置とキャッシュ開始位置とは、ともに０バイトで一致する（図１８、ＯＰ６３：ＹＥＳ）。
【０１３９】
そのため、Ｓ１３では、送信データ削減部１１３は、クライアントアプリケーション２に代理応答を行い、受信側重複除去装置１Ｂにはデータを送信しない（図１８、ＯＰ６５）。
【０１４０】
Ｓ１４では、送信データ削減部１１３は、クライアントアプリケーション２から、メッセージ「ＲＥＡＤ」が含まれる書き込み要求を受信する（図１５、ＯＰ１１、ＯＰ１２：ＮＯ、ＯＰ１５）。
【０１４１】
送信対象データ＃２の書込み開始位置は８０キロバイトであるので、データ開始位置は、８０キロバイトである。送信対象データ＃２のキャッシュ開始位置は、送信対象データ＃１の処理の終了時のキャッシュ現在位置であるので、８０キロバイトである。データ＃２は更新部分を含む。送信対象データ＃２を含むファイルの８０キロバイト目から９９９９９バイト目までは、更新されていないので、図１７のＯＰ４６からＯＰ４９の処理が繰り返される。
【０１４２】
送信対象データ＃２を含むファイルの１００キロバイト目から１４９９９９バイト目までは、更新部分である。送信対象データ＃２を含むファイルの１００キロバイト目と、キャッシュ１１８内のファイルＡの１００キロバイト目との比較（図１７Ａ、ＯＰ４７）では、データは一致しない（図１７Ａ、ＯＰ４８：ＮＯ）。
【０１４３】
ここで、フラグが１、開始位置：８０キロバイト、一致長：２０キロバイト（データ現在位置１００キロバイト−データ開始位置８０キロバイト）が格納されたデータ部が送信パケットに追加される（図１７Ａ、ＯＰ５０）。ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｆａｌｓｅに設定される。チャンク開始位置がデータ現在位置の１００キロバイトに設定される。
【０１４４】
以降の送信対象データ＃２を含むファイルの１００キロバイト目から１４９９９９バイト目までは、更新部分であるので、図１７ＡのＯＰ４６：ＮＯ、図１７ＢのＯＰ５１からＯＰ５３、ＯＰ５５からＯＰ５６の処理が繰り返される。
【０１４５】
更新部分の末尾である１４９９９９バイト目の処理において、チャンク開始位置は、データ現在位置に１バイト加算したである１５０キロバイトに設定される（図１７Ｂ、ＯＰ５５）。また、開始位置が１００キロバイト、チャンク長５０キロバイト、送信対象データ＃２を含むファイルの１００キロバイト目から１４９９９９バイト目までの実データを含む、フラグ０のデータ部が送信パケットに追加される。
【０１４６】
送信対象データ＃２を含むファイルの１５０キロバイト目からは、送信対象データ＃２を含むファイルとキャッシュ１１８内のファイルＡとでデータが一致する。そのため、送信対象データ＃２を含むファイルの１５０キロバイト目以降の最初のチャンク切断位置（図１７Ｂ、ＯＰ５１：ＹＥＳ）において、算出されたハッシュ値はハッシュテーブル１１９に存在する（図１７Ｂ、ＯＰ５３：ＹＥＳ）。ハッシュテーブル１１６における該チャンクのエントリには、キャッシュ開始位置１６０キロバイトで登録されているとする。
【０１４７】
このとき、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅに設定される。データ開始位置は、チャンク開始位置である１５０キロバイトに設定される。キャッシュ開始位置は、算出されたハッシュ値のハッシュテーブル１１９内のキャッシュ位置１６０キロバイトに設定される。一致長は、チャンク長、すなわち、送信対象ファイルの１５０キロバイト目から、チャンク切断位置までの長さに設定される。
【０１４８】
送信対象データ＃２を含むファイルの１６０キロバイト目までは、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｔｒｕｅであり（図１７Ａ、ＯＰ４６：ＹＥＳ）、送信対象データ＃２を含むファイルとキャッシュ１１８内のファイルＡとでデータが一致するので、図１７ＡのＯＰ４７からＯＰ４９の処理が繰り返される。
【０１４９】
データ現在位置が１６０キロバイトになると、送信対象データ＃２の処理が終了し（図１７Ａ、ＯＰ４４：ＹＥＳ）、図１８のデータ終了処理が行われる。一致長は、データ現在位置の１６０キロバイトからデータ開始位置の１５０キロバイトが減じられた１０キロバイトである。全一致長は、２０キロバイトに一致長１０キロバイトを加算した３０キロバイトである。また、送信パケットに、開始位置１５０キロバイト、一致長１０キロバイト、キャッシュ開始位置１６０キロバイトを含み、フラグが１のデータ部が追加される（図１８、ＯＰ６２）。
【０１５０】
Ｓ１５では、１回の書き込み要求の対象である送信対象データ＃２について処理が終了するので、送信パケットが受信側重複除去装置１Ｂに送信される。送信パケットの内容は以下の通りである。
・オブジェクトＩＤ（ファイルＡ）
・フラグ（１）、開始位置（８０キロバイト）、一致長（２０キロバイト）、キャッシュ開始位置（８０キロバイト）
・フラグ（０）、開始位置（１００キロバイト）、データ長（５０キロバイト）、実データ
・フラグ（１）、開始位置（１５０キロバイト）、一致長（１０キロバイト）、キャッシュ開始位置（１６０キロバイト）
【０１５１】
受信側重複除去装置１Ｂでは、上記内容のパケットを受信し、一時メモリにファイルＡのデータを書き込む。まず、フラグ（１）、開始位置（８０キロバイト）、一致長（２０キロバイト）、キャッシュ開始位置（８０キロバイト）のデータ部に従い、キャッシュ１２８のファイルＡの８０キロバイトから２０キロバイト分のデータが読み込まれ、該データの一時メモリの８０キロバイトの位置に書き込まれる（図１９、ＯＰ７９〜ＯＰ８３）。
【０１５２】
次に、フラグ（０）、開始位置（１００キロバイト）、データ長（５０キロバイト）、実データのデータ部に従い、一時メモリの１００キロバイト目の位置に５０キロバイト分の実データが書き込まれる（図１９、ＯＰ７５〜ＯＰ７８）。
【０１５３】
フラグ（１）、開始位置（１５０キロバイト）、一致長（１０キロバイト）、キャッシュ開始位置（１６０キロバイト）のデータ部に従い、キャッシュ１２８のファイルＡの１６０キロバイト目から１０キロバイト分のデータが読み込まれ、一時メモリの１５０キロバイトの位置に書き込まれる（図１９、ＯＰ７９〜ＯＰ８３）。
【０１５４】
Ｓ１６では、送信データ削減部１１３は、クライアントアプリケーション２から、メッセージ「ＣＬＯＳＥ」が含まれる書き込み要求を受信する（図１５、ＯＰ１１、ＯＰ１２：ＮＯ、ＯＰ１５）。
【０１５５】
書き込み要求の対象である送信対象データ＃３については、更新部分を含まない。送信対象データ＃３の書き込み開始位置は、１６０キロバイトである。送信対象データ＃３の処理の開始時点で、データ現在位置は１６０キロバイト、一致長及び全一致長は０、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅはｔｒｕｅである。また、キャッシュ開始位置は、送信対象データ＃２の処理の終了時点のキャッシュ現在位置であり、１７０キロバイトである。
【０１５６】
送信対象データ＃３を含むファイルの１６０キロバイト目から２２０キロバイト目までのデータは、キャッシュ１１８内のデータと一致するため、図１７ＡのＯＰ４６からＯＰ４９の処理が繰り返し行われる。送信対象データ＃３のデータ終了時には、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅはｔｒｕｅである（図１８、ＯＰ６１：ＹＥＳ）。一致長及び全一致長は６０キロバイトであり、データバッファのサイズと一致しない。ファイル変更フラグは、変更なしである。データ開始位置１６０キロバイトとキャッシュ開始位置１７０キロバイトとは、一致しない（図１８、ＯＰ６３：ＮＯ）。
【０１５７】
そのため、Ｓ１７では、送信データ削減部１１３は、開始位置１６０キロバイト、一致長６０キロバイト、キャッシュ開始位置１７０キロバイトで、フラグが１のデータ部を含む送信パケットを送信する（図１８、ＯＰ６４）。
【０１５８】
受信側重複除去装置１Ｂは、フラグ（１）、開始位置（１６０キロバイト）、一致長（６０キロバイト）、キャッシュ開始位置（１７０キロバイト）のデータ部を含むパケットを受信する。パケットに従い、キャッシュ１２８のファイルＡの１７０キロバイトから６０キロバイト分のデータが読み込まれ、該データの一時メモリの１６０キロバイトの位置に書き込まれる（図１９、ＯＰ７９〜ＯＰ８３）。
【０１５９】
受信側重複除去装置１Ｂは、一時メモリ内のデータをサーバアプリケーション３に送信する。サーバアプリケーション３は、ファイルＡの８０キロバイト目以降のデータを受信側重複除去装置１Ｂから受信するデータで更新する。
【０１６０】
＜第１実施形態の作用効果＞
図２１は、第１実施形態の作用効果の一例を示す図である。図２１では、１００ＭＢのファイルの中間の１部分が編集されて、該ファイルがサーバにアップロードされる場合について、示されている。
【０１６１】
チャンク（図中、ブロック）は、平均１ＫＢとする。図２１に示されるファイルには、約１０００００個のブロックが含まれる。約１０００００個のブロックのうち、編集によって内容に変化のあるブロックは、中間に位置する１個のブロックであるとする。
【０１６２】
第１実施形態によれば、図２１に示されるファイルについての送信パケットには、フラグが１のデータ部（２４バイト）が２個と、フラグが０のデータ部（１６バイト＋約１ＫＢ）が１個含まれる。すなわち、該送信パケットのサイズは、約１ＫＢである。１００ＭＢのファイルに対して転送されるデータ量が約１ＫＢであるので、転送データの削減率は、１／１０００００となり、転送データの削減率を向上させることができる。
【０１６３】
第１実施形態では、送信側重複除去装置１Ａは、データバッファから読み出された送信対象データと、キャッシュ１１８内のファイルのデータとをバイト単位で先頭から順番に単純なメモリの比較をする。送信対象データとキャッシュ１１８内のファイルのデータとが不一致となる場合には、送信側重複除去装置１Ａは、該不一致部分より前の一致部分のキャッシュ１１８における位置情報を送信パケットに追加する。一致部分の実データの代わりに一致部分のキャッシュ１１８における位置情報を送信するので、転送データの削除率が高くなる。
【０１６４】
キャッシュ１１８内では、オブジェクトに対して、連続する領域が確保され、該領域に順番に連続してチャンクが格納される。これによって、一致部分のキャッシュ１１８における位置情報として、キャッシュ開始位置と一致長とのより少ないデータ量で受信側重複除去装置１Ｂに重複データのキャッシュにおける位置を通知することができる。例えば、チャンクとオブジェクトＩＤとの関連付けなしにキャッシュ１１８にチャンクが格納される場合には、同じオブジェクトのチャンクでも、他のオブジェクトのチャンクによって格納領域が分断される可能性がある。同じオブジェクトのチャンクの格納領域が分断される場合には、一致部分のキャッシュにおける位置情報として、キャッシュ開始位置と一致長とでは、一致部分を特定しきれず、一致部分の情報量が多くなる。したがって、キャッシュ１１８に、オブジェクトに対して、連続する領域が確保され、該領域に順番に連続してチャンクが格納されることは、転送データの削減率の向上に寄与する。また、実データは送信パケットに追加されないので、一致部分が長いほど、転送データの削除率が高くなる。
【０１６５】
次に、送信側重複除去装置１Ａは、送信対象データの不一致部分以降について、チャンクに分割し、該チャンクのハッシュ値を算出し、該ハッシュ値でハッシュテーブル１１９を検索する。該チャンクのハッシュ値がハッシュテーブル１１９にない場合には、送信側重複除去装置１Ａは、該チャンクの実データを送信パケットに追加する。該チャンクのハッシュ値がハッシュテーブル１１９にある場合には、送信側重複除去装置１Ａは、それ以降のデータについて、送信対象データと、キャッシュ１１８内のファイルのデータとの単純なメモリの比較の処理を再開する。
【０１６６】
チャンクは、切断条件のパターンの出現位置によって区切られるので、更新部分を含むチャンクは更新の前後でチャンク長やハッシュ値が変わるものの、更新部分の直後の切断条件のパターンの出現位置は移動するだけである。そのため、更新部分より後ろの更新のないチャンクは、該更新の前後でチャンク長及びハッシュ値が変わらずに、チャンクのハッシュ値によるハッシュテーブル１１９の検索によって、検出される。これによって、更新部分の終わり、すなわち、送信対象データとキャッシュ１１８内のファイルのデータとの一致が再開する位置をより適正に検出することができる。これによって、受信側重複除去装置１Ｂに送信される更新部分を含む実データの量をより少なく抑えることができる。また、送信対象データをチャンクに分割し、チャンクのハッシュ値を算出する処理をより少なく抑えることができ、送信側重複除去装置１ＡのＣＰＵ  １１にかかる負荷を軽減することができる。
【０１６７】
また、第１実施形態では、送信側重複除去装置１Ａは、送信対象データと、キャッシュ１１８内のファイルのデータとの単純なメモリの比較をして、全データが一致した場合には、クライアントアプリケーション２に代理応答を行う。このとき、送信側重複除去装置１Ａは、受信側重複除去装置１Ｂに対してはデータの送信を行わない。したがって、第１実施形態によれば、転送データの削減率を向上させることができる。
【０１６８】
また、送信側重複除去装置１Ａは、送信対象データとキャッシュ１１８内のファイルのデータとの一致部分のキャッシュ１１８における位置情報として、送信対象データを含むファイル内の開始位置と、一致長と、キャッシュ１１８内におけるキャッシュ開始位置とを送信する。例えば、更新によって該一致部分の位置が移動することがある。この場合には、更新後のデータである送信対象データを含むファイルにおける該一致部分の開始位置と、更新前のデータであるキャッシュ１１８内のファイルにおける該一致部分の開始位置とが異なることがある。このような場合でも、一致部分のキャッシュ１１８における位置情報としてキャッシュ開始位置が含まれることによって、受信側重複除去装置１Ｂは、キャッシュ開始位置を頼りに、更新前のキャッシュ１２８内のファイルの適正な位置からデータを読み込むことができる。
【０１６９】
遠隔のファイルサーバに対して、ファイルの上書き更新を行う場合には、クライアントアプリケーション２とサーバアプリケーション３間で、ファイルの整合性を保つためのやり取りが行われることが一般的である。しかしながら、第１実施形態によれば、重複除去処理における送信パケットによって、更新前及び更新後のデータの位置を適正に受信側重複除去装置１Ｂに通知することができ、ファイルの整合性を保つことができる。したがって、第１実施形態によれば、アプリケーションレベルでのファイルの整合性を保つためのやり取りを省略することができる。
【０１７０】
＜記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１７１】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる非一時的な記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、ＳＳＤ（Solid State Drive）は、コンピュータ等から取り外し可能な記録媒体としても、コンピュータ等に固定された記録媒体としても利用可能である。
【０１７２】
＜その他＞
上記実施形態は、さらに以下の付記を開示する。
（付記１）
送信実績のあるオブジェクトの識別情報と、前記オブジェクトの、所定パターンのビット列の出現位置で区切られた複数のデータブロックそれぞれの識別情報と、を対応付けて記憶する第１の記憶部と、
前記送信実績のあるオブジェクトの識別情報と、該オブジェクトの前記複数のデータブロックとを対応付けて記憶する第２の記憶部と、
送信対象オブジェクトと、該送信対象オブジェクトの識別情報と合致する前記第２の記憶部に記憶されるオブジェクトと、の間でデータの比較を行う第１の処理と、前記送信対象オブジェクトのデータを前記所定のパターンのビット列の出現位置で区切ってデータブロックを抽出し、該データブロックの識別情報を算出し、該データブロックの識別情報で前記第１の記憶部を検索する第２の処理と、を行う制御部とを備え、
前記制御部は、
前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのデータの不一致部分を検出し、該不一致部分より前に一致部分がある場合には、少なくとも前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の位置情報を送信し、前記送信対象オブジェクトにおける前記不一致部分の開始位置以降のデータについて、前記第２の処理を行い、
前記第２の処理において、データブロックの識別情報が前記第１の記憶部にない場合には、該データブロックを送信し、該データブロックの識別情報が前記第１の記憶部にある場合には、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのそれぞれにおける該データブロック以降のデータについて、前記第１の処理を行う、
情報処理装置。
（付記２）
前記第２の記憶部は、前記送信実績のあるオブジェクトに対して確保される連続する領域に、前記複数のデータブロックを順番通りに連続して記憶し、
前記制御部は、前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのデータの前記不一致部分より前に一致部分がある場合には、前記送信対象オブジェクトにおける前記一致部分の開始位置と、前記一致部分の長さと、前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の開始位置と、を送信する、
付記１に記載の情報処理装置。
（付記３）
前記制御部は、前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとの間のデータの比較の結果、不一致部分を検出しない場合には、前記送信対象オブジェクトの送信元装置に対して代理応答を行う、
付記１又は２に記載の情報処理装置。
（付記４）
前記制御部は、前記第２の処理において、前記送信対象オブジェクトの末尾のデータの処理が終了し、該末尾のデータに前記所定のパターンのビット列が出現しない場合には、直前のデータブロックの終了位置から前記末尾のデータまでの実データを送信する、
付記１から３のいずれか一つに記載の情報処理装置。
（付記５）
前記制御部は、前記第２の処理において、前記データブロックの識別情報が前記第１の記憶部にない場合には、該データブロックの識別情報を前記第１の記憶部に登録し、該データブロックを前記第２の記憶部に登録する、
付記１から４のいずれか一つに記載の情報処理装置。
（付記６）
コンピュータが、
送信実績のあるオブジェクトの識別情報と、前記オブジェクトの、所定パターンのビット列の出現位置で区切られた複数のデータブロックそれぞれの識別情報と、を対応付けて第１の記憶部に記憶し、
前記送信実績のあるオブジェクトの識別情報と、該オブジェクトの前記複数のデータブロックとを対応付けて第２の記憶部に記憶し、
送信対象オブジェクトと、該送信対象オブジェクトの識別情報と合致する前記第２の記憶部に記憶されるオブジェクトと、の間でデータの比較を行う第１の処理と、前記送信対象オブジェクトのデータを前記所定のパターンのビット列の出現位置で区切ってデータブロックを抽出し、該データブロックの識別情報を算出し、該データブロックの識別情報で前記第１の記憶部を検索する第２の処理と、を行い、
前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのデータの不一致部分を検出し、該不一致部分より前に一致部分がある場合には、少なくとも前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の位置情報を送信し、前記送信対象オブジェクトにおける前記不一致部分の開始位置以降のデータについて、前記第２の処理を行い、
前記第２の処理において、データブロックの識別情報が前記第１の記憶部にない場合には、該データブロックを送信し、該データブロックの識別情報が前記第１の記憶部にある場合には、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのそれぞれにおける該データブロック以降のデータについて、前記第１の処理を行う、
情報処理方法。
（付記７）
コンピュータに、
送信実績のあるオブジェクトの識別情報と、前記オブジェクトの、所定パターンのビット列の出現位置で区切られた複数のデータブロックそれぞれの識別情報と、を対応付けて第１の記憶部に記憶させ、
前記送信実績のあるオブジェクトの識別情報と、該オブジェクトの前記複数のデータブロックとを対応付けて第２の記憶部に記憶させ、
送信対象オブジェクトと、該送信対象オブジェクトの識別情報と合致する前記第２の記憶部に記憶されるオブジェクトと、の間でデータの比較を行う第１の処理と、前記送信対象オブジェクトのデータを前記所定のパターンのビット列の出現位置で区切ってデータブロックを抽出し、該データブロックの識別情報を算出し、該データブロックの識別情報で前記第１の記憶部を検索する第２の処理と、を行わせ、
前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのデータの不一致部分を検出し、該不一致部分より前に一致部分がある場合には、少なくとも前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の位置情報を送信し、前記送信対象オブジェクトにおける前記不一致部分の開始位置以降のデータについて、前記第２の処理を行わせ、
前記第２の処理において、データブロックの識別情報が前記第１の記憶部にない場合には、該データブロックを送信し、該データブロックの識別情報が前記第１の記憶部にある場合には、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのそれぞれにおける該データブロック以降のデータについて、前記第１の処理を行わせる、
ための情報処理プログラム。
（付記８）
送信実績のあるオブジェクトの識別情報と、前記オブジェクトの、所定パターンのビット列の出現位置で区切られた複数のデータブロックそれぞれの識別情報と、を対応付けて記憶する第１の記憶部と、
前記送信実績のあるオブジェクトの識別情報と、該オブジェクトの前記複数のデータブロックとを対応付けて記憶する第２の記憶部と、
送信対象オブジェクトと、該送信対象オブジェクトの識別情報と合致する前記第２の記憶部に記憶されるオブジェクトと、の間でデータの比較を行う第１の処理と、前記送信対象オブジェクトのデータを前記所定のパターンのビット列の出現位置で区切ってデータブロックを抽出し、該データブロックの識別情報を算出し、該データブロックの識別情報で前記第１の記憶部を検索する第２の処理と、を行う制御部とを備え、
前記制御部は、
前記第１の処理において、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのデータの不一致部分を検出し、該不一致部分より前に一致部分がある場合には、少なくとも前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の位置情報を送信し、前記送信対象オブジェクトにおける前記不一致部分の開始位置以降のデータについて、前記第２の処理を行い、
前記第２の処理において、データブロックの識別情報が前記第１の記憶部にない場合には、該データブロックを送信し、該データブロックの識別情報が前記第１の記憶部にある場合には、前記送信対象オブジェクトと前記第２の記憶部に記憶されるオブジェクトとのそれぞれにおける該データブロック以降のデータについて、前記第１の処理を行う、
送信側装置と、
前記送信実績のあるオブジェクトを記憶する記憶部と、
前記送信側装置から、前記第２の記憶部に記憶されるオブジェクトにおける前記一致部分の位置情報を受信した場合には、該位置情報に基づいて、前記記憶部から、前記第２の記憶部に記憶されるオブジェクトの前記一致部分を読み出して、復元オブジェクトに追加し、
前記送信側装置から、前記データブロックを受信した場合には、該データブロックを前記復元オブジェクトに追加する、
受信側装置と、
を含む情報処理システム。
【符号の説明】
【０１７３】
１      重複除去装置
２      送信元装置、クライアントアプリケーション
３      宛先装置、ファイルサーバ、サーバアプリケーション
１１    ＣＰＵ
１２    主記憶装置
１５    補助記憶装置
１７    ネットワークインタフェース
１１１  接続受付部
１１２  送信データ受信部
１１３  送信データ削減部
１１４  削減データ送信部
１１５  応答転送受信部
１１６  アプリ応答送信部
１１７  切断受付部
１１８  キャッシュ
１１９  ハッシュテーブル
１２１  サーバ接続部
１２２  削減データ受信部
１２３  削減データ復元部
１２４  復元データ送信部
１２５  アプリ応答受信部
１２６  アプリ応答転送部
１２７  サーバ切断部
１２８  キャッシュ
【図１】
2017022034.tif 000003
【図２】
2017022034.tif 000004
【図３】
2017022034.tif 000005
【図４】
2017022034.tif 000006
【図５】
2017022034.tif 000007
【図６】
2017022034.tif 000008
【図７】
2017022034.tif 000009
【図８】
2017022034.tif 000010
【図９】
2017022034.tif 000011
【図１０】
2017022034.tif 000012
【図１１】
2017022034.tif 000013
【図１２】
2017022034.tif 000014
【図１３】
2017022034.tif 000015
【図１４】
2017022034.tif 000016
【図１５】
2017022034.tif 000017
【図１６】
2017022034.tif 000018
【図１７Ａ】
2017022034.tif 000019
【図１７Ｂ】
2017022034.tif 000020
【図１８】
2017022034.tif 000021
【図１９】
2017022034.tif 000022
【図２０】
2017022034.tif 000023
【図２１】
2017022034.tif 000024
【手続補正書】
【提出日】平成30年1月19日(2018.1.19)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００４１
【補正方法】変更
【補正の内容】
【００４１】
送信データ削減部１１３は、送信データ受信部１１２から入力される送信対象データに過去の転送データとの重複があるか否かを判定し、重複するデータについては、代替情報を作成する。送信データ削減部１１３は、重複データの削減後であり代替情報を含む送信対象データを、削減データ送信部１１４に出力する。重複するデータの代替情報の詳細、送信データ削減部１１３の処理の詳細については後述される。送信データ削減部１１３は、「制御部」の一例である。削減データ送信部１１４は、送信データ削減部１１３から入力される、重複データの削減後の送信対象データを宛先装置３に送信する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００４４
【補正方法】変更
【補正の内容】
【００４４】
キャッシュ１１８は、例えば、補助記憶装置１５の記憶領域に作成される。なお、キャッシュ１１８に用いられる補助記憶装置１５は、送信側重複除去装置１Ａに内蔵されていてもよく、外付けされていてもよい。キャッシュ１１８は、オブジェクトＩＤごとに連続領域が確保されており、各オブジェクトの連続領域には、該オブジェクトのチャンクが順番に連続して格納されている。キャッシュ１１８内の各オブジェクトに確保される連続領域のサイズは、予め決められたサイズであってもよいし、オブジェクトのサイズに応じて設定されてもよい。キャッシュ１１８は、「第２の記憶部」の一例である。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００４８
【補正方法】変更
【補正の内容】
【００４８】
削減データ復元部１２３は、送信側重複除去装置１Ａによって転送されたデータに重複データの代替情報が含まれている場合には、該代替情報に合致するデータをキャッシュ１２８から読み出して復元する。削減データ復元部１２３は、復元したデータを含む受信デ
ータを復元データ送信部１２４に出力する。復元データ送信部１２４は、削減データ復元部１２３から入力されるデータを、サーバアプリケーション３に送信する。なお、削減データ復元部１２３は、送信側重複除去装置１Ａによって転送されたデータに、新規データが含まれている場合には、該新規データをキャッシュ１２８に保存する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００５１
【補正方法】変更
【補正の内容】
【００５１】
キャッシュ１２８は、例えば、受信側重複除去装置１Ｂの補助記憶装置１５の記憶領域に作成される。なお、キャッシュ１２８に用いられる補助記憶装置１５は、受信側重複除去装置１Ｂに内蔵されていてもよく、外付けされていてもよい。キャッシュ１２８には、送信側重複除去装置１Ａのキャッシュ１１８と同様に、オブジェクトＩＤごとに連続領域が確保されており、各オブジェクトの連続領域には、該オブジェクトのチャンクが順番に連続して格納されている。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００８２
【補正方法】変更
【補正の内容】
【００８２】
ＯＰ１４では、送信データ削減部１１３は、書込要求の対象の送信対象データを、削減データ送信部１１４に出力する。削減データ送信部１１４によって、送信対象データが受信側重複除去装置１Ｂに転送される。その後、図１５に示される処理が終了する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００８３
【補正方法】変更
【補正の内容】
【００８３】
ＯＰ１５では、送信データ削減部１１３は、書込要求に含まれるメッセージを判定する。書込要求に含まれるメッセージには、例えば、ファイルの開始を示す「ＯＰＥＮ」、ファイルの途中のデータであることを示す「ＲＥＡＤ」、ファイルの終了を示す「ＣＬＯＳＥ」がある。書込要求に含まれるメッセージが「ＯＰＥＮ」である場合には、処理がＯＰ１６に進む。書込要求に含まれるメッセージが「ＲＥＡＤ」である場合には、処理がＯＰ１８に進む。書込要求に含まれるメッセージが「ＣＬＯＳＥ」である場合には、処理がＯＰ２０に進む。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００８４
【補正方法】変更
【補正の内容】
【００８４】
ＯＰ１６では、送信データ削減部１１３は、書込要求の対象のファイルについて、キャッシュ１１８に格納されているデータと、サーバアプリケーション３が保持しているデータとが一致するか否かを問い合わせる。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００８５
【補正方法】変更
【補正の内容】
【００８５】
ＯＰ１７では、送信データ削減部１１３は、ＯＰ１６の問い合わせの結果をファイル変更フラグに設定する。書込要求の対象のファイルについて、キャッシュ１１８に格納されているデータと、サーバアプリケーション３が保持しているデータとが一致するか否かに応じて、ファイル変更フラグは、「変更無し」、「変更有り」のいずれかを示す値に設定される。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００８６
【補正方法】変更
【補正の内容】
【００８６】
ＯＰ１８、ＯＰ２０では、送信データ削減部１１３は、サーバアプリケーション３に保存されているデータを更新するための情報を生成する処理であるＯｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ更新処理を行う。Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ更新処理では、例えば、図１０に示されるフォーマットの送信パケットが作成される。Ｏｂｊｅｃｔ−ｌｉｎｋｅｄ  ｃｈｕｎｋ更新処理の詳細は、後述される。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００８７
【補正方法】変更
【補正の内容】
【００８７】
ＯＰ１９、ＯＰ２１では、送信データ削減部１１３は、ＯＰ１８、ＯＰ２０で作成される送信パケットを受信側重複除去装置１Ｂに送信する。ＯＰ１９の処理の後には、図１５に示される処理が終了する。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】０１１０
【補正方法】変更
【補正の内容】
【０１１０】
ＯＰ５０では、送信データ削減部１１３は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅをｆａｌｓｅに設定する。送信データ削減部１１３は、一致長をデータ現在位置からデータ開始位置を減じた値に更新する。送信データ削減部１１３は、一致長が０より大きい場合に、送信対象データにおける一致開始の位置（開始位置）とキャッシュ１１８内のデータにおける一致開始の位置（キャッシュ開始位置）と、更新後の一致長と、を送信パケットのフラグが１のデータ部に追加する。次に、送信データ削減部１１３は一致長を０に設定する。送信データ削減部１１３は、チャンク開始位置をデータ現在位置に設定する。送信データ削減部１１３は、データ開始位置をチャンク開始位置に設定する。次に処理がＯＰ４４に
進む。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】０１１５
【補正方法】変更
【補正の内容】
【０１１５】
ＯＰ５５では、送信データ削減部１１３は、算出したハッシュ値をハッシュテーブル１１９に登録する。送信データ削減部１１３は、チャンク開始位置からデータ現在位置までの新規データを、送信パケットのフラグが０のデータ部に追加する。送信データ削減部１１３は、チャンク開始位置をデータ現在位置に１バイト加算した値に更新する。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】０１２３
【補正方法】変更
【補正の内容】
【０１２３】
ＯＰ６６からＯＰ６７の処理は、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅがｆａｌｓｅである場合の処理である。ＯＰ６６では、送信データ削減部１１３は、フラグが０のデータ部のデータ長をデータ現在位置からデータ開始位置（チャンク開始位置）を減じた値にし、チャンク開始位置から末尾のデータまでの新規データを当該データ部に追加する。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】０１２９
【補正方法】変更
【補正の内容】
【０１２９】
ＯＰ７５からＯＰ７８は、フラグが０である、すなわち、データ部に実データが含まれている場合の処理である。ＯＰ７５では、削減データ復元部１２３は、データ部内の開始位置を読み込む。ＯＰ７６では、削減データ復元部１２３はデータ部内のデータ長を読み込む。ＯＰ７７では、削減データ復元部１２３は、データ部の実データをデータ長分読み込む。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】０１３１
【補正方法】変更
【補正の内容】
【０１３１】
ＯＰ７９からＯＰ８３の処理は、フラグが１である場合、すなわち、重複データである場合の処理である。ＯＰ７９では、削減データ復元部１２３は、データ部内の開始位置を読み込む。ＯＰ８０では、削減データ復元部１２３はデータ部内の一致長を読み込む。ＯＰ８１では、削減データ復元部１２３は、データ部内のキャッシュ開始位置を読み込む。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】０１３４
【補正方法】変更
【補正の内容】
【０１３４】
＜具体例＞
図２０は、ファイルの上書き更新の具体例の一例を示す図である。図２０では、クライアントアプリケーションから、ファイルＡの上書き更新要求が送信された場合の例が示される。ファイルＡの更新部分は斜線で示されている。図２０の「送信対象ファイル」は、クライアントアプリケーションから送信され、送信側重複除去装置１Ａのデータバッファに格納されるデータが示されている。図２０では、データバッファのサイズは、８０キロバイトとする。データ＃１、データ＃２、データ＃３は、それぞれ、データバッファに格納され、一回の書き込み要求の対象となるデータである。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】０１３８
【補正方法】変更
【補正の内容】
【０１３８】
送信対象データ＃１については、更新部分を含んでおらず、送信対象データとキャッシュ１１８内のデータとが一致するため、図１７ＡのＯＰ４６からＯＰ４９の処理が繰り返し行われる。データ＃１のデータ終了時には、ＯｂｊｅｃｔＣｈｅｃｋＭｏｄｅはｔｒｕｅである（図１８、ＯＰ６１：ＹＥＳ）。一致長は８０キロバイトでデータバッファのサイズと一致する。ファイル変更フラグは、変更なしである。データ開始位置とキャッシュ開始位置とは、ともに０バイトで一致する（図１８、ＯＰ６３：ＹＥＳ）。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】０１４１
【補正方法】変更
【補正の内容】
【０１４１】
送信対象データ＃２の書込み開始位置は８０キロバイトであるので、データ開始位置は、８０キロバイトである。送信対象データ＃２のキャッシュ開始位置は、送信対象データ＃１の処理の終了時のキャッシュ現在位置であるので、８０キロバイトである。データ＃２は更新部分を含む。送信対象データ＃２を含むファイルの８０キロバイト目から９９９９９バイト目までは、更新されていないので、図１７ＡのＯＰ４６からＯＰ４９の処理が繰り返される。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】０１４６
【補正方法】変更
【補正の内容】
【０１４６】
送信対象データ＃２を含むファイルの１５０キロバイト目からは、送信対象データ＃２を含むファイルとキャッシュ１１８内のファイルＡとでデータが一致する。そのため、送信対象データ＃２を含むファイルの１５０キロバイト目以降の最初のチャンク切断位置（図１７Ｂ、ＯＰ５１：ＹＥＳ）において、算出されたハッシュ値はハッシュテーブル１１９に存在する（図１７Ｂ、ＯＰ５３：ＹＥＳ）。ハッシュテーブル１１９における該チャンクのエントリには、キャッシュ開始位置１６０キロバイトで登録されているとする。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】０１５８
【補正方法】変更
【補正の内容】
【０１５８】
受信側重複除去装置１Ｂは、フラグ（１）、開始位置（１６０キロバイト）、一致長（６０キロバイト）、キャッシュ開始位置（１７０キロバイト）のデータ部を含むパケットを受信する。パケットに従い、キャッシュ１２８のファイルＡの１７０キロバイト目から６０キロバイト分のデータが読み込まれ、該データの一時メモリの１６０キロバイトの位置に書き込まれる（図１９、ＯＰ７９〜ＯＰ８３）。
【手続補正２１】
【補正対象書類名】図面
【補正対象項目名】図１４
【補正方法】変更
【補正の内容】
【図１４】
2017022034.tif 000025
【手続補正２２】
【補正対象書類名】図面
【補正対象項目名】図１７Ａ
【補正方法】変更
【補正の内容】
【図１７Ａ】
2017022034.tif 000026
【手続補正２３】
【補正対象書類名】図面
【補正対象項目名】図１８
【補正方法】変更
【補正の内容】
【図１８】
2017022034.tif 000027
【国際調査報告】
2017022034.tif 000028
2017022034.tif 000029
2017022034.tif 000030
2017022034.tif 000031