(57)【要約】【課題】データ要素数の減少に応じてブルームフィルタの記憶領域を縮小する。【解決手段】記憶部１ａは、データ要素Ｅ１，Ｅ２，・・・，Ｅｉを含むデータ集合２と、データ集合２における検索対象のデータ要素の存否判定に用いられるブルームフィルタ３を記憶する。演算部１ｂは、データ要素Ｅ１１〜Ｅ１３を削除する場合、ブルームフィルタ３の上位側から、データ要素Ｅ１１〜Ｅ１３の数に応じたビット数を有するビット列３ａを削除し、検索対象のデータ要素ＥＳが入力されると、ビット列３ａが削除されたブルームフィルタ３の上位側に、ビット列３ａと同じビット数を有し、かつ、すべてのビット値が特定の値に設定されたビット列３ｂを一時的に付加し、ビット列３ｂが付加されたブルームフィルタ３を用いて、データ要素Ｅ１１〜Ｅ１３が削除されたデータ集合２におけるデータ要素ＥＳの存否を判定する。【選択図】図１
2019095986.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ要素を含むデータ集合と、前記データ集合における検索対象のデータ要素の存否判定に用いられ、前記複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第１のブルームフィルタと、を記憶する記憶部と、
前記データ集合に含まれる一部のデータ要素を削除する場合、前記第１のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第１のビット列を削除し、
検索対象の第１のデータ要素が入力されると、前記第１のブルームフィルタから前記第１のビット列が削除された第２のブルームフィルタの上位側に、前記第１のビット列と同じビット数を有し、かつ、すべてのビット値が前記特定の値に設定された第２のビット列を一時的に付加し、前記第２のビット列が付加された前記第２のブルームフィルタを用いて、前記一部のデータ要素が削除された前記データ集合における前記第１のデータ要素の存否を判定する、演算部と、
を有するデータ処理装置。
【請求項２】
前記第１のビット列は、前記データ集合に含まれるデータ要素の数に対する、前記削除されるデータ要素の数の割合に応じたビット数を有する、
請求項１に記載のデータ処理装置。
【請求項３】
前記記憶部は、第１のデータ集合における検索対象のデータ要素の存否判定に用いられる第１階層ブルームフィルタと、前記第１のデータ集合が分割された複数の第２のデータ集合のそれぞれにおける検索対象のデータ要素の存否判定に用いられる複数の第２階層ブルームフィルタと、を記憶し、前記第１のブルームフィルタは、前記複数の第２階層ブルームフィルタのうち一の第２階層ブルームフィルタであり、前記データ集合は、前記複数の第２のデータ集合のうち前記一の第２階層ブルームフィルタに対応する一の第２のデータ集合であり、
前記演算部は、さらに、
前記データ集合に含まれる前記一部のデータ要素を削除する場合、前記第１階層ブルームフィルタの上位側から前記第１のビット列と同じビット数を有する第３のビット列を削除し、
前記第１のデータ要素が入力されると、前記第１階層ブルームフィルタの上位側から前記第３のビット列が削除された第３のブルームフィルタの上位側に、前記第２のビット列と同一の第４のビット列を一時的に付加し、前記第４のビット列が付加された前記第３のブルームフィルタを用いて、前記一部のデータ要素が削除された前記第１のデータ集合における前記第１のデータ要素の存否を判定する、
請求項１または２に記載のデータ処理装置。
【請求項４】
前記記憶部は、前記データ集合の記憶領域を含む書き込みデータ記憶領域を有し、
前記演算部は、さらに、
外部装置から書き込みが要求された複数の書き込みデータ要素を、重複を排除して前記書き込みデータ記憶領域に格納するとともに、少なくとも前記複数のデータ要素のそれぞれと、前記複数の書き込みデータ要素との対応関係を示す情報を、前記記憶部に記録し、
前記複数のデータ要素のそれぞれについて、前記複数の書き込みデータ要素のうちのいくつと対応するかを示す第１のカウント値を、前記記憶部に記録し、
前記複数の書き込みデータ要素の１つであって、前記複数のデータ要素のうち一のデータ要素に対応する一の書き込みデータ要素についての更新または削除が前記外部装置から要求されると、前記一のデータ要素に対応する前記第１のカウント値を減少させ、
前記複数のデータ要素のうち、前記第１のカウント値が０であるデータ要素の数を示す第２のカウント値を、前記記憶部に記録し、
前記第２のカウント値が所定の閾値を超えた場合に、前記複数のデータ要素の中から、前記一部のデータ要素として前記第１のカウント値が０であるデータ要素を削除する、
請求項１乃至３のいずれか１項に記載のデータ処理装置。
【請求項５】
前記第１のデータ要素の存否判定は、前記複数の書き込みデータ要素の１つとして前記第１のデータ要素の書き込みが要求されたとき、前記第１のデータ要素と同一のデータ要素が前記データ集合に存在するかを判定するために実行される、
請求項４に記載のデータ処理装置。
【請求項６】
前記複数の書き込みデータ要素のそれぞれは、前記外部装置から書き込みが要求されたファイルに含まれる部分データである、
請求項４または５に記載のデータ処理装置。
【請求項７】
コンピュータに、
記憶部に記憶された、複数のデータ要素を含むデータ集合から、一部のデータ要素を削除する場合、前記データ集合における検索対象のデータ要素の存否判定に用いられ、前記複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第１のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第１のビット列を削除し、
検索対象の第１のデータ要素が入力されると、前記第１のブルームフィルタから前記第１のビット列が削除された第２のブルームフィルタの上位側に、前記第１のビット列と同じビット数を有し、かつ、すべてのビット値が前記特定の値に設定された第２のビット列を一時的に付加し、前記第２のビット列が付加された前記第２のブルームフィルタを用いて、前記一部のデータ要素が削除された前記データ集合における前記第１のデータ要素の存否を判定する、
処理を実行させるデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置およびデータ処理プログラムに関する。
【背景技術】
【０００２】
ブルームフィルタは、複数のデータ要素を含むデータ集合の中に判定対象のデータが含まれるかを判定するために用いられるデータ構造である。ブルームフィルタは、例えば、ストレージ装置におけるデータの重複排除のために用いられている。この場合、書き込みが要求されたデータと同一のデータがストレージ装置にすでに格納されているかが、ブルームフィルタを用いて判定される。また、ブルームフィルタの応用例として、複数階層のブルームフィルタを有する階層型ブルームフィルタも提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−１９９５７３号公報
【特許文献２】特開２０１３−３６５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ブルームフィルタの一般的な特徴として、管理対象のデータ集合から一部のデータ要素が削除されても、ブルームフィルタのビット数を削減することができない、という特徴がある。近年、ブルームフィルタの管理対象となるデータ集合に含まれるデータ要素数が膨大な数になっており、それに伴ってブルームフィルタのビット数が増大し、ブルームフィルタが占める記憶領域が拡大している。このような背景において、データ集合に含まれるデータ要素数が減少した場合でも、ブルームフィルタのビット数を削減してその記憶領域を縮小することができないことが、大きな課題となっている。
【０００５】
１つの側面では、本発明は、データ要素数の減少に応じてブルームフィルタの記憶領域を縮小可能なデータ処理装置およびデータ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
１つの案では、記憶部と演算部とを有するデータ処理装置が提供される。このデータ処理装置において、記憶部は、複数のデータ要素を含むデータ集合と、データ集合における検索対象のデータ要素の存否判定に用いられ、複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第１のブルームフィルタと、を記憶する。演算部は、データ集合に含まれる一部のデータ要素を削除する場合、第１のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第１のビット列を削除し、検索対象の第１のデータ要素が入力されると、第１のブルームフィルタから第１のビット列が削除された第２のブルームフィルタの上位側に、第１のビット列と同じビット数を有し、かつ、すべてのビット値が特定の値に設定された第２のビット列を一時的に付加し、第２のビット列が付加された第２のブルームフィルタを用いて、一部のデータ要素が削除されたデータ集合における第１のデータ要素の存否を判定する。
【０００７】
また、１つの案では、上記のデータ処理装置と同様の処理をコンピュータに実行させるデータ処理プログラムが提供される。
【発明の効果】
【０００８】
１つの側面では、データ要素数の減少に応じてブルームフィルタの記憶領域を縮小できる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態に係るデータ処理装置の構成例および処理例を示す図である。
【図２】第２の実施の形態に係る情報処理システムの構成例を示す図である。
【図３】クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。
【図４】クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。
【図５】チャンクマップテーブルのデータ構成例を示す図である。
【図６】チャンクメタテーブル、参照カウンタテーブルおよびチャンクデータテーブルのデータ構成例を示す図である。
【図７】チャンクグループの構成例を示す図である。
【図８】削除カウンタテーブルのデータ構成例を示す図である。
【図９】階層型ブルームフィルタの構成例を示す図である。
【図１０】ブルームフィルタを用いた処理例を示す図である。
【図１１】二分木検索データの構成例を示す図である。
【図１２】１つのデータ群に対応する各種テーブルと各種カウント値との関係を示す図である。
【図１３】ガベージコレクションについて説明するための図である。
【図１４】ブルームフィルタのビット数削減処理の例を示す図である。
【図１５】ビット数が削減されたブルームフィルタを用いた検索処理の例を示す図である。
【図１６】ファイル書き込み処理の例を示すフローチャートである。
【図１７】チャンクデータ登録処理の例を示すフローチャートである。
【図１８】ファイル更新処理の例を示すフローチャートである。
【図１９】ファイル削除処理の例を示すフローチャートである。
【図２０】フィルタ記憶域削減処理の例を示すフローチャートである。
【図２１】クラウド転送処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るデータ処理装置の構成例および処理例を示す図である。図１に示すデータ処理装置１は、記憶部１ａと演算部１ｂを有する。なお、記憶部１ａは、ＲＡＭ（Random Access Memory）やＨＤＤ（Hard Disk Drive）など、データ処理装置１が備える記憶装置の記憶領域によって実現される。演算部１ｂは、例えば、データ処理装置１が備えるプロセッサとして実現される。
【００１１】
記憶部１ａには、データ集合２とブルームフィルタ３が記憶される。データ集合２は、複数のデータ要素を含む。図１では例として、データ集合２は、ｉ個のデータ要素Ｅ１，Ｅ２，・・・，Ｅｉを含んでいる。ブルームフィルタ３は、データ集合２における検索対象のデータ要素の存否判定に用いられるデータ構造であり、その実体は複数のビットを有するビット列である。
【００１２】
ブルームフィルタ３においては、データ集合２に含まれるデータ要素Ｅ１，Ｅ２，・・・，Ｅｉのそれぞれを用いた所定の演算に基づく特定のビットが、特定の値に設定されている。本実施の形態では、例として、特定の値は「１」であるものとする。これにより、例えば、検索対象のデータ要素の存否判定を行う場合には、このデータ要素を用いて上記の所定の演算が行われることで、このデータ要素に対応する特定のビットが算出される。そして、ブルームフィルタ３のビットのうち、算出された特定のビットの値がすべて「１」であれば、このデータ要素がデータ集合２に存在する可能性があると判定される。一方、ブルームフィルタ３における、算出された特定のビットのうちの少なくとも１つが「１」でなければ、このデータ要素はデータ集合２に存在しないと判定される。
【００１３】
演算部１ｂは、データ集合２に含まれる一部のデータ要素を削除する場合（ステップＳ１）、次のような処理を実行する。なお、ここでは図１に示すように、データ集合２からデータ要素Ｅ１１〜Ｅ１３が削除されるものとする。演算部１ｂは、ブルームフィルタ３の上位側から、削除されるデータ要素Ｅ１１〜Ｅ１３の数に応じたビット数を有するビット列３ａを削除する（ステップＳ２）。これによって、ブルームフィルタ３の記憶領域が縮小される。なお、ブルームフィルタ３から削除されるビット列３ａのビット数は、例えば、データ集合２に含まれるデータ要素の数ｉに対する、削除されるデータ要素の数の割合に応じたビット数とされる。
【００１４】
その後、検索対象のデータ要素ＥＳが入力されると（ステップＳ３）、演算部１ｂは、次のような処理を実行する。まず、演算部１ｂは、ビット列３ａが削除された状態のブルームフィルタ３の上位側に、ビット列３ａと同じビット数を有し、かつ、すべてのビット値が上記の特定の値（ここでは「１」）に設定されたビット列３ｂを、一時的に付加する（ステップＳ４）。そして、演算部１ｂは、ビット列３ｂが付加されたブルームフィルタ３を用いて、データ要素Ｅ１１〜Ｅ１３が削除されたデータ集合２の中にデータ要素ＥＳが存在するか否かを判定する（ステップＳ５）。なお、この存否判定では、データ集合２の中にデータ要素ＥＳが存在する可能性があるか否かが判定される。
【００１５】
一般的にブルームフィルタでは、検索対象の集合から要素が削除された場合でも、ブルームフィルタからビットを削除することはできない。これは、ブルームフィルタから、削除された要素に基づく計算によってビット値が「１」となるビットを削除したとしても、そのビットは、他の要素に基づく計算によって「１」となる可能性があるからである。もしそうである場合、ビットの削除後のブルームフィルタを用いた検索処理では、偽陰性が生じてしまう。
【００１６】
これに対して、本実施の形態では、ステップＳ２でビット列３ａが削除されたブルームフィルタ３を検索に用いる際に、ビット列３ａと同じビット数を有し、全ビット値が上記の特定の値に設定されたビット列３ｂが、一時的に付加される。これにより、検索処理における偽陰性の発生が防止される。したがって、データ要素Ｅ１１〜Ｅ１３の削除によってデータ集合２のデータ要素数が減少したことに応じて、ブルームフィルタ３の上位からビット列３ａを削除することが可能となる。その結果、ブルームフィルタ３の記憶領域を縮小できる。
【００１７】
〔第２の実施の形態〕
図２は、第２の実施の形態に係る情報処理システムの構成例を示す図である。図２に示す情報処理システムは、クラウドストレージゲートウェイ１００、ＮＡＳ（Network Attached Storage）クライアント２１０およびストレージシステム２２０を有する。クラウドストレージゲートウェイ１００は、ネットワーク２３１を介してＮＡＳクライアント２１０と接続し、また、ネットワーク２３２を介してストレージシステム２２０と接続する。ネットワークは、例えばＬＡＮ（Local Area Network）であり、ネットワークは、例えばＷＡＮ（Wide Area Network）である。
【００１８】
ストレージシステム２２０は、ネットワーク２３２を介してクラウドストレージサービスを提供する。以下の説明では、ストレージシステム２２０が提供するクラウドストレージサービスによってサービス利用者（ここではクラウドストレージゲートウェイ１００）が利用可能な記憶領域を、「クラウドストレージ」と記載する場合がある。
【００１９】
また、本実施の形態では例として、ストレージシステム２２０は、データがオブジェクト単位で管理されるオブジェクトストレージによって実現される。例えば、ストレージシステム２２０は、制御サーバ２２１ａとストレージ装置２２１ｂとをそれぞれ含むストレージノード２２１を複数有する、分散型のストレージシステムとして実現される。この場合、各ストレージノード２２１において、制御サーバ２２１ａはストレージ装置２２１ｂに対するアクセスを制御し、ストレージ装置２２１ｂの記憶領域によってクラウドストレージの一部が実現される。また、サービス利用者（クラウドストレージゲートウェイ１００）からのオブジェクトの格納先とされるストレージノード２２１は、オブジェクト固有の情報に基づいて決定される。
【００２０】
一方、ＮＡＳクライアント２１０は、クラウドストレージゲートウェイ１００を、ファイルシステムによって管理される記憶領域を提供するＮＡＳサーバとして認識する。この記憶領域とは、ストレージシステム２２０によって提供されるクラウドストレージによる記憶領域である。そして、ＮＡＳクライアント２１０は、例えばＮＦＳ（Network File System）プロトコルやＣＩＦＳ（Common Internet File System）プロトコルにしたがって、クラウドストレージゲートウェイ１００に対してファイル単位でデータの読み書きを要求する。すなわち、ＮＡＳクライアント２１０は、クラウドストレージゲートウェイ１００のＮＡＳサーバ機能により、クラウドストレージを大容量の仮想的なネットワークファイルシステムとして利用できるようになる。
【００２１】
ＮＡＳクライアント２１０は、例えば、データバックアップのためのバックアップソフトウェアを実行する。これによりＮＡＳクライアント２１０は、ＮＡＳクライアント２１０に記憶されたファイル、またはＮＡＳクライアント２１０に接続されたサーバ（例えば業務サーバ）に記憶されたファイルを、ＮＡＳサーバから提供される記憶領域にバックアップする。
【００２２】
クラウドストレージゲートウェイ１００は、図１に示したデータ処理装置１の一例である。クラウドストレージゲートウェイ１００は、ＮＡＳクライアント２１０とクラウドストレージとの間で転送されるデータを中継する。
【００２３】
例えば、クラウドストレージゲートウェイ１００は、ＮＡＳサーバ機能により、ＮＡＳクライアント２１０からファイルの書き込み要求を受信し、書き込みが要求されたファイルを内部にキャッシュする。クラウドストレージゲートウェイ１００は、書き込みが要求されたファイルをチャンク単位に分割し、チャンク内の実データ（以下、「チャンクデータ」と記載する）をクラウドストレージに格納する。このとき、合計サイズが一定サイズを超える複数のチャンクデータが「チャンクグループ」としてグループ化され、チャンクグループがオブジェクトとしてクラウドストレージに転送される。
【００２４】
また、クラウドストレージゲートウェイ１００は、ファイルをキャッシュする時点で、ファイルをチャンク単位に分割し、同一内容のチャンクデータが重複して保存されないようにする「重複排除」を行う。さらに、チャンクデータは圧縮された状態で格納される。例えば、クラウドストレージサービスでは、格納されるデータ量に応じて課金が行われる場合がある。重複排除やデータ圧縮を行うことで、クラウドストレージに格納されるデータ量を削減し、サービス利用コストを抑制することができる。
【００２５】
図３は、クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。クラウドストレージゲートウェイ１００は、例えば、図３に示すようなコンピュータとして実現される。
【００２６】
クラウドストレージゲートウェイ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。また、プロセッサ１０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００２７】
プロセッサ１０１には、バス１０８を介して、ＲＡＭ１０２と複数の周辺機器が接続されている。
ＲＡＭ１０２は、クラウドストレージゲートウェイ１００の主記憶装置として使用される。ＲＡＭ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。
【００２８】
バス１０８に接続されている周辺機器としては、ＨＤＤ１０３、グラフィック処理装置１０４、入力インタフェース１０５、読み取り装置１０６および通信インタフェース１０７がある。
【００２９】
ＨＤＤ１０３は、クラウドストレージゲートウェイ１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、ＳＳＤ（Solid State Drive）などの他の種類の不揮発性記憶装置を使用することもできる。
【００３０】
グラフィック処理装置１０４には、表示装置１０４ａが接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令にしたがって、画像を表示装置１０４ａに表示させる。表示装置としては、液晶ディスプレイや有機ＥＬ（Electroluminescence）ディスプレイなどがある。
【００３１】
入力インタフェース１０５には、入力装置１０５ａが接続されている。入力インタフェース１０５は、入力装置１０５ａから出力される信号をプロセッサ１０１に送信する。入力装置１０５ａとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３２】
読み取り装置１０６には、可搬型記録媒体１０６ａが脱着される。読み取り装置１０６は、可搬型記録媒体１０６ａに記録されたデータを読み取ってプロセッサ１０１に送信する。可搬型記録媒体１０６ａとしては、光ディスク、光磁気ディスク、半導体メモリなどがある。
【００３３】
通信インタフェース１０７は、ネットワーク１０７ａを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、クラウドストレージゲートウェイ１００の処理機能を実現することができる。なお、ＮＡＳクライアント２１０や制御サーバ２２１ａも、図３と同様のハードウェア構成を有するコンピュータとして実現可能である。
【００３４】
図４は、クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。クラウドストレージゲートウェイ１００は、記憶部１１０、ＮＡＳサービス処理部１２１、ブルームフィルタ処理部１２２、二分木検索処理部１２３、フィルタ記憶域削減処理部１２４およびクラウド転送処理部１２５を有する。
【００３５】
なお、記憶部１１０は、例えば、ＲＡＭ１０２やＨＤＤ１０３など、クラウドストレージゲートウェイ１００が備える記憶装置の記憶領域として実現される。また、ＮＡＳサービス処理部１２１、ブルームフィルタ処理部１２２、二分木検索処理部１２３、フィルタ記憶域削減処理部１２４およびクラウド転送処理部１２５の処理は、例えば、プロセッサ１０１が所定のプログラムを実行することで実現される。
【００３６】
記憶部１１０には、ディレクトリテーブル１１１、チャンクマップテーブル１１２、チャンクメタテーブル１１３、参照カウンタテーブル１１４、チャンクデータテーブル１１５、削除カウンタテーブル１１６、階層型ブルームフィルタ１１７および二分木検索データ１１８が記憶される。
【００３７】
ディレクトリテーブル１１１は、ファイルシステムにおけるディレクトリ構造を表現するための管理テーブルである。ディレクトリテーブル１１１には、ディレクトリ構造上のディレクトリ（フォルダ）、またはディレクトリ内のファイルに対応するレコードが登録される。各レコードには、ディレクトリまたはファイルを識別するためのｉｎｏｄｅ番号が登録されている。また、例えば、各レコードに親ディレクトリのｉｎｏｄｅ番号が登録されることで、ディレクトリ間、およびディレクトリとファイルとの関係が表現される。
【００３８】
チャンクマップテーブル１１２およびチャンクメタテーブル１１３は、ファイルとチャンクデータとの関係や、チャンクデータとチャンクグループとの関係を管理するための管理テーブルである。チャンクグループとは、合計サイズが所定サイズ以上となる複数のチャンクデータを含み、チャンクデータをクラウドストレージ２４０に転送する際の転送単位となる。チャンクデータテーブル１１５は、チャンクデータを保持する。すなわち、チャンクデータテーブル１１５は、ファイルの実データのキャッシュ領域となる。
【００３９】
参照カウンタテーブル１１４は、各チャンクデータがいくつのチャンクから参照されているかを示す参照カウンタの値を保持する。削除カウンタテーブル１１６は、管理対象のデータ群ごとに、参照カウンタの値が「０」になった無効のチャンクデータの数を示す削除カウンタの値を保持する。後述するように、データ群とは、所定数を上限とするチャンクグループのチャンクデータを含む。
【００４０】
階層型ブルームフィルタ１１７および二分木検索データ１１８は、記憶部１１０に格納されたチャンクデータの中から、ファイルから分割されたチャンクデータと同一のデータを検索するために用いられる。階層型ブルームフィルタ１１７は、複数階層のブルームフィルタによって形成される。これらの各ブルームフィルタの実体は、所定ビット数のビット列である。二分木検索データ１１８は、二分木探索によってチャンクデータを検索するための管理データを含む。
【００４１】
ＮＡＳサービス処理部１２１は、ＮＡＳサーバとしてのインタフェース処理を実行する。すなわち、ＮＡＳサービス処理部１２１は、ＮＡＳクライアント２１０からのファイルの読み書きや削除の要求を受け付け、要求された内容に応じた処理を実行して、ＮＡＳクライアント２１０に応答する。ＮＡＳサービス処理部１２１は、例えば、新たなファイルの書き込みが要求された場合、ファイルの実データをチャンク単位に分割し、分割された実データを重複を排除しながら記憶部１１０に格納する。
【００４２】
ブルームフィルタ処理部１２２は、ＮＡＳサービス処理部１２１からの要求に応じて、記憶部１１０に格納されたチャンクデータの中から、ファイルから分割されたチャンクデータと同一のデータを検索する処理を、階層型ブルームフィルタ１１７を用いて実行する。二分木検索処理部１２３は、ＮＡＳサービス処理部１２１からの要求に応じて、ファイルから分割されたチャンクデータと同一のデータを検索する処理を、二分木検索データ１１８を用いて実行する。
【００４３】
後述するように、ブルームフィルタ処理部１２２は、条件に合致するチャンクデータを含むデータの集合を絞り込むための検索処理を実行する。また、二分木検索処理部１２３は、絞り込まれたデータの集合から条件に合致するチャンクデータを正確に特定するための検索処理を実行する。
【００４４】
フィルタ記憶域削減処理部１２４は、チャンクグループに含まれるチャンクデータのガベージコレクションを実行する。後述するように、ガベージコレクションとは、断片化された有効なチャンクデータをひとまとめの記憶領域に詰め込み直すことで、無効なチャンクデータの記憶領域を解放するための処理である。フィルタ記憶域削減処理部１２４は、ガベージコレクションの処理結果に基づいて、階層型ブルームフィルタ１１７に含まれるビット列のビット数を削減して、階層型ブルームフィルタ１１７の記憶領域を削減する。
【００４５】
クラウド転送処理部１２５は、ＮＡＳサービス処理部１２１による記憶部１１０へのデータ書き込み処理とは非同期に、記憶部１１０に書き込まれたチャンクデータをクラウドストレージ２４０に転送する。前述のように、クラウドストレージ２４０に対してはオブジェクト単位でデータが転送される。本実施の形態において、クラウド転送処理部１２５は、１つのチャンクグループに含まれるチャンクデータを用いて１つのチャンクグループオブジェクト１３１を生成し、クラウドストレージ２４０に送信する。
【００４６】
図５は、チャンクマップテーブルのデータ構成例を示す図である。チャンクマップテーブル１１２は、ファイルとチャンクデータとを関連付けるための管理テーブルである。チャンクマップテーブル１１２には、「ｉｎｏ」「ｏｆｆｓｅｔ」「ｓｉｚｅ」「ｇｎｏ」「ｇｉｎｄｅｘ」の各項目を有するレコードが登録される。各レコードは、ファイルの実データを分割して生成された１つのチャンクに対応付けられている。
【００４７】
「ｉｎｏ」は、チャンクが含まれるファイルのｉｎｏｄｅ番号を示す。「ｏｆｆｓｅｔ」は、ファイルの実データの先頭からチャンクの先頭までのオフセット量を示す。「ｉｎｏ」と「ｏｆｆｓｅｔ」との組み合わせによって、ファイル内のチャンクが一意に識別される。
【００４８】
「ｓｉｚｅ」は、チャンクのサイズを示す。本実施の形態では例として、チャンクのサイズは可変であるものとする。例えば、ＮＡＳサービス処理部１２１は、所定の演算規則にしたがい、同一データを含むチャンクが生成されやすいようにファイルの実データの分割位置を決定する。これにより、可変長のチャンクが生成される。
【００４９】
「ｇｎｏ」は、チャンクに含まれるチャンクデータが属するチャンクグループのグループ番号を示し、「ｇｉｎｄｅｘ」は、チャンクグループにおけるチャンクデータのインデックス番号を示す。レコードに「ｉｎｏ」および「ｏｆｆｓｅｔ」と「ｇｎｏ」および「ｇｉｎｄｅｘ」とが登録されることで、チャンクとチャンクデータとが関連付けられる。
【００５０】
図５の例では、ｉｎｏｄｅ番号「ｉ１」のファイルは、２つのチャンクに分割されており、ｉｎｏｄｅ番号「ｉ２」のファイルは、４つのチャンクに分割されている。また、前者のファイルに含まれる２つのチャンクのデータと、後者のファイルに含まれるチャンクのうち先頭から２つのチャンクのデータとが、グループ番号「ｇ１」のチャンクグループに属するチャンクデータとして記憶部１１０に格納されている。さらに、後者のファイルに含まれるチャンクのうち先頭から３番目および４番目のチャンクのデータは、グループ番号「ｇ２」のチャンクグループに属するチャンクデータとして記憶部１１０に格納されている。
【００５１】
図６は、チャンクメタテーブル、参照カウンタテーブルおよびチャンクデータテーブルのデータ構成例を示す図である。
チャンクメタテーブル１１３は、チャンクデータとチャンクグループとを関連付けるための管理テーブルである。チャンクメタテーブル１１３には、「ｇｎｏ」「ｇｉｎｄｅｘ」「ｏｆｆｓｅｔ」「ｓｉｚｅ」「ｈａｓｈ」の各項目を有するレコードが登録される。各レコードは、１つのチャンクデータに対応付けられている。
【００５２】
「ｇｎｏ」は、チャンクデータが属するチャンクグループの番号を示す。「ｇｉｎｄｅｘ」は、チャンクグループにおけるチャンクデータのインデックス番号を示す。「ｏｆｆｓｅｔ」は、チャンクグループの先頭からチャンクデータの先頭までのオフセット量を示す。「ｇｎｏ」と「ｇｉｎｄｅｘ」との組み合わせにより、１つのチャンクデータが識別され、「ｇｎｏ」と「ｏｆｆｓｅｔ」との組み合わせにより、１つのチャンクデータの格納位置が特定される。「ｓｉｚｅ」は、チャンクデータのサイズを示す。「ｈａｓｈ」は、チャンクデータを基に算出されたハッシュ値を示す。
【００５３】
参照カウンタテーブル１１４には、「ｇｎｏ」「ｇｉｎｄｅｘ」「ｒｅｆｃｎｔ」の各項目を有するレコードが登録される。各レコードは、「ｇｎｏ」「ｇｉｎｄｅｘ」によって識別される１つのチャンクデータに対応付けられている。「ｒｅｆｃｎｔ」は、チャンクデータに対応する参照カウンタの値を示す。参照カウンタの値は、チャンクデータがいくつのチャンクから参照されているかを示す。すなわち、この値は、チャンクデータがいくつのチャンクの間で重複しているかを示す。例えば、ある「ｇｎｏ」「ｇｉｎｄｅｘ」の値に対応する参照カウンタの値が「２」の場合、同じ「ｇｎｏ」「ｇｉｎｄｅｘ」の値が登録された２つのレコードが、チャンクマップテーブル１１２に存在することになる。
【００５４】
チャンクデータテーブル１１５には、「ｇｎｏ」「ｇｉｎｄｅｘ」「ｄａｔａ」の各項目を有するレコードが登録される。「ｄａｔａ」には、「ｇｎｏ」「ｇｉｎｄｅｘ」によって識別されるチャンクデータが格納される。
【００５５】
図７は、チャンクグループの構成例を示す図である。この図７を用いて、チャンクおよびチャンクグループの生成方法について説明する。
なお、図７に示すテーブル１１５−１は、チャンクデータテーブル１１５から、グループ番号「１」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。同様に、図７に示すテーブル１１５−２は、チャンクデータテーブル１１５から、グループ番号「２」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。また、図７に示すテーブル１１５−３は、チャンクデータテーブル１１５から、グループ番号「３」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。
【００５６】
ＮＡＳクライアント２１０から新規のファイルの書き込みや、既存のファイルの更新が要求されると、ＮＡＳサービス処理部１２１は、ファイルの実データをチャンク単位に分割する。図７の例では、ファイルの実データが１３個のチャンクに分割されたものとする。各チャンクのデータを先頭から順にデータＤ１〜Ｄ１３と表す。なお、ここでは説明を簡単にするために、データＤ１〜Ｄ１３の内容はすべて異なる（すなわち、重複していない）ものとする。この場合、データＤ１〜Ｄ１３にそれぞれ対応するチャンクデータが記憶部１１０に対して個別に格納される。
【００５７】
各チャンクデータには、グループ番号（ｇｎｏ）と、その番号が示すチャンクグループにおけるインデックス番号（ｇｉｎｄｅｘ）とが割り当てられる。インデックス番号は、ファイルの分割によって重複していないチャンクデータが生成された順に割り当てられる。また、同じグループ番号に割り当てられたチャンクデータの合計サイズが一定量に達すると、グループ番号がカウントアップされ、次のチャンクデータにはカウントアップ後のグループ番号が割り当てられる。
【００５８】
なお、チャンクデータの合計サイズが一定量に達していないチャンクグループの状態を、次のチャンクデータを受け入れ可能な「アクティブ」と呼ぶことにする。また、チャンクデータの合計サイズが一定量に達したチャンクグループの状態を、次のチャンクデータを受け入れ不可能な「非アクティブ」と呼ぶことにする。
【００５９】
図７の例では、まず、データＤ１〜Ｄ５がグループ番号「１」のチャンクグループに割り当てられる。そして、この段階で、グループ番号「１」のチャンクグループのサイズが一定量に達し、このチャンクグループが非アクティブになったとする。すると、次のデータＤ６には、新たなグループ番号「２」が割り当てられる。
【００６０】
この後、データＤ６〜Ｄ１１が、グループ番号「２」のチャンクグループに割り当てられ、この段階でこのチャンクグループが非アクティブになったとする。すると、次のデータＤ１２には、新たなグループ番号「３」が割り当てられる。図７の例では、データＤ１２，Ｄ１３がグループ番号「３」のチャンクグループに割り当てられるが、この段階ではこのチャンクグループはアクティブの状態である。この場合、次に生成されるチャンクデータ（図示せず）には、グループ番号「３」とインデックス番号「３」とが割り当てられることになる。
【００６１】
非アクティブ化されたチャンクグループは、ファイル内の実データがクラウドストレージ２４０に転送される際のデータ単位となる。あるチャンクグループが非アクティブになると、そのチャンクグループから１つのチャンクグループオブジェクト１３１が、クラウド転送処理部１２５によって生成される。チャンクグループオブジェクト１３１においては、例えば、対応するチャンクグループのグループ番号がオブジェクト名として設定され、オブジェクト値として、チャンクグループに含まれる各チャンクデータが設定される。このように生成されたチャンクグループオブジェクト１３１は、クラウド転送処理部１２５からクラウドストレージ２４０に対して転送される。
【００６２】
図８は、削除カウンタテーブルのデータ構成例を示す図である。削除カウンタテーブル１１６は、削除カウンタの値を保持するための管理テーブルである。削除カウンタテーブル１１６には、「ｇｎｏ」「ｄｅｌｃｎｔ」の各項目を有するレコードが登録される。各レコードは、階層型ブルームフィルタ１１７における最下層のブルームフィルタがそれぞれ管理するデータ群に対応付けられている。したがって、削除カウンタテーブル１１６には、最下層のブルームフィルタと同数のレコードが登録される。また、後述するように、各データ群には、最大２０のチャンクグループに属するチャンクデータが含まれる。
【００６３】
「ｇｎｏ」には、データ群に属する各チャンクグループのグループ番号が登録される。「ｄｅｌｃｎｔ」は、データ群に対応する削除カウンタの値を示す。削除カウンタの値は、データ群に含まれるチャンクデータのうち、参照カウンタの値が「０」になった無効のチャンクデータの数を示す。後述するように、削除カウンタの値は、データ群に属する各チャンクグループについてのガベージコレクションの実行要否を判定するために利用される。
【００６４】
なお、削除カウンタテーブル１１６のレコードには、「ｇｎｏ」の代わりに、データ群を識別する識別番号が登録されてもよい。
次に、階層型ブルームフィルタ１１７および二分木検索データ１１８を用いたチャンクデータの検索処理について説明する。まず、図９、図１０を用いて、階層型ブルームフィルタ１１７を用いたチャンクデータの検索処理について説明する。
【００６５】
図９は、階層型ブルームフィルタの構成例を示す図である。階層型ブルームフィルタ１１７は、複数階層のブルームフィルタによって形成されている。各ブルームフィルタは、所定ビット数のビット列として形成される。
【００６６】
本実施の形態では、最上位の第１階層には、ｎビットのブルームフィルタＢＦ１が１つ配置される。ビット数「ｎ」は、検索対象の最大要素数（すなわち、記憶部１１０のチャンクデータテーブル１１５に格納されるチャンクデータの最大数）に応じて決定される。
【００６７】
また、１つ下の階層には、上位階層の（１／ｄ）のビット数をそれぞれ有するブルームフィルタが、上位階層のｄ倍の数だけ配置される。したがって、各階層に含まれるブルームフィルタの合計ビット数をいずれもｎビットであり、階層型ブルームフィルタ１１７は、階層数のｎ倍のビット数に対応する記憶領域を占有する。
【００６８】
本実施の形態では例として、階層型ブルームフィルタ１１７の階層数は「３」であるものとする。この場合、図９に示すように、第２階層には、ｄ個のブルームフィルタＢＦ２−１，ＢＦ２−２，・・・，ＢＦ２−ｄが配置される。ブルームフィルタＢＦ２−１，ＢＦ２−２，・・・，ＢＦ２−ｄは、それぞれ（ｎ／ｄ）ビットのビット列として形成される。
【００６９】
また、第３階層には、第２階層の各ブルームフィルタの下層にそれぞれｄ個のブルームフィルタが配置される。例えば、ブルームフィルタＢＦ２−１の下層には、ｄ個のブルームフィルタＢＦ３−１−１，ＢＦ３−１−２，・・・，ＢＦ３−１−ｄが形成される。ブルームフィルタＢＦ２−２の下層には、ｄ個のブルームフィルタＢＦ３−２−１，ＢＦ３−２−２，・・・，ＢＦ３−２−ｄが形成される。ブルームフィルタＢＦ２−ｄの下層には、ｄ個のブルームフィルタＢＦ３−ｄ−１，ＢＦ３−ｄ−２，・・・，ＢＦ３−ｄ−ｄが形成される。したがって、第３階層には、合計でｄ2個のブルームフィルタが配置される。これらのブルームフィルタはそれぞれ、（ｎ／ｄ2）ビットのビット列として形成される。
【００７０】
なお、図９において、第３階層の各ブルームフィルタは、図１に示したブルームフィルタ３の一例である。
第３階層のブルームフィルタには、検索対象となるデータ群がそれぞれ割り当てられる。例えば、ブルームフィルタＢＦ３−１−１，ＢＦ３−１−２，・・・，ＢＦ３−１−ｄには、それぞれデータ群ＤＧ１−１，ＤＧ１−２，・・・，ＤＧ１−ｄが、検索対象として割り当てられる。ブルームフィルタＢＦ３−２−１，ＢＦ３−２−２，・・・，ＢＦ３−２−ｄには、それぞれデータ群ＤＧ２−１，ＤＧ２−２，・・・，ＤＧ２−ｄが、検索対象として割り当てられる。ブルームフィルタＢＦ３−ｄ−１，ＢＦ３−ｄ−２，・・・，ＢＦ３−ｄ−ｄには、それぞれデータ群ＤＧｄ−１，ＤＧｄ−２，・・・，ＤＧｄ−ｄが、検索対象として割り当てられる。これらのデータ群は、最大で２０個のチャンクグループに属するチャンクデータを含む。
【００７１】
また、第２階層のブルームフィルタの検索対象は、そのブルームフィルタの下層に配置された各ブルームフィルタの検索対象となっているすべてのデータ群となる。例えば、ブルームフィルタＢＦ２−１の検索対象は、データ群ＤＧ１−１，ＤＧ１−２，・・・，ＤＧ１−ｄとなる。また、同様に、第１階層のブルームフィルタＢＦ１の検索対象は、ブルームフィルタＢＦ１の下層に配置されたブルームフィルタＢＦ２−１，ＢＦ２−２，・・・，ＢＦ２−ｄの検索対象となっているすべてのデータ群となる。したがって、第１階層のブルームフィルタＢＦ１の検索対象は、チャンクデータテーブル１１５に格納されたすべてのチャンクデータとなる。
【００７２】
データ群には、非アクティブのチャンクグループが出現するたびに、そのチャンクグループに属するチャンクデータが追加されていく。例えば、非アクティブのチャンクグループが最初に出現すると、そのチャンクグループに属するチャンクデータが、１つ目のデータ群ＤＧ１−１に追加される。その後、非アクティブのチャンクグループの出現に伴って、２０個のチャンクグループに属するチャンクデータがデータ群ＤＧ１−１に追加されていく。そして、２１個目の非アクティブのチャンクグループが出現すると、そのチャンクグループに属するチャンクデータは、次のデータ群ＤＧ１−２に追加される。このようにして、各データ群には、最大２０個のチャンクグループに属するチャンクデータが含められる。
【００７３】
なお、階層型ブルームフィルタ１１７内のブルームフィルタは、ファイルから分割されたチャンクに含まれるデータと同一のチャンクデータが、データ群に含まれているかを判定するために用いられる。本明細書では、このように重複排除処理全体から見た検索の目的に鑑みて、ブルームフィルタの検索対象となるデータ群に含まれる要素を「チャンクデータ」と記載する。ただし、ブルームフィルタによる直接的な検索対象は、これらのチャンクデータに基づいて算出されたハッシュ値である。すなわち、正確には、ブルームフィルタは、ファイルから分割されたチャンクのデータに基づくハッシュ値と同じハッシュ値が、データ群に含まれているかを判定するために用いられる。したがって、「データ群」に含まれる要素とは、実際にはチャンクデータに基づくハッシュ値である。なお、これらのハッシュ値は、チャンクメタテーブル１１３の「ｈａｓｈ」の項目に登録されている値である。
【００７４】
図１０は、ブルームフィルタを用いた処理例を示す図である。ここでは、階層型ブルームフィルタ１１７に含まれるブルームフィルタのいずれか１つを「ブルームフィルタＢＦ」と表し、ブルームフィルタＢＦを用いたブルームフィルタ処理部１２２の処理について説明する。なお、階層型ブルームフィルタ１１７に含まれるすべてのブルームフィルタの各ビットの値は、検索対象のデータ群に対してチャンクデータが挿入される前の初期状態では、すべて「０」に設定される。
【００７５】
まず、ブルームフィルタＢＦに検索対象として割り当てられたデータ群ＤＧに対して、チャンクデータＣＤ１を追加する場合について説明する。この場合、ブルームフィルタ処理部１２２は、まず、チャンクデータＣＤ１に基づくハッシュ値ＨＡ１を算出する。そして、ブルームフィルタ処理部１２２は、ハッシュ値ＨＡ１に対してｋ種類のハッシュ関数をそれぞれ用いた計算を行うことでｋ個のハッシュ値を算出し、算出されたｋ個のハッシュ値に基づいて、ビット値を「１」にするｋ個のビットの位置を特定する。
【００７６】
図１０では例として、ｋ＝３とし、チャンクデータＣＤ１に基づくハッシュ値ＨＡ１からそれぞれ３種類のハッシュ関数を用いて算出された値を、ブルームフィルタＢＦのビット数で除算した値の余り値を、ビット値を「１」にするビット番号として特定する。図１０の例では、ビットＢ１，Ｂ２，Ｂ３が特定されたものとすると、ブルームフィルタ処理部１２２は、ビットＢ１，Ｂ２，Ｂ３の各値を「１」に設定する。
【００７７】
次に、あるファイルから分割されたチャンクデータＣＤ２が、データ群ＤＧに含まれているかを判定する場合について説明する。この場合、ブルームフィルタ処理部１２２は、上記と同様の計算手順で、まず、チャンクデータＣＤ２に基づくハッシュ値ＨＡ２を算出する。そして、ブルームフィルタ処理部１２２は、ハッシュ値ＨＡ２からｋ種類のハッシュ関数を用いてそれぞれ算出されたハッシュ値に基づいて、ビット値が「１」となるビット位置を特定する。図１０の例では、ビットＢ２，Ｂ３，Ｂ４が特定されたものとすると、ブルームフィルタ処理部１２２は、ブルームフィルタＢＦからビットＢ２，Ｂ３，Ｂ４の各値を取得する。
【００７８】
ここで、ビットＢ２，Ｂ３，Ｂ４のすべての値が「１」の場合、データ群ＤＧにチャンクデータＣＤ２が含まれている可能性がある、と判定される。ただし、データ群ＤＧにチャンクデータＣＤ２が確実に含まれることが保証される訳ではない（偽陽性）。一方、ビットＢ２，Ｂ３，Ｂ４の少なくとも１つの値が「０」の場合、データ群ＤＧにはチャンクデータＣＤ２が含まれていない、と判定される。
【００７９】
階層型ブルームフィルタ１１７では、チャンクデータの追加時においては、最下層のブルームフィルタから上層に対して順に、ブルームフィルタに対するビット値「１」の設定が行われていく。例えば、図９において、データ群ＤＧ１−１にチャンクデータを追加する場合、まず、第３階層においてデータ群ＤＧ１−１に割り当てられたブルームフィルタＢＦ３−１−１に対して、３つのビット値を「１」に設定する処理が行われる。次に、その上層のブルームフィルタＢＦ２−１に対して、３つのビット値を「１」に設定する処理が行われる。さらに、その上層のブルームフィルタＢＦ１に対して、３つのビット値を「１」に設定する処理が行われる。
【００８０】
一方、チャンクデータの存否判定時においては、最上層のブルームフィルタＢＦ１から下層に対して順に、ビット値が参照されていく。すなわち、まず第１階層のブルームフィルタＢＦ１が参照され、ハッシュ計算により特定された３つのビット値がすべて「１」であるかが判定される。３つのビット値がすべて「１」である場合、次に、第２階層のブルームフィルタＢＦ２−１，ＢＦ２−２，・・・，ＢＦ２−ｄのそれぞれについて、ハッシュ計算により特定された３つのビット値がすべて「１」であるかが判定される。
【００８１】
ここで、例えば、ブルームフィルタＢＦ２−１において、特定された３つのビット値がすべて「１」であったとする。この場合、ブルームフィルタＢＦ２−１の下層に属するブルームフィルタＢＦ３−１−１，ＢＦ３−１−２，・・・，ＢＦ３−１−ｄのそれぞれについて、ハッシュ計算により特定された３つのビット値がすべて「１」であるかが判定される。
【００８２】
ここで、例えば、ブルームフィルタＢＦ３−１−１において、特定された３つのビット値がすべて「１」であったとする。この場合、ブルームフィルタＢＦ３−１−１に割り当てられたデータ群ＤＧ１−１に、所望のチャンクデータが存在する可能性がある、と判定される。
【００８３】
以上のような階層構造を有するブルームフィルタを用いることで、ブルームフィルタ処理部１２２は、大量の数のチャンクデータの中から、所望のチャンクデータが存在する可能性のあるデータ群を絞り込むことが可能になる。そして、クラウドストレージゲートウェイ１００においては、絞り込まれたデータ群の中に所望のチャンクデータが存在するか否かが、二分木検索処理部１２３によって正確に判定される。
【００８４】
すなわち、二分木検索の実行前に、階層型ブルームフィルタ１１７を用いたデータ群の絞り込みが行われる。これにより、二分木検索において、ファイルから分割されたチャンクのデータに基づくハッシュ値と、記憶部１１０に記憶されているチャンクデータに基づくハッシュ値とを比較する回数を減少させることができる。したがって、重複するチャンクデータの有無を判定するための処理効率を向上させることができる。
【００８５】
次に、図１１を用いて、二分木検索データ１１８を用いた二分木検索処理について説明する。図１１は、二分木検索データの構成例を示す図である。
二分木検索データ１１８は、データ群ＤＧ１−１，ＤＧ１−２，・・・，ＤＧ１−ｄ，ＤＧ２−１，ＤＧ２−２，・・・，ＤＧ２−ｄ，・・・，ＤＧｄ−１，ＤＧｄ−２，・・・，ＤＧｄ−ｄにそれぞれ対応する木構造データＢＴ１−１，ＢＴ１−２，・・・，ＢＴ１−ｄ，ＢＴ２−１，ＢＴ２−２，・・・，ＢＴ２−ｄ，・・・，ＢＴｄ−１，ＢＴｄ−２，・・・，ＢＴｄ−ｄを含む。
【００８６】
木構造データは、対応するデータ群に含まれるチャンクデータを検索するための二分探索木の構造を示すデータである。例えば、木構造データは、二分探索木に含まれる各ノードに対応するエントリを有する。各ノードは、エントリに登録された「ｇｎｏ」「ｇｉｎｄｅｘ」の値によって、データ群に含まれるチャンクデータに対応付けられている。また、ノードに対応するエントリに登録された情報によって、二分探索木の構造が定義される。
【００８７】
前述のように、ブルームフィルタによる直接的な検索対象は、チャンクデータに基づくハッシュ値である。二分木検索においても同様に、木構造データを用いた直接的な検索対象は、チャンクデータに基づくハッシュ値である。このため、二分探索木においては、チャンクデータのハッシュ値に基づいて木構造が定義される。すなわち、あるノードの一方の側の子ノードおよびそのすべての子孫ノードに対応するハッシュ値は、そのノードのハッシュ値より小さい。一方、そのノードの他方の側の子ノードおよびそのすべての子孫ノードに対応するハッシュ値は、そのノードのハッシュ値より大きい。
【００８８】
木構造データは、対応するデータ群にチャンクデータが追加されるたびに更新される。その更新の際には、そのチャンクデータに対応するノードのエントリが追加されるとともに、チャンクデータのハッシュ値に基づいてノード間の関係が再定義される。
【００８９】
ところで、図１１では、二分木検索データ１１８における各木構造データと、階層型ブルームフィルタ１１７における第３階層の各ブルームフィルタとの対応関係も示している。木構造データＢＴ１−１，ＢＴ１−２，・・・，ＢＴ１−ｄ，ＢＴ２−１，ＢＴ２−２，・・・，ＢＴ２−ｄ，・・・，ＢＴｄ−１，ＢＴｄ−２，・・・，ＢＴｄ−ｄは、それぞれブルームフィルタＢＦ３−１−１，ＢＦ３−１−２，・・・，ＢＦ３−１−ｄ，ＢＦ３−２−１，ＢＦ３−２−２，・・・，ＢＦ３−２−ｄ，・・・，ＢＦ３−ｄ−１，ＢＦ３−ｄ−２，・・・，ＢＦ３−ｄ−ｄに対応付けられている。
【００９０】
第３階層におけるあるブルームフィルタを用いて、そのブルームフィルタに対応するデータ群に所望のチャンクデータが存在する可能性がある、と判定されたとする。この場合、このブルームフィルタに対応付けられた木構造データを用いて、そのデータ群に所望のチャンクデータが存在するかが、二分木検索処理によって正確に判定される。例えば、ブルームフィルタＢＦ３−１−１を用いて、データ群ＤＧ１−１に所望のチャンクデータが存在する可能性がある、と判定されたとする。この場合、ブルームフィルタＢＦ３−１−１に対応付けられた木構造データＢＴ１−１を用いて、データ群ＤＧ１−１に所望のチャンクデータが存在するかが判定される。
【００９１】
なお、以上の二分木検索データ１１８を用いた二分木検索処理は、データ群の中に所望のチャンクデータが存在するかを正確に判定するための方法の一例である。クラウドストレージゲートウェイ１００は、これ以外の方法を用いてデータ群におけるチャンクデータの存在の有無を正確に判定してもよい。
【００９２】
次に、フィルタ記憶域削減処理について説明する。
階層型ブルームフィルタ１１７の各ブルームフィルタのビット数は、検索対象の要素数（すなわち、チャンクデータ数）に応じて決まる。検索対象の要素数が多くなるほど、各ブルームフィルタのビット数も多くなるので、階層型ブルームフィルタ１１７を構成するデータが記憶部１１０において占有する記憶領域も大きくなる。例えば、第１階層のブルームフィルタＢＦ１を構成するデータ量は、各ビットの情報を４ＫＢのデータで管理した場合、３３０ＭＢ程度になる場合がある。この場合、３階層の階層型ブルームフィルタ１１７は、約１ＧＢという大きな記憶領域を占有する。
【００９３】
ここで、一般的なブルームフィルタの性質として、検索対象の要素数が減少した場合でも、ブルームフィルタのビット数を削減できない、という性質がある。これは、ブルームフィルタのビットから、削除された要素に基づく計算によってビット値が「１」となるビットを削除したとしても、そのビットは、他の要素に基づく計算によってビット値が「１」となる可能性があるからである。もしそうである場合、ビットの削除後のブルームフィルタを用いた検索処理では、偽陰性が生じてしまう。
【００９４】
このような問題に対し、本実施の形態のクラウドストレージゲートウェイ１００では、次のような方法が用いられる。まず、チャンクグループ単位でガベージコレクションを行うことで、データ群に含まれるチャンクデータ数（要素数）の削減を可能にする。その上で、データ群に対応するブルームフィルタの上位側から、そのデータ群において削減されたチャンクデータ数の割合に応じたビット数を削減する。そして、ビット数が削減されたブルームフィルタを用いて検索を行う際に、削減された分のビットをブルームフィルタの上位側に仮想的に付加した状態で、検索を行う。このとき、付加されたビットにはすべて「１」が設定される。これにより、偽陰性が発生することを防止する。
【００９５】
以下の説明では、図１２、図１３を用いて、ガベージコレクションを実行するための仕組みについて説明し、その後、図１４、図１５を用いて、階層型ブルームフィルタ１１７が占有する記憶領域の削減処理について説明する。
【００９６】
図１２は、１つのデータ群に対応する各種テーブルと各種カウント値との関係を示す図である。
図１２に示す記憶領域１１５ａ，１１５ｂ，・・・は、チャンクグループごとのチャンクデータの記憶領域を示す。これらの記憶領域１１５ａ，１１５ｂ，・・・は、チャンクデータテーブル１１５に含まれるチャンクグループごとのレコード群に対応する。記憶領域１１５ａ，１１５ｂ，・・・においては、破線で区切られた１つの領域が、１つのチャンクデータの記憶領域を示す。１つのデータ群（ここでは「データ群ＤＧ」とする）には最大２０のチャンクグループが属するので、データ群ＤＧには、上記のような記憶領域が最大２０個含まれる。
【００９７】
また、図１２に示すテーブル１１３ａ，１１３ｂ，・・・は、チャンクメタテーブル１１３に含まれるチャンクグループごとのレコード群に対応する。テーブル１１３ａ，１１３ｂ，・・・においては、破線で区切られた１つの領域が、１つのチャンクデータに対応するレコードを示す。また、テーブル１１３ａ，１１３ｂ，・・・は、それぞれ記憶領域１１５ａ，１１５ｂ，・・・に関連付けられている。
【００９８】
また、テーブル１１４ａ，１１４ｂ，・・・は、参照カウンタテーブル１１４に含まれるチャンクグループごとのレコード群に対応する。テーブル１１４ａ，１１４ｂ，・・・においては、破線で区切られた１つの領域に、１つのチャンクデータに対応するレコードに登録された参照カウンタの値（「ｒｅｆｃｎｔ」の値）が登録されている。また、テーブル１１４ａ，１１４ｂ，・・・は、それぞれ記憶領域１１５ａ，１１５ｂ，・・・に関連付けられている。
【００９９】
テーブル１１３ａ，１１３ｂ，・・・のレコードに登録された値に基づいて、チャンクデータや参照カウンタの値に対するアクセスが可能となる。例えば、テーブル１１３ａのレコード１１３ａ１に登録された「ｇｎｏ」「ｏｆｆｓｅｔ」の値（または「ｇｎｏ」「ｇｉｎｄｅｘ」の値）によって、記憶領域１１５ａに含まれるチャンクデータ１１５ａ１へのアクセスが可能となる。また、レコード１１３ａ１に登録された「ｇｎｏ」「ｇｉｎｄｅｘ」の値によって、テーブル１１４ａのレコード１１４ａ１に登録された、対応する参照カウンタの値へのアクセスが可能となる。
【０１００】
前述のように、参照カウンタの値は、対応するチャンクデータがいくつのチャンクから参照されているかを示す。また、ファイルの更新や削除が要求された場合、更新前や削除前においてファイルのチャンクに対応付けられていたチャンクデータの参照カウンタの値が、カウントダウンされることがある。そのようにして参照カウンタの値が「０」になると、対応するチャンクデータは、どのファイルのチャンクからも参照されない無効なチャンクデータとなる。
【０１０１】
本実施の形態では、削除カウンタテーブル１１６において、データ群ごとの削除カウンタの値が保持される。削除カウンタの値は、対応するデータ群に含まれるチャンクデータのうち、参照カウンタの値が「０」であるチャンクデータの数を示す。図１２では、データ群ＤＧに対応する削除カウンタ１１６ａが例示されている。削除カウンタ１１６ａの値は、データ群ＤＧに対応するテーブル１１４ａ，１１４ｂ，・・・に登録された参照カウンタの値のうち、「０」の数を示す。
【０１０２】
削除カウンタの値が一定数を超えた場合、対応するデータ群には無効なチャンクデータが多く含まれると判断できる。この場合、データ群の記憶領域には、どのチャンクからも参照されていない無駄な領域が多数発生していると判断できる。そこで、フィルタ記憶域削減処理部１２４は、削除カウンタの値が一定数を超えた場合に、対応するデータ群に属する各チャンクグループを対象としてガベージコレクションを実行する。
【０１０３】
図１３は、ガベージコレクションについて説明するための図である。前述のように、ガベージコレクションは、断片化された有効なチャンクデータをひとまとめの記憶領域に詰め込み直すことで、無効なチャンクデータの記憶領域を解放するための処理である。
【０１０４】
図１３では、あるチャンクグループに対応するテーブル１１３ａと、このチャンクグループに対応するチャンクデータの記憶領域１１５ａとを例示している。なお、テーブル１１３ａは、チャンクメタテーブル１１３の一部である。テーブル１１３ａにおいて、斜線の領域は、参照カウンタの値が「０」であるチャンクデータのレコードを示す。また、記憶領域１１５ａにおいて、斜線の領域は、参照カウンタの値が「０」である無効なチャンクデータの領域を示す。このように、ガベージコレクションの実行前の記憶領域１１５ａでは、無効なチャンクデータが記憶された不要な領域が部分的に発生しており、有効なチャンクデータの領域が断片化している。
【０１０５】
フィルタ記憶域削減処理部１２４は、記憶領域１１５ａに記憶された有効なチャンクデータを、連続した記憶領域１１５ａａに再配置する。これにより、無効なチャンクデータが記憶されていた領域が解放され、その領域に他のデータを格納可能になる。また、フィルタ記憶域削減処理部１２４は、チャンクデータの再配置に応じて、有効なチャンクデータに対応する、テーブル１１３ａ内の登録情報も適宜書き替える。例えば、記憶領域１１５ａａに再配置された各チャンクデータには、先頭から順にインデックス番号（ｇｉｎｄｅｘ）が降順にあらためて付与され、付与されたインデックス番号によって元のインデックス番号が書き替えられる。また、各チャンクデータに対応するオフセット量（ｏｆｆｓｅｔ）も書き替えられる。図１３では、ガベージコレクションによってチャンクグループ内のチャンクデータ数が３／５に減少したとすると、テーブル１１３ａのサイズもテーブル１１３ａａに示すように３／５に減少する。
【０１０６】
なお、チャンクマップテーブル１１２、参照カウンタテーブル１１４、チャンクデータテーブル１１５における各チャンクデータに対応するレコードにおいても、インデックス番号が上記のように書き替えられる。
【０１０７】
以上のような手順により、データ群に属するチャンクグループについてのガベージコレクションが実行される。これにより、データ群の記憶領域が削減される。次に、フィルタ記憶域削減処理部１２４は、データ群の削減量に応じて、階層型ブルームフィルタ１１７に含まれるブルームフィルタのビット数を削減するための処理を実行する。
【０１０８】
図１４は、ブルームフィルタのビット数削減処理の例を示す図である。図１４では例として、データ群ＤＧ１−１に対するガベージコレクションが実行され、データ群ＤＧ１−１に含まれるチャンクデータ数（要素数）が１／３に減少したものとする。
【０１０９】
この場合、フィルタ記憶域削減処理部１２４は、まず、階層型ブルームフィルタ１１７における最下層（第３階層）のブルームフィルタのうち、データ群ＤＧ１−１を検索対象とするブルームフィルタＢＦ３−１−１のビット数を削減する。この処理では、ブルームフィルタＢＦ３−１−１のうち下位側の１／３のビット列がそのまま残され、上位側の残りの２／３のビット列が記憶部１１０から削除される。このとき、ブルームフィルタＢＦ３−１−１からｍビットのビット列が削除されたものとする。
【０１１０】
次に、フィルタ記憶域削減処理部１２４は、ブルームフィルタＢＦ３−１−１の上位に位置するブルームフィルタＢＦ２−１のビット数を削減する。この処理では、ブルームフィルタＢＦ２−１のうち上位側のｍビットのビット列が記憶部１１０から削除され、残りのビット列がそのまま残される。なお、第２階層に含まれる他のブルームフィルタについては、ビット数の削減は行われない。
【０１１１】
さらに、フィルタ記憶域削減処理部１２４は、ブルームフィルタＢＦ２−１の上位に位置するブルームフィルタＢＦ１のビット数を削減する。この処理では、第２階層と同様に、ブルームフィルタＢＦ１のうち上位側のｍビットのビット列が記憶部１１０から削除され、残りのビット列がそのまま残される。
【０１１２】
以上の手順により、データ群の記憶領域の削減に応じて、階層型ブルームフィルタ１１７の記憶領域も削減される。
図１５は、ビット数が削減されたブルームフィルタを用いた検索処理の例を示す図である。この図１５では、図１４のような手順でブルームフィルタＢＦ１，ＢＦ２−１，ＢＦ３−１−１のビット数が削減された状態において、チャンクデータＣＤの検索が要求された場合について示す。
【０１１３】
この場合、まず、第１階層のブルームフィルタＢＦ１を用いて、チャンクデータＣＤの存在の有無が判定される。このとき、ブルームフィルタ処理部１２２は、ブルームフィルタＢＦ１の上位側に、削除されたビット数と同じｍビットのビット列ＢＳ１を仮想的に付加する。付加されるビット列ＢＳ１では、すべてのビットの値が「１」に設定される。ブルームフィルタ処理部１２２は、ビット列ＢＳ１が付加されたブルームフィルタＢＦ１を用いて、検索対象のデータ群にチャンクデータＣＤが含まれているかを判定する。
【０１１４】
この判定により、検索対象のデータ群にチャンクデータＣＤが含まれている可能性がある、と判定されると、第２階層のブルームフィルタＢＦ２−１，ＢＦ２−２，・・・，ＢＦ２−ｄをそれぞれ用いて、チャンクデータＣＤの存在の有無が判定される。ここで、ブルームフィルタＢＦ２−１を用いた処理では、ブルームフィルタ処理部１２２は、ブルームフィルタＢＦ２−１の上位側に、削除されたビット数と同じｍビットのビット列ＢＳ２を仮想的に付加する。ビット列ＢＳ１と同様に、付加されるビット列ＢＳ２では、すべてのビットの値が「１」に設定される。ブルームフィルタ処理部１２２は、ビット列ＢＳ２が付加されたブルームフィルタＢＦ２−１を用いて、検索対象のデータ群にチャンクデータＣＤが含まれているかを判定する。
【０１１５】
ここで、ブルームフィルタＢＦ２−１を用いた判定処理により、検索対象のデータ群にチャンクデータＣＤが含まれている可能性がある、と判定されたとする。この場合、次に、ブルームフィルタＢＦ２−１の下層に配置されたブルームフィルタＢＦ３−１−１，ＢＦ３−１−２，・・・，ＢＦ３−１−ｄをそれぞれ用いて、チャンクデータＣＤの存在の有無が判定される。ここで、ブルームフィルタＢＦ３−１−１を用いた処理では、ブルームフィルタ処理部１２２は、ブルームフィルタＢＦ３−１−１の上位側に、削除されたビット数と同じｍビットのビット列ＢＳ３を仮想的に付加する。ビット列ＢＳ１，ＢＳ２と同様に、付加されるビット列ＢＳ３では、すべてのビットの値が「１」に設定される。ブルームフィルタ処理部１２２は、ビット列ＢＳ３が付加されたブルームフィルタＢＦ３−１−１を用いて、検索対象のデータ群にチャンクデータＣＤが含まれているかを判定する。
【０１１６】
以上のように、ビット数が削減されたブルームフィルタを用いて検索を行う際には、削減されたビット数と同じビット数を有し、かつ、全ビットの値が「１」であるビット列が、ブルームフィルタの上位側に仮想的に付加される。そして、このようにビット列が付加されたブルームフィルタを用いて、検索が行われる。これにより、記憶部１１０に記憶されるブルームフィルタの実データ量を削減して、記憶部１１０の利用効率を高めながらも、検索処理における決定的な誤判定（すなわち、集合内に存在する要素を存在しないと判定すること）の発生を防止できる。
【０１１７】
また、例えば、ガベージコレクションによってデータ群に含まれるチャンクデータ数が減少したにもかかわらず、そのデータ群を検索対象とするブルームフィルタをそのまま用いて検索を行うと、偽陽性の発生確率が上がってしまう可能性がある。しかし、上記のようにチャンクデータ数の減少に応じてブルームフィルタのビット数を削減することで、偽陽性の発生確率を低下させることができる。
【０１１８】
次に、クラウドストレージゲートウェイ１００の処理について、フローチャートを用いて説明する。
図１６は、ファイル書き込み処理の例を示すフローチャートである。ＮＡＳサービス処理部１２１は、ＮＡＳクライアント２１０から新規のファイルの書き込み要求を受信すると、図１６の処理を実行する。
【０１１９】
［ステップＳ１１］ＮＡＳサービス処理部１２１は、ディレクトリテーブル１１１に、書き込みが要求されたファイルのディレクトリ情報を示すレコードを追加する。このとき、ファイルにｉｎｏｄｅ番号が付与される。
【０１２０】
また、ＮＡＳサービス処理部１２１は、書き込みが要求されたファイルの実データを、複数のチャンクに分割する。ＮＡＳサービス処理部１２１は、例えば、所定の演算規則にしたがい、同一データを含むチャンクが生成されやすいようにファイルの実データの分割位置を決定する。これにより、可変長のチャンクが生成される。
【０１２１】
［ステップＳ１２］ＮＡＳサービス処理部１２１は、ファイルの先頭側から順に、処理対象のチャンクを１つ選択する。ＮＡＳサービス処理部１２１は、選択されたチャンクのチャンクデータ（以下、「選択されたチャンクデータ」と略称する）に基づくハッシュ値ＨＡを算出する。そして、ＮＡＳサービス処理部１２１は、選択されたチャンクデータについての検索処理を、ブルームフィルタ処理部１２２に要求する。
【０１２２】
［ステップＳ１３］ブルームフィルタ処理部１２２は、階層型ブルームフィルタ１１７における処理対象の階層、および、その階層のブルームフィルタのうち処理対象のブルームフィルタを特定する。ステップＳ１３の初回実行時には、第１階層およびブルームフィルタＢＦ１が処理対象として特定される。
【０１２３】
ブルームフィルタ処理部１２２は、以下の計算により、処理対象のブルームフィルタにおいてビット値を「１」にする３つのビットを特定する。ブルームフィルタ処理部１２２は、ステップＳ１２で算出されたハッシュ値ＨＡを基に３種類のハッシュ関数をそれぞれ用いて３つのハッシュ値を算出し、各ハッシュ値を処理対象の階層におけるブルームフィルタの初期ビット数で除算し、その余り値を算出する。これにより３つの余り値が算出され、各余り値がビット値を「１」にするビットの番号を示す。なお、初期ビット数とは、ビット数が削減されていない初期状態のブルームフィルタのビット数を示す。
【０１２４】
［ステップＳ１４］ブルームフィルタ処理部１２２は、処理対象の各ブルームフィルタについて、ビット数が削減されているか（すなわち、階層型ブルームフィルタ１１７の記憶領域に記憶されているビット値の数が初期ビット数より少ないか）を判定する。ブルームフィルタ処理部１２２は、処理対象のすべてのブルームフィルタについてビット数が削減されていない場合、ステップＳ１６の処理を実行する。一方、ブルームフィルタ処理部１２２は、少なくとも１つのブルームフィルタについてビット数が削減されている場合、ステップＳ１５の処理を実行する。
【０１２５】
［ステップＳ１５］ブルームフィルタ処理部１２２は、ステップＳ１４でビット数が削減されていると判定されたブルームフィルタについて、その上位側に削減されたビット数のビット列を仮想的に付加する。このとき、付加されるビット列の全ビットには「１」が設定される。
【０１２６】
［ステップＳ１６］ブルームフィルタ処理部１２２は、処理対象のいずれかのブルームフィルタの管理下にあるデータ群に、選択されたチャンクデータが存在するかを判定する。具体的には、ブルームフィルタ処理部１２２は、処理対象の各ブルームフィルタについて、ステップＳ１３で特定されたビットの値がすべて「１」であるかを判定する。特定されたビットの値がすべて「１」であるブルームフィルタが少なくとも１つ存在する場合、チャンクデータが存在すると判定される。
【０１２７】
ブルームフィルタ処理部１２２は、チャンクデータが存在すると判定された場合、ステップＳ１７の処理を実行する。一方、ブルームフィルタ処理部１２２は、チャンクデータが存在しないと判定された場合、その旨をＮＡＳサービス処理部１２１に通知する。この通知に応じて、ＮＡＳサービス処理部１２１によってステップＳ２１の処理が実行される。
【０１２８】
［ステップＳ１７］ブルームフィルタ処理部１２２は、現在の処理対象のブルームフィルタが最下層（第３階層）のブルームフィルタかを判定する。ブルームフィルタ処理部１２２は、処理対象のブルームフィルタが最下層のブルームフィルタでない場合、ステップＳ１８の処理を実行し、最下層のブルームフィルタである場合、ステップＳ１９の処理を実行する。
【０１２９】
［ステップＳ１８］ブルームフィルタ処理部１２２は、処理対象の階層を下層に移行させて、処理をステップＳ１３に進める。ステップＳ１３では、下層のブルームフィルタのうち、ステップＳ１６でチャンクデータが存在すると判定されたブルームフィルタが処理対象となる。
【０１３０】
［ステップＳ１９］ブルームフィルタ処理部１２２は、ステップＳ１６でチャンクデータが存在すると判定されたブルームフィルタを二分木検索処理部１２３に通知して、二分木検索処理の実行を要求する。二分木検索処理部１２３は、通知された各ブルームフィルタに対応付けられた木構造データを用いて、二分木検索を実行する。この二分木検索では、ステップＳ１２で算出されたハッシュ値ＨＡが、木構造データに基づく木構造の各ノードに対応するハッシュ値と一致するかが判定される。
【０１３１】
二分木検索処理部１２３は、いずれかの木構造データを用いた二分木検索の結果、選択されたチャンクデータが存在すると判定された場合、ステップＳ２０の処理を実行する。一方、二分木検索処理部１２３は、すべての木構造データを用いた二分木検索の結果、選択されたチャンクデータが存在しないと判定された場合、その旨をＮＡＳサービス処理部１２１に通知する。この通知に応じて、ＮＡＳサービス処理部１２１によってステップＳ２１の処理が実行される。
【０１３２】
［ステップＳ２０］ステップＳ２０の処理が実行されるケースでは、選択されたチャンクデータと同一のチャンクデータが、チャンクデータテーブル１１５にすでに登録されている。この場合、参照カウンタの値のカウントアップが行われるが、選択されたチャンクデータはチャンクデータテーブル１１５に登録されずに削除される。これにより、同一のチャンクデータが記憶部１１０に重複して格納されることが回避される。
【０１３３】
具体的には、ブルームフィルタ処理部１２２は、ステップＳ１９での二分木検索によってデータ群から検索されたチャンクデータを識別するグループ番号（ｇｎｏ）およびインデックス番号（ｇｉｎｄｅｘ）を、ＮＡＳサービス処理部１２１に通知する。ＮＡＳサービス処理部１２１は、参照カウンタテーブル１１４のレコードのうち、通知されたグループ番号およびインデックス番号が登録されたレコードの「ｒｅｆｃｎｔ」の項目を参照し、この項目に登録された参照カウンタの値をカウントアップする。
【０１３４】
また、ＮＡＳサービス処理部１２１は、チャンクマップテーブル１１２に、ステップＳ１２で選択されたチャンクに対応するレコードを登録する。このレコードには、上記のグループ番号およびインデックス番号が登録され、これによってファイルのチャンクと記憶部１１０のチャンクデータテーブル１１５内のチャンクデータとが関連付けられる。
【０１３５】
［ステップＳ２１］このステップＳ２１の処理が実行されるケースでは、選択されたチャンクデータと同一のチャンクデータが、記憶部１１０のチャンクデータテーブル１１５に記憶されていない。そこで、ＮＡＳサービス処理部１２１は、選択されたチャンクデータを記憶部１１０に登録するチャンクデータ登録処理を実行する。この処理内容については後の図１７において説明する。
【０１３６】
［ステップＳ２２］ＮＡＳサービス処理部１２１は、ファイルから分割されたすべてのチャンクについてステップＳ１２〜Ｓ２１の処理が実行されたかを判定する。ＮＡＳサービス処理部１２１は、処理を未実行のチャンクがある場合、ステップＳ１２に進み、次のチャンクを処理対象として選択して処理を継続する。一方、ＮＡＳサービス処理部１２１は、すべてのチャンクについて処理済みの場合、ファイル書き込み処理を終了する。
【０１３７】
図１７は、チャンクデータ登録処理の例を示すフローチャートである。この図１７の処理は、図１６のステップＳ２１の処理に対応する。
［ステップＳ３１］ＮＡＳサービス処理部１２１は、チャンクデータテーブル１１５を参照し、最後尾のレコードに登録されたグループ番号（すなわち、現時点で最大のグループ番号）を取得する。
【０１３８】
［ステップＳ３２］ＮＡＳサービス処理部１２１は、ステップＳ３１で取得されたグループ番号のチャンクグループに含まれるチャンクデータの合計サイズが、所定値以上であるかを判定する。ＮＡＳサービス処理部１２１は、合計サイズが所定値以上である場合、ステップＳ３３の処理を実行し、合計サイズが所定値未満である場合、ステップＳ３４の処理を実行する。
【０１３９】
［ステップＳ３３］ＮＡＳサービス処理部１２１は、ステップＳ３２で取得されたグループ番号をカウントアップすることで、新たなグループ番号を生成する。
［ステップＳ３４］ＮＡＳサービス処理部１２１は、チャンクマップテーブル１１２、チャンクメタテーブル１１３および参照カウンタテーブル１１４に対してレコードを追加する。
【０１４０】
ステップＳ３２でＹｅｓと判定された場合、追加される各レコードの「ｇｎｏ」の項目には、ステップＳ３３で生成されたグループ番号が登録され、各レコードの「ｇｉｎｄｅｘ」の項目には、先頭のチャンクを示すインデックス番号が登録される。一方、ステップＳ３２でＮｏと判定された場合、追加される各レコードの「ｇｎｏ」の項目には、ステップＳ３１で取得されたグループ番号が登録される。また、追加される各レコードの「ｇｉｎｄｅｘ」の項目には、このグループ番号に対応するチャンクグループに含まれている最後尾のチャンクデータの次の順番を示すインデックス番号が登録される。
【０１４１】
また、チャンクマップテーブル１１２に追加されるレコードにおいては、「ｉｎｏ」の項目に、書き込みが要求されたファイルのｉｎｏｄｅ番号が登録され、「ｏｆｆｓｅｔ」「ｓｉｚｅ」の項目に、処理対象のチャンクについての情報が登録される。チャンクメタテーブル１１３に追加されるレコードにおいては、「ｈａｓｈ」の項目に、図１６のステップＳ１２で算出されたハッシュ値ＨＡが登録される。参照カウンタテーブル１１４に追加されるレコードにおいては、「ｒｅｆｃｎｔ」の項目に、参照カウンタの初期値である「１」が登録される。
【０１４２】
［ステップＳ３５］ＮＡＳサービス処理部１２１は、チャンクデータテーブル１１５に対してレコードを追加する。このとき、追加されるレコードにおいては、「ｇｎｏ」「ｇｉｎｄｅｘ」の各項目に、ステップＳ３４で同名の項目に記録された情報と同じ情報が登録され、「ｄａｔａ」の項目に、チャンクデータが圧縮された状態で格納される。
【０１４３】
［ステップＳ３６］ＮＡＳサービス処理部１２１は、ステップＳ３４，Ｓ３５でレコードに記録したグループ番号のチャンクグループに含まれるチャンクデータの合計サイズが、所定値以上であるかを判定する。ＮＡＳサービス処理部１２１は、合計サイズが所定値以上である場合、ステップＳ３７の処理を実行し、合計サイズが所定値未満である場合、チャンクデータ登録処理を終了する。
【０１４４】
［ステップＳ３７］ＮＡＳサービス処理部１２１は、ステップＳ３４，Ｓ３５でレコードに記録したグループ番号のチャンクグループを非アクティブ化して、このチャンクグループをクラウド転送処理部１２５による転送対象に設定する。例えば、このチャンクグループを示すグループ番号が図示しない転送キューに登録されることで、このチャンクグループが転送対象に設定される。
【０１４５】
図１８は、ファイル更新処理の例を示すフローチャートである。ＮＡＳサービス処理部１２１は、ＮＡＳクライアント２１０から新規のファイルの書き込み要求を受信すると、図１８の処理を実行する。
【０１４６】
［ステップＳ４１］ＮＡＳサービス処理部１２１は、チャンクメタテーブル１１３に登録された、更新前のファイル（旧ファイル）に対応するレコードの位置を、ＲＡＭ１０２に保存する。
【０１４７】
［ステップＳ４２］ＮＡＳサービス処理部１２１は、ＮＡＳクライアント２１０から受信した更新後のファイルの実データを処理対象として、図１６の処理を実行する。これにより、更新後のファイルの実データがチャンク単位に分割され、各チャンクのデータに基づいてチャンクメタテーブル１１３、参照カウンタテーブル１１４およびチャンクデータテーブル１１５が適宜更新される。
【０１４８】
［ステップＳ４３］ＮＡＳサービス処理部１２１は、ステップＳ４１で保存された位置が示すレコードの内容に基づいて、旧ファイルの先頭側から順に、処理対象のチャンクを１つ選択する。
【０１４９】
［ステップＳ４４］ＮＡＳサービス処理部１２１は、参照カウンタテーブル１１４に登録された、処理対象のチャンクのチャンクデータに対応するレコードを参照し、「ｒｅｆｃｎｔ」の項目に登録された参照カウンタの値をカウントダウンする。また、ＮＡＳサービス処理部１２１は、チャンクマップテーブル１１２から、ステップＳ４３で選択されたチャンクに対応するレコードを削除する。
【０１５０】
［ステップＳ４５］ＮＡＳサービス処理部１２１は、ステップＳ４４でカウントダウンした後の参照カウンタの値が「０」の場合、ステップＳ４６の処理を実行し、この参照カウンタの値が「０」より大きい場合、ステップＳ４７の処理を実行する。
【０１５１】
［ステップＳ４６］ＮＡＳサービス処理部１２１は、削除カウンタテーブル１１６を参照し、処理対象のチャンクのチャンクデータが属するデータ群に対応する削除カウンタの値をカウントアップする。
【０１５２】
［ステップＳ４７］ＮＡＳサービス処理部１２１は、旧ファイルから分割されたすべてのチャンクについてステップＳ４３〜Ｓ４６の処理が実行されたかを判定する。ＮＡＳサービス処理部１２１は、処理を未実行のチャンクがある場合、ステップＳ４３に進み、次のチャンクを処理対象として選択して処理を継続する。一方、ＮＡＳサービス処理部１２１は、すべてのチャンクについて処理済みの場合、ファイル更新処理を終了する。
【０１５３】
図１９は、ファイル削除処理の例を示すフローチャートである。ＮＡＳサービス処理部１２１は、ＮＡＳクライアント２１０からファイルの削除要求を受信すると、図１９の処理を実行する。
【０１５４】
［ステップＳ５１］ＮＡＳサービス処理部１２１は、チャンクマップテーブル１１２に基づいて、削除が要求されたファイルの頭から順に、処理対象のチャンクを１つ選択する。
【０１５５】
［ステップＳ５２］ＮＡＳサービス処理部１２１は、参照カウンタテーブル１１４に登録された、処理対象のチャンクのチャンクデータに対応するレコードを参照し、「ｒｅｆｃｎｔ」の項目に登録された参照カウンタの値をカウントダウンする。また、ＮＡＳサービス処理部１２１は、チャンクマップテーブル１１２から、ステップＳ５１で選択されたチャンクに対応するレコードを削除する。
【０１５６】
［ステップＳ５３］ＮＡＳサービス処理部１２１は、ステップＳ５２でカウントダウンした後の参照カウンタの値が「０」の場合、ステップＳ５４の処理を実行し、この参照カウンタの値が「０」より大きい場合、ステップＳ５５の処理を実行する。
【０１５７】
［ステップＳ５４］ＮＡＳサービス処理部１２１は、削除カウンタテーブル１１６を参照し、処理対象のチャンクのチャンクデータが属するデータ群に対応する削除カウンタの値をカウントアップする。
【０１５８】
［ステップＳ５５］ＮＡＳサービス処理部１２１は、ファイルから分割されたすべてのチャンクについてステップＳ５１〜Ｓ５４の処理が実行されたかを判定する。ＮＡＳサービス処理部１２１は、処理を未実行のチャンクがある場合、ステップＳ５１に進み、次のチャンクを処理対象として選択して処理を継続する。一方、ＮＡＳサービス処理部１２１は、すべてのチャンクについて処理済みの場合、ディレクトリテーブル１１１から削除対象のファイルのレコードを削除し、ファイル削除処理を終了する。
【０１５９】
図２０は、フィルタ記憶域削減処理の例を示すフローチャートである。フィルタ記憶域削減処理部１２４は、削除カウンタテーブル１１６のレコードを順に参照し、レコードを１つ参照するたびに図２０の処理を実行する。なお、図２０の処理は、図１６〜図１９の各処理とは非同期で実行される。
【０１６０】
［ステップＳ６１］フィルタ記憶域削減処理部１２４は、参照先のレコードの「ｄｅｌｃｎｔ」の項目から削除カウンタの値を取得する。また、フィルタ記憶域削減処理部１２４は、参照先のレコードに対応するチャンクデータが属するデータ群を特定し、チャンクデータテーブル１１５に基づき、特定されたデータ群に属する各チャンクグループに含まれるチャンクデータの合計数を算出する。フィルタ記憶域削減処理部１２４は、取得された削除カウンタの値が、算出されたチャンクデータの合計数の２０％に相当する値を超えたかを判定する。フィルタ記憶域削減処理部１２４は、削除カウンタの値がチャンクデータの合計数の２０％に相当する値を超えている場合、ステップＳ６２の処理を実行し、超えていない場合、参照先のレコードについてのフィルタ記憶域削減処理を終了する。
【０１６１】
［ステップＳ６２］フィルタ記憶域削減処理部１２４は、ステップＳ６１で特定されたデータ群に属する各チャンクグループについて、ガベージコレクションを実行する。
［ステップＳ６３］フィルタ記憶域削減処理部１２４は、ステップＳ６２のガベージコレクションによって有効なチャンクデータがなくなったチャンクグループがある場合、このチャンクグループをクラウド転送処理部１２５による転送対象に設定する。例えば、このチャンクグループを示すグループ番号が図示しない転送キューに登録されることで、このチャンクグループが転送対象に設定される。
【０１６２】
［ステップＳ６４］フィルタ記憶域削減処理部１２４は、ステップＳ６２のガベージコレクションによるチャンクデータ数の減少率Ｒを算出する。この減少率Ｒとは、ステップＳ６１で特定されたデータ群に含まれるチャンクデータの総数に対して、ガベージコレクションによって削除された無効なチャンクデータの数の割合を示す。
【０１６３】
また、フィルタ記憶域削減処理部１２４は、ステップＳ６１で特定されたデータ群に割り当てられたブルームフィルタを特定する。これにより、最下層（第３階層）のブルームフィルタの中から１つのブルームフィルタが特定される。フィルタ記憶域削減処理部１２４は、特定されたブルームフィルタのビット数の上位側のビット列を削除することで、このブルームフィルタのビット数を（１−Ｒ）倍に削減する。
【０１６４】
［ステップＳ６５］フィルタ記憶域削減処理部１２４は、階層型ブルームフィルタ１１７における処理対象のブルームフィルタを、現在の処理対象のブルームフィルタの上層に配置されたブルームフィルタに移行させる。
【０１６５】
［ステップＳ６６］フィルタ記憶域削減処理部１２４は、処理対象のブルームフィルタの上位側から、ステップＳ６４で削除されたビット列と同じビット数のビット列を削除する。
【０１６６】
［ステップＳ６７］フィルタ記憶域削減処理部１２４は、処理対象のブルームフィルタが最上層（第１階層）のブルームフィルタでない場合、ステップＳ６５の処理を実行し、最上層のブルームフィルタである場合、参照先のレコードについてのフィルタ記憶域削減処理を終了する。
【０１６７】
図２１は、クラウド転送処理の例を示すフローチャートである。なお、クラウド転送処理部１２５による図２１の処理は、図１６〜図１９に示したＮＡＳサービス処理部１２１の処理とは非同期で実行される。
【０１６８】
［ステップＳ７１］クラウド転送処理部１２５は、チャンクデータテーブル１１５に登録されたチャンクグループの中から、転送対象に設定されたチャンクグループを特定する。例えば、転送対象のチャンクグループを示すグループ番号が転送キューに登録されている場合、クラウド転送処理部１２５は、この転送キューからグループ番号を１つ抽出する。
【０１６９】
このステップＳ７１で特定されるチャンクグループとしては、図１７のステップＳ３７で転送対象に設定されたチャンクグループがある。このようなチャンクグループが特定されるケースとしては、新規のファイルの書き込み要求に応じて図１６の処理が実行されたケースと、ファイルの更新要求に応じて図１８の処理が実行されたケースとがある。ここで、前者を「第１のケース」、後者を「第２のケース」とする。また、ステップＳ７１で特定されるチャンクグループとしては、図２０のステップＳ６３で転送対象に設定されたチャンクグループもある。このケースを「第３のケース」とする。
【０１７０】
［ステップＳ７２］クラウド転送処理部１２５は、チャンクグループオブジェクト１３１を生成する。例えば、チャンクグループオブジェクト１３１では、オブジェクト名として、ステップＳ７１で特定されたチャンクグループのグループ名が設定される。また、上記の第１のケースおよび第２のケースでは、チャンクデータテーブル１１５から、転送対象のチャンクグループに含まれる各チャンクデータが、チャンクグループオブジェクト１３１のオブジェクト値として設定される。第１のケースでは、生成されるチャンクグループオブジェクト１３１は、クラウドストレージ２４０に対して新規のチャンクグループに含まれるチャンクデータの格納を要求するための情報となる。また、第２のケースでは、生成されるチャンクグループオブジェクト１３１は、クラウドストレージ２４０に対して既存のチャンクグループに含まれるチャンクデータの更新を要求するための情報となる。一方、第３のケースでは、生成されるチャンクグループオブジェクト１３１は、クラウドストレージ２４０に対して既存のチャンクグループに含まれるチャンクデータの削除を要求するための情報となる。
【０１７１】
［ステップＳ７３］クラウド転送処理部１２５は、生成されたチャンクグループオブジェクト１３１をクラウドストレージ２４０に対して送信する。
なお、上記の各実施の形態に示した装置（データ処理装置１、クラウドストレージゲートウェイ１００）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク（ＢＤ）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１７２】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１７３】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【０１７４】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  複数のデータ要素を含むデータ集合と、前記データ集合における検索対象のデータ要素の存否判定に用いられ、前記複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第１のブルームフィルタと、を記憶する記憶部と、
前記データ集合に含まれる一部のデータ要素を削除する場合、前記第１のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第１のビット列を削除し、
検索対象の第１のデータ要素が入力されると、前記第１のブルームフィルタから前記第１のビット列が削除された第２のブルームフィルタの上位側に、前記第１のビット列と同じビット数を有し、かつ、すべてのビット値が前記特定の値に設定された第２のビット列を一時的に付加し、前記第２のビット列が付加された前記第２のブルームフィルタを用いて、前記一部のデータ要素が削除された前記データ集合における前記第１のデータ要素の存否を判定する、演算部と、
を有するデータ処理装置。
【０１７５】
（付記２）  前記第１のビット列は、前記データ集合に含まれるデータ要素の数に対する、前記削除されるデータ要素の数の割合に応じたビット数を有する、
付記１に記載のデータ処理装置。
【０１７６】
（付記３）  前記記憶部は、第１のデータ集合における検索対象のデータ要素の存否判定に用いられる第１階層ブルームフィルタと、前記第１のデータ集合が分割された複数の第２のデータ集合のそれぞれにおける検索対象のデータ要素の存否判定に用いられる複数の第２階層ブルームフィルタと、を記憶し、前記第１のブルームフィルタは、前記複数の第２階層ブルームフィルタのうち一の第２階層ブルームフィルタであり、前記データ集合は、前記複数の第２のデータ集合のうち前記一の第２階層ブルームフィルタに対応する一の第２のデータ集合であり、
前記演算部は、さらに、
前記データ集合に含まれる前記一部のデータ要素を削除する場合、前記第１階層ブルームフィルタの上位側から前記第１のビット列と同じビット数を有する第３のビット列を削除し、
前記第１のデータ要素が入力されると、前記第１階層ブルームフィルタの上位側から前記第３のビット列が削除された第３のブルームフィルタの上位側に、前記第２のビット列と同一の第４のビット列を一時的に付加し、前記第４のビット列が付加された前記第３のブルームフィルタを用いて、前記一部のデータ要素が削除された前記第１のデータ集合における前記第１のデータ要素の存否を判定する、
付記１または２に記載のデータ処理装置。
【０１７７】
（付記４）  前記記憶部は、前記データ集合の記憶領域を含む書き込みデータ記憶領域を有し、
前記演算部は、さらに、
外部装置から書き込みが要求された複数の書き込みデータ要素を、重複を排除して前記書き込みデータ記憶領域に格納するとともに、少なくとも前記複数のデータ要素のそれぞれと、前記複数の書き込みデータ要素との対応関係を示す情報を、前記記憶部に記録し、
前記複数のデータ要素のそれぞれについて、前記複数の書き込みデータ要素のうちのいくつと対応するかを示す第１のカウント値を、前記記憶部に記録し、
前記複数の書き込みデータ要素の１つであって、前記複数のデータ要素のうち一のデータ要素に対応する一の書き込みデータ要素についての更新または削除が前記外部装置から要求されると、前記一のデータ要素に対応する前記第１のカウント値を減少させ、
前記複数のデータ要素のうち、前記第１のカウント値が０であるデータ要素の数を示す第２のカウント値を、前記記憶部に記録し、
前記第２のカウント値が所定の閾値を超えた場合に、前記複数のデータ要素の中から、前記一部のデータ要素として前記第１のカウント値が０であるデータ要素を削除する、
付記１乃至３のいずれか１つに記載のデータ処理装置。
【０１７８】
（付記５）  前記第１のデータ要素の存否判定は、前記複数の書き込みデータ要素の１つとして前記第１のデータ要素の書き込みが要求されたとき、前記第１のデータ要素と同一のデータ要素が前記データ集合に存在するかを判定するために実行される、
付記４に記載のデータ処理装置。
【０１７９】
（付記６）  前記複数の書き込みデータ要素のそれぞれは、前記外部装置から書き込みが要求されたファイルに含まれる部分データである、
付記４または５に記載のデータ処理装置。
【０１８０】
（付記７）  コンピュータに、
記憶部に記憶された、複数のデータ要素を含むデータ集合から、一部のデータ要素を削除する場合、前記データ集合における検索対象のデータ要素の存否判定に用いられ、前記複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第１のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第１のビット列を削除し、
検索対象の第１のデータ要素が入力されると、前記第１のブルームフィルタから前記第１のビット列が削除された第２のブルームフィルタの上位側に、前記第１のビット列と同じビット数を有し、かつ、すべてのビット値が前記特定の値に設定された第２のビット列を一時的に付加し、前記第２のビット列が付加された前記第２のブルームフィルタを用いて、前記一部のデータ要素が削除された前記データ集合における前記第１のデータ要素の存否を判定する、
処理を実行させるデータ処理プログラム。
【０１８１】
（付記８）  前記第１のビット列は、前記データ集合に含まれるデータ要素の数に対する、前記削除されるデータ要素の数の割合に応じたビット数を有する、
付記７に記載のデータ処理プログラム。
【０１８２】
（付記９）  前記記憶部は、第１のデータ集合における検索対象のデータ要素の存否判定に用いられる第１階層ブルームフィルタと、前記第１のデータ集合が分割された複数の第２のデータ集合のそれぞれにおける検索対象のデータ要素の存否判定に用いられる複数の第２階層ブルームフィルタと、を記憶し、前記第１のブルームフィルタは、前記複数の第２階層ブルームフィルタのうち一の第２階層ブルームフィルタであり、前記データ集合は、前記複数の第２のデータ集合のうち前記一のブルームフィルタに対応する一の第２のデータ集合であり、
前記コンピュータに、
前記データ集合に含まれる前記一部のデータ要素を削除する場合、前記第１階層ブルームフィルタの上位側から前記第１のビット列と同じビット数を有する第３のビット列を削除し、
前記第１のデータ要素が入力されると、前記第１階層ブルームフィルタの上位側から前記第３のビット列が削除された第３のブルームフィルタの上位側に、前記第２のビット列と同一の第４のビット列を一時的に付加し、前記第４のビット列が付加された前記第３のブルームフィルタを用いて、前記一部のデータ要素が削除された前記第１のデータ集合における前記第１のデータ要素の存否を判定する、
処理をさらに実行させる、
付記７または８に記載のデータ処理プログラム。
【０１８３】
（付記１０）  前記記憶部は、前記データ集合の記憶領域を含む書き込みデータ記憶領域を有し、
前記コンピュータに、
外部装置から書き込みが要求された複数の書き込みデータ要素を、重複を排除して前記書き込みデータ記憶領域に格納するとともに、少なくとも前記複数のデータ要素のそれぞれと、前記複数の書き込みデータ要素との対応関係を示す情報を、前記記憶部に記録し、
前記複数のデータ要素のそれぞれについて、前記複数の書き込みデータ要素のうちのいくつと対応するかを示す第１のカウント値を、前記記憶部に記録し、
前記複数の書き込みデータ要素の１つであって、前記複数のデータ要素のうち一のデータ要素に対応する一の書き込みデータ要素についての更新または削除が前記外部装置から要求されると、前記一のデータ要素に対応する前記第１のカウント値を減少させ、
前記複数のデータ要素のうち、前記第１のカウント値が０であるデータ要素の数を示す第２のカウント値を、前記記憶部に記録し、
前記第２のカウント値が所定の閾値を超えた場合に、前記複数のデータ要素の中から、前記一部のデータ要素として前記第１のカウント値が０であるデータ要素を削除する、
処理をさらに実行させる、
付記７乃至９のいずれか１つに記載のデータ処理プログラム。
【０１８４】
（付記１１）  前記第１のデータ要素の存否判定は、前記複数の書き込みデータ要素の１つとして前記第１のデータ要素の書き込みが要求されたとき、前記第１のデータ要素と同一のデータ要素が前記データ集合に存在するかを判定するために実行される、
付記１０に記載のデータ処理プログラム。
【符号の説明】
【０１８５】
１  データ処理装置
１ａ  記憶部
１ｂ  演算部
２  データ集合
３  ブルームフィルタ
３ａ，３ｂ  ビット列
Ｅ１，Ｅ２，Ｅ１１，Ｅ１２，Ｅ１３，Ｅｉ，ＥＳ  データ要素
Ｓ１〜Ｓ５  ステップ
【図１】
2019095986.tif 000003
【図２】
2019095986.tif 000004
【図３】
2019095986.tif 000005
【図４】
2019095986.tif 000006
【図５】
2019095986.tif 000007
【図６】
2019095986.tif 000008
【図７】
2019095986.tif 000009
【図８】
2019095986.tif 000010
【図９】
2019095986.tif 000011
【図１０】
2019095986.tif 000012
【図１１】
2019095986.tif 000013
【図１２】
2019095986.tif 000014
【図１３】
2019095986.tif 000015
【図１４】
2019095986.tif 000016
【図１５】
2019095986.tif 000017
【図１６】
2019095986.tif 000018
【図１７】
2019095986.tif 000019
【図１８】
2019095986.tif 000020
【図１９】
2019095986.tif 000021
【図２０】
2019095986.tif 000022
【図２１】
2019095986.tif 000023