(57)【特許請求の範囲】
【請求項１】
データ・パッケージを管理する方法であって、前記方法は、
第一コンピュータが、ネットワークの利用度がネットワーク利用度閾値を上回ることを判定するステップであって、前記ネットワークは前記第一コンピュータと第二コンピュータとを含む、前記判定するステップ、および
前記ネットワークの前記利用度が前記ネットワーク利用度閾値を上回るのに基づいて、前記第一コンピュータは重複排除モードに入り、続いて前記重複排除モードにおいて諸ステップを実施するステップ、
を含み、前記諸ステップには、
前記第一コンピュータが、前記第二コンピュータに、前記第一コンピュータが前記重複排除モードに入ったことの通知を送信するステップと、
前記第一コンピュータが、前記第一コンピュータに含まれる中央処理ユニット（ＣＰＵ）の利用度がＣＰＵ利用度閾値を上回っているかどうかを判定するステップと、
前記ＣＰＵの前記利用度が前記ＣＰＵ利用度閾値を上回る場合は、前記第一コンピュータが第二ハッシュ関数の代わりに第一ハッシュ関数を選択し、前記ＣＰＵの前記利用度が前記ＣＰＵ利用度閾値以下の場合は、前記第一ハッシュ関数の代わりに前記第二ハッシュ関数を選択するステップと、
前記第一コンピュータが、前記選択された第一または第二ハッシュ関数を用いて前記データ・パッケージのハッシュ・ダイジェストを算定するステップと、
前記第一コンピュータが、前記ハッシュ・ダイジェストが前記第一コンピュータに連結された送信側ハッシュ・テーブル中に在るかどうかを判定するステップと、
前記ハッシュ・ダイジェストが前記送信側ハッシュ・テーブル中に在る場合、前記第一コンピュータは前記第二コンピュータに前記データ・パッケージを送信せずに、前記第一コンピュータが、前記第二コンピュータに、前記ハッシュ・ダイジェスト、前記送信側ハッシュ・テーブル中および前記第二コンピュータに連結された受信側ハッシュ・テーブル中の前記ハッシュ・ダイジェスを参照するインデックス、並びに随意的に、前記選択された第一または第二ハッシュ関数の識別子を送信するステップと、
前記ハッシュ・ダイジェストが前記送信側ハッシュ・テーブル中にない場合、前記第一コンピュータは、前記データ・パッケージおよび前記ハッシュ・ダイジェストを前記送信側ハッシュ・テーブルに追加し、前記ハッシュ・ダイジェストに基づいて前記データ・パッケージが完全性を有するかどうかを判定するために、前記データ・パッケージ、前記ハッシュ・ダイジェスト、および前記選択された第一または第二ハッシュ関数の前記識別子を前記第二コンピュータに送信するステップと、
が含まれる、
方法。
【請求項２】
前記第二コンピュータが、前記第一コンピュータが前記重複排除モードに入ったことの前記通知を受信するステップであって、前記第一コンピュータは前記ハッシュ・ダイジェストが前記送信側ハッシュ・テーブル中に在ると判定し、前記第一コンピュータが、前記第二コンピュータに、前記ハッシュ・ダイジェスト、前記送信側ハッシュ・テーブル中および前記受信側ハッシュ・テーブル中の前記ハッシュ・ダイジェストを参照する前記インデックス、および前記選択された第一または第二ハッシュ関数の識別子を送信し、これに応じて、
前記第一コンピュータが前記重複排除モードに入ったとの前記受信された通知に基づいて、前記第二コンピュータが、前記データ・パッケージは、前記ハッシュ・ダイジェスト、前記インデックス、および前記識別子と一緒に受信されていないと判定するステップと、
前記第二コンピュータが、前記ハッシュ・ダイジェスト、前記インデックス、および前記選択された第一または第二ハッシュ関数の前記識別子を受信するステップと、
前記第二コンピュータが前記データ・パッケージは受信されていないと判定するのに応じ、前記インデックスに基づいて、前記第二コンピュータが、前記受信側ハッシュ・テーブル中の前記ハッシュ・ダイジェストを見出すステップと、
前記第二コンピュータが、前記受信側ハッシュ・テーブル中で見出された前記ハッシュ・ダイジェストが前記受信したハッシュ・ダイジェストと一致することを判定するステップと、
前記見出されたハッシュ・ダイジェストが前記受信したハッシュ・ダイジェストと一致するのに基づいて、前記第二コンピュータが、前記受信側ハッシュ・テーブル中の前記見出されたハッシュ・ダイジェストに関連付けられた前記データ・パッケージを読み出すステップと、
前記受信した識別子に基づいて、前記第二コンピュータが、前記選択された第一または第二ハッシュ関数を特定し、前記読み出されたデータ・パッケージに対し前記選択された第一または第二ハッシュ関数を用いることによって、新規ハッシュ・ダイジェストを算定するステップと、
前記第二コンピュータが、前記新規ハッシュ・ダイジェストが前記受信したハッシュ・ダイジェストと一致するかどうかを判定するステップと、
前記新規ハッシュ・ダイジェストが前記受信したハッシュ・ダイジェストと一致する場合、前記第二コンピュータが、前記読み出されたデータ・パッケージをアプリケーションに送るステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記第一コンピュータが、前記ハッシュ・ダイジェストが前記送信側ハッシュ・テーブル中にないと判定し、前記方法が、
前記ハッシュ・ダイジェストが前記送信側ハッシュ・テーブル中にないと判定する前記ステップに続いて、前記第一コンピュータが、前記ハッシュ・ダイジェストおよび前記選択された第一または第二ハッシュ関数の前記識別子を、通信パッケージに含まれるメタデータ中に組み込み、前記データ・パッケージを前記通信パッケージに組み込み、前記通信パッケージを前記第二コンピュータに送信するステップと、
前記第一コンピュータが、前記第二コンピュータに、前記通信パッケージを送信する前記ステップに応じ、前記第二コンピュータが、前記通信パッケージを受信することによって、前記ハッシュ・ダイジェスト、前記選択された第一または第二ハッシュ関数の前記識別子、および前記データ・パッケージを受信するステップと、
前記選択された第一または第二ハッシュ関数の前記受信した識別子に基づいて、前記第二コンピュータが、前記受信したデータ・パッケージに対し前記選択された第一または第二ハッシュ関数を用いることによって、新規ハッシュ・ダイジェストを算定するステップと、
前記第二コンピュータが、前記受信したハッシュ・ダイジェストが前記新規ハッシュ・ダイジェストと一致するかどうかを判定し、前記受信したハッシュ・ダイジェストが前記新規ハッシュ・ダイジェストと一致する場合にあっては、前記第二コンピュータは前記データ・パッケージが完全性を有すると判定し、これに応じて、前記第二コンピュータが、前記データ・パッケージおよび前記ハッシュ・ダイジェストを前記受信側ハッシュ・テーブルに追加し、前記データ・パッケージをアプリケーションに送り、前記受信したハッシュ・ダイジェストが前記新規ハッシュ・ダイジェストと一致しない場合にあっては、前記第二コンピュータは前記第一コンピュータに、前記データ・パッケージが完全性を有さないことを通知し、これに応じて、前記第一コンピュータが、前記第二コンピュータに、前記データ・パッケージおよび前記ハッシュ・ダイジェストを再送信するステップと、
をさらに含む、請求項１に記載の方法。
【請求項４】
前記第二コンピュータが前記受信したハッシュ・ダイジェストは前記新規ハッシュ・ダイジェストと一致すると判定し、前記第二コンピュータが、前記データ・パッケージおよび前記ハッシュ・ダイジェストを前記受信側ハッシュ・テーブルに追加し、前記方法は、
前記第一コンピュータが前記データ・パッケージおよび前記ハッシュ・ダイジェストを前記送信側ハッシュ・テーブルに追加した後に、前記第二コンピュータが、前記データ・パッケージおよび前記ハッシュ・ダイジェストを前記受信側ハッシュ・テーブルに追加した後、前記送信側ハッシュ・テーブルに追加されている前記データ・パッケージに基づいて、前記第一コンピュータが前記第二コンピュータに前記データ・パッケージを送信せずに、前記第一コンピュータは、前記第二コンピュータに、第二ハッシュ・ダイジェスト、および前記送信側ハッシュ・テーブル中および前記受信側ハッシュ・テーブル中の前記ハッシュ・ダイジェストを参照する前記インデックスを送信するステップと、
前記第二コンピュータが、前記第一コンピュータによって送信された前記第二ハッシュ・ダイジェストおよび前記インデックスを受信するステップと、
前記インデックスに基づいて、前記第二コンピュータが、前記受信側ハッシュ・テーブル中の前記ハッシュ・ダイジェストを見出すステップと、
前記第二コンピュータが、前記受信側ハッシュ・テーブル中で見出された前記ハッシュ・ダイジェストが前記受信した第二ハッシュ・ダイジェストと一致すると判定するステップと、
前記見出されたハッシュ・ダイジェストが前記受信した第二ハッシュ・ダイジェストと一致するのに基づいて、前記第二コンピュータが、前記受信側ハッシュ・テーブル中の前記見出されたハッシュ・ダイジェストに関連付けられた前記データ・パッケージを読み出すステップと、
前記選択された第一または第二ハッシュ関数の前記受信した識別子に基づいて、前記第二コンピュータが、前記選択された第一または第二ハッシュ関数を特定し、前記受信側ハッシュ・テーブル中の前記見出されたハッシュ・ダイジェストに関連付けられた前記読み出されたデータ・パッケージに対し、前記選択された第一または第二ハッシュ関数を用いることによって新規ハッシュ・ダイジェストを算定するステップと、
前記第二コンピュータが、前記第二新規ハッシュ・ダイジェストが前記受信した第二ハッシュ・ダイジェストと一致するかどうかを判定するステップと、
前記第二新規ハッシュ・ダイジェストが前記受信した第二ハッシュ・ダイジェストと一致する場合、前記第二コンピュータが、前記読み出されたデータ・パッケージを前記アプリケーションに送るステップと、
をさらに含む、請求項３に記載の方法。
【請求項５】
前記第一コンピュータが、前記ハッシュ・ダイジェストは前記送信側ハッシュ・テーブル中に在ると判定し、それに応じて、前記第一コンピュータが前記送信側ハッシュ・テーブル中の複数のカウント中の或るカウントを更新し、前記カウントは、前記第一コンピュータが、前記インデックスおよび前記データ・パッケージの前記ハッシュ・ダイジェストを、前記ネットワーク中のいずれかの他のコンピュータに何回送信したかを示すものであって、前記方法は、
前記第一コンピュータが、他のデータ・パッケージに対し前記重複排除モードにおける前記ステップを繰り返すステップと、
前記第一コンピュータが、前記送信側ハッシュ・テーブル中の前記複数のカウントに含まれる他のカウントを更新するステップであって、前記他のカウントは、前記第一コンピュータが、他のインデックスおよび前記データ・パッケージの他のハッシュ・ダイジェストを、前記ネットワーク中のいずれかの他のコンピュータに何回送信したかを示す、前記更新するステップと、
前記重複排除モードの間に、前記第一コンピュータが、前記送信側ハッシュ・テーブル中の利用可能なスペースを測定するステップと、
前記第一コンピュータが、前記送信側ハッシュ・テーブル中の利用可能な前記スペースはスペース閾値を下回ると判定するステップと、
前記送信側ハッシュ・テーブル中の前記利用可能なスペースが前記スペース閾値を下回るのに基づいて、前記第一コンピュータが、前記送信側ハッシュ・テーブル中の前記複数のカウントに含まれる最低数のカウントを参照する前記送信側ハッシュ・テーブル中の一つ以上のインデックスを見つけ出すステップと、
前記第一コンピュータが、前記送信側ハッシュ・テーブル中の利用可能な前記スペースが前記スペース閾値を上回るように、前記一つ以上のインデックスに対応し、前記最低数のカウントを含む、前記送信側ハッシュ・テーブル中の一つ以上のエントリを削除するステップと、
前記第一コンピュータが、前記第二コンピュータに、前記最低数のカウントを参照する前記一つ以上のインデックスを送信するステップと、
をさらに含む、請求項１に記載の方法。
【請求項６】
前記第二コンピュータが、前記第一コンピュータから、前記最低数のカウントを参照する前記一つ以上のインデックスを受信するステップと、
前記第二コンピュータが、前記受信側ハッシュ・テーブル中の利用可能なスペースが、前記スペース閾値を下回る状態から前記スペース閾値を上回る状態に変わるように、前記一つ以上のインデックスに対応する、前記受信側ハッシュ・テーブル中の前記最低数のカウントを含む一つ以上のエントリを削除するステップと、
をさらに含む、請求項５に記載の方法。
【請求項７】
中央処理ユニット（ＣＰＵ）と、
前記ＣＰＵに連結されたメモリと、
前記ＣＰＵに連結されたコンピュータ可読の有形のストレージ・デバイスであって、前記ストレージ・デバイスは、前記メモリを介して前記ＣＰＵに実行され、データ・パッケージを管理する方法を実装する、前記ストレージ・デバイスと、
を含む、第一コンピュータ・システムであって、
請求項１乃至請求項４のいずれかに記載の方法のすべてのステップを実行する前記第一コンピュータ・システム。
【請求項８】
コンピュータ・プログラムであって、
前記コンピュータ・プログラムは、第一コンピュータ・システムの中央処理ユニット（ＣＰＵ）によって実行されてデータ・パッケージを管理する方法を実装する命令を包含し、前記方法は、
請求項１乃至請求項４のいずれかに記載の方法のすべてのステップを実行するものである前記コンピュータ・プログラム。
【請求項９】
データ・パッケージを管理する方法であって、前記方法は、第二コンピュータが、反復使用モードにおいて、
ネットワークの利用度がネットワーク利用度閾値を上回るとの判定がされることであって、前記ネットワークは第一コンピュータと前記第二コンピュータとを含む、前記判定されることと、
前記第一コンピュータが重複排除モードに入ることと、
前記第一コンピュータによって、前記第一コンピュータが前記重複排除モードに入ったことを前記第二コンピュータに通知することと、
前記第一コンピュータによって、前記第一コンピュータ中に含まれるＣＰＵの利用度がＣＰＵ利用度閾値を上回るかどうかを判定することと、
前記ＣＰＵの前記利用度が前記ＣＰＵ利用度閾値を上回る場合に、第二ハッシュ関数の代わりに第一ハッシュ関数を選択することと、
前記ＣＰＵの前記利用度が前記ＣＰＵ利用度閾値以下の場合に、前記第一ハッシュ関数の代わりに前記第二ハッシュ関数を選択することであって、前記第一ハッシュ関数の使用は前記第二ハッシュ関数の使用より前記ＣＰＵの利用度が少ない、前記選択することと、
前記選択された第一または第二ハッシュ関数を用いて、前記データ・パッケージのハッシュ・ダイジェストを算定することと、
前記第一コンピュータに連結された送信側ハッシュ・テーブル中に前記ハッシュ・ダイジェストが在ることを判定することと、
前記第二コンピュータに前記データ・パッケージを送信しないで、前記第一コンピュータによって、前記ハッシュ・ダイジェスト、前記送信側ハッシュ・テーブル中および前記第二コンピュータに連結された受信側ハッシュ・テーブル中の前記ハッシュ・ダイジェストを参照するインデックス、並びに前記選択された第一または第二ハッシュ関数の識別子を、前記第二コンピュータに送信することと、
に後続して、諸ステップを実施するステップを含み、
前記反復使用モードにおける前記諸ステップが、
前記第一コンピュータが前記重複排除モードモードに入ったとの前記第一コンピュータによる前記第二コンピュータへの前記通知に基づいて、前記第二コンピュータが、前記データ・パッケージが、前記ハッシュ・ダイジェスト、前記インデックス、および前記識別子と一緒に受信されていないことを判定するステップと、
前記第二コンピュータが、前記ハッシュ・ダイジェスト、前記送信側ハッシュ・テーブル中および前記受信側ハッシュ・テーブル中の前記ハッシュ・ダイジェストを参照する前記インデックス、および前記選択された第一または第二ハッシュ関数の前記識別子を受信するステップと、
前記第二コンピュータが前記データ・パッケージは受信されていないと判定するのに応じ、前記インデックスに基づいて、前記第二コンピュータが、前記受信側ハッシュ・テーブル中の前記ハッシュ・ダイジェストを見出すステップと、
前記第二コンピュータが、前記受信側ハッシュ・テーブル中で見出された前記ハッシュ・ダイジェストが前記受信したハッシュ・ダイジェストと一致することを判定するステップと、
前記見出されたハッシュ・ダイジェスが前記受信したハッシュ・ダイジェストと一致するのに基づいて、前記第二コンピュータが、前記受信側ハッシュ・テーブルから前記見出されたハッシュ・ダイジェストに関連付けられた前記データ・パッケージを読み出すステップと、
前記受信した識別子に基づいて、前記第二コンピュータが、前記選択された第一または第二ハッシュ関数を特定し、前記読み出されたデータ・パッケージに対し前記選択された第一または第二ハッシュ関数を用いることによって、新規ハッシュ・ダイジェストを算定するステップと、
前記第二コンピュータが、前記新規ハッシュ・ダイジェストが前記受信したハッシュ・ダイジェストと一致するかどうかを判定するステップと、
前記新規ハッシュ・ダイジェストが前記受信したハッシュ・ダイジェストと一致する場合、前記第二コンピュータが、前記読み出されたデータ・パッケージをアプリケーションに送るステップと、
を含む、
方法。
【請求項１０】
前記第二コンピュータが、前記反復使用モードにおいて、
前記送信側ハッシュ・テーブル中の複数のカウント中の或るカウントを更新することであって、前記カウントは、前記第一コンピュータが、前記インデックスおよび前記データ・パッケージの前記ハッシュ・ダイジェストを、前記ネットワーク中のいずれかの他のコンピュータに何回送信したかを示す、前記更新することと、
他のデータ・パッケージに対し前記重複排除モードにおける前記諸ステップを繰り返すことと、
前記送信側ハッシュ・テーブル中の前記複数のカウントに含まれる他のカウントを更新することであって、前記他のカウントは、前記第一コンピュータが、他のインデックスおよび前記他のデータ・パッケージの他のハッシュ・ダイジェストを、前記ネットワーク中のいずれかの他のコンピュータに何回送信したかを示す、前記更新することと、
前記重複排除モードの間に、前記送信側ハッシュ・テーブル中の利用可能なスペースを測定することと、
前記送信側ハッシュ・テーブル中の利用可能な前記スペースが、スペース閾値を下回っているのに基づいて、前記送信側ハッシュ・テーブル中の利用可能な前記スペースは前記スペース閾値を下回ると判定することと、
前記送信側ハッシュ・テーブル中の前記複数のカウント中に含まれる最低数のカウントを参照する、前記送信側ハッシュ・テーブルの一つ以上のインデックスを見つけ出すことと、
前記送信側ハッシュ・テーブル中の利用可能な前記スペースが前記スペース閾値を上回るように、前記一つ以上のインデックスに対応する前記最低数のカウントを含む、前記送信側ハッシュ・テーブル中の一つ以上のエントリを削除することと、
前記第二コンピュータに、前記最低数のカウントを参照する前記一つ以上のインデックスを送信することと、
に後続して、さらなる諸ステップを実施するステップをさらに含み、
前記反復使用モードにおける前記さらなる諸ステップが、
前記第二コンピュータが、前記第一コンピュータから、前記最低数のカウントを参照する前記一つ以上のインデックスを受信するステップと、
前記第二コンピュータが、前記受信側ハッシュ・テーブル中の利用可能なスペースが前記スペース閾値を下回る状態から前記スペース閾値を上回る状態に変わるように、前記一つ以上のインデックスに対応する、前記受信側ハッシュ・テーブル中の前記最低数のカウントを含む一つ以上のエントリを削除するステップと、
を含む、
請求項９に記載の方法。
【請求項１１】
データ・パッケージを管理する方法であって、前記方法は、
第一コンピュータが、ネットワークの第一利用度がネットワーク利用度閾値以下であることを判定するステップあって、前記ネットワークは前記第一コンピュータと第二コンピュータとを含む、前記判定するステップ、および
前記ネットワークの前記利用度が前記ネットワーク利用度閾値以下であるのに基づいて、前記第一コンピュータが、非重複排除モードにおいて諸ステップを実施するステップ、
を含み、前記諸ステップは、
前記第一コンピュータが、前記第一コンピュータに含まれるＣＰＵの利用度がＣＰＵ利用度閾値を上回るかどうかを判定するステップと、
前記第一コンピュータが、前記ＣＰＵの前記利用度が前記ＣＰＵ利用度閾値を上回る場合は、第二ハッシュ関数の代わりに第一ハッシュ関数を選択し、前記ＣＰＵの前記利用度が前記ＣＰＵ利用度閾値以下の場合は、前記第一ハッシュ関数の代わりに前記第二ハッシュ関数を選択するステップと、
前記第一コンピュータが、前記選択された第一または第二ハッシュ関数を用いて前記データ・パッケージのハッシュ・ダイジェストを算定するステップと、
を含み、
前記第一コンピュータが非重複排除モードにおいて前記諸ステップを実施するのに基づいて、前記第一コンピュータは、前記第一コンピュータに連結された送信側ハッシュ・テーブルに前記ハッシュ・ダイジェストを追加し、前記第一コンピュータが前記第二コンピュータに、前記ハッシュ・ダイジェストに基づいて前記データ・パッケージが完全性を有するかどうかを判定するため、前記データ・パッケージ、前記ハッシュ・ダイジェスト、および前記選択された第一または第二ハッシュ関数の識別子を送信し、
前記第一コンピュータが前記第二コンピュータに、前記データ・パッケージ、前記ハッシュ・ダイジェスト、および前記選択された第一または第二ハッシュ関数の前記識別子を送信するステップの結果は、
前記第二コンピュータによって、前記データ・パッケージ、前記ハッシュ・ダイジェスト、および前記選択された第一または第二ハッシュ関数の前記識別子を受信することと、
前記第一または第二ハッシュ関数の前記受信した識別子に基づいて、前記受信したデータ・パッケージに対し前記選択された第一または第二ハッシュ関数を用いることによって、新規ハッシュ・ダイジェストを算定することと、
前記受信したハッシュ・ダイジェストが、前記新規ハッシュ・ダイジェストと一致するかどうかを判定し、前記受信したハッシュ・ダイジェストが前記新規ハッシュ・ダイジェストと一致する場合にあっては、前記第一コンピュータが前記データ・パッケージ、前記ハッシュ・ダイジェスト、および前記識別子を送信するステップの結果は、データ・パッケージが完全性を有することを判定することと、前記データ・パッケージおよび前記ハッシュ・ダイジェストを前記第二コンピュータに連結された受信側ハッシュ・テーブルに追加することと、前記データ・パッケージをアプリケーションに送ることと、前記受信したハッシュ・ダイジェストが前記新規ハッシュ・ダイジェストと一致しない場合にあっては、前記第一コンピュータが前記データ・パッケージ、前記ハッシュ・ダイジェスト、および前記識別子を送信するステップの結果は、前記データ・パッケージが完全性を有さないことを前記第一コンピュータに通知することと、それに応じて、前記第一コンピュータが、前記第二コンピュータに前記データ・パッケージおよび前記ハッシュ・ダイジェストを再送信することと、
を含み、
前記データ・パッケージ、前記ハッシュ・ダイジェスト、および前記選択された第一または第二ハッシュ関数の前記識別子を前記第二コンピュータに送信する前記ステップに続いて、前記第一コンピュータが、ネットワークの第二利用度が前記ネットワーク利用度閾値を上回ることを判定し、
前記ネットワークの前記利用度が前記ネットワーク利用度閾値を上回るのに基づいて、前記第一コンピュータは、前記重複排除モードに入り、続いて前記重複排除モードにおいて諸ステップを実施し、前記諸ステップには、
前記第一コンピュータが前記第二コンピュータに、前記第一コンピュータが前記重複排除モードに入ったことを通知するステップと、
前記第一コンピュータが、前記選択された第一または第二ハッシュ関数を用いて、第二データ・パッケージの第二ハッシュ・ダイジェストを算定するステップと、
前記第一コンピュータが、前記第二データ・パッケージの前記第二ハッシュ・ダイジェストが、前記送信側ハッシュ・テーブルに追加された前記ハッシュ・ダイジェストと一致することを判定するステップと、
前記第二データ・パッケージの前記第二ハッシュ・ダイジェスが前記送信側ハッシュ・テーブルに追加された前記ハッシュ・ダイジェストと一致するのに基づいて、前記第一コンピュータは前記第二コンピュータに前記データ・パッケージを送信せずに、前記第一コンピュータが、前記第二コンピュータに、前記第二ハッシュ・ダイジェスト、前記送信側ハッシュ・テーブルに追加された前記ハッシュ・ダイジェストを参照するインデックス、および前記選択された第一または第二ハッシュ関数の前記識別子を送信するステップと、
が含まれ、
前記第一コンピュータが、前記第二コンピュータに、前記第二ハッシュ・ダイジェスト、前記インデックス、および前記識別子を送信するステップの結果は、
前記第二コンピュータが、前記第二コンピュータが前記第一コンピュータは前記重複排除モードに入ったことを通知されたのに基づいて、前記データ・パッケージは、前記第二ハッシュ・ダイジェスト、前記インデックス、および前記識別子と一緒に受信されていないと判定することと、
前記第二コンピュータが、前記第二ハッシュ・ダイジェスト、前記インデックス、および前記選択された第一または第二ハッシュ関数の前記識別子を受信することと、
前記データ・パッケージが受信されていないとの前記判定に応じて、前記第二コンピュータが、前記インデックスに基づいて前記受信側ハッシュ・テーブルに追加された前記ハッシュ・ダイジェストを見出すことと、
前記受信側ハッシュ・テーブル中で見出された前記ハッシュ・ダイジェストが前記受信した第二ハッシュ・ダイジェストと一致することを判定することと、
前記受信側ハッシュ・テーブル中で見出された前記ハッシュ・ダイジェストが前記受信した第二ハッシュ・ダイジェストと一致するのに基づいて、前記第二コンピュータが、前記受信側ハッシュ・テーブル中で見出された前記ハッシュ・ダイジェストに関連付けられた前記データ・パッケージを読み出すことと、
前記識別子の前記受信に基づいて、前記第二コンピュータが前記選択された第一または第二ハッシュ関数を特定することと、前記第二コンピュータが、前記受信側ハッシュ・テーブル中で見出された前記ハッシュ・ダイジェストに関連付けられた前記読み出されたデータ・パッケージに対し、前記選択された第一または第二ハッシュ関数を用いて第二新規ハッシュ・ダイジェストを算定することと、
前記第二コンピュータが、前記第二新規ハッシュ・ダイジェストが前記受信した第二ハッシュ・ダイジェストと一致するかどうかを判定することと、
前記第二新規ハッシュ・ダイジェストが前記受信した第二ハッシュ・ダイジェストと一致する場合、前記第二コンピュータが、前記読み出されたデータ・パッケージをアプリケーションに送ることと、
が含まれる、
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信トラフィックを管理するためのデータ処理の方法およびシステムに関し、さらに具体的には、メッセージ・パケットのストリームに対して完全性点検および選択的重複排除を実施するための技法に関する。
【背景技術】
【０００２】
暗号化ハッシュ関数は、入力としてデータの任意のブロックを取り、ハッシュ・ダイジェスト（（別名）ハッシュ値、暗号ハッシュ値、またはダイジェストとしても知られる）を生成して返すアルゴリズムであり、ハッシュ・ダイジェストは固定サイズのビット・ストリングである。暗号化ハッシュ関数は、入力データへの偶発的または意図的変更が、非常に高い確率でハッシュ・ダイジェストを変化させ得るように、ハッシュ・ダイジェストを生成する。さらに、暗号化ハッシュ関数は、該関数への入力中のごく小さい差異が（例えば、１ビットの差異でさえも）、ダイジェストにおける相当に大きい差異をもたらす（すなわち、高度に非線形である）ので雪崩関数である。暗号化ハッシュ関数は、セキュア・ハッシュ・アルゴリズム（ＳＨＡ：Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ）関数およびメッセージ・ダイジェスト（ＭＤ：Ｍｅｓｓａｇｅ  Ｄｉｇｅｓｔ）関数を含む。暗号化ハッシュ関数およびそれらのそれぞれのハッシュ・ダイジェストのサイズが表１に含まれている。
【０００３】
【表１】
0006282293.tif 000002
【０００４】
ネットワーク通信デバイスは、通信プロトコルを用いて、通信（すなわちデータ）パッケージを、送信するネットワーク・デバイス（以下、送信側と言う）から受信するデバイス（以下、受信側と言う）に送信する。伝送制御プロトコル・オーバー・インターネット・プロトコル（ＴＣＰ／ＩＰ：Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ  ｏｖｅｒ  Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）、ファイバー・チャネル・オーバー・イーサネット（ＦＣｏＥ：Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ）、小型コンピュータ用周辺機器インターフェース（ＳＣＳＩ：Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、インターネットＳＣＳＩ（ｉＳＣＳＩ：Ｉｎｔｅｒｎｅｔ  ＳＣＳＩ）、シリアル接続ＳＣＳＩ（ＳＡＳ：Ｓｅｒｉａｌ−Ａｔｔａｃｈｅｄ−ＳＣＳＩ）、インフィニバンド（Ｒ）、およびイーサネット（Ｒ）など、周知の通信プロトコルによれば、通信パッケージは、メタデータとペイロード・データとのためのフィールドを含む。メタデータおよびペイロード・データのフィールドは、開放型システム間相互接続（ＯＳＩ：Ｏｐｅｎ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ）ネットワーク階層モデルに準じるプロトコル規格によって定義される。特定のメタデータ・フィールドが、ペイロード・データのチェックサムの格納のために用いられ、これによって完全性点検の実施が可能になる。送信側ネットワーク・デバイスは、チェックサムを計算してメタデータに加え、ペイロード・データとチェックサムを含むメタデータとを受信側ネットワーク・デバイスに送信する。受信側ネットワーク・デバイスは、ペイロード・データとチェックサムを含むメタデータとを受信した後、受信したペイロード・データのチェックサムを計算し、その結果を受信したメタデータ中に含まれるチェックサムと対比してデータの完全性を保証する。周知のチェックサムは、周期的冗長検査（ＣＲＣ：Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）などの循環コードに基づいている。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ネットワークの利用度が利用度閾値に達したまたはこれを超過したときに、暗号化ハッシュ関数を適用して通信トラフィックにハッシュ・ダイジェストを組み込み、データの完全性点検およびデータの重複排除を提供し、これによって、送信側ネットワーク・デバイスと受信側ネットワーク・デバイスとの間で伝送されるデータの量を低減する。
【課題を解決するための手段】
【０００６】
第一実施形態において、本発明はデータ・パッケージを管理する方法を提供する。本方法は、第一コンピュータが、ネットワークの利用度がネットワーク利用度閾値を上回ることを判定するステップを含む。該ネットワークは、第一コンピュータと第二コンピュータとを含む。本方法は、ネットワークの利用度がネットワーク利用度閾値を上回るのに基づいて、第一コンピュータが重複排除モードに入り、続いてその重複排除モードにおいて諸ステップを実施するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータが、第二コンピュータに、第一コンピュータが重複排除モードに入ったことの通知を送信するステップを含む。重複排除モードにおけるこれらステップは、第一コンピュータが、第一コンピュータ中に含まれる中央処理ユニット（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）の利用度がＣＰＵ利用度閾値を上回るかどうかを判定するステップをさらに含む。重複排除モードにおけるこれらステップは、ＣＰＵの利用度がＣＰＵ利用度閾値を上回る場合、第一コンピュータが、第二ハッシュ関数の代わりに第一ハッシュ関数を選択するステップをさらに含む。重複排除モードにおけるこれらステップは、ＣＰＵの利用度がＣＰＵ利用度閾値以下の場合、第一コンピュータが、第一ハッシュ関数の代わりに第二ハッシュ関数を選択するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータが、選択された第一または第二ハッシュ関数を用いてデータ・パッケージのハッシュ・ダイジェストを算定するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータが、該第一コンピュータに連結された送信側ハッシュ・テーブル中に、そのハッシュ・ダイジェストが在るかどうかを判定するステップをさらに含む。重複排除モードにおけるこれらステップは、そのハッシュ・ダイジェストが送信側ハッシュ・テーブル中に在る場合、第一コンピュータは第二コンピュータにデータ・パッケージを送信せずに、第一コンピュータが、第二コンピュータに、ハッシュ・ダイジェスト、送信側ハッシュ・テーブル中および第二コンピュータに連結された受信側ハッシュ・テーブル中の該ハッシュ・ダイジェスを参照するインデックス、並びに随意的に、選択された第一または第二ハッシュ関数の識別子を送信するステップをさらに含む。重複排除モードにおけるこれらステップは、そのハッシュ・ダイジェストが送信側ハッシュ・テーブル中にない場合、第一コンピュータは、当該データ・パッケージおよびそのハッシュ・ダイジェストを送信側ハッシュ・テーブルに追加し、ハッシュ・ダイジェストに基づいてデータ・パッケージが完全性を有するかどうかを判定するため、第二コンピュータに、該データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を送信するステップをさらに含む。
【０００７】
第二実施形態において、本発明は、中央処理ユニット（ＣＰＵ）と、ＣＰＵに連結されたメモリと、ＣＰＵに連結されたコンピュータ可読の有形ストレージ・デバイスと、を含む第一コンピュータ・システムを提供し、該ストレージ・デバイスは、メモリを介してＣＰＵに実行されてデータ・パッケージを管理する方法を実装する命令を包含する。この方法は、第一コンピュータ・システムが、ネットワークの利用度がネットワーク利用度閾値を上回ることを判定するステップを含む。該ネットワークは第一コンピュータ・システムと第二コンピュータ・システムとを含む。本方法は、ネットワークの利用度がネットワーク利用度閾値を上回るのに基づいて、第一コンピュータ・システムが重複排除モードに入り、続いてその重複排除モードにおいて諸ステップを実施するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、第二コンピュータ・システムに、第一コンピュータ・システムが重複排除モードに入ったことの通知を送信するステップを含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、第一コンピュータ・システム中に含まれるＣＰＵの利用度がＣＰＵ利用度閾値を上回るかどうかを判定するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、ＣＰＵの利用度がＣＰＵ利用度閾値を上回る場合、第二ハッシュ関数の代わりに第一ハッシュ関数を選択するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、ＣＰＵの利用度がＣＰＵ利用度閾値以下の場合、第一ハッシュ関数の代わりに第二ハッシュ関数を選択するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、選択された第一または第二ハッシュ関数を用いてデータ・パッケージのハッシュ・ダイジェストを算定するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、そのハッシュ・ダイジェストが該第一コンピュータ・システムに連結された送信側ハッシュ・テーブル中に在るかどうかを判定するステップをさらに含む。重複排除モードにおけるこれらステップは、そのハッシュ・ダイジェストが送信側ハッシュ・テーブル中に在る場合、第一コンピュータ・システムは第二コンピュータ・システムにデータ・パッケージを送信せずに、第一コンピュータ・システムが、第二コンピュータ・システムに、ハッシュ・ダイジェスト、送信側ハッシュ・テーブル中および第二コンピュータ・システムに連結された受信側ハッシュ・テーブル中の該ハッシュ・ダイジェストを参照するインデックス、並びに随意的に、選択された第一または第二ハッシュ関数の識別子を送信するステップをさらに含む。重複排除モードにおけるこれらステップは、そのハッシュ・ダイジェストが送信側ハッシュ・テーブル中にない場合、第一コンピュータ・システムが、データ・パッケージおよびそのハッシュ・ダイジェストを送信側ハッシュ・テーブルに追加し、ハッシュ・ダイジェストに基づいてデータ・パッケージが完全性を有するかどうかを判定するために、第二コンピュータ・システムに、該データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を送信するステップをさらに含む。
【０００８】
第三実施形態において、本発明は、コンピュータ可読の有形ストレージ・デバイスと、該コンピュータ可読の有形ストレージ・デバイス中に格納されたコンピュータ可読プログラム・コードと、を含むコンピュータ・プログラム製品を提供する。本コンピュータ・プログラム・コードは、第一コンピュータ・システムのＣＰＵによって実行されてデータ・パッケージを管理する方法を実装する命令を包含する。この方法は、第一コンピュータ・システムが、ネットワークの利用度がネットワーク利用度閾値を上回ることを判定するステップを含む。該ネットワークは第一コンピュータ・システムと第二コンピュータ・システムとを含む。本方法は、ネットワークの利用度がネットワーク利用度閾値を上回るのに基づいて、第一コンピュータ・システムが重複排除モードに入り、続いてその重複排除モードにおいて諸ステップを実施するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、第二コンピュータ・システムに、第一コンピュータ・システムが重複排除モードに入ったことの通知を送信するステップを含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、第一コンピュータ・システム中に含まれるＣＰＵの利用度がＣＰＵ利用度閾値を上回るかどうかを判定するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、ＣＰＵの利用度がＣＰＵ利用度閾値を上回る場合、第二ハッシュ関数の代わりに第一ハッシュ関数を選択するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、ＣＰＵの利用度がＣＰＵ利用度閾値以下の場合、第一ハッシュ関数の代わりに第二ハッシュ関数を選択するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、選択された第一または第二ハッシュ関数を用いてデータ・パッケージのハッシュ・ダイジェストを算定するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、そのハッシュ・ダイジェストが該第一コンピュータ・システムに連結された送信側ハッシュ・テーブル中に在るかどうかを判定するステップをさらに含む。重複排除モードにおけるこれらステップは、そのハッシュ・ダイジェストが送信側ハッシュ・テーブル中に在る場合、第一コンピュータ・システムは第二コンピュータ・システムにデータ・パッケージを送信せずに、第一コンピュータ・システムが、第二コンピュータ・システムに、ハッシュ・ダイジェスト、送信側ハッシュ・テーブル中および第二コンピュータ・システムに連結された受信側ハッシュ・テーブル中の該ハッシュ・ダイジェストを参照するインデックス、並びに随意的に、選択された第一または第二ハッシュ関数の識別子を送信するステップをさらに含む。重複排除モードにおけるこれらステップは、そのハッシュ・ダイジェストが送信側ハッシュ・テーブル中にない場合、第一コンピュータ・システムが、データ・パッケージおよびそのハッシュ・ダイジェストを送信側ハッシュ・テーブルに追加し、ハッシュ・ダイジェストに基づいてデータ・パッケージが完全性を有するかどうかを判定するために、第二コンピュータ・システムに、該データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を送信するステップをさらに含む。
【０００９】
第四実施形態において、本発明は、コンピューティング・インフラストラクチャをサポートするためのプロセスを提供する。本プロセスは、第一コンピュータ・システムにおいて、コンピュータ可読コードを生成すること、統合すること、ホストすること、維持すること、および展開することのうちの少なくとも一つに対し、少なくとも一つのサポート・サービスを提供するステップを含む。コンピュータ可読コードは、第一コンピュータ・システムのプロセッサによって実行されたとき、データ・パッケージを管理する方法を実装する命令を包含する。この方法は、第一コンピュータ・システムが、ネットワークの利用度がネットワーク利用度閾値を上回ることを判定するステップを含む。該ネットワークは第一コンピュータ・システムと第二コンピュータ・システムとを含む。本方法は、ネットワークの利用度がネットワーク利用度閾値を上回るのに基づいて、第一コンピュータ・システムが重複排除モードに入り、続いてその重複排除モードにおいて諸ステップを実施するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、第二コンピュータ・システムに、第一コンピュータ・システムが重複排除モードに入ったことの通知を送信するステップを含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、第一コンピュータ・システム中に含まれるＣＰＵの利用度がＣＰＵ利用度閾値を上回るかどうかを判定するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、ＣＰＵの利用度がＣＰＵ利用度閾値を上回る場合、第二ハッシュ関数の代わりに第一ハッシュ関数を選択するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、ＣＰＵの利用度がＣＰＵ利用度閾値以下の場合、第一ハッシュ関数の代わりに第二ハッシュ関数を選択するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、選択された第一または第二ハッシュ関数を用いてデータ・パッケージのハッシュ・ダイジェストを算定するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータ・システムが、そのハッシュ・ダイジェストが該第一コンピュータ・システムに連結された送信側ハッシュ・テーブル中に在るかどうかを判定するステップをさらに含む。重複排除モードにおけるこれらステップは、そのハッシュ・ダイジェストが送信側ハッシュ・テーブル中に在る場合、第一コンピュータ・システムは第二コンピュータ・システムにデータ・パッケージを送信せずに、第一コンピュータ・システムが、第二コンピュータ・システムに、ハッシュ・ダイジェスト、送信側ハッシュ・テーブル中および第二コンピュータ・システムに連結された受信側ハッシュ・テーブル中の該ハッシュ・ダイジェストを参照するインデックス、並びに随意的に、選択された第一または第二ハッシュ関数の識別子を送信するステップをさらに含む。重複排除モードにおけるこれらステップは、そのハッシュ・ダイジェストが送信側ハッシュ・テーブル中にない場合、第一コンピュータ・システムが、データ・パッケージおよびそのハッシュ・ダイジェストを送信側ハッシュ・テーブルに追加し、ハッシュ・ダイジェストに基づいてデータ・パッケージが完全性を有するかどうかを判定するために、第二コンピュータ・システムに、該データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を送信するステップをさらに含む。
【００１０】
第五実施形態において、本発明は、データ・パッケージを管理する方法を提供する。本方法は、第二コンピュータが反復使用モードにおいて諸ステップを実施するステップを含む。反復使用モードにおけるこれらステップは：ネットワークの利用度がネットワーク利用度閾値を上回るとの判定がされることであって、該ネットワークは第一コンピュータと第二コンピュータとを含む、該判定がされることと；第一コンピュータによって重複排除モードに入ることと；第一コンピュータによって、第一コンピュータが重複排除モードに入ったことを第二コンピュータに通知することと；第一コンピュータによって、第一コンピュータ中に含まれるＣＰＵの利用度がＣＰＵ利用度閾値を上回るかどうかを判定することと；ＣＰＵの利用度がＣＰＵ利用度閾値を上回る場合、第二ハッシュ関数の代わりに第一ハッシュ関数を選択することと；ＣＰＵの利用度がＣＰＵ利用度閾値以下の場合、第一ハッシュ関数の代わりに第二ハッシュ関数を選択することであって、第一ハッシュ関数の使用は第二ハッシュ関数の使用よりＣＰＵの利用度が少ない、該選択することと；選択された第一または第二ハッシュ関数を用いて、データ・パッケージのハッシュ・ダイジェストを算定することと；第一コンピュータに連結された送信側ハッシュ・テーブル中に該ハッシュ・ダイジェストが在ることを判定することと；第二コンピュータにデータ・パッケージを送信しないで、第一コンピュータによって、ハッシュ・ダイジェスト、送信側ハッシュ・テーブル中および第二コンピュータに連結された受信側ハッシュ・テーブル中のハッシュ・ダイジェストを参照するインデックス、並びに選択された第一または第二ハッシュ関数の識別子を、第二コンピュータに送信することと；に後続して実施される。反復使用モードにおけるこれらステップは、第一コンピュータが重複排除モードに入ったとの第一コンピュータによる第二コンピュータへの通知に基づいて、第二コンピュータが、データ・パッケージは、ハッシュ・ダイジェスト、インデックス、および識別子と一緒に受信されていないことを判定するステップを含む。反復使用モードにおけるこれらステップは、第二コンピュータが、ハッシュ・ダイジェスト、送信側ハッシュ・テーブル中および受信側ハッシュ・テーブル中のハッシュ・ダイジェストを参照するインデックス、および選択された第一または第二ハッシュ関数の識別子を受信するステップをさらに含む。反復使用モードにおけるこれらステップは、第二コンピュータがデータ・パッケージは受信されていないと判定するのに応じ、インデックスに基づいて、第二コンピュータが、受信側ハッシュ・テーブル中のハッシュ・ダイジェストを見出すステップをさらに含む。反復使用モードにおけるこれらステップは、第二コンピュータが、受信側ハッシュ・テーブル中で見出されたハッシュ・ダイジェストが、受信したハッシュ・ダイジェストと一致することを判定するステップをさらに含む。反復使用モードにおけるこれらステップは、見出されたハッシュ・ダイジェスが受信したハッシュ・ダイジェストと一致するのに基づいて、第二コンピュータが、受信側ハッシュ・テーブルから見出されたハッシュ・ダイジェストに関連付けられたデータ・パッケージを読み出すステップをさらに含む。反復使用モードにおけるこれらステップは、第二コンピュータが、受信した識別子に基づいて選択された第一または第二ハッシュ関数を特定し、読み出されたデータ・パッケージに対し該選択された第一または第二ハッシュ関数を用いることによって、新規ハッシュ・ダイジェストを算定するステップをさらに含む。反復使用モードにおけるこれらステップは、第二コンピュータが、該新規ハッシュ・ダイジェストは受信したハッシュ・ダイジェストと一致するかどうかを判定するステップをさらに含む。反復使用モードにおけるこれらステップは、新規ハッシュ・ダイジェストが受信したハッシュ・ダイジェストと一致する場合、第二コンピュータが、読み出されたデータ・パッケージをアプリケーションに送るステップをさらに含む。
【００１１】
第六実施形態において、本発明は、データ・パッケージを管理する方法を提供する。本方法は、第一コンピュータが、ネットワークの第一利用度がネットワーク利用度閾値以下であることを判定するステップを含む。該ネットワークは、第一コンピュータと第二コンピュータとを含む。本方法は、ネットワークの利用度がネットワーク利用度閾値以下であるのに基づいて、第一コンピュータが、非重複排除モードにおいて諸ステップを実施するステップをさらに含む。非重複排除モードにおけるこれらステップは、第一コンピュータが、第一コンピュータに含まれるＣＰＵの利用度がＣＰＵ利用度閾値を上回るかどうかを判定するステップを含む。非重複排除モードにおけるこれらステップは、第一コンピュータが、ＣＰＵの利用度がＣＰＵ利用度閾値を上回る場合、第二ハッシュ関数の代わりに第一ハッシュ関数を選択するステップをさらに含む。非重複排除モードにおけるこれらステップは、第一コンピュータが、ＣＰＵの利用度がＣＰＵ利用度閾値以下の場合、第一ハッシュ関数の代わりに第二ハッシュ関数を選択するステップをさらに含む。非重複排除モードにおけるこれらステップは、第一コンピュータが、選択された第一または第二ハッシュ関数を用いてデータ・パッケージのハッシュ・ダイジェストを算定するステップをさらに含む。本方法は、第一コンピュータが非重複排除モードにおいて上記ステップを実施するのに基づいて、第一コンピュータが、第一コンピュータに連結された送信側ハッシュ・テーブルにハッシュ・ダイジェストを追加するステップと、第一コンピュータが、第二コンピュータに、ハッシュ・ダイジェストに基づいてデータ・パッケージが完全性を有するかどうかを判定するため、データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を送信するステップと、を含む。第一コンピュータが、第二コンピュータに、データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を送信するステップの結果は、第二コンピュータによって、データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を受信することを含む。第一コンピュータが、第二コンピュータに、データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を送信するステップの結果は、選択された第一または第二ハッシュ関数の受信した識別子に基づいて、受信したデータ・パッケージに対し該選択された第一または第二ハッシュ関数を用いることによって、新規ハッシュ・ダイジェストを算定することをさらに含む。第一コンピュータが、第二コンピュータに、データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を送信するステップの結果は、受信したハッシュ・ダイジェストが、新規ハッシュ・ダイジェストと一致するかどうかを判定することをさらに含む。受信したハッシュ・ダイジェストが新規ハッシュ・ダイジェストと一致する場合、第一コンピュータがデータ・パッケージ、ハッシュ・ダイジェスト、および識別子を送信するステップの結果は、データ・パッケージが完全性を有するのを判定することと、データ・パッケージおよびハッシュ・ダイジェストを、第二コンピュータに連結された受信側ハッシュ・テーブルに追加することと、データ・パッケージをアプリケーションに送ることとを含む。受信したハッシュ・ダイジェストが新規ハッシュ・ダイジェストと一致しない場合、第一コンピュータがデータ・パッケージ、ハッシュ・ダイジェスト、および識別子を送信するステップの結果は、データ・パッケージが完全性を有さないことを第一コンピュータに通知することと、それに応じて、第一コンピュータが、第二コンピュータにデータ・パッケージおよびハッシュ・ダイジェストを再送信することとを含む。本方法は、データ・パッケージ、ハッシュ・ダイジェスト、および選択された第一または第二ハッシュ関数の識別子を第二コンピュータに送信するステップに続いて、第一コンピュータが、ネットワークの第二利用度がネットワーク利用度閾値を上回ることを判定するステップをさらに含む。本方法は、ネットワークの利用度がネットワーク利用度閾値を上回るのに基づいて、第一コンピュータが重複排除モードに入り、続いてその重複排除モードにおいて諸ステップを実施するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータが、第二コンピュータに第一コンピュータが重複排除モードに入ったことを通知するステップを含む。重複排除モードにおけるこれらステップは、第一コンピュータが、選択された第一または第二ハッシュ関数を用いて、第二データ・パッケージの第二ハッシュ・ダイジェストを算定するステップをさらに含む。重複排除モードにおけるこれらステップは、第一コンピュータが、第二データ・パッケージの第二ハッシュ・ダイジェストは送信側ハッシュ・テーブルに加えられたハッシュ・ダイジェストと一致することを判定するステップを含む。重複排除モードにおけるこれらステップは、第二データ・パッケージの第二ハッシュ・ダイジェスが送信側ハッシュ・テーブルに加えられたハッシュ・ダイジェストと一致するのに基づいて、第一コンピュータは第二コンピュータにデータ・パッケージを送信せずに、第一コンピュータが、第二コンピュータに、第二ハッシュ・ダイジェスト、送信側ハッシュ・テーブルに追加されたハッシュ・ダイジェストを参照するインデックス、および選択された第一または第二ハッシュ関数の識別子を送信するステップをさらに含む。第一コンピュータが、第二コンピュータに、第二ハッシュ・ダイジェスト、インデックス、および識別子を送信するステップの結果は、第二コンピュータが第一コンピュータは重複排除モードに入ったことを通知されたのに基づいて、第二コンピュータが、データ・パッケージは、第二ハッシュ・ダイジェスト、インデックス、および識別子と一緒に受信されていないのを判定することを含む。第一コンピュータが第二コンピュータに第二ハッシュ・ダイジェスト、そのインデックス、および識別子を送信するステップの結果は、第二コンピュータが、第二ハッシュ・ダイジェスト、そのインデックス、および選択された第一または第二ハッシュ関数の識別子を受信することをさらに含む。第一コンピュータが第二コンピュータに第二ハッシュ・ダイジェスト、そのインデックス、および識別子を送信するステップの結果は、第二コンピュータが、データ・パッケージが受信されていないとの判定に応じて、該インデックスに基づいて、受信側ハッシュ・テーブルに追加されたハッシュ・ダイジェストを見出すことをさらに含む。第一コンピュータが第二コンピュータに第二ハッシュ・ダイジェスト、インデックス、および識別子を送信するステップの結果は、第二コンピュータが、受信側ハッシュ・テーブル中で見出されたハッシュ・ダイジェストが受信した第二ハッシュ・ダイジェストと一致するのを判定することをさらに含む。第一コンピュータが第二コンピュータに第二ハッシュ・ダイジェスト、インデックス、および識別子を送信するステップの結果は、受信側ハッシュ・テーブル中で見出されたハッシュ・ダイジェストが受信した第二ハッシュ・ダイジェストと一致するのに基づいて、第二コンピュータが、受信側ハッシュ・テーブル中で見出されたハッシュ・ダイジェストに関連付けられたデータ・パッケージを読み出すことをさらに含む。第一コンピュータが第二コンピュータに第二ハッシュ・ダイジェスト、インデックス、および識別子を送信するステップの結果は、識別子の受信に基づいて、第二コンピュータが選択された第一または第二ハッシュ関数を特定することと、第二コンピュータが、受信側ハッシュ・テーブル中で見出されたハッシュ・ダイジェストに関連付けられた読み出されたデータ・パッケージに対し選択された第一または第二ハッシュ関数を用いて、第二新規ハッシュ・ダイジェストを算定することとをさらに含む。第一コンピュータが第二コンピュータに第二ハッシュ・ダイジェスト、インデックス、および識別子を送信するステップの結果は、第二コンピュータが、該第二新規ハッシュ・ダイジェストは受信した第二ハッシュ・ダイジェストと一致するかどうかを判定することをさらに含む。第一コンピュータが第二コンピュータに第二ハッシュ・ダイジェストおよびインデックスを送信するステップの結果は、第二新規ハッシュ・ダイジェストが受信した第二ハッシュ・ダイジェストと一致する場合、第二コンピュータが、読み出されたデータ・パッケージをアプリケーションに送ることをさらに含む。
【００１２】
本発明の諸実施形態は、ネットワークの利用度が利用度閾値に達しまたはこれを超過したときに、暗号化ハッシュ関数を適用して通信トラフィックにハッシュ・ダイジェストを組み込み、データの完全性点検およびデータの重複排除を提供する。本発明の諸実施形態は、データの重複排除を提供することによって、送信側ネットワーク・デバイスと受信側ネットワーク・デバイスとの間で伝送されるデータの量を低減する。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態による、データ・パッケージを管理するための或るシステムのブロック図である。
【図２】本発明の実施形態による、図１のシステムにおいてデータ・パッケージを管理するプロセスのフローチャートを表す。
【図３】本発明の実施形態による、図１のシステムにおいてデータ・パッケージを管理するプロセスのフローチャートを表す。
【図４】本発明の実施形態による、図１のシステムにおいてハッシュ・テーブル・のスペースを管理するプロセスのフローチャートである。
【図５】本発明の実施形態による、図２〜図３のプロセスによって管理されるデータ・パッケージを含む、例示的な通信パッケージである。
【図６】本発明の実施形態による、図１のシステムの別の実施形態に含まれ、図２〜図３、および図４のプロセスを実装するコンピュータ・システムのブロック図である。
【発明を実施するための形態】
【００１４】
要旨
本発明の諸実施形態は、ネットワーク利用度またはスループットがユーザ定義の閾値を上回ると判定されるのに応じ、ネットワーク中の通信トラフィックに暗号化ハッシュ関数を適用し、通信トラフィックの選択的なデータ重複排除を提供することによって、送信側ネットワーク・デバイスと受信側ネットワーク・デバイスとの間で伝送されるデータの量を低減する。通信トラフィックに適用される暗号化ハッシュ関数は、データの完全性点検のためのチェックサムも提供する。
【００１５】
データ・パッケージを管理するためのシステム
図１は、本発明の実施形態による、データ・パッケージを管理するための或るシステムのブロック図である。システム１００は第一コンピュータ・システム１０１を含み、第一コンピュータ・システム１０１は、中央処理ユニット（ＣＰＵ）１０２と、メモリ１０４と、バス１０８と、送信側ネットワーク・インターフェース・カード（ＮＩＣ：ｎｅｔｗｏｒｋ  ｉｎｔｅｒｆａｃｅ  ｃａｒｄ）１１６とを含み、該カード１１６は、第一コンピュータ・システム１０１をコンピュータ・ネットワーク１３０に接続する。また、第一コンピュータ・システム１０１は、バス１０８を介してＣＰＵ１０２に連結された入力／出力インターフェース（図示せず）を含む。送信側ネットワーク・インターフェース・カード１１６は、本発明の実施形態によって、ソフトウェア・ベースのモニタリング・モジュール１１８、ソフトウェア・ベースの重複排除モジュール１２０、および送信側ハッシュ・テーブル１２２を含むように拡張されたＮＩＣである。
【００１６】
第一コンピュータ・システム１０１は、コンピュータ・ネットワーク１３０を介して、第二コンピュータ・システム１５１を含む一つ以上のコンピュータ・システムと通信する。第一コンピュータ・システム１０１は、第二コンピュータ・システム１５１を含めてネットワーク１３０に接続された一つ以上の他の受信側コンピュータ・システムにデータ・パッケージを送信する要求、を処理する送信側コンピュータ・システムである。第一コンピュータ・システム１０１は、オペレーティング・システム（図示せず）および一つ以上のソフトウェア・アプリケーション（図示せず）を実行する。これらアプリケーションの一つは、ネットワーク１３０を介するデータの送信を開始し、該アプリケーションは、オペレーティング・システムにデータを送信するよう命令するアプリケーションを含み、それに応じて、オペレーティング・システムは送信側ＮＩＣ１１６に対し、ネットワーク１３０を介してデータを送信するよう命令する。
【００１７】
第二コンピュータ・システム１５１は、ＣＰＵ１５２と、メモリ１５４と、バス１５８と、受信側ネットワーク・インターフェース・カード１６６とを含み、該カード１６６は、第二コンピュータ・システム１５１をネットワーク１３０に接続する。また、第二コンピュータ・システム１５１は、バス１５８を介してＣＰＵ１５２に連結された入力／出力インターフェース（図示せず）を含む。受信側ネットワーク・インターフェース・カード１６６は、本発明の実施形態によって、ソフトウェア・ベースの反復使用モジュール１６８、および受信側ハッシュ・テーブル１７２を含むように拡張されたＮＩＣである。ネットワーク１３０中の通信トラフィックは、送信側ＮＩＣ１１６によって受信側ＮＩＣ１６６に送信される通信パッケージを含む。
【００１８】
本明細書では、第一コンピュータ・システム１０１がＮＩＣ１１６から通信パッケージを送信するとして説明し、また、本明細書では、第二コンピュータ・システム１５１がＮＩＣ１６６で通信パッケージを受信するとして説明するが、本発明の実施形態は、ＮＩＣ１６６が送信側デバイスであり、ＮＩＣ１１６が受信側デバイスであることも含むのは当業者には自明であろう。
【００１９】
送信側ハッシュ・テーブル１２２および受信側ハッシュ・テーブル１７２は、それぞれのインデックスと、それぞれのハッシュ・ダイジェストと、それぞれのデータ・パッケージと、それぞれの使用カウントを有するデータ・エントリ群を含む。送信側ハッシュ・テーブル１２２中または受信側ハッシュ・テーブル１７２中の或る特定のインデックスは、特定のデータ・パッケージと、そのデータ・パッケージにハッシュ関数を適用して生成された特定のハッシュ・ダイジェストと、特定の使用カウントとを参照する。一実施形態において、送信側ハッシュ・テーブル１２２中または受信側ハッシュ・テーブル１７２中の或るインデックスは、特定のデータ・パッケージ、ハッシュ・ダイジェスト、および使用カウントを含む、送信側ハッシュ・テーブル１２２（図１参照）または受信側ハッシュ・テーブル１７２の或る行を示す行番号である。使用カウントは、第一コンピュータ・システム１０１が、第二コンピュータ・システム１５１など、ネットワーク１３０に接続されている受信側コンピュータ・システム（群）にデータ・パッケージを送信する要求（群）を、何回処理したかを示す。システム１００が作動するに際し、送信側ハッシュ・テーブル１２２の内容と受信側ハッシュ・テーブル１７２の内容とが一致しているか、または送信側ハッシュ・テーブル１２２が、受信側ハッシュ・テーブル１７２にまだ加えられてはいないが加える予定のデータの新規の行を有する。送信側ハッシュ・テーブル１２２中の利用可能なスペースおよび受信側ハッシュ・テーブル１７２中の利用可能なスペースの管理については、図４に関連して後記で説明する。
【００２０】
一実施形態において、送信側ハッシュ・テーブル１２２および受信側ハッシュ・テーブル１７２中の各行は、表２に提示された例の中で示されるように、行番号、ハッシュ・ダイジェスト、データ・パッケージ、および使用カウントを含む。表２において、第一列は、各新規の行に対し一つずつ増分される行の番号を含む。表２の第二列は、第三列中のデータ・パッケージに対するハッシュ・ダイジェストを含む。表２の第四列は、使用カウントを含み、このカウントは、当該データ・パッケージが、ネットワーク１３０に接続されたコンピュータ・システムによってどの位の頻度で送信されたかを示す。
【００２１】
【表２】
0006282293.tif 000003
【００２２】
モニタリング・モジュール１１８が、ネットワーク１３０の利用度がユーザ定義のネットワーク利用度閾値を超えたと判定した場合、第一コンピュータ・システム１０１は重複排除モードに入り、該モードは重複排除モジュール１２０によって実施される諸ステップを含む。このセクションでは、重複排除モードにおけるいくつかのステップを説明する。重複排除モードにおけるステップおよび重複排除モード以外のモードで実施されるステップについては、後記で提示する図２〜図３の考察において詳しく説明する。
【００２３】
重複排除モードにある間に、第一コンピュータ・システム１０１は、第二コンピュータ・システム１５１によってまたはネットワーク１３０に接続された別のコンピュータ・システム（図示せず）によって実行されているソフトウェア・アプリケーションに、データ・パッケージを送信する要求を受信し処理する。第一コンピュータ・システム１０１は、ハッシュ関数を適用して、そのデータ・パッケージのハッシュ・ダイジェストを算定する。当該ハッシュ・ダイジェストが送信側ハッシュ・テーブル１２２中に既に在る場合、第一コンピュータ・システム１０１は、そのハッシュ・ダイジェスト、およびハッシュ・ダイジェストのインデックスを第二コンピュータ・システム１５１に送信する。反復使用モジュール１６８は、第一コンピュータ・システム１０１に、データ・パッケージをネットワーク１３０経由で第二コンピュータ・システム１５１に送信させることなく、受信したインデックスを使って受信側ハッシュ・テーブル１７２から当該データ・パッケージを見出して読み出す。ネットワーク１３０を通してデータ・パッケージを送信させないことによって、ネットワーク１３０を介して送信されるデータの量が低減される。
【００２４】
当該ハッシュ・ダイジェストが、送信側ハッシュ・テーブル１２２中に既存しない場合、第一コンピュータ・システム１０１は、送信側ハッシュ・テーブル１２２に、当該ハッシュ・ダイジェストとデータ・パッケージとを追加し、該ハッシュ・ダイジェストとデータ・パッケージとを第二コンピュータ・システム１５１に送信する。反復使用モジュール１６８は、受信したデータ・パッケージの新規ハッシュ・ダイジェストを算定し、受信したデータ・パッケージのデータ完全性の点検として、新規ハッシュ・ダイジェストと受信したハッシュ・ダイジェストとの対比を用いる。
【００２５】
なお、再述するが、重複排除モードにおいて実施される諸ステップの詳細は、後記の図２〜図３の考察で説明する。
【００２６】
図１のコンポーネントの機能については、図２〜図３および図４に関して後記で提示する考察並びにコンピュータ・システムと題したセクションにおいて、さらに詳しく説明する。また、別の実施形態において、コンピュータ・システム１０１は、反復使用モジュール１６８の機能に合致する機能を有する反復使用モジュール（図示せず）を含み、コンピュータ・システム１５１は、モニタリング・モジュール１１８および重複排除モジュール１２０の機能にそれぞれ合致する機能を有するモニタリング・モジュール（図示せず）および機能を有する重複排除モジュール（図示せず）を含む。この別の実施形態において、コンピュータ・システム１０１（図１参照）中の反復使用モジュールも、反復使用モジュール１６８（図１参照）によって実施されるのと同様に後記で説明する図２〜図３中のステップを実施し；コンピュータ・システム１５１（図１参照）中のモニタリング・モジュールも、モニタリング・モジュール１１８（図１参照）によって実施されるのと同様に後記で説明する図２〜図３および図４中のステップを実施し；コンピュータ・システム１５１（図１参照）中の重複排除モジュールも、重複排除モジュール１２０（図１参照）によって実施されるのと同様に、後記で説明する図２〜図３中のステップを実施する。
【００２７】
データ・パッケージを管理するためのプロセス
図２〜図３は、本発明の実施形態による、図１のシステムにおいてデータ・パッケージを管理するプロセスのフローチャートを表す。以下に提示する図２〜図３の説明において、モニタリング・モジュール１１８（図１参照）によって実施されるとして説明するどのステップも、モニタリング・モジュール１１８（図１参照）中に含まれるプログラム・コードを実行するコンピュータ・システム１０１（図１参照）によって実施され；重複排除モジュール１２０（図１参照）によって実施されるとして説明するどのステップも、重複排除モジュール１２０（図１参照）中に含まれるプログラム・コードを実行するコンピュータ・システム１０１（図１参照）によって実施され；反復使用モジュール１６８（図１参照）によって実施されるとして説明するどのステップも、反復使用モジュール１６８（図１参照）中に含まれるプログラム・コードを実行するコンピュータ・システム１５１（図１参照）によって実施される。
【００２８】
図２〜図３のプロセスは、ステップ２００で開始され、第一コンピュータ・システム１０１（図１参照）が、データ・パッケージを第二コンピュータ・システム１５１（図１参照）に送信する要求を受信または生成する。ステップ２０２に先立って、第一コンピュータ・システム１０１（図１参照）は、ネットワーク利用度閾値を受信し、この閾値は、重複排除モードに入らずに第一コンピュータ・システム１０１（図１参照）から第二コンピュータ・システム１５１（図１参照）へのデータ・パッケージの送信に関して許容される、ネットワーク１３０（図１参照）の最大限利用度を示す。ネットワーク１３０の利用度は、単位時間当たりにネットワーク１３０（図１参照）を介して送信されるデータ・パッケージの数の測定値である。ネットワーク利用度閾値は、デフォルト値またはユーザ定義の値であってよい。一実施形態において、ネットワーク利用度閾値は、ネットワーク１３０（図１参照）の最大限スループットであり、この最大限スループットは、ネットワーク１３０（図１参照）のトポロジ、およびネットワーク１３０（図１参照）に用いられた特定の技術に基づく。
【００２９】
ステップ２０２で、モニタリング・モジュール１１８（図１参照）は、ネットワーク１３０（図１参照）の利用度（すなわちネットワーク利用度）がネットワーク利用度閾値を上回るかどうかを判定する。モニタリング・モジュール１１８（図１参照）が、ステップ２０２で、ネットワーク利用度がネットワーク利用度閾値を上回ると判定した場合、ステップ２０２の「はい」分岐が取られ、ステップ２０４が実施される。モニタリング・モジュール１１８（図１参照）が、ステップ２０２で、ネットワーク利用度がネットワーク利用度閾値以下であると判定した場合、ステップ２０２の「いいえ」分岐が取られ、次にステップ２０６が実施される。
【００３０】
別の実施形態において、ステップ２０２は、ネットワーク１３０（図１参照）を通るスループットの測定値がスループット閾値を超えているかどうかを判定し、スループットが閾値を超えていれば、次にステップ２０４が実行され、超えていなければ、次にステップ２０６が実施される。
【００３１】
ステップ２０４で、モニタリング・モジュール１１８（図１参照）は、重複排除モジュール１２０（図１参照）が既に重複排除モードにあるのでなければ、重複排除モジュール１２０（図１参照）に重複排除モードに入るよう命令する。それに応じ、重複排除モジュール１２０（図１参照）は、重複排除モジュール１２０（図１参照）が既に重複排除モードにあるのでなければ重複排除モードに入る。一実施形態において、図２中のステップ２０６〜２１８および図３中のステップ２２０〜２２８は、コンピュータ・システム１０１（図１参照）によって、重複排除モードにおいて実施される。重複排除モジュール１２０（図１参照）に重複排除モードに入るよう命令した後、モニタリング・モジュール１１８（図１参照）は、ステップ２０６の前に、コンピュータ・システム１５１（図１参照）中で作動している反復使用モジュール１６８（図１参照）に通知を送信し、この通知は、コンピュータ・システム１５１（図１参照）に、重複排除モジュール１２０（図１参照）が重複排除モードに入ったことを知らせるものである。モニタリング・モジュール１１８（図１参照）によって送信された該通知を、反復使用モジュール１６８（図１参照）が受信する。
【００３２】
ステップ２０６は、ステップ２０４の後およびステップ２０２の「いいえ」分岐の後に続く。ステップ２０６で、重複排除モジュール１２０（図１参照）は、送信側ハッシュ・テーブル１２２（図１参照）を割り当て、反復使用モジュール１６８（図１参照）は、反復使用モジュール１６８（図１参照）が重複排除モジュール１２０（図１参照）は重複排除モードに入ったとの前述の通知を受信するのに応じて、受信側ハッシュ・テーブル１７２（図１参照）を割り当てる。ステップ２０６が、ステップ２０２の「いいえ」分岐に後続する場合、ステップ２０６は、モニタリング・モジュール１１８（図１参照）が重複排除モジュール１２０（図１参照）に、重複排除モジュール１２０（図１参照）が既に重複排除モードにある場合は重複排除モードのままにしておくよう命令するステップを含む。重複排除モジュール１２０（図１参照）に重複排除モードのままにしておくよう命令した後、モニタリング・モジュール１１８（図１参照）は、コンピュータ・システム１５１（図１参照）中で作動している反復使用モジュール１６８（図１参照）に通知を送信し、この通知は、コンピュータ・システム１５１（図１参照）に、重複排除モジュール１２０（図１参照）が重複排除モードのままであることを知らせるものである。反復使用モジュール１６８（図１参照）が、モニタリング・モジュール１１８（図１参照）によって送信された該通知を受信する。
【００３３】
ステップ２０８に先立って、第一コンピュータ・システム１０１（図１参照）は、ＣＰＵ利用度閾値を受信し、該閾値は、第一ハッシュ関数の代わりに第二ハッシュ関数が選択された場合に存続が許容される、ＣＰＵ１０２（図１参照）の最大の現行利用度を示す。ハッシュ・ダイジェストを生成するため、データ・パッケージに第一ハッシュ関数を用いることは、ハッシュ・ダイジェストを生成するため、同じデータ・パッケージに第二ハッシュ関数を用いるよりも、ＣＰＵ１０２（図１参照）によって提供されるリソースの使用量が少ない。但し、第二ハッシュ関数は第一ハッシュ関数よりも強力である。というのは、このハッシュ関数は、第一ハッシュ関数によって生成されるハッシュ・ダイジェストよりも長いハッシュ・ダイジェストを生成し、したがって、第一ハッシュ関数ではなく第二ハッシュ関数を用いる方が、ハッシュ衝突の可能性が低減されるからである。しかして、十分なＣＰＵ容量が利用可能な（すなわち、ＣＰＵ利用度がＣＰＵ利用度閾値以下の）ときは、第一ハッシュ関数よりも第二ハッシュ関数を用いる方が望ましい。ＣＰＵ利用度閾値は、デフォルト値またはユーザ定義の値であってよい。ステップ２０８で、モニタリング・モジュール１１８（図１参照）は、ＣＰＵ１０２（図１参照）の利用度（すなわちＣＰＵ利用度）がＣＰＵ利用度閾値を上回るかどうかを判定する。ステップ２０８で、モニタリング・モジュール１１８（図１参照）が、ＣＰＵ利用度はＣＰＵ利用度閾値を上回ると判定した場合、ステップ２０８の「はい」分岐が取られ、ステップ２１０が実施される。
【００３４】
ステップ２１０で、重複排除モジュール１２０（図１参照）は、第二ハッシュ関数の代わりに第一ハッシュ関数を選択し、選択された第一ハッシュ関数を、データ・パッケージに対するハッシュ・ダイジェストを算定するのに用いるハッシュ関数として割り当てる。
【００３５】
ステップ２０８に戻って、モニタリング・モジュール１１８（図１参照）が、ステップ２０８で、ＣＰＵ利用度はＣＰＵ利用度閾値以下であると判定した場合、ステップ２０８の「いいえ」分岐が取られ、ステップ２１２が実施される。
【００３６】
ステップ２１２で、重複排除モジュール１２０（図１参照）は、第一ハッシュ関数の代わりに第二ハッシュ関数を選択する。重複排除モジュール（図１参照）は、選択された第二ハッシュ関数を、データ・パッケージに対するハッシュ・ダイジェストを算定するのに用いるハッシュ関数として割り当てる。
【００３７】
ステップ２１４は、ステップ２１０の後およびステップ２１２の後に続く。ステップ２１４で、重複排除モジュール１２０（図１参照）は、ステップ２１０で選択された第一ハッシュ関数またはステップ２１２で選択された第二ハッシュ関数を用いてデータ・パッケージのハッシュ・ダイジェストＤ１を算定する。以下、ステップ２１０またはステップ２１２のどちらで選択されたハッシュ関数も、選択されたハッシュ関数ということとする。
【００３８】
ステップ２１６で、重複排除モジュール１２０（図１参照）は、ステップ２０４において重複排除モードに入っているのかどうかを判定する。ステップ２１６で、重複排除モジュール１２０（図１参照）が、ステップ２０４で重複排除モードに入っていないと判定した場合、ステップ２１６の「いいえ」分岐が取られ、ステップ２１８が実施される。
【００３９】
ステップ２１８で、重複排除モジュール１２０（図１参照）は、ネットワーク１３０（図１参照）を介して第二コンピュータ・システム１５１（図１参照）に、通信パッケージの中のデータ・パッケージ、ハッシュ・ダイジェストＤ１、および選択されたハッシュ関数の識別子を送信する。一例として、表１にリストされているハッシュ関数など複数のハッシュ関数は、それぞれの番号によって一意的に識別することが可能である（例えば、ＭＤ５の識別子を１とし、ＳＨＡ−２５６の識別子を２とし、ＷＨＩＲＬＰＯＯＬの識別子を３とする）。ステップ２１８の後に図３のステップ２３０が続く。
【００４０】
ステップ２１６に戻って、重複排除モジュール１２０（図１参照）が、重複排除モードに入っていると判定した場合、ステップ２１６の「はい」分岐が取られ、図２〜図３のプロセスにおける次のステップは、図３中のステップ２２０となる。
【００４１】
図３中のステップ２２０で、重複排除モジュール１２０（図１参照）は、ハッシュ・ダイジェストＤ１が送信側ハッシュ・テーブル１２２（図１参照）中に既に在るかどうかを判定する。例えば、重複排除モジュール１２０（図１参照）は、ハッシュ・ダイジェストＤ１が表２の第二列と一致するかどうか試みる。ステップ２２０で、重複排除モジュール１２０（図１参照）が、ハッシュ・ダイジェストＤ１が送信側ハッシュ・テーブル１２２（図１参照）中に在ると判定した場合、ステップ２２０の「はい」分岐が取られ、ステップ２２２が実施される。
【００４２】
ステップ２２２で、重複排除モジュール１２０（図１参照）は、送信側ハッシュ・テーブル１２２（図１参照）中のハッシュ・ダイジェストＤ１を参照しているインデックスを見つけ出して、重複排除モジュール１２０（図１参照）は送信側ハッシュ・テーブル１２２（図１参照）のエントリ中の使用カウントを更新し、該エントリは、インデックス、ハッシュ・ダイジェストＤ１、データ・パッケージ、および使用カウントを含む。一実施形態において、ステップ２２０の「はい」分岐とステップ２２２とを通って、データ・パッケージが処理される毎に、重複排除モジュール１２０（図１参照）は、使用カウントを１つ増分する。一実施形態において、ステップ２２２で見つけ出されたインデックスは、送信側ハッシュ・テーブル１２２（図１参照）の行番号である。
【００４３】
ステップ２２４で、重複排除モジュール１２０（図１参照）は、ハッシュ・ダイジェストＤ１、および送信側ハッシュ・テーブル１２２（図１参照）中のハッシュ・ダイジェストＤ１を参照するインデックスを含み、随意的に、選択されたハッシュ関数の識別子を含む、通信パッケージを生成し、生成された通信パッケージを第二コンピュータ・システム１５１（図１参照）に送信する。ステップ２２４で生成された通信パッケージ中には、データ・パッケージは含まれていない。ステップ２２４の後にステップ２３０が続く。
【００４４】
ステップ２２０に戻って、重複排除モジュール１２０（図１参照）が、ハッシュ・ダイジェストＤ１が送信側ハッシュ・テーブル１２２（図１参照）中にないと判定した場合、ステップ２２０の「いいえ」分岐が取られ、ステップ２２６が実施される。
【００４５】
ステップ２２６で、重複排除モジュール１２０（図１参照）は、ハッシュ・ダイジェストＤ１およびデータ・パッケージを新規レコード（例えば新しい行）に加え、該レコードは、送信側ハッシュ・テーブル１２２（図１参照）に追加される。ステップ２２６で、重複排除モジュール１２０（図１参照）は、送信側ハッシュ・テーブル１２２（図１参照）に追加されたハッシュ・ダイジェストＤ１およびデータ・パッケージを参照しているインデックス（例えば行番号）を見つけ出す。また、重複排除モジュール１２０（図１参照）は、新規レコード中の使用カウントの値を初期化する。例えば、使用カウントの初期化の値を１とすればよい。
【００４６】
ステップ２２８で、重複排除モジュール１２０（図１参照）は、データ・パッケージ、メタデータとして組み込まれたハッシュ・ダイジェストＤ１、およびステップ２１０（図２参照）またはステップ２１２（図２参照）で選択されたハッシュ関数の識別子を含む通信パッケージを生成し、生成された通信パッケージを第二コンピュータ・システム１５１（図１参照）に送信する。
【００４７】
ステップ２２４およびステップ２２８の後に続くステップ２３０で、第二コンピュータ・システム１５１（図１参照）中で作動している反復使用モジュール１６８（図１参照）が、ステップ２２４またはステップ２２８で生成された通信パッケージを受信する。
【００４８】
ステップ２３２で、反復使用モジュール１６８（図１参照）は、ステップ２３０で受信した通信パッケージがデータ・パッケージを含むかどうかを判定する。ステップ２３２で、反復使用モジュール１６８（図１参照）が、ステップ２３０で受信した通信パッケージはステップ２２８または２１８（図２参照）で送信されたデータ・パッケージを含むと判定した場合、ステップ２３２の「はい」分岐が取られ、ステップ２３４が実施される。一実施形態において、反復使用モジュール１６８（図１参照）は、反復使用モジュール１６８（図１参照）がステップ２０４（図２参照）で、重複排除モジュール１２０（図１参照）は重複排除モードに入っているとの通知を受信したこと基づいて、且つ、反復使用モジュール１６８（図１参照）がステップ２３０で、ハッシュ・ダイジェストＤ１と、送信側ハッシュ・テーブル１２２（図１参照）中のハッシュ・ダイジェストＤ１を参照するインデックスと、選択されたハッシュ関数の識別子とを含む通信パッケージを受信したことに基づいて、ステップ２３０で受信した通信パッケージはデータ・パッケージを含まないと判定する。
【００４９】
ステップ２３２に続いて且つステップ２３４に先立って、反復使用モジュール１６８（図１参照）は、ステップ２３０で受信した通信パッケージ中に含まれたハッシュ関数の識別子を使って選択されたハッシュ関数を識別する。ステップ２３４で、反復使用モジュール１６８（図１参照）は、識別されたハッシュ関数を、ステップ２３０で受信した通信パッケージに含まれたデータ・パッケージに適用することによってハッシュ・ダイジェストＤ２を算定する。
【００５０】
ステップ２３６で、反復使用モジュール１６８（図１参照）は、ステップ２３０で受信した通信パッケージ中に含まれたハッシュ・ダイジェストＤ１とハッシュ・ダイジェストＤ２とが等しいかどうかを判定し、この判定は、受信したデータ・パッケージがデータ完全性を有するかどうかを示すものである。ステップ２３６で、反復使用モジュール１６８（図１参照）がＤ１はＤ２と等しくないと判定した場合、反復使用モジュールは、受信したデータ・パッケージのデータ完全性が欠如していると判定し、ステップ２３６の「いいえ」分岐が取られ、ステップ２３８が実施される。
【００５１】
ステップ２３８で、エラー回復手順が実施される。このエラー回復手順は、反復使用モジュール１６８（図１参照）が、第一コンピュータ・システム１０１（図１参照）に、データ・パッケージにデータ完全性が欠如していることを示すメッセージを送信するステップを含む。データ完全性の欠如についてのメッセージを受信するのに応じて、第一コンピュータ・システム１０１（図１参照）は、別の通信パッケージを生成し、ハッシュ・ダイジェストＤ１および選択されたハッシュ関数と共にそのデータ・パッケージを第二コンピュータ・システム１５１（図１参照）に再送信する。図２〜図３のプロセスはステップ２４０で終了する。図示はされていないが、以下で説明するように、ステップ２３８で、第一コンピュータ・システム１０１（図１参照）がデータ・パッケージ、ハッシュ・ダイジェストＤ１、および選択されたハッシュ関数の識別子を再送信した後も、ステップ２３６でＤ１＝Ｄ２と判定され、ステップ２３６の「はい」分岐が取られるまで、ステップ２３０、２３２、２３４、および２３６が繰り返される。ステップ２３０、２３２、２３４、および２３６を繰り返しても、Ｄ１がＤ２に等しくない場合、ステップ２３８のエラー回復手順を繰り返すことができる。
【００５２】
ステップ２３６に戻って、反復使用モジュール１６８（図１参照）がＤ１＝Ｄ２と判定した場合、ステップ２３６の「はい」分岐が取られ、ステップ２４２が実施される。
【００５３】
ステップ２４２で、反復使用モジュール１６８（図１参照）は、受信したデータ・パッケージがデータ完全性を有すると判定し、受信したハッシュ・ダイジェストＤ１およびデータ・パッケージを新規レコード（例えば新しい行）に加え、該レコードは、受信側ハッシュ・テーブル１７２（図１参照）に追加される。しかして、ステップ２４２で受信側ハッシュ・テーブル１７２（図１参照）に追加された新規レコードは、ステップ２２６の直近前の実施状況において、送信側ハッシュ・テーブル１２２（図１参照）に追加された新規レコードと一致する。受信側ハッシュ・テーブル１７２（図１参照）に新規レコードを追加した後は、受信側ハッシュ・テーブル１７２（図１参照）の内容は、送信側ハッシュ・テーブル１２２（図１参照）の内容と再び一致する。
【００５４】
ステップ２４４で、反復使用モジュール１６８（図１参照）は、データ・パッケージを要求したアプリケーションに、当該データ・パッケージを送信する。ステップ２４４の後、図２〜図３のプロセスはステップ２４０で終了する。
【００５５】
ステップ２３２に戻って、反復使用モジュール１６８（図１参照）が、ステップ２３０で受信した通信パッケージはデータ・パッケージを含まない（すなわち、ステップ２２４で、ハッシュ・ダイジェストＤ１およびＤ１のインデックスだけを有する通信パッケージが送信された）と判定した場合、ステップ２３２の「いいえ」分岐が取られ、ステップ２４６が実施される。
【００５６】
ステップ２４６で、反復使用モジュール１６８（図１参照）は、受信側ハッシュ・テーブル１７２（図１参照）中で、ステップ２３０で受信したインデックスを探索し、該インデックスの探索に基づいて、受信側ハッシュ・テーブル１７２（図１参照）中の該インデックスで参照されたエントリのハッシュ・ダイジェストを見出して読み出す。
【００５７】
ステップ２４８で、反復使用モジュール１６８（図１参照）は、ステップ２４６で受信側ハッシュ・テーブル１７２（図１参照）から読み出されたハッシュ・ダイジェストが、ステップ２３０で受信した通信パッケージ中に含まれていたハッシュ・ダイジェストＤ１と等しいかどうか判定する。ステップ２４８で、反復使用モジュール１６８（図１参照）が、受信側ハッシュ・テーブル１７２（図１参照）から読み出されたハッシュ・ダイジェストはハッシュ・ダイジェストＤ１と等しいと判定した場合、ステップ２４８の「はい」分岐が取られ、ステップ２５０が実施される。
【００５８】
ステップ２５０で、反復使用モジュール１６８（図１参照）は、ステップ２３０で受信した通信パッケージ中に含まれたインデックスによって参照されているデータ・パッケージに基づいて、受信側ハッシュ・テーブル１７２（図１参照）からデータ・パッケージを読み出す。選択されたハッシュ関数の識別子が、ステップ２２４で送信されていてステップ２３０で受信した通信パッケージに含まれていた場合、ステップ２５０は、反復使用モジュール１６８（図１参照）が、（１）ステップ２３０で受信した通信パッケージ中に含まれた選択されたハッシュ関数の識別子に基づいて、どちらのハッシュ関数が選択されたハッシュ関数であるかを特定するステップと；（２）ステップ２５０で読み出されたデータ・パッケージに対し、該選択されたハッシュ関数を用いることによって新規ハッシュ・ダイジェストを算定するステップと；（３）その新規ハッシュ・ダイジェストが受信したハッシュ・ダイジェストと一致するかどうかを判定するステップと；を実施することも含む。
【００５９】
ステップ２５０に後続するステップ２４４で、選択されたハッシュ関数の識別子がステップ２３０で受信した通信パッケージ中に含まれていなかった場合、反復使用モジュール１６８（図１参照）は、当該データ・パッケージを要求してきたアプリケーションにデータ・パッケージを送信し、この送信されるデータ・パッケージは、ステップ２５０で読み出されたデータ・パッケージである。ステップ２４４で、選択されたハッシュ関数の識別子がステップ２３０で受信した通信パッケージ中に含まれていた場合で、且つ、ステップ２５０で算定された新規ハッシュ・ダイジェストが、ステップ２３０で受信した通信パッケージ中に含まれたハッシュ・ダイジェストと一致する場合、反復使用モジュール１６８（図１参照）は、データ・パッケージを要求してきたアプリケーションにデータ・パッケージを送信し、該送信されるデータ・パッケージは、ステップ２５０で読み出されたデータ・パッケージである。前述のように、ステップ２２４で送信されたハッシュ・ダイジェストＤ１およびＤ１のインデックスだけに応じて（すなわち、ステップ２２４で、第一コンピュータ・システム１０１（図１参照）からネットワーク１３０（図１参照）を介して第二コンピュータ・システム１５１（図１参照）にデータ・パッケージを送信することなく）、データ・パッケージが、受信側ハッシュ・テーブル１７２（図１参照）から読み出されてアプリケーションに送信され、これにより、同じデータ・パッケージが複数回要求されるのに応じてネットワークを介しデータ・パッケージを送信および再送信する既知の技法に比べて、ネットワーク１３０（図１参照）を介して送信されるデータの量が低減される。ステップ２４４の後、図２〜図３のプロセスはステップ２４０で終了する。
【００６０】
ステップ２４８に戻って、反復使用モジュール１６８（図１参照）が、ステップ２４６で受信側ハッシュ・テーブル１７２（図１参照）から読み出されたハッシュ・ダイジェストはハッシュ・ダイジェストＤ１と等しくないと判定した場合、ステップ２４８の「いいえ」分岐が取られ、ステップ２５２が実施される。
【００６１】
ステップ２５２で、エラー回復手順が実施される。ステップ２５２におけるエラー回復手順は、反復使用モジュール１６８（図１参照）が、ハッシュ・ダイジェストＤ１と一致するハッシュ・ダイジェストについて、受信側ハッシュ・テーブル１７２（図１参照）の他のエントリを検索するステップを含む。この検索の結果が、反復使用モジュール１６８（図１参照）がハッシュ・ダイジェストＤ１と一致するハッシュ・ダイジェストを含む、受信側ハッシュ・テーブル１７２（図１参照）中のエントリを見出したことである場合、反復使用モジュール１６８（図１参照）は、見出されたエントリ中に在るデータ・パッケージを読み出し、読み出されたデータ・パッケージをそのデータ・パッケージを要求してきたアプリケーションに送信し、受信側ハッシュ・テーブル１７２（図１参照）中で見出されたエントリを、該エントリのインデックスが、ステップ２３０で受信した通信パッケージ中に含まれていたインデックスと一致するように移動し、これをもってエラー回復手順を終了する。
【００６２】
選択されたハッシュ関数の識別子が、ステップ２３０で受信した通信パッケージ中に含まれていた場合、読み出だれたデータ・パッケージをアプリケーションに送信する前に、反復使用モジュール１６８（図１参照）は、随意的に、（１）ステップ２３０で受信した通信パッケージ中に含まれている選択されたハッシュ関数の識別子に基づいて、どのハッシュ関数が選択されたハッシュ関数であるかを特定するステップと；（２）読み出されたデータ・パッケージに対し、選択されたハッシュ関数を用いることによって新規ハッシュ・ダイジェストを算定するステップと；（３）その新規ハッシュ・ダイジェストが受信したハッシュ・ダイジェストと一致するかどうかを判定するステップと；を実施する。上記に続き、新規ハッシュ・ダイジェストが、受信したハッシュ・ダイジェストと一致する場合、反復使用モジュール１６８（図１参照）は、読み出されたデータ・パッケージを、そのデータ・パッケージを要求してきたアプリケーションに送信し、次いで、受信側ハッシュ・テーブル１７２（図１参照）中で見出されたエントリを、該エントリのインデックスが、ステップ２３０で受信した通信パッケージ中に含まれていたインデックスと一致するように移動し、これをもってエラー回復手順を終了する。
【００６３】
反復使用モジュール１６８（図１参照）が、ハッシュ・ダイジェストＤ１と等しいハッシュ・ダイジェストを含むエントリを受信側ハッシュ・テーブル１７２（図１参照）中に見出すことができない場合、反復使用モジュール１６８（図１参照）は、第一コンピュータ・システム１０１（図１参照）に、ハッシュ・ダイジェストＤ１に相当するデータ・パッケージが受信側ハッシュ・テーブル１７２（図１参照）中に見出されなかったことを示すメッセージを送信し、これをもってエラー回復手順を完了する。ステップ２５２でのエラー回復手順が完了した後、図２〜図３のプロセスはステップ２４０で終了する。
【００６４】
一実施形態において、一つ以上の他のデータ・パッケージを、第一コンピュータ・システム１０１（図１参照）から第二コンピュータ・システム１５１（図１参照）に送信する追加の要求（群）を処理するために、それら他のデータ・パッケージの各々に対し、図２〜図３のプロセスがステップ２１４（図２参照）から繰り返され、ネットワーク利用度がネットワーク利用度閾値を超え続けている間は、重複排除モジュール１２０（図１参照）は重複排除モードに留まり、コンピュータ・システム１０１（図１参照）からコンピュータ・システム１５１（図１参照）への重複排除モジュール１２０（図１参照）が重複排除モードにあるとの通知の再送信は行われない。別の実施形態では、ステップ２０２（図２参照）でのネットワーク利用度のチェックの前に、ステップ２０８におけるＣＰＵ利用度のチェック、並びにステップ２１０、２１２、および２１４（図２参照）が実施される。
【００６５】
別の実施形態において、モニタリング・プログラム・コード５１８（図６参照）を実行するコンピュータ・システム１０１−１（図６参照）は、ステップ２０２、２０４、および２０８（図２参照）を実施し、重複排除プログラム・コード５２０（図６参照）を実行するコンピュータ・システム１０１−１（図６参照）は、ステップ２０６（図２参照）での送信側ハッシュ・テーブル１２２（図１参照）の割り当てと、ステップ２１０、２１２、２１４、２１６、および２１８（図２参照）と、ステップ２２０、２２２、２２４、２２６、および２２８（図３参照）と、を実施する。さらに、この段落で説明した実施形態において、反復使用プログラム・コード５６８（図６参照）を実行するコンピュータ・システム１５１−１（図６参照）は、ステップ２０６（図２参照）での受信側ハッシュ・テーブル１７２（図１参照）の割り当てと、ステップ２３０、２３２、２３４、２３６、２３８、２４２、２４４、２４６、２４８、２５０、および２５２（図３参照）と、を実施する。
【００６６】
ハッシュ・テーブル・スペースを管理するプロセス
図４は、本発明の実施形態による、図１のシステムにおいてハッシュ・テーブル・スペースを管理するプロセスのフローチャートである。一実施形態において、図４のプロセスは、重複排除モードにある間、複数のデータ・パッケージに対し図２〜図３のプロセスが繰り返される際に定期的に実施される。図４のプロセスは、ステップ３００で開始される。ステップ３０２で、モニタリング・モジュール１１８（図１参照）は、送信側ハッシュ・テーブル１２２（図１参照）中の利用可能なスペースの量（すなわち利用可能スペース）を測定する。ステップ３０４に先立って、モニタリング・モジュール１１８（図１参照）は、利用可能スペース閾値を受信し、該閾値は、利用可能スペースを増やすため送信側ハッシュ・テーブル１２２（図１参照）中の一つ以上のエントリの削除を求めないで、送信側ハッシュ・テーブル１２２（図１参照）中の利用可能なスペースの量をどこまで低くできるかを示す。
【００６７】
ステップ３０４で、モニタリング・モジュール１１８（図１参照）は、ステップ３０２で測定された利用可能なスペースが、利用可能スペース閾値を下回るかどうかを判定する。モニタリング・モジュール１１８（図１参照）が、ステップ３０２で測定された利用可能なスペースが利用可能スペース閾値以上であると判定した場合、ステップ３０４の「いいえ」分岐が取られ、図４のプロセスは、ステップ３０２にループ・バックする。モニタリング・モジュール１１８（図１参照）が、ステップ３０２で測定された利用可能なスペースが利用可能スペース閾値を下回ると判定した場合、「はい」分岐が取られ、ステップ３０６が実施される。あるいは、受信側（すなわち、図１のコンピュータ・システム１５１）が利用可能なスペースをチェックし、利用可能スペースが閾値を下回って低下している場合、受信側が、送信側（すなわち、図１のコンピュータ・システム１０１）に、受信側ハッシュ・テーブル１７２のクリーンアップを要求するメッセージを送信する。上記のメッセージが送信された後、ステップ３０４の「はい」分岐が取られる。
【００６８】
ステップ３０６で、送信側ハッシュ・テーブル１２２（図１参照）中の利用可能なスペースが利用可能スペース閾値を下回るのに基づいて、モニタリング・モジュール１１８（図１参照）は、送信側ハッシュ・テーブル１２２（図１参照）中の、それぞれの使用カウント（群）が最低数の使用カウントまたはその次に最低数の使用カウントに等しい一つ以上のエントリのインデックス（群）（例えば行番号）を見つけ出す。ステップ３０６の最初の実施において、モニタリング・モジュール１１８（図１参照）は、送信側ハッシュ・テーブル１２２（図１参照）中の他の全ての使用カウントと比べて、最低数の使用カウントと等しい使用カウントを有する、送信側ハッシュ・テーブル１２２（図１参照）中のエントリ（群）のインデックス（群）を見つけ出す。以下で説明するように、ステップ３１４の「はい」分岐で始まるループに由来する、ステップ３０６の後続する実行において、モニタリング・モジュール１１８（図１参照）は、ステップ３０６の直近前の実施において用いられた特定の使用カウントに関し、次に最低数の使用カウントに等しい使用カウントを有する、送信側ハッシュ・テーブル１２２（図１参照）のエントリ（群）のインデックス（群）を見つけ出す。
【００６９】
ステップ３０８で、モニタリング・モジュール１１８（図１参照）は、ステップ３０６で見つけ出したインデックス（群）を（例えばリストとして）受信側コンピュータ・システム１５１（図１参照）に送信する。ステップ３０８の後且つステップ３１０の前に、受信側コンピュータ・システム１５１（図１参照）は、モニタリング・モジュール１１８（図１参照）によって送信されたインデックス（群）を受信する。
【００７０】
ステップ３１０で、モニタリング・モジュール１１８（図１参照）、または送信側コンピュータ・システム１０１（図１参照）中で作動している別のソフトウェア・ベースのモジュールが、ステップ３０６で見つけ出したインデックス（群）に対応する、送信側ハッシュ・テーブル１２２（図１参照）中の一つ以上のデータ・エントリを削除する。また、ステップ３１０では、受信側コンピュータ・システム１５１（図１参照）中で作動しているソフトウェア・ベースのモジュールが、ステップ３０６で送信され続いて受信側コンピュータ・システム１５１（図１参照）によって受信されたインデックス（群）に対応する、受信側ハッシュ・テーブル１７２（図１参照）中の一つ以上のデータ・エントリを削除する。
【００７１】
ステップ３１２で、モニタリング・モジュール１１８（図１参照）は、送信側ハッシュ・テーブル１２２（図１参照）中の利用可能なスペースを再測定する。
【００７２】
ステップ３１４で、モニタリング・モジュール１１８（図１参照）は、送信側ハッシュ・テーブル１２２（図１参照）中の利用可能スペースが未だ利用可能スペース閾値を下回っているかどうかを判定する。ステップ３１４で、モニタリング・モジュール１１８（図１参照）が、利用可能スペースは利用可能スペース閾値を下回っていると判定した場合、ステップ３１４の「はい」分岐が取られ、図４のプロセスはステップ３０６にループ・バックして、送信側ハッシュ・テーブル１２２（図１参照）中および受信側ハッシュ・テーブル１７２（図１参照）中の利用可能スペースを増やすため、削除対象とする他一つ以上の他のハッシュ・テーブル・データ・エントリのインデックス（群）を見つけ出す。他方、ステップ３１４で、モニタリング・モジュール１１８（図１参照）が、利用可能スペースが利用可能スペース閾値以上であると判定した場合、ステップ３１４の「いいえ」分岐が取られ、ステップ３１６が行われる。図４のプロセスは、ステップ３１６で終了する。
【００７３】
例えば、送信側ハッシュ・テーブル１２２（図１参照）が、行１から行１０まで、それぞれ、１、２、１、５、２、４、５、２、４、４の使用カウントを有する（すなわち、第一行は１の使用カウントを有し、第二行は２の使用カウントを有し、第三行は１の使用カウントを有し、以下同様に、最大、第十行の４の使用カウントまでを有する）と仮定しよう。この例において、ステップ３０６の第一の実行は、最低数の使用カウントが１であり第一および第三行がこの最低数の使用カウント１を有するので、送信側ハッシュ・テーブル１２２（図１参照）中および受信側ハッシュ・テーブル１７２（図１参照）中の利用可能なスペースを増やすために、行番号１および３を削除対象に決めることである。ステップ３１０で行番号１および３を削除した後、ステップ３１４で、利用可能スペースが未だ閾値を下回ると判定された場合、ステップ３０６の第二の実行は、ステップ３０６の第一の実行において用いられた使用カウント１の次に最低数の使用カウントが２であり第二、第五、および第八行がこの次に最低数のカウント２を有するので、行番号２、５、および８を削除対象に決めることである。第二、第五、および第八行を削除した後、ステップ３１４で、利用可能スペースが未だ閾値を下回ると判定された場合、ステップ３０６の第三の実行は、ステップ３０６の第二の実行において用いられた使用カウント２の次に最低数のカウントが４であり第六、第九、および第十行がこの次に最低数のカウント４を有するので、行番号６、９、および１０を削除対象に決めることである。
【実施例】
【００７４】
図５は、本発明の実施形態による、図２〜図３のプロセスによって管理されるデータ・パッケージを含む、例示的な通信パッケージである。通信パッケージ４０２は、ヘッダ４０４およびデータ・パッケージ４０６を含む。ヘッダ４０４は、ハッシュ関数識別子４０８、ハッシュ・ダイジェストＤ１  ４１０、および他のメタデータ４１２を含む。通信パッケージ４０２は、周知の通信パッケージの延長であり、その中のヘッダ４０４は、ハッシュ関数識別子４０８およびハッシュ・ダイジェストＤ１  ４１０に対する追加メタデータを含む。周知のメタデータは、他のメタデータ４１２中に含まれる。
【００７５】
通信パッケージ４０２は、ステップ２１８（図２参照）またはステップ２２８（図３参照）で送信される通信パッケージの一例である。ハッシュ関数識別子４０８は、ステップ２１０（図２参照）またはステップ２１２（図２参照）で選択されるハッシュ関数の例示的な識別子である。利用可能なハッシュ関数の例については表１を参照されたい。データ・パッケージ４０６は、ステップ２１４（図２参照）でハッシュ・ダイジェストＤ１が算定される対象のデータ・パッケージの一例であり、該パッケージは、ステップ２１８（図２参照）またはステップ２２８（図３参照）で第二コンピュータ・システム１５１（図１参照）に送信され、ステップ２４４（図３参照）でアプリケーションに送信される。ハッシュ・ダイジェストＤ１  ４１０は、ステップ２１４（図２参照）で算定されるハッシュ・ダイジェストの一例であり、該ハッシュ・ダイジェストは、ステップ２１８（図２参照）またはステップ２２８（図３参照）で受信側コンピュータ・システム１５１（図１参照）に送信される。
【００７６】
データ・パッケージ４０６を含まない、またはデータ・パッケージ４０６中にデータを含まない通信パッケージ４０２の変形も、ステップ２２４（図３参照）で送信される通信パッケージの一例である。ステップ２２４（図３参照）で通信パッケージ４０２が送信される場合、ハッシュ・ダイジェストＤ１  ４１０は、ステップ２１４（図２参照）で算定されるハッシュ・ダイジェストＤ１を含み、他のメタデータ４１２は、ステップ２２４（図３参照）で送信されるインデックスを含む。
【００７７】
コンピュータ・システム
図６は、本発明の実施形態による、図２〜図３、および図４のプロセスを実装するコンピュータ・システムのブロック図である。システム５００は、コンピュータ・ネットワーク１３０−１を介し相互に通信している、第一コンピュータ・システム１０１−１および第二コンピュータ・システム１５１−１を含む。
【００７８】
第一コンピュータ・システム１０１−１は、一般に、中央処理ユニット（ＣＰＵ）１０２−１と、メモリ１０４−１と、入力／出力（Ｉ／Ｏ：ｉｎｐｕｔ／ｏｕｔｐｕｔ）インターフェース１０６−１と、バス１０８−１と、送信側ＮＩＣ１１６−１とを含む。さらに、コンピュータ・システム１０１−１は、Ｉ／Ｏデバイス１１０−１およびコンピュータ・データ・ストレージ・ユニット１１２−１に連結されている。同様に、コンピュータ・システム１５１−１は、一般に、ＣＰＵ１５２−１と、メモリ１５４−１と、Ｉ／Ｏインターフェース１５６−１と、バス１５８−１と、受信側ＮＩＣ１６６−１とを含み、さらに、コンピュータ・システム１５１−１は、Ｉ／Ｏデバイス１６０−１およびコンピュータ・データ・ストレージ・ユニット１６２−１に連結されている。
【００７９】
ＣＰＵ１０２−１および１５２−１は；ＣＰＵ１０２−１がモニタリング・プログラム・コード５１８および重複排除プログラム・コード５２０中に含まれる命令を実行し、ＣＰＵ１５２−１が反復使用プログラム・コード５６８中に含まれる命令を実行して、メモリ１０４−１中の送信側ハッシュ・テーブル５２２およびメモリ１５４−１中の受信側ハッシュ・テーブル５７２を用い、データ・パッケージを管理する方法を実施することを含め；それぞれ、コンピュータ・システム１０１−１および１５１−１の計算および制御機能を実施する。コード５１８および５２０中に含まれる命令は、メモリ１０４−１を介しＣＰＵ１０２−１によって実行される。コード５６８中に含まれる命令は、メモリ１５４−１を介しＣＰＵ１５２−１によって実行される。ＣＰＵ１０２−１および１５２−１は、各々単一の処理ユニットを含むこともでき、または一つ以上の場所（例えば、クライアントおよびサーバ上）の一つ以上の処理ユニットにまたがって分散させることもできる。
【００８０】
また、別の実施形態において、コンピュータ・システム１０１−１は、反復使用プログラム・コード５６８の機能と一致する機能を持つ反復使用プログラム・コードも含み、コンピュータ・システム１５１−１は、それぞれ、モニタリング・プログラム・コード５１８および重複排除プログラム・コード５２０の機能と一致する機能を持つモニタリング・プログラム・コードおよび重複排除プログラム・コードも含む。
【００８１】
メモリ１０４−１およびメモリ１５４−１は、各々任意の周知のコンピュータ可読ストレージ媒体を含んでもよいが、これについては後で説明する。一実施形態において、メモリ１０４−１およびメモリ１５４−１のキャッシュ・メモリ・エレメントは、プログラム・コードの命令が実行される間に大容量ストレージからコードを読み出す必要のある回数を低減するために、少なくとも一部のプログラム・コード（例えば、プログラム・コード５１８およびプログラム・コード５２０）の一時的なストレージを提供する。さらに、メモリ１０４−１およびメモリ１５４−１は、各々、一種類以上のデータ・ストレージを含む、それぞれの単一の物理的場所に所在してもよく、あるいは様々な形で複数の物理システムにまたがって分散されてもよい。さらに、メモリ１０４−１およびメモリ１５４−１は、各々、例えば、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）または広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）に亘って分散されたデータを含むことができる。
【００８２】
Ｉ／Ｏインターフェース１０６−１およびＩ／Ｏインターフェース１５６−１は、各々外部リソースとやり取りして情報を交換するための任意のシステムを含む。Ｉ／Ｏデバイス１１０−１およびＩ／Ｏデバイス１６０−１は、ディスプレイ・デバイス（例えばモニタ）、キーボード、マウス、プリンタ、スピーカ、携帯デバイス、ファクシミリなどを含め、任意の周知の種類の外部デバイスを含む。バス１０８−１およびバス１５８−１は、それぞれ、第一コンピュータ・システム１０１−１および第二コンピュータ・システム１５１−１中の各コンポーネントの間の通信リンクを提供し、各々のバスは、電気的、光学的、無線などによるものを含め任意の種類の送信リンクを含んでもよい。
【００８３】
また、Ｉ／Ｏインターフェース１０６−１およびＩ／Ｏインターフェース１５６−１は、コンピュータ・システム１０１−１およびコンピュータ・システム１５１−１が、それぞれ、コンピュータ・データ・ストレージ・ユニット１１２−１およびコンピュータ・データ・ストレージ・ユニット１６２−１、または別のコンピュータ・データ・ストレージ・ユニット（図示せず）に、情報（例えば、データ、またはプログラム・コード５１８およびプログラム・コード５２０などのプログラム命令）を格納し、これらユニットから情報を読み出すことを可能にする。コンピュータ・データ・ストレージ・ユニット１１２−１およびコンピュータ・データ・ストレージ・ユニット１６２−１は、各々任意の周知のコンピュータ可読ストレージ媒体を含み得、これについては後で説明する。例えば、コンピュータ・データ・ストレージ・ユニット１１２−１またはコンピュータ・データ・ストレージ・ユニット１６２−１は、磁気ディスク・ドライブ（すなわちハード・ディスク・ドライブ）または光ディスク・ドライブ（例えば、ＣＤ−ＲＯＭディスクを収受するＣＤ−ＲＯＭドライブ）などの不揮発性データ・ストレージ・デバイスとすることができる。
【００８４】
送信側ＮＩＣ１１６−１は、第一コンピュータ・システム１０１−１をネットワーク１３０−１に接続するコンポーネントである。受信側ＮＩＣ１６６−１は、第二コンピュータ・システム１５１−１をネットワーク１３０−１に接続するコンポーネントである。
【００８５】
メモリ１０４−１もしくはストレージ・ユニット１１２−１またはその両方は、データ・パッケージを管理するためメモリ１０４−１を介してＣＰＵ１０２−１によって実行される命令を含む、コンピュータ・プログラム・コード５１８およびプログラム・コード５２０を格納することができる。メモリ１５４−１もしくはストレージ・ユニット１６２−１またはその両方は、データ・パッケージを管理するためメモリ１５４−１を介してＣＰＵ１５２−１によって実行される命令を含む、コンピュータ・プログラム・コード５６８を格納することができる。図６には、メモリ１０４−１がプログラム・コード５１８およびプログラム・コード５２０を含むとして示されているが、本発明は、メモリ１０４−１がコード５１８およびコード５２０の全てを同時には含まないが、代わりに、コード５１８の一部だけもしくはコード５２０の一部だけまたはその両方を同時に含む実施形態をも意図している。図６には、メモリ１５４−１がプログラム・コード５６８を含むとして示されているが、本発明は、メモリ１５４−１がコード５６８の全てを同時には含まないが、代わりに、コード５６８の一部だけを同時に含む実施形態をも意図している。
【００８６】
さらに、メモリ１０４−１およびメモリ１５４−１には、例えば、それぞれ、ＣＰＵ１０２−１上で実行され、コンピュータ・システム１０１−１内のもしくはこれに接続されたまたはその両方の様々なコンポーネントの制御を提供するオペレーティング・システム、およびＣＰＵ１５２−１上で実行され、コンピュータ・システム１５１−１内のもしくはこれに接続されたまたはその両方の様々なコンポーネントの制御を提供するオペレーティング・システムなど、図６に示されていない他のシステムを含めることが可能である。
【００８７】
一実施形態において、ストレージ・ユニット１１２−１、もしくはコンピュータ・システム１０１−１に連結された一つ以上の他のコンピュータ・データ・ストレージ・ユニット（図示せず）またはこれらの両方によって、送信側ハッシュ・テーブル５２２が格納される。一実施形態において、ストレージ・ユニット１６２−１、もしくはコンピュータ・システム１５１−１に連結された一つ以上の他のコンピュータ・データ・ストレージ・ユニット（図示せず）またはその両方によって、受信側ハッシュ・テーブル５７２が格納される。
【００８８】
当業者には当然のことながら、本発明は、システム、方法、またはコンピュータ・プログラム製品として具現化することができる。したがって、本発明の実施形態の態様は、全体がハードウェアの態様、全体がソフトウェアの態様（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、あるいは、ソフトウェアおよびハードウェアの態様を組み合わせた態様の形を取ることができ、これらは、一般に本明細書では全て「モジュール」と称し得る。さらに、本発明の実施形態は、コンピュータ可読プログラム・コード（例えば、プログラム・コード５１８および５２０；例えば、プログラム・コード５６８）が具現化または格納されている一つ以上のコンピュータ可読媒体（群）（例えば、メモリ１０４−１もしくはコンピュータ・データ・ストレージ・ユニット１１２−１またはその両方；例えば、メモリ１５４−１もしくはコンピュータ・データ・ストレージ・ユニット１６２−１またはその両方）中に具現化されたコンピュータ・プログラム製品の形を取ることも可能である。
【００８９】
一つ以上のコンピュータ可読媒体（例えば、メモリ１０４−１およびコンピュータ・データ・ストレージ・ユニット１１２−１；例えば、メモリ１５４−１もしくはコンピュータ・データ・ストレージ・ユニット１６２−１またはその両方）の任意の組み合わせを用いることが可能である。コンピュータ可読媒体は、コンピュータ可読ストレージ媒体またはコンピュータ可読信号媒体とすることができる。一実施形態において、コンピュータ可読ストレージ媒体は、コンピュータ可読ストレージ・デバイスまたはコンピュータ可読ストレージ装置である。コンピュータ可読ストレージ媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、または半導体の、システム、装置、デバイス、またはこれらの任意の適切な組み合わせであり得る。コンピュータ可読ストレージ媒体のさらに具体的な例の非包括的リストには、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラムの可能読み取り専用メモリ（ＥＰＲＯＭ：ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙまたはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光ストレージ・デバイス、磁気ストレージ・デバイス、または前述の任意の適切な組み合わせが含まれる。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令を実行するためのシステム、装置、もしくはデバイスによって、またはこれらに接続して使用するためのプログラム（例えば、プログラム５１８および５２０；例えば、プログラム５６８）を、包含または格納できる有形の媒体である。但し、用語「コンピュータ可読ストレージ媒体」および「コンピュータ可読ストレージ・デバイス」には伝播媒体は含まれない。
【００９０】
コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現化されたコンピュータ可読プログラム・コードを有する、伝播データ信号を含んでもよい。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、さまざまな形態の任意の形を取ることが可能である。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、命令を実行するためのシステム、装置、もしくはデバイスによって、またはこれらに接続して使用するためのプログラムを通信、伝播、または伝送できる任意のコンピュータ可読媒体であり得る。
【００９１】
コンピュータ可読媒体上に具現化されたプログラム・コード（例えば、プログラム・コード５１８、５２０、および５６８）は、以下に限らないが、無線、有線、光ファイバ・ケーブル、電波周波数（ＲＦ：ｒａｄｉｏ  ｆｒｅｑｕｅｎｃｙ）など、または前述の任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。
【００９２】
本発明の態様のオペレーションを実行するためのコンピュータ・プログラム・コード（例えば、プログラム・コード５１８、５２０、および５６８）は、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語など従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合わせで記述することができる。プログラム・コードの命令は、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータで専ら実行することも、ユーザのコンピュータで部分的に実行することもでき、一部をユーザのコンピュータで一部を遠隔コンピュータで実行することもでき、あるいは遠隔のコンピュータまたはサーバで専ら実行することも可能であって、上記のユーザのコンピュータ、遠隔コンピュータ、およびサーバは、例えば、コンピュータ・システム１０１−１、コンピュータ・システム１５１−１、もしくは、図６に含まれたコンピュータ・システム１０１−１またはコンピュータ・システム１５１−１のコンポーネントと類似のコンポーネントを有する別のコンピュータ・システム（図示せず）であってよい。上記の後者の場合は、ＬＡＮまたはＷＡＮを含め任意の種類のネットワーク（図示せず）を介して、遠隔コンピュータをユーザのコンピュータに接続することができ、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことも可能である。
【００９３】
本明細書において、本発明の実施形態による方法、（例えば図１および図６の）装置（システム）、およびコンピュータ・プログラム製品のフローチャート図（例えば、図２〜図３および図４）もしくはブロック図またはその両方を参照しながら、本発明の態様を説明してきた。当然のことながら、フローチャート図もしくはブロック図またはその両方の各ブロック、および、フローチャート図もしくはブロック図またはその両方中のブロックの組み合わせは、コンピュータ・プログラム命令（例えば、プログラム・コード５１８、５２０、および５６８）によって実装することが可能である。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置の一つ以上のハードウェア・プロセッサ（例えば、ＣＰＵ１０２−１またはＣＰＵ１５２−１）に提供し、そのコンピュータまたは他のプログラム可能データ処理装置のプロセッサ（群）を介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能／動作を実装するための手段を生成するようにすることができる。
【００９４】
また、これらのコンピュータ・プログラム命令を、コンピュータ（例えば、コンピュータ・システム１０１−１またはコンピュータ・システム１５１−１）、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令することができるコンピュータ可読デバイス（例えば、メモリ１０４−１またはコンピュータ・データ・ストレージ・ユニット１１２−１；例えば、メモリ１５４−１またはコンピュータ・データ・ストレージ・ユニット１６２−１）に格納し、そのコンピュータ可読デバイスに格納された命令（例えば、プログラム・コード５１８および５２０；例えば、プログラム・コード５６８）が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に特定されている機能／動作を実装する命令群を包含する製造品を作り出せるようにすることができる。
【００９５】
また、コンピュータ・プログラム命令を、コンピュータ（例えば、コンピュータ・システム１０１−１またはコンピュータ・システム１５１−１）、他のプログラム可能データ処理装置、または他のデバイスにロードし、そのコンピュータ上、他のプログラム可能装置上、または他のデバイス上で一連のオペレーション・ステップを実行させて、コンピュータ実装のプロセスを作り出し、当該コンピュータ上、他のプログラム可能装置上、または他のデバイス上で実行される命令（例えば、プログラム・コード５１８および５２０；例えば、プログラム・コード５６８）が、フローチャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能／動作を実装するためのプロセスを提供するようにすることも可能である。
【００９６】
本発明の実施形態のどのコンポーネントも、データ・パッケージの管理に関しコンピューティング・インフラストラクチャの展開または統合を提供するサービス・プロバイダによって、展開し、管理し、サービスなどをすることができる。しかして、本発明の実施形態は、コンピュータ・インフラストラクチャをサポートするためのプロセスを開示し、該プロセスは、第一のコンピュータ・システムが、一つ以上のプロセッサ（例えば、ＣＰＵ１０２−１またはＣＰＵ１５２−１）を含む第二のコンピュータ・システム（例えば、コンピュータ・システム１０１−１またはコンピュータ・システム１５１−１）において、コンピュータ可読コード（例えば、プログラム・コード５１８および５２０；例えば、プログラム・コード５６８）を統合すること、ホストすること、維持すること、および展開することの少なくとも一つに対する少なくとも一つのサポート・サービスを提供するステップを含み、このプロセッサ（群）が、該コード中に包含される命令を実行し、第二コンピュータ・システムにデータ・パッケージを管理させる。
【００９７】
別の実施形態において、本発明は、予約申し込み、広告、もしくは料金ベースまたはこれらの組み合わせに対し、本発明のプロセス・ステップを実施する方法を提供する。すなわち、ソリューション・インテグレータなどのサービス・プロバイダは、データ・パッケージを管理するプロセスの生成、維持、サポートなどを売り出すことができる。この場合、サービス・プロバイダは、一人以上の顧客のために、本発明のプロセス・ステップを実施する、コンピュータ・インフラストラクチャを生成、維持、サポートなどすることができる。サービス・プロバイダは、見返りとして、予約申し込みもしくは自由契約またはその両方の下で顧客（群）から支払いを受けることができ、もしくはサービス・プロバイダは、一人以上の第三者に対するコンテントの広告の販売による支払いを受けることができ、またはこれらの両方の支払いを受けることができる。
【００９８】
図２〜図３および図４中のフローチャート並びに図１および図６中のブロック図は、本発明のさまざまな実施形態による、システム、方法、およびコンピュータ・プログラム製品から可能となる実装のアーキテクチャ、機能性、およびオペレーションを示している。この点に関し、フローチャートまたはブロック図中の各ブロックは、特定の論理機能（群）を実装するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコード（例えば、プログラム・コード５１８および５２０；例えばプログラム・コード５６８）の部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図面に記載された順序から外れて行われ得ることに留意すべきである。例えば、連続して示された２つのブロックが、関与する機能性に応じ、実際にはほぼ同時に実施されることがあり、時にはこれらのブロックが逆の順序で実施されることもあり得る。さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方中のブロック群の組み合わせは、特定の機能または動作を実施する特殊用途ハードウェア・ベースのシステム、または特殊用途ハードウェアとコンピュータ命令との組み合わせによって実装可能なことにも留意すべきである。
【００９９】
図１に戻って、一実施形態において、第一コンピュータ・システム１０１は、Ｉ／Ｏデバイス（図示せず）およびコンピュータ・データ・ストレージ・ユニット（図示せず）に連結されており、これらＩ／Ｏデバイスおよびコンピュータ・データ・ストレージ・ユニットは、それぞれ、Ｉ／Ｏデバイス１１０−１（図６参照）およびコンピュータ・データ・ストレージ・ユニット１１２−１（図６参照）の機能性を有する。一実施形態において、第二コンピュータ・システム１５１は、Ｉ／Ｏデバイス（図示せず）およびコンピュータ・データ・ストレージ・ユニット（図示せず）に連結されており、これらＩ／Ｏデバイスおよびコンピュータ・データ・ストレージ・ユニットは、それぞれ、Ｉ／Ｏデバイス１６０−１（図６参照）およびコンピュータ・データ・ストレージ・ユニット１６２−１（図６参照）の機能性を有する。
【０１００】
ＣＰＵ１０２は、データ・パッケージを管理する方法を実施するためのモニタリング・モジュール１１８および重複排除モジュール１２０を含むプログラム・コードに含まれる命令を実行することを含め、第一コンピュータ・システム１０１の計算および制御機能を実施する。一実施形態において、モニタリング・モジュール１１８および重複排除モジュール１２０中に含まれる命令は、送信側ＮＩＣ１１６中のメモリ（図示せず）を介して送信側ＮＩＣ１１６中のプロセッサ（図示せず）によって、または、メモリ１０４を介してＣＰＵ１０２によって実行される。別の実施形態において、モニタリング・モジュール１１８および重複排除モジュール１２０中に含まれる命令は、メモリ１０４を介してＣＰＵ１０２によって実行される。
【０１０１】
ＣＰＵ１５２は、データ・パッケージを管理する方法を実施するための反復使用モジュール１６８を含むプログラム・コードに含まれる命令を実行することを含め、第二コンピュータ・システム１５１の計算および制御機能を実施する。一実施形態において、反復使用モジュール１６８中に含まれる命令は、受信側ＮＩＣ１６６中のメモリ（図示せず）を介して受信側ＮＩＣ１６６中のプロセッサ（図示せず）によって実行される。別の実施形態において、反復使用モジュール１６８中に含まれる命令は、メモリ１５４を介してＣＰＵ１５２によって実行される。
【０１０２】
ＣＰＵ１０２およびＣＰＵ１５２は、各々単一の処理ユニットを含むこともでき、または一つ以上の場所（例えば、クライアントおよびサーバ上）の一つ以上の処理ユニットにまたがって分散させることもできる。
【０１０３】
メモリ１０４およびメモリ１５４は、各々任意の周知のコンピュータ可読ストレージ媒体を含み得、これについては前述した。前述のように、メモリ１０４およびメモリ１５４は、それぞれ、メモリ１０４−１（図６参照）およびメモリ１５４−１（図６参照）の特徴と制約とを有する。
【０１０４】
一実施形態において、モニタリング・モジュール１１８の機能性は、モニタリング・プログラム・コード５１８（図６参照）の機能性に等しく、重複排除モジュール１２０の機能性は、重複排除プログラム・コード５２０（図６参照）の機能性に等しく、送信側ハッシュ・テーブル１２２の機能性は、送信側ハッシュ・テーブル５２２（図６参照）の機能性に等しく、反復使用モジュール１６８の機能性は、反復使用プログラム・コード５６８（図６参照）の機能性に等しく、受信側ハッシュ・テーブル１７２の機能性は、受信側ハッシュ・テーブル５７２（図６参照）の機能性に等しい。
【０１０５】
別の実施形態において、モニタリング・モジュール１１８、重複排除モジュール１２０、および反復使用モジュール１６８によって実施される、図２〜図３、および図４中のステップは、代わりに、それぞれ、モニタリング・プログラム・コード５１８（図６参照）を実行するコンピュータ・システム１０１−１、重複排除プログラム・コード５２０（図６参照）を実行するコンピュータ・システム１０１−１、および反復使用プログラム・コード５６８（図６参照）を実行するコンピュータ・システム１５１−１によって実施される。
【０１０６】
本明細書において、例示を目的として本発明の諸実施形態を説明してきたが、当業者には多くの修改および変更が明らかであろう。したがって、添付の特許請求の範囲は、本発明の真の趣意および範囲に含まれる、全てのかかる修改および変更を含むことが意図されている。
【図１】
0006282293.tif 000004
【図２】
0006282293.tif 000005
【図３】
0006282293.tif 000006
【図４】
0006282293.tif 000007
【図５】
0006282293.tif 000008
【図６】
0006282293.tif 000009