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

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

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

特許7323804データ処理装置およびデータ処理プログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-01
(45)【発行日】2023-08-09
(54)【発明の名称】データ処理装置およびデータ処理プログラム
(51)【国際特許分類】
   G06F 16/14 20190101AFI20230802BHJP
【FI】
G06F16/14
【請求項の数】 7
(21)【出願番号】P 2019222855
(22)【出願日】2019-12-10
(65)【公開番号】P2021092950
(43)【公開日】2021-06-17
【審査請求日】2022-08-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】宇納 知寛
(72)【発明者】
【氏名】古田 智徳
【審査官】木村 大吾
(56)【参考文献】
【文献】特開2010-266952(JP,A)
【文献】特開2008-102795(JP,A)
【文献】特開2014-191651(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
第1データセットに含まれるデータ要素のうち第1分類条件に合致するデータ要素を含む第1データサブセットに対応付けられた第1ブルームフィルタと、前記第1データセットに含まれるデータ要素のうち第2分類条件に合致するデータ要素を含む第2データサブセットに対応付けられた第2ブルームフィルタと、を含む第1ビット列を記憶する記憶部と、
検索対象の第1データ要素が入力されたとき、前記第1データ要素が前記第1分類条件に合致する場合、前記第1ブルームフィルタを用いて前記第1データ要素と同一のデータ要素が前記第1データサブセットに存在するかを判定し、前記第1データ要素が前記第2分類条件に合致する場合、前記第2ブルームフィルタを用いて前記第1データ要素と同一のデータ要素が前記第2データサブセットに存在するかを判定し、
前記第1データサブセットに含まれるすべてのデータ要素が削除されたとき、前記第1ビット列から前記第1ブルームフィルタを削除する、処理部と、
を有するデータ処理装置。
【請求項2】
前記処理部は、前記第1データ要素が入力され、前記第1データ要素が前記第1分類条件に合致したとき、前記第1ブルームフィルタが削除済みの場合には、前記第1データセットに前記第1データ要素が存在しないと判定する、
請求項1記載のデータ処理装置。
【請求項3】
前記記憶部は、前記第1ビット列を複数記憶するとともに、第3ブルームフィルタと第4ブルームフィルタとを含む第2ビット列をさらに記憶し、
複数の前記第1ビット列には、それぞれ個別の前記第1データセットが対応付けられ、
複数の前記第1ビット列にそれぞれ含まれる前記第1ブルームフィルタは、対応する前記第1データセットに含まれる前記第1データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
複数の前記第1ビット列にそれぞれ含まれる前記第2ブルームフィルタは、対応する前記第1データセットに含まれる前記第2データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
前記第3ブルームフィルタは、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットに含まれる前記第1データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
前記第4ブルームフィルタは、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットに含まれる前記第2データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
前記処理部は、
複数の前記第1ビット列のうち一のビット列に対応付けられた前記第1データセットに含まれる前記第1データサブセットにおいて、すべてのデータ要素が削除されたとき、前記一のビット列から前記第1ブルームフィルタを削除するととともに、前記複数の前記第1ビット列のうち前記一のビット列以外の他のビット列のすべてにおいて、前記第1ブルームフィルタが削除済みかを判定し、
前記他のビット列のすべてにおいて前記第1ブルームフィルタが削除済みの場合、前記第2ビット列から前記第3ブルームフィルタを削除する、
請求項1または2記載のデータ処理装置。
【請求項4】
前記処理部は、
前記第1データ要素が入力されたとき、前記第1データ要素が前記第1分類条件に合致する場合、前記第3ブルームフィルタを用いて、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットに含まれる前記第1データサブセットに、前記第1データ要素と同一のデータ要素が存在するかを判定し、
存在すると判定された場合、複数の前記第1ビット列にそれぞれ含まれる前記第1ブルームフィルタを用いて、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットのうち、どの前記第1データセットに含まれる前記第1データサブセットに、前記第1データ要素と同一のデータ要素が存在するかを判定する、
請求項3記載のデータ処理装置。
【請求項5】
前記第1分類条件および前記第2分類条件は、データ要素の値または属性に基づく条件である、
請求項1乃至4のいずれか1項に記載のデータ処理装置。
【請求項6】
前記第1分類条件は、データ要素における特定の位置のビット値が第1の値であることを示し、
前記第2分類条件は、前記ビット値が第2の値であることを示す、
請求項1乃至4のいずれか1項に記載のデータ処理装置。
【請求項7】
コンピュータに、
検索対象の第1データ要素が入力されたとき、第1データセットに含まれるデータ要素のうち第1分類条件に合致するデータ要素を含む第1データサブセットに対応付けられた第1ブルームフィルタと、前記第1データセットに含まれるデータ要素のうち第2分類条件に合致するデータ要素を含む第2データサブセットに対応付けられた第2ブルームフィルタと、を含む第1ビット列を記憶する記憶部を参照して判定処理を実行し、前記判定処理は、前記第1データ要素が前記第1分類条件に合致する場合、前記第1ブルームフィルタを用いて前記第1データ要素と同一のデータ要素が前記第1データサブセットに存在するかを判定し、前記第1データ要素が前記第2分類条件に合致する場合、前記第2ブルームフィルタを用いて前記第1データ要素と同一のデータ要素が前記第2データサブセットに存在するかを判定する処理を含み、
前記第1データサブセットに含まれるすべてのデータ要素が削除されたとき、前記第1ビット列から前記第1ブルームフィルタを削除する、
処理を実行させるデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理装置およびデータ処理プログラムに関する。
【背景技術】
【0002】
ブルームフィルタは、複数のデータ要素を含むデータ集合の中に検索対象のデータが含まれるかを判定するために用いられるデータ構造である。また、ブルームフィルタの応用例として、複数階層のブルームフィルタを有する階層型ブルームフィルタも提案されている。
【0003】
このようなブルームフィルタの一般的な特徴として、管理対象のデータ集合から一部のデータ要素が削除されても、ブルームフィルタのビット数を削減することができない、という特徴がある。これに対し、次のようなデータ処理装置が提案されている。
【0004】
このデータ処理装置は、データ要素を削除する際に、ブルームフィルタの上位側から、削除されるデータ要素数に応じたビット数のビット列を削除する。また、データ処理装置は、検索対象のデータ要素が入力されると、ビット列が削除されたブルームフィルタの上位側に、削除されたビット列と同じビット数を有し、かつ、すべてのビット値が「1」であるビット列を一時的に付加する。そして、データ処理装置は、ビット列が付加されたブルームフィルタを用いて、検索対象のデータ要素がデータ集合に含まれるかを判定する。これにより、偽陰性を発生させることなく、ビット列が削除されたブルームフィルタを用いてデータ要素の存否判定を行うことができる。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2011-186954号公報
【文献】特開2019-95986号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、上記のデータ処理装置では、ビット列が削除されたブルームフィルタを用いてデータ要素の存否判定を行うと、ビット列の削除前より偽陽率が高くなってしまうという問題がある。
【0007】
1つの側面では、本発明は、データ要素数の減少に応じたブルームフィルタのビット削減に伴う偽陽率の増加を抑止したデータ処理装置およびデータ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
1つの案では、記憶部と処理部とを有する次のようなデータ処理装置が提供される。このデータ処理装置において、記憶部は、第1データセットに含まれるデータ要素のうち第1分類条件に合致するデータ要素を含む第1データサブセットに対応付けられた第1ブルームフィルタと、第1データセットに含まれるデータ要素のうち第2分類条件に合致するデータ要素を含む第2データサブセットに対応付けられた第2ブルームフィルタと、を含む第1ビット列を記憶する。処理部は、検索対象の第1データ要素が入力されたとき、第1データ要素が第1分類条件に合致する場合、第1ブルームフィルタを用いて第1データ要素と同一のデータ要素が第1データサブセットに存在するかを判定し、第1データ要素が第2分類条件に合致する場合、第2ブルームフィルタを用いて第1データ要素と同一のデータ要素が第2データサブセットに存在するかを判定する。また、処理部は、第1データサブセットに含まれるすべてのデータ要素が削除されたとき、第1ビット列から第1ブルームフィルタを削除する。
【0009】
また、1つの案では、上記のデータ処理装置と同様の処理をコンピュータに実行させるデータ処理プログラムが提供される。
【発明の効果】
【0010】
1つの側面では、データ要素数の減少に応じたブルームフィルタのビット削減に伴う偽陽率の増加を抑止できる。
【図面の簡単な説明】
【0011】
図1】第1の実施の形態に係るデータ処理装置の構成例および処理例を示す図である。
図2】第2の実施の形態に係る情報処理システムの構成例を示す図である。
図3】クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。
図4】クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。
図5】管理テーブルの構成例を示す図である。
図6】階層型ブルームフィルタの構成例を示す図である。
図7】ブルームフィルタを用いた処理例を示す図である。
図8】階層型ブルームフィルタにおけるビット数削減処理の比較例を示す図である。
図9】ビット数が削減されたブルームフィルタを用いた検索処理の比較例を示す図である。
図10】階層型ブルームフィルタの内部構成例を示す図である。
図11】フィルタ管理テーブルの構成例を示す図である。
図12】検索テーブルの構成例を示す図である。
図13】検索テーブルにハッシュキーが追加される場合の処理例を示す図である。
図14】ハッシュキーの存否判定の処理例を示す図である。
図15】チャンク削除時の第1の処理例を示す図である。
図16】チャンク削除時の第2の処理例を示す図である。
図17】ファイル書き込み処理の手順を示すフローチャートの例(その1)である。
図18】ファイル書き込み処理の手順を示すフローチャートの例(その2)である。
図19】重複判定処理の手順を示すフローチャートの例である。
図20】ブルームフィルタの更新処理の手順を示すフローチャートの例である。
図21】ファイル削除処理の手順を示すフローチャートの例である。
図22】デフラグ処理の手順を示すフローチャートの例(その1)である。
図23】デフラグ処理の手順を示すフローチャートの例(その2)である。
図24】第1の変形例におけるフィルタ管理テーブルの構成例を示す図である。
図25】第2の変形例における階層型ブルームフィルタの内部構成例を示す図である。
【発明を実施するための形態】
【0012】
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るデータ処理装置の構成例および処理例を示す図である。図1に示すデータ処理装置10は、記憶部11と処理部12とを有する。
【0013】
記憶部11は、例えば、データ処理装置10が備える図示しない記憶装置の記憶領域として実現される。記憶部11には、複数のデータ要素を含むデータセット20と、データセット20におけるデータ要素の存否判定に用いられるビット列30とが記憶される。なお、データセット20は、必ずしもデータ処理装置10の内部に記憶されている必要はない。例えば、データセット20に含まれる一部のデータ要素が、データ処理装置10の内部にキャッシュされていてもよい。
【0014】
処理部12は、例えば、データ処理装置10が備える図示しないプロセッサとして実現される。処理部12は、検索対象のデータ要素が入力されたとき、入力されたデータ要素と同じデータ要素がデータセット20に存在するかを、ビット列30を用いて判定する。
【0015】
以下、図1を用いて、データセット20およびビット列30についてさらに説明する。データセット20に含まれるデータ要素は、N種類の互いに異なる分類条件にしたがって、N個のデータサブセット21-1,21-2,・・・,21-Nに分類されている(Nは2以上の整数)。例えば、データサブセット21-1(第1データサブセット)は、データセット20に含まれるデータ要素のうち、第1の分類条件に合致するデータ要素を含む。また、データサブセット21-2(第2データサブセット)は、データセット20に含まれるデータ要素のうち、第2の分類条件に合致するデータ要素を含む。
【0016】
分類条件としては、例えば、データ要素のビット列における所定範囲のビット値が用いられる。例えば、データ要素の上位2ビットの値が用いられる場合、上位2ビットの値が「00」、「01」、「11」のいずれかという3つの分類条件が適用される。この場合、例えば上位2ビットの値が「00」のデータ要素はある1つのデータサブセットに分類され、上位2ビットの値が「01」のデータ要素は他のデータサブセットに分類され、上位2ビットの値が「11」のデータ要素はさらに他のデータサブセットに分類される。
【0017】
一方、ビット列30は、N個の同じサイズの部分ビット列に分割されており、各部分ビット列はそれぞれ個別のブルームフィルタとして使用される。すなわち、ビット列30は、ブルームフィルタ31-1,31-2,・・・,31-Nを含んでいる。ブルームフィルタ31-1,31-2,・・・,31-Nは、それぞれデータサブセット21-1,21-2,・・・,21-Nに対応付けられている。
【0018】
そして、ブルームフィルタ31-1,31-2,・・・,31-Nは、それぞれ対応するデータサブセット21-1,21-2,・・・,21-Nにおけるデータ要素の存否判定に使用される。したがって、ブルームフィルタ31-1,31-2,・・・,31-Nには、それぞれ対応するデータサブセット21-1,21-2,・・・,21-Nに含まれるデータ要素を用いた所定の計算により、ビット値が設定される。例えば、ブルームフィルタ31-1の各ビットのビット値は、データサブセット21-1に含まれる各データ要素を用いた所定の計算によって設定される。また、ブルームフィルタ31-2の各ビットのビット値は、データサブセット21-2に含まれる各データ要素を用いた所定の計算によって設定される。
【0019】
検索対象のデータ要素(「入力データ要素」とする)が入力されたとき、処理部12は、次のようにしてデータセット20に入力データ要素と同じデータ要素が存在するかを判定する。処理部12は、入力データ要素がどの分類条件に合致するかを判定する。そして、処理部12は、入力データ要素がある分類条件に合致する場合、その分類条件に対応するブルームフィルタを用いて、そのブルームフィルタに対応するデータサブセットに入力データ要素と同じデータ要素が存在するかを判定する。
【0020】
例えば、入力データ要素がデータサブセット21-1に対応する第1分類条件に合致する場合、処理部12は、ブルームフィルタ31-1を用いて、データサブセット21-1に入力データ要素と同じデータ要素が存在するかを判定する。また、入力データ要素がデータサブセット21-1に対応する第2分類条件に合致する場合、処理部12は、ブルームフィルタ31-2を用いて、データサブセット21-2に入力データ要素と同じデータ要素が存在するかを判定する。
【0021】
次に、データセット20に含まれるデータ要素が削除される場合について説明する。処理部12は、あるデータサブセットに含まれるデータ要素がすべて削除された場合、そのデータサブセットに対応するブルームフィルタをビット列30から削除する。これは、データセット20から、ある分類条件に合致するデータ要素がすべて削除された場合、その分類条件に対応するブルームフィルタをビット列30から削除できることを意味する。
【0022】
例えば図1に示すように、データセット20から上記の第1分類条件に合致するデータ要素がすべて削除された場合、すなわち、データサブセット21-1に含まれるデータ要素がすべて削除された場合には、処理部12は、ビット列30からブルームフィルタ31-1を削除する。
【0023】
このような削除処理により、データセット20における入力データ要素の存否判定における偽陽率を増加させずに、ブルームフィルタとして用いられるビット列30のビット数を削減できる。例えば、ブルームフィルタ31-1が上記手順で削除されても、ブルームフィルタ31-2,・・・,31-Nを用いてそれぞれデータサブセット21-2,・・・,21-Nについての存否判定が行われた場合、偽陽性の発生確率に変化はない。また、ブルームフィルタ31-1が上記手順で削除された状態で、第1分類条件に合致する入力データ要素が入力された場合、処理部12は、第1分類条件に対応するブルームフィルタ31-1が存在しないことから、入力データ要素と同じデータ要素がデータセット20に存在しないと正しく判定できる。この場合、ブルームフィルタ31-1の削除前と比較して偽陰率も偽陽率も変化しない。
【0024】
したがって、第1の実施の形態に係るデータ処理装置10によれば、データ要素数の減少に応じたブルームフィルタのビット削減に伴う偽陽率の増加を抑止できる。
データ要素数の削減に伴ってビット列30のビット数を削減する方法としては、次のような方法も考えられる。例えば、ビット列30の全体を1つのブルームフィルタとして用いて、このブルームフィルタによってデータセット20全体についての存否判定を行う。データセット20に含まれる一部のデータ要素が削除されたとき、その削除数に応じてビット列30のビット数を削減し、ビット数削減後のビット列30の全ビット値をリセットする。そして、データセット20に残っているすべてのデータ要素を用いて、ビット削減後のビット列30に対するビット値の設定をあらためて行う。
【0025】
この方法でも、偽陽率を増加させずにビット列30のビット数を削減できる。ただし、ビット削減後のビット列30に対してビット値を再設定するために計算が必要になり、ビット数削減時の処理負荷が高くなる。第1の実施の形態に係るデータ処理装置10によれば、ビット列30のビット数削減時にこのような計算が必要にならず、ビット数削減時の処理負荷を抑制できる。
【0026】
ところで、上記のビット列30を階層型ブルームフィルタの各ノードに適用することで、データ要素の削除に伴うビット列30のビット数削減を、偽陽性の増加を抑止しながら複数階層にわたって実施できるようになる。そこで、以下の第2の実施の形態では、このような階層型ブルームフィルタを備える情報処理システムの一例について説明する。
【0027】
〔第2の実施の形態〕
図2は、第2の実施の形態に係る情報処理システムの構成例を示す図である。図2に示す情報処理システムは、クラウドストレージゲートウェイ100、NAS(Network Attached Storage)クライアント210およびストレージシステム220を有する。クラウドストレージゲートウェイ100は、ネットワーク231を介してNASクライアント210と接続され、また、ネットワーク232を介してストレージシステム220と接続されている。ネットワーク231は、例えばLAN(Local Area Network)であり、ネットワーク232は、例えばWAN(Wide Area Network)である。
【0028】
ストレージシステム220は、ネットワーク232を介してクラウドストレージサービスを提供する。以下の説明では、ストレージシステム220が提供するクラウドストレージサービスによってサービス利用者(ここではクラウドストレージゲートウェイ100)が利用可能な記憶領域を、「クラウドストレージ」と記載する場合がある。
【0029】
また、本実施の形態では例として、ストレージシステム220は、データがオブジェクト単位で管理されるオブジェクトストレージによって実現される。例えば、ストレージシステム220は、制御サーバ221aとストレージ装置221bとをそれぞれ含むストレージノード221を複数有する、分散型のストレージシステムとして実現される。この場合、各ストレージノード221において、制御サーバ221aはストレージ装置221bに対するアクセスを制御し、ストレージ装置221bの記憶領域によってクラウドストレージの一部が実現される。また、サービス利用者(クラウドストレージゲートウェイ100)からのオブジェクトの格納先とされるストレージノード221は、オブジェクト固有の情報に基づいて決定される。
【0030】
一方、NASクライアント210は、クラウドストレージゲートウェイ100を、ファイルシステムによって管理される記憶領域を提供するNASサーバとして認識する。この記憶領域とは、ストレージシステム220によって提供されるクラウドストレージによる記憶領域である。そして、NASクライアント210は、例えばNFS(Network File System)プロトコルやCIFS(Common Internet File System)プロトコルにしたがって、クラウドストレージゲートウェイ100に対してファイル単位でデータの読み書きを要求する。すなわち、NASクライアント210は、クラウドストレージゲートウェイ100のNASサーバ機能により、クラウドストレージを大容量の仮想的なネットワークファイルシステムとして利用できるようになる。
【0031】
NASクライアント210は、例えば、データバックアップのためのバックアップソフトウェアを実行する。この場合NASクライアント210は、NASクライアント210に記憶されたファイル、またはNASクライアント210に接続されたサーバ(例えば業務サーバ)に記憶されたファイルを、NASサーバから提供される記憶領域にバックアップする。
【0032】
クラウドストレージゲートウェイ100は、図1に示したデータ処理装置10の一例である。クラウドストレージゲートウェイ100は、NASクライアント210とクラウドストレージとの間で転送されるデータを中継する。
【0033】
例えば、クラウドストレージゲートウェイ100は、NASサーバ機能により、NASクライアント210からファイルの書き込み要求を受信し、書き込みが要求されたファイルを内部にキャッシュする。クラウドストレージゲートウェイ100は、書き込みが要求されたファイルをチャンク単位に分割し、チャンク内の実データ(チャンクデータ)をクラウドストレージに格納する。このとき、所定個数のチャンクデータがグループ化されてオブジェクトが生成され、生成されたオブジェクトがクラウドストレージに転送される。
【0034】
また、クラウドストレージゲートウェイ100は、NASクライアント210からのファイルをキャッシュする時点で、ファイルをチャンク単位に分割し、同一内容のチャンクデータが重複して保存されないようにする「重複排除」を行う。さらに、チャンクデータは圧縮された状態で格納されてもよい。例えば、クラウドストレージサービスでは、格納されるデータ量に応じて課金が行われる場合がある。重複排除やデータ圧縮を行うことで、クラウドストレージに格納されるデータ量を削減し、サービス利用コストを抑制することができる。
【0035】
図3は、クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。クラウドストレージゲートウェイ100は、例えば、図3に示すようなコンピュータとして実現される。
【0036】
クラウドストレージゲートウェイ100は、プロセッサ101、RAM(Random Access Memory)102、HDD(Hard Disk Drive)103、グラフィックインタフェース(I/F)104、入力インタフェース(I/F)105、読み取り装置106および通信インタフェース(I/F)107を備える。
【0037】
プロセッサ101は、クラウドストレージゲートウェイ100全体を統括的に制御する。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、またはPLD(Programmable Logic Device)である。また、プロセッサ101は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
【0038】
RAM102は、クラウドストレージゲートウェイ100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ101による処理に必要な各種データが格納される。
【0039】
HDD103は、クラウドストレージゲートウェイ100の補助記憶装置として使用される。HDD103には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置を使用することもできる。
【0040】
グラフィックインタフェース104には、表示装置104aが接続されている。グラフィックインタフェース104は、プロセッサ101からの命令にしたがって、画像を表示装置104aに表示させる。表示装置としては、液晶ディスプレイや有機EL(Electroluminescence)ディスプレイなどがある。
【0041】
入力インタフェース105には、入力装置105aが接続されている。入力インタフェース105は、入力装置105aから出力される信号をプロセッサ101に送信する。入力装置105aとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【0042】
読み取り装置106には、可搬型記録媒体106aが脱着される。読み取り装置106は、可搬型記録媒体106aに記録されたデータを読み取ってプロセッサ101に送信する。可搬型記録媒体106aとしては、光ディスク、半導体メモリなどがある。
【0043】
通信インタフェース107は、ネットワーク107aを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、クラウドストレージゲートウェイ100の処理機能を実現することができる。なお、NASクライアント210や制御サーバ221aも、図3と同様のハードウェア構成を有するコンピュータとして実現可能である。
【0044】
図4は、クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。クラウドストレージゲートウェイ100は、記憶部110、ファイル入出力部120、重複排除処理部130およびクラウド通信部140を備える。
【0045】
なお、記憶部110は、例えば、RAM102やHDD103など、クラウドストレージゲートウェイ100が備える記憶装置の記憶領域として実現される。また、ファイル入出力部120、重複排除処理部130およびクラウド通信部140の処理は、例えば、プロセッサ101が所定のプログラムを実行することで実現される。
【0046】
記憶部110には、ディレクトリテーブル111、チャンクマップテーブル112、チャンク管理テーブル113、ハッシュキー管理データ114、オブジェクト管理テーブル115およびブルームフィルタデータ116が記憶される。また、記憶部110の記憶領域の一部は、データキャッシュ117として利用される。
【0047】
ディレクトリテーブル111は、ファイルシステムにおけるディレクトリ構造を表現するための管理情報である。ディレクトリテーブル111には、ディレクトリ構造上のディレクトリ(フォルダ)、またはディレクトリ内のファイルに対応するレコードが登録される。各レコードには、ディレクトリまたはファイルを識別するためのinode番号が登録されている。また、例えば、各レコードに親ディレクトリのinode番号が登録されることで、ディレクトリ間、およびディレクトリとファイルとの関係が表現される。
【0048】
チャンクマップテーブル112は、ファイルと重複排除されたチャンクとの対応関係を管理するための管理情報である。チャンク管理テーブル113は、チャンクとオブジェクトとの対応関係や、チャンクの参照数を管理するための管理情報である。
【0049】
ハッシュキー管理データ114は、チャンクに対応するハッシュキーを管理するための管理情報である。ハッシュキー管理データ114では、後述するように、階層型ブルームフィルタにおける最下層ノードごとにハッシュキーが分類されて管理される。
【0050】
オブジェクト管理テーブル115は、オブジェクトごとに、オブジェクトに含まれるチャンクのうち有効なチャンクを示す有効チャンク数と無効なチャンクを示す無効チャンク数とを管理するための管理情報である。オブジェクト管理テーブル115は、クラウドストレージ240に格納されたオブジェクトについてのデフラグの実行要否を判定するために利用される。
【0051】
ブルームフィルタデータ116は、階層型ブルームフィルタに関するデータを管理するための管理情報である。ブルームフィルタデータ116は、階層型ブルームフィルタの構成を示す管理情報や、ブルームフィルタの実体であるビット列を含む。この階層型ブルームフィルタは、チャンクの重複判定のために利用される。
【0052】
データキャッシュ117は、重複排除されたチャンクをキャッシュするための記憶領域である。NASクライアント210から書き込みが要求されたファイルに対応するチャンクのデータは、重複排除された上で一旦データキャッシュ117に格納された後、オブジェクトに組み込まれてクラウドストレージ240に格納される。また、チャンクの格納によりデータキャッシュ117の容量が少なくなると、クラウドストレージ240に格納済みで、かつ、NASクライアント210からのアクセス頻度が低いチャンクは、データキャッシュ117から削除される。
【0053】
ファイル入出力部120は、NASサーバとしてのインタフェース処理を実行する。例えば、ファイル入出力部120は、NASクライアント210からのファイルの読み書き要求を受け付け、要求された内容に応じた処理を重複排除処理部130に依頼して、NASクライアント210に応答する。
【0054】
クラウド通信部140は、重複排除処理部130からの要求に応じてクラウドストレージ240との間の通信処理を実行する。例えば、重複排除処理部130は、オブジェクトストレージであるクラウドストレージ240との間でオブジェクトの送受信を行う。重複排除処理部130は、PUTコマンドによりオブジェクトをクラウドストレージ240にアップロードする。また、重複排除処理部130は、GETコマンドによりオブジェクトをクラウドストレージ240から取得する。また、重複排除処理部130は、DELETEコマンドによりクラウドストレージ240上のオブジェクトを削除する。
【0055】
重複排除処理部130は、ファイルの実データを重複を排除した状態で格納するための処理を実行する。重複排除処理部130は、重複判定部131、チャンク管理部132およびデフラグ処理部133を備える。
【0056】
重複判定部131は、書き込みが要求されたファイルの実データをチャンク単位に分割し、分割された実データを重複を排除しながらデータキャッシュ117に格納する。重複判定部131は、ブルームフィルタ処理部131aと二分木探索処理部131bを備える。
【0057】
ブルームフィルタ処理部131aおよび二分木探索処理部131bは、チャンク管理テーブル113に登録済みのチャンク(格納済みチャンク)の中から、ファイルから分割されたチャンクと同一のチャンクを検索する処理を実行する。ブルームフィルタ処理部131aは、ファイルから分割されたチャンクと同一のチャンクが含まれているチャンク群を、階層型ブルームフィルタを用いて絞り込む。二分木探索処理部131bは、絞り込まれたチャンク群の中から、ファイルから分割されたチャンクと同一のチャンクを、二分木探索により検索する。
【0058】
チャンク管理部132は、重複判定部131によってデータキャッシュ117に格納されたチャンクを、適切なサイズになるように複数まとめてオブジェクトを生成し、クラウド通信部140を介してクラウドストレージ240に格納する。本実施の形態では例として、所定個数のチャンクによってオブジェクトが生成される。
【0059】
デフラグ処理部133は、ファイルの更新や削除の要求に伴って参照されなくなったチャンク(無効チャンク)を監視し、その監視結果に基づいてデフラグを実行する。デフラグとは、発生した無効チャンクをクラウドストレージ240から削除して、クラウドストレージ240の使用容量を削減するための処理である。デフラグでは、例えば、無効チャンクを含むオブジェクトがクラウドストレージ240から取得され、無効チャンクデータを削除した残りのチャンクによってオブジェクトが再構築されて、再構築されたオブジェクトがクラウドストレージ240に格納される。
【0060】
図5は、管理テーブルの構成例を示す図である。図5では、記憶部110に記憶される管理テーブルのうち、チャンクマップテーブル112、チャンク管理テーブル113およびオブジェクト管理テーブル115について示す。
【0061】
チャンクマップテーブル112は、ファイルと格納済みチャンクとの対応関係を管理するための管理情報である。図5に示すように、チャンクマップテーブル112には、ファイル番号、オフセット、サイズおよびチャンク番号の各項目を有するレコードが登録される。各レコードは、ファイルの実データを分割して生成された1つのチャンクに対応付けられている。
【0062】
ファイル番号は、ファイルの識別番号を示す。オフセットは、ファイルの先頭からチャンクの先頭までのオフセット量を示す。サイズは、チャンクのサイズを示す。オフセットおよびサイズの値によって、ファイルにおけるチャンクの領域が特定される。
【0063】
チャンク番号は、ファイル上のチャンクに対応する格納済みチャンクの識別番号を示す。あるファイル上の第1のチャンクと、それと同じファイルまたは他のファイル上の第2のチャンクとの間でデータの内容が同じ場合、第1のチャンクに対応するレコードと第2のチャンクに対応するレコードには同じチャンク番号が登録される。例えば図5では、ファイル番号「f1」およびオフセット「o1」で識別されるチャンクのレコードと、ファイル番号「f2」およびオフセット「o14」で識別されるチャンクのレコードとには、同じチャンク番号「ck1」が登録されている。これは、前者のチャンクと後者のチャンクとの間ではデータの内容が同じであり、このデータがチャンク番号「ck1」のチャンクとしてデータキャッシュ117やクラウドストレージ240に格納されていることを示す。
【0064】
なお、チャンク番号は、重複していないユニークなチャンクが出現し、データキャッシュ117に格納された順に付与される。したがって、チャンク番号は、重複排除されたチャンクの出現順や格納順を示す。
【0065】
チャンク管理テーブル113は、格納済みチャンクとオブジェクトとの対応関係や、格納済みチャンクの参照数を管理するための管理情報である。図5に示すように、チャンク管理テーブル113には、チャンク番号、オブジェクト番号、オフセット、サイズおよび参照数の各項目を有するレコードが登録される。各レコードは、1つの格納済みチャンクに対応付けられている。
【0066】
オブジェクト番号は、チャンクが属するオブジェクトの識別番号を示す。オフセットは、オブジェクトの先頭からチャンクの先頭までのオフセット量を示す。サイズは、チャンクのサイズを示す。オフセットおよびサイズの値によって、オブジェクトにおけるチャンクの領域が特定される。参照数は、チャンク番号が示す格納済みチャンクが、ファイルを分割して生成されたチャンクのうちのいくつから参照されているかを示す。すなわち、参照数は、チャンク番号が示す格納済みチャンクがファイル上のいくつのチャンクの間で重複しているかを示す。例えば、あるチャンク番号に対応する参照数が「2」の場合、同じチャンク番号の値が登録された2つのレコードがチャンクマップテーブル112に存在することになる。
【0067】
ここで、図5のチャンクマップテーブル112の例では、ファイル番号「f1」のファイルは2つのチャンクに分割されており、ファイル番号「f2」のファイルは4つのチャンクに分割されている。また、図5のチャンク管理テーブル113の例では、前者のファイルに含まれる2つのチャンクのデータと、後者のファイルに含まれるチャンクのうち先頭から2つのチャンクのデータとが、オブジェクト番号「ob1」のオブジェクトに属するチャンクとしてクラウドストレージ240に格納されている。
【0068】
本実施の形態では、所定数のチャンクによって1つのオブジェクトが形成される。ファイルの書き込みに伴って新たなチャンク(格納済みチャンク)が出現すると、そのチャンクにはオブジェクト番号が割り当てられる。あるオブジェクトに含まれるチャンクが所定個数に達しない状態では、そのオブジェクトは「アクティブ」な状態として管理される。アクティブなオブジェクトには、新たに出現するチャンクが順次割り当てられていく。そして、オブジェクトに含まれるチャンクが所定個数に達すると、そのオブジェクトは「非アクティブ」とされて、クラウドストレージ240に格納可能な状態となる。オブジェクトには、生成順にオブジェクト番号が付与される。また、1つのオブジェクトには、連続するチャンク番号を有するチャンクが割り当てられる。
【0069】
オブジェクトについての他の生成方法として、例えば、オブジェクトに割り当てられたチャンクの合計サイズが所定サイズを超えた場合に、そのオブジェクトが非アクティブ化されてもよい。
【0070】
次に、図5に示すように、オブジェクト管理テーブル115には、オブジェクト番号に対して有効チャンク数および無効チャンク数が対応付けて登録される。有効チャンク数は、オブジェクトに含まれるチャンクのうち、有効なチャンク(参照数が1以上のチャンク)の数を示す。無効チャンク数は、オブジェクトに含まれるチャンクのうち、無効なチャンク(参照数が0のチャンク)の数を示す。このオブジェクト管理テーブル115は、デフラグの実行要否を判定するために利用される。
【0071】
次に、ブルームフィルタ処理部131aの処理で利用される階層型ブルームフィルタについて説明する。
図6は、階層型ブルームフィルタの構成例を示す図である。図6に示す階層型ブルームフィルタ118は、ブルームフィルタとして動作するビット列が各ノードに割り当てられた木構造により実現される。これにより、複数階層のブルームフィルタを備える階層型のブルームフィルタが形成されている。ただし、詳しくは後述するが、各ノードのビット列は同じ数で分割されており、分割された各ビット列が個別のブルームフィルタとして動作する。
【0072】
本実施の形態では、最上位の第1階層のノードには、nビットのビット列BA1が配置される。ビット数「n」は、検索対象の最大要素数(すなわち、記憶部110のチャンク管理テーブル113に登録されるチャンクの最大数)に応じて決定される。
【0073】
また、1つ下の階層には、上位階層の(1/d)のビット数をそれぞれ有するビット列が、上位階層のd倍の数だけ配置される。換言すると、あるノードに対する1つ下の階層にはd個のノードが接続され、下位階層の各ノードのビット列は、上位階層の(1/d)のビット数を有する。したがって、各階層に含まれるビット列(ブルームフィルタ)の合計ビット数はいずれもnビットであり、階層型ブルームフィルタ118は、階層数のn倍のビット数に対応する記憶領域を占有する。
【0074】
本実施の形態では例として、階層型ブルームフィルタ118の階層数は「3」であるものとする。この場合、図6に示すように、第2階層には、d個のビット列BA2-1,BA2-2,・・・,BA2-dが配置される。ビット列BA2-1,BA2-2,・・・,BA2-dのビット数は、いずれも(n/d)ビットである。
【0075】
また、第3階層には、第2階層の各ビット列の下層にそれぞれd個のビット列が配置される。例えば、ビット列BA2-1の下層には、d個のビット列BA3-1-1,BA3-1-2,・・・,BA3-1-dが形成される。ビット列BA2-2の下層には、d個のビット列BA3-2-1,BA3-2-2,・・・,BA3-2-dが形成される。ビット列BA2-dの下層には、d個のビット列BA3-d-1,BA3-d-2,・・・,BA3-d-dが形成される。したがって、第3階層には、合計でd2個のビット列が配置される。これらのビット列のビット数は、いずれも(n/d2)ビットである。
【0076】
第3階層の各ノードのビット列には、検索対象となるチャンク群がそれぞれ割り当てられる。ただし、実際の検索は、チャンクのデータに基づいて算出されるハッシュ値であるハッシュキーを用いて行われる。そして、本実施の形態では、第3階層の各ノードのビット列についての検索対象は、各チャンクに基づくハッシュキーが登録された検索テーブルとして与えられる。
【0077】
例えば、ビット列BA3-1-1,BA3-1-2,・・・,BA3-1-dには、それぞれ検索テーブルTB1-1,TB1-2,・・・,TB1-dが、検索対象として割り当てられる。ビット列BA3-2-1,BA3-2-2,・・・,BA3-2-dには、それぞれ検索テーブルTB2-1,TB2-2,・・・,TB2-dが、検索対象として割り当てられる。ビット列BA3-d-1,BA3-d-2,・・・,BA3-d-dには、それぞれ検索テーブルTBd-1,TBd-2,・・・,TBd-dが、検索対象として割り当てられる。これらの検索テーブルは、例えば、最大で20個のオブジェクトに属するチャンクデータを含む。
【0078】
また、第2階層の各ノードのビット列についての検索対象は、そのビット列の下層に配置された各ビット列の検索対象となっているすべての検索テーブルとなる。例えば、ビット列BA2-1の検索対象は、検索テーブルTB1-1,TB1-2,・・・,TB1-dとなる。また、同様に、第1階層のビット列BA1の検索対象は、ビット列BA1の下層に配置されたビット列BA2-1,BA2-2,・・・,BA2-dの検索対象となっているすべての検索テーブルとなる。したがって、第1階層のビット列BA1の検索対象は、チャンク管理テーブル113に登録されたすべてのチャンクとなる。
【0079】
検索テーブルには、非アクティブのオブジェクトが出現するたびに、そのオブジェクトに属するチャンクに対応するハッシュキーが追加されていく。例えば、非アクティブのオブジェクトが最初に出現すると、そのオブジェクトに属するチャンクに基づくハッシュキーが、1つ目の検索テーブルTB1-1に追加される。その後、非アクティブのオブジェクトの出現に伴って、20個のオブジェクトに対応するハッシュキーが検索テーブルTB1-1に追加されていく。そして、21個目の非アクティブのオブジェクトが出現すると、そのオブジェクトに属するチャンクに対応するハッシュキーは、次の検索テーブルTB1-2に追加される。このようにして、各検索テーブルには、最大20個のオブジェクトに対応するハッシュキーが含められる。
【0080】
ここで、図6に示した階層型ブルームフィルタ118における各ノードのビット列が、それぞれ単独のブルームフィルタとして用いられる場合の処理例を、比較例として図7図9を用いて説明する。この場合、階層型ブルームフィルタ118は、単にブルームフィルタが多層化された一般的な構成の階層型ブルームフィルタとなる。
【0081】
まず、図7は、ブルームフィルタを用いた処理例を示す図である。図7に示すブルームフィルタBFは、いずれかのノードのブルームフィルタを示す。なお、階層型ブルームフィルタに含まれるすべてのブルームフィルタの各ビットの値は、検索対象のデータ群に対してデータが挿入される前の初期状態では、すべて「0」に設定される。
【0082】
まず、ブルームフィルタBFに検索対象として割り当てられたデータ群DG(ハッシュキーの集合)に対して、ハッシュキーHK1を追加する場合について説明する。この場合、ハッシュキーHK1に対してk種類のハッシュ関数をそれぞれ用いた計算を行うことでk個のハッシュ値が算出される。そして、算出されたk個のハッシュ値に基づいて、ビット値を「1」にするk個のビットの位置が特定される。
【0083】
図7では例として、k=3とする。そして、ハッシュキーHK1からそれぞれ3種類のハッシュ関数を用いて算出された値を、ブルームフィルタBFのビット数で除算した値の余り値が、ビット値を「1」にするビット番号として特定される。図7の例では、ビットB1,B2,B3が特定されたものとすると、ビットB1,B2,B3の各値が「1」に設定される。
【0084】
次に、あるファイルから分割されたチャンクに基づくハッシュキーHK2が、データ群DGに含まれているかを判定する場合について説明する。この場合、上記と同様の手順で、ハッシュキーHK2からk種類のハッシュ関数を用いてそれぞれ算出されたハッシュ値に基づいて、ビット値が「1」となるビット位置が特定される。図7の例では、ビットB2,B3,B4が特定されたものとすると、ブルームフィルタBFからビットB2,B3,B4の各値が取得される。
【0085】
ここで、ビットB2,B3,B4のすべての値が「1」の場合、データ群DGにハッシュキーHK2が含まれている可能性がある、と判定される。ただし、データ群DGにハッシュキーHK2が確実に含まれることが保証される訳ではない(偽陽性)。一方、ビットB2,B3,B4の少なくとも1つの値が「0」の場合、データ群DGにはハッシュキーHK2が含まれていない、と判定される。
【0086】
以上がブルームフィルタを用いた基本的な処理である。次に、図6に示した階層型ブルームフィルタ118における各ノードのビット列が、それぞれ単独のブルームフィルタとして用いられる場合の処理例について説明する。
【0087】
階層型ブルームフィルタでは、ハッシュキーの追加時においては、最下層のブルームフィルタから上層に対して順に、ブルームフィルタに対するビット値「1」の設定が行われていく。例えば、図6において、検索テーブルTB1-1にハッシュキーを追加する場合、まず、第3階層において検索テーブルTB1-1に割り当てられたビット列BA3-1-1(ブルームフィルタ)に対して、3つのビット値を「1」に設定する処理が行われる。次に、その上層のビット列BA2-1(ブルームフィルタ)に対して、3つのビット値を「1」に設定する処理が行われる。さらに、その上層のビット列BA1(ブルームフィルタ)に対して、3つのビット値を「1」に設定する処理が行われる。
【0088】
一方、ハッシュキーの存否判定時においては、最上層のビット列BA1(ブルームフィルタ)から下層に対して順に、ビット値が参照されていく。すなわち、まず第1階層のビット列BA1(ブルームフィルタ)が参照され、ハッシュ計算により特定された3つのビット値がすべて「1」であるかが判定される。3つのビット値がすべて「1」である場合、次に、第2階層のビット列BA2-1,BA2-2,・・・,BA2-d(ブルームフィルタ)のそれぞれについて、ハッシュ計算により特定された3つのビット値がすべて「1」であるかが判定される。
【0089】
ここで、例えば、ビット列BA2-1(ブルームフィルタ)において、特定された3つのビット値がすべて「1」であったとする。この場合、ビット列BA2-1(ブルームフィルタ)の下層に属するビット列BA3-1-1,BA3-1-2,・・・,BA3-1-d(ブルームフィルタ)のそれぞれについて、ハッシュ計算により特定された3つのビット値がすべて「1」であるかが判定される。
【0090】
ここで、例えば、ビット列BA3-1-1(ブルームフィルタ)において、特定された3つのビット値がすべて「1」であったとする。この場合、ビット列BA3-1-1(ブルームフィルタ)に割り当てられた検索テーブルTB1-1に、所望のハッシュキーが存在する可能性がある、と判定される。
【0091】
ところで、階層型ブルームフィルタの各ブルームフィルタのビット数は、検索対象の要素数(すなわち、チャンク管理テーブル113に登録されるチャンク数)に応じて決まる。検索対象の要素数が多くなるほど、各ブルームフィルタのビット数も多くなるので、階層型ブルームフィルタを構成するデータが占有する記憶領域も大きくなる。
【0092】
一方、一般的なブルームフィルタの性質として、検索対象の要素数が減少した場合でも、ブルームフィルタのビット数を削減できない、という性質がある。これは、ブルームフィルタのビットから、削除された要素に基づく計算によってビット値が「1」となるビットを削除したとしても、そのビットは、他の要素に基づく計算によってビット値が「1」となる可能性があるからである。もしそうである場合、ビットの削除後のブルームフィルタを用いた検索処理では、偽陰性が生じてしまう。
【0093】
このような問題に対し、以下の図8図9に示すようなビット数削減方法が考えられている。
図8は、階層型ブルームフィルタにおけるビット数削減処理の比較例を示す図である。
【0094】
図8に示すチャンク群CGは、例として、図6に示した検索テーブルTB1-1に対応する。すなわち、検索テーブルTB1-1には、チャンク群CGに含まれる各チャンクに基づくハッシュキーが登録されている。そして、図8では例として、チャンク群CGに含まれるチャンクの数が、オブジェクトのデフラグ処理によって減少した場合を想定する。なお、デフラグ処理とは、チャンク群CGに含まれるチャンクのうち、断片化された有効チャンク(参照数が「1」以上のチャンク)をまとめて記憶領域に格納し直すことで、無効チャンク(参照数が「0」のチャンク)の記憶領域を解放するための処理である。
【0095】
また、図8に示すブルームフィルタBF3-1-1は、図6に示したビット列BA3-1-1全体を用いたブルームフィルタであり、チャンク群CG(検索テーブルTB1-1)の検索に用いられる。また、図8に示すブルームフィルタBF2-1は、図6に示したビット列BA2-1全体を用いたブルームフィルタであり、図8に示すブルームフィルタBF1は、図6に示したビット列BA1全体を用いたブルームフィルタである。
【0096】
図8では例として、デフラグ処理によってチャンク群CGに含まれるチャンク数が1/3に減少したとする。この場合、まず、階層型ブルームフィルタにおける最下層(第3階層)のブルームフィルタのうち、チャンク群CG(検索テーブルTB1-1)を検索対象とするブルームフィルタBF3-1-1のビット数が削減される。この処理では、ブルームフィルタBF3-1-1のうち下位側の1/3のビット列がそのまま残され、上位側の残りの2/3のビット列が記憶領域から削除される。このとき、ブルームフィルタBF3-1-1からmビットのビット列が削除されたものとする。
【0097】
次に、ブルームフィルタBF3-1-1の上位に位置するブルームフィルタBF2-1のビット数が削減される。この処理では、ブルームフィルタBF2-1のうち上位側のmビットのビット列が記憶領域から削除され、残りのビット列がそのまま残される。なお、第2階層に含まれる他のブルームフィルタについては、ビット数の削減は行われない。
【0098】
次に、ブルームフィルタBF2-1の上位に位置するブルームフィルタBF1のビット数が削減される。この処理では、第2階層と同様に、ブルームフィルタBF1のうち上位側のmビットのビット列が記憶領域から削除され、残りのビット列がそのまま残される。
【0099】
以上の手順により、チャンク群CGの記憶領域の削減に応じて、階層型ブルームフィルタの記憶領域も削減される。
図9は、ビット数が削減されたブルームフィルタを用いた検索処理の比較例を示す図である。この図9では、図8のような手順でブルームフィルタBF1,BF2-1,BF3-1-1のビット数が削減された状態において、ファイルから分割されたチャンクCK1の検索が要求された場合について示す。
【0100】
この場合、まず、第1階層のブルームフィルタBF1を用いて、チャンクCK1の存否が判定される。このとき、ブルームフィルタBF1の上位側に、削除されたビット数と同じmビットのビット列BS1が仮想的に付加される。付加されるビット列BS1では、すべてのビットの値が「1」に設定される。そして、ビット列BS1が付加されたブルームフィルタBF1を用いて、検索対象のチャンク群にチャンクCK1が含まれているかが判定される。
【0101】
この判定により、検索対象のチャンク群にチャンクCK1が含まれている可能性がある、と判定されると、第2階層の各ブルームフィルタ(ビット列BA2-1,BA2-2,・・・,BA2-dに対応)をそれぞれ用いて、チャンクCK1の存否が判定される。ここで、ブルームフィルタBF2-1を用いた処理では、ブルームフィルタBF2-1の上位側に、削除されたビット数と同じmビットのビット列BS2が仮想的に付加される。ビット列BS1と同様に、付加されるビット列BS2では、すべてのビットの値が「1」に設定される。そして、ビット列BS2が付加されたブルームフィルタBF2-1を用いて、検索対象のチャンク群にチャンクCK1が含まれているかが判定される。
【0102】
ここで、ブルームフィルタBF2-1を用いた判定処理により、検索対象のチャンク群にチャンクCK1が含まれている可能性がある、と判定されたとする。この場合、次に、ブルームフィルタBF2-1の下層に配置された各ブルームフィルタ(ビット列BA3-1-1,BA3-1-2,・・・,BA3-1-dに対応)をそれぞれ用いて、チャンクCK1の存否が判定される。ここで、ブルームフィルタBF3-1-1を用いた処理では、ブルームフィルタBF3-1-1の上位側に、削除されたビット数と同じmビットのビット列BS3が仮想的に付加される。ビット列BS1,BS2と同様に、付加されるビット列BS3では、すべてのビットの値が「1」に設定される。そして、ビット列BS3が付加されたブルームフィルタBF3-1-1を用いて、検索対象のチャンク群CGにチャンクCK1が含まれているかが判定される。
【0103】
以上の比較例では、ビット数が削減されたブルームフィルタを用いて検索を行う際には、削減されたビット数と同じビット数を有し、かつ、全ビットの値が「1」であるビット列が、ブルームフィルタの上位側に仮想的に付加される。そして、このようにビット列が付加されたブルームフィルタを用いて、検索が行われる。これにより、記憶領域に記憶されるブルームフィルタの実データ量を削減して、記憶領域の利用効率を高めながらも、検索処理における決定的な誤判定(すなわち、集合内に存在する要素を存在しないと判定すること)の発生を防止できる。
【0104】
しかしながら、この比較例の方法では、ビット値がすべて「1」のビット列を一時的に付加して存否判定を行うことから、ビット削減前と比較して、偽陽性による誤判定(すなわち、集合内に存在しない要素を存在すると判定すること)の発生確率(偽陽率)が増加してしまうという問題がある。
【0105】
また、例えば、最下層のブルームフィルタBF3-1-1については、検索対象のチャンク群CGにおけるチャンク数の減少に伴ってブルームフィルタBF3-1-1を再作成することで、ビット数を削減する方法が考えられる。この再作成では、元のブルームフィルタBF3-1-1よりビット数の少ないブルームフィルタ(ビット値がすべて「0」のビット列)が作成される。そして、チャンク群CGに残ったチャンクのそれぞれについて、ハッシュキーを用いてk種類のハッシュ関数によるハッシュ計算が行われて、新規のブルームフィルタにおけるk個のビットが「1」に設定される。
【0106】
このような再作成により、ブルームフィルタBF3-1-1を単体で見たときには、偽陽率の増加を招かずにビット数を削減できる。しかし、このように最下層のブルームフィルタBF3-1-1を再作成したとしても、それより上位のブルームフィルタでの偽陽率の増加により、最下層のブルームフィルタBF3-1-1での偽陽率も、ビット削減前よりも増加してしまう。
【0107】
このような課題に対し、第2の実施の形態の階層型ブルームフィルタ118は、次のような構成を有している。階層型ブルームフィルタ118における各ノードのビット列は、同数のビット列に均等分割され、分割されたビット列がそれぞれ個別のブルームフィルタとして利用される。1つのビット列に含まれる各ブルームフィルタは、インデックスにより識別される。
【0108】
各ノードのビット列に含まれる複数のブルームフィルタは、それぞれ異なる分類条件によって分類されるハッシュキーの検索に用いられる。すなわち、あるブルームフィルタは、ある分類条件に合致するハッシュキーの集合の中に、同じ分類条件に合致するハッシュキーが存在するかの判定に用いられる。また、ビット列内で同じインデックスで識別されるブルームフィルタには、同じ分類条件が対応付けられる。そして、あるブルームフィルタについての検索対象のハッシュキーがすべて削除されると、そのブルームフィルタは該当ノードのビット列から削除される。これにより、階層型ブルームフィルタ118におけるビット数削減が実現される。
【0109】
さらに、同じ上位ノードの配下に位置する各ノードのブルームフィルタのうち、同じインデックスで識別されるすべてのブルームフィルタが削除された場合、上位ノードにおける同じインデックスで識別されるブルームフィルタも削除可能になる。このようにして、削除可能なブルームフィルタの位置が下位階層から上位階層に伝播される。
【0110】
このような構成により、偽陽率を増加させずに、階層型ブルームフィルタ118のビット数を複数階層のブルームフィルタにわたって削除できるようになる。
以下、第2の実施の形態の階層型ブルームフィルタ118の詳細について説明する。
【0111】
図10は、階層型ブルームフィルタの内部構成例を示す図である。なお、図10では、説明を簡単にするために、1つのノードに接続される仮想ノードの数を「2」としている(すなわち、d=2としている)。
【0112】
前述のように、階層型ブルームフィルタ118における各ノードのビット列は、同数のビット列に均等分割され、分割されたビット列がそれぞれ個別のブルームフィルタとして利用される。1つのビット列に含まれる各ブルームフィルタは、インデックスにより識別される。図10の例では、ビット列内のブルームフィルタには「0x00」から「0xFF」までのインデックスが付与されている。
【0113】
各ノードのビット列に含まれる複数のブルームフィルタは、それぞれ異なる分類条件によって分類されるハッシュキーの検索に用いられる。すなわち、「0x00」から「0xFF」までのインデックスのそれぞれには、互いに異なる分類条件が対応付けられている。本実施の形態では、例として、ハッシュキーのビット値のうち、上位1バイトのビット値が分類条件として使用される。そして、上位1バイトが「0x00」のハッシュキーの検索にはインデックス「0x00」のブルームフィルタが用いられ、上位1バイトが「0x01」のハッシュキーの検索にはインデックス「0x01」のブルームフィルタが用いられる、というように、インデックスの値が分類条件のビット値と同じになっている。
【0114】
ブルームフィルタと検索対象のハッシュキーとの関係は、例えば次のようになる。第3階層(最下層)において、ビット列BA3-1-1のブルームフィルタのうち、インデックス「0x00」のブルームフィルタの検索対象は、検索テーブルTB1-1に登録されたハッシュキーのうち、上位1バイトが「0x00」のハッシュキーとなる。また、ビット列BA3-1-1のブルームフィルタのうち、インデックス「0x01」のブルームフィルタの検索対象は、検索テーブルTB1-1に登録されたハッシュキーのうち、上位1バイトが「0x01」のハッシュキーとなる。
【0115】
第2階層において、ビット列BA2-1のブルームフィルタのうち、インデックス「0x00」のブルームフィルタの検索対象は、検索テーブルTB1-1,TB1-2に登録されたハッシュキーのうち、上位1バイトが「0x00」のハッシュキーとなる。また、ビット列BA2-1のブルームフィルタのうち、インデックス「0x01」のブルームフィルタの検索対象は、検索テーブルTB1-1,TB1-2に登録されたハッシュキーのうち、上位1バイトが「0x01」のハッシュキーとなる。
【0116】
第1階層において、ビット列BA1のブルームフィルタのうち、インデックス「0x00」のブルームフィルタの検索対象は、検索テーブルTB1-1,TB1-2,TB2-1,TB2-2に登録されたハッシュキーのうち、上位1バイトが「0x00」のハッシュキーとなる。また、ビット列BA1のブルームフィルタのうち、インデックス「0x01」のブルームフィルタの検索対象は、検索テーブルTB1-1,TB1-2,TB2-1,TB2-2に登録されたハッシュキーのうち、上位1バイトが「0x01」のハッシュキーとなる。
【0117】
図11は、フィルタ管理テーブルの構成例を示す図である。記憶部110内のブルームフィルタデータ116には、階層型ブルームフィルタ118の構成を示す管理情報や、ブルームフィルタの実体であるビット列が登録される。図11に示すフィルタ管理テーブル116aは、前者の例である。
【0118】
フィルタ管理テーブル116aは、階層型ブルームフィルタ118のノードごとのレコードを備える。各レコードには、ノードを識別するノード番号が登録される。また、各レコードには、インデックスごとのフィルタアドレスと、ブルームフィルタのサイズを示すフィルタサイズと、ノードの下層に配置される子ノードを識別する子ノード番号とが登録される。フィルタアドレスは、インデックスに対応するブルームフィルタの実体であるビット列の、記憶部110における先頭アドレスを示す。フィルタアドレスとフィルタサイズによって、インデックスに対応するブルームフィルタにアクセスできるようになる。また、ノード番号と子ノード番号との対応関係によって階層型ブルームフィルタ118の木構造が特定される。
【0119】
図12は、検索テーブルの構成例を示す図である。検索テーブルTB-1,TB-2,・・・は、ハッシュキー管理データ114の中に登録される。検索テーブルTB-1,TB-2,・・・のそれぞれには、最下層のノードを示すノード番号が割り当てられている。また、検索テーブルTB-1,TB-2,・・・のそれぞれには、ハッシュキーと、ハッシュキーの計算元となったチャンクを示すチャンク番号とが登録される。検索テーブルTB-1,TB-2,・・・のそれぞれにおいては、ハッシュキーをキーとし、チャンク番号をバリューとするキー・バリュー方式のデータベースが形成されている。
【0120】
次に、図13図16を用いて、本実施の形態の階層型ブルームフィルタを用いた処理について説明する。
図13は、検索テーブルにハッシュキーが追加される場合の処理例を示す図である。図13では、検索テーブルTB1-2に対してハッシュキーHK3が追加される場合について例示する。
【0121】
ハッシュキーHK3の上位1バイトが「0x01」であったとすると、重複排除処理部130は、使用されるブルームフィルタを示すインデックスを「0x01」と判定する。そして、重複排除処理部130は、まず、検索テーブルTB1-2を検索対象とする最下位ノードのビット列BA3-1-2から、インデックス「0x01」のブルームフィルタ(「BF11」とする)を特定する。
【0122】
重複排除処理部130は、ハッシュキーHK3に対してk種類のハッシュ関数をそれぞれ用いた計算を行って、k個のハッシュ値を算出する。重複排除処理部130は、算出したk個のハッシュ値を、特定したブルームフィルタBF11のビット数で除算し、それらの除算によるk個の余り値を、ビット値を「1」にするビット番号として特定する。重複排除処理部130は、ブルームフィルタBF11のビットのうち、特定したビット番号のビットを「1」に設定する。
【0123】
次に、重複排除処理部130は、ビット列BA3-1-2の上位に配置されたビット列BA2-1を参照し、ビット列BA2-1からインデックス「0x01」のブルームフィルタ(「BF12」とする)を特定する。重複排除処理部130は、ハッシュキーHK3を基に算出したk個のハッシュ値を、特定したブルームフィルタBF12のビット数で除算し、それらの除算によるk個の余り値を、ビット値を「1」にするビット番号として特定する。重複排除処理部130は、ブルームフィルタBF12のビットのうち、特定したビット番号のビットを「1」に設定する。
【0124】
次に、重複排除処理部130は、ビット列BA2-1の上位に配置されたビット列BA1を参照し、ビット列BA1からインデックス「0x01」のブルームフィルタ(「BF13」とする)を特定する。重複排除処理部130は、ハッシュキーHK3を基に算出したk個のハッシュ値を、特定したブルームフィルタBF13のビット数で除算し、それらの除算によるk個の余り値を、ビット値を「1」にするビット番号として特定する。重複排除処理部130は、ブルームフィルタBF13のビットのうち、特定したビット番号のビットを「1」に設定する。
【0125】
このような処理により、階層型ブルームフィルタ118のブルームフィルタに対するビット設定が行われる。
図14は、ハッシュキーの存否判定の処理例を示す図である。図14では、ハッシュキーHK4の存否判定が行われる場合について例示する。
【0126】
ハッシュキーHK4の上位1バイトが「0x00」であったとすると、重複排除処理部130は、使用されるブルームフィルタを示すインデックスを「0x00」と判定する。そして、重複排除処理部130は、まず、最上位ノードのビット列BA1からインデックス「0x00」のブルームフィルタ(「BF21」とする)を特定する。
【0127】
重複排除処理部130は、ハッシュキーHK4に対してk種類のハッシュ関数をそれぞれ用いた計算を行って、k個のハッシュ値を算出する。重複排除処理部130は、算出したk個のハッシュ値を、特定したブルームフィルタBF21のビット数で除算し、それらの除算によるk個の余り値を、比較対象とするビット番号として特定する。
【0128】
重複排除処理部130は、ブルームフィルタBF21から、特定したビット番号のビット値を取得して、それらがすべて「1」か否かを判定する。重複排除処理部130は、取得したビット値がすべて「1」の場合、ハッシュキーHK4と同じ値のハッシュキーが検索テーブルTB1-1,TB1-2,TB2-1,TB2-2のいずれかに存在すると判定する。一方、重複排除処理部130は、取得したビット値のうち1つでも「0」がある場合、ハッシュキーHK4と同じ値のハッシュキーが検索テーブルTB1-1,TB1-2,TB2-1,TB2-2のいずれにも存在しないと判定する。
【0129】
図14では例として、取得したビット値がすべて「1」であったとする。この場合、重複排除処理部130は、下層ノードのビット列BA2-1からインデックス「0x00」のブルームフィルタ(「BF22」とする)を特定する。これとともに、重複排除処理部130は、下層ノードのビット列BA2-2からインデックス「0x00」のブルームフィルタ(「BF23」とする)を特定する。そして、重複排除処理部130は、特定したブルームフィルタBF22,BF23を用いて存否判定を行う。
【0130】
具体的には、重複排除処理部130は、ハッシュキーHK4を基に算出したk個のハッシュ値を、ブルームフィルタBF22のビット数で除算し、除算によるk個のハッシュ値を比較対象とするビット番号として特定する。そして、重複排除処理部130は、ブルームフィルタBF22から、特定したビット番号のビット値を取得して、それらがすべて「1」か否かを判定する。
【0131】
これとともに、重複排除処理部130は、ハッシュキーHK4を基に算出したk個のハッシュ値を、ブルームフィルタBF23のビット数で除算し、除算によるk個のハッシュ値を比較対象とするビット番号として特定する。そして、重複排除処理部130は、ブルームフィルタBF23から、特定したビット番号のビット値を取得して、それらがすべて「1」か否かを判定する。
【0132】
図14では例として、ブルームフィルタBF22から取得したビット値がすべて「1」であったとする。この場合、ハッシュキーHK4と同じ値のハッシュキーが検索テーブルTB1-1,TB1-2のいずれかに存在すると判定される。すると、重複排除処理部130は、下層ノードのビット列BA3-1-1からインデックス「0x00」のブルームフィルタ(「BF24」とする)を特定する。これとともに、重複排除処理部130は、下層ノードのビット列BA3-1-2からインデックス「0x00」のブルームフィルタ(「BF25」とする)を特定する。そして、重複排除処理部130は、特定したブルームフィルタBF24,BF25を用いて、上記と同様の手順で存否判定を行う。
【0133】
図14では例として、ブルームフィルタBF25から取得したビット値がすべて「1」であったとする。この場合、ハッシュキーHK4と同じ値のハッシュキーが検索テーブルTB1-2に存在すると判定される。これにより、重複するハッシュキーの検索範囲が検索テーブルTB1-2に絞り込まれる。
【0134】
図15は、チャンク削除時の第1の処理例を示す図である。図15では、デフラグ処理の実行により、検索テーブルTB1-1に登録されたハッシュキーのうち、先頭1バイトが「0x01」のハッシュキーがすべて削除されたとする。
【0135】
この場合、重複排除処理部130は、削除対象のブルームフィルタを示すインデックスを「0x01」と判定する。そして、重複排除処理部130は、検索テーブルTB1-1を検索対象とする最下位ノードのビット列BA3-1-1から、インデックス「0x01」のブルームフィルタ(「BF31」とする)を削除する。これにより、階層型ブルームフィルタ118のビット数が削減される。
【0136】
次に、重複排除処理部130は、ビット列BA3-1-1と同じ親ノード(上位ノードのビット列BA2-1)を持つ他のビット列BA3-1-2を参照し、インデックス「0x01」のブルームフィルタが存在するかを判定する。図15の例では、ビット列3-1-2にはインデックス「0x01」のブルームフィルタBF11が存在しているので、重複排除処理部130はビット削減処理を終了する。
【0137】
図16は、チャンク削除時の第2の処理例を示す図である。図16では、図15のようにビット削減が行われた状態から、デフラグ処理の実行により、検索テーブルTB1-2に登録されたハッシュキーのうち、先頭1バイトが「0x01」のハッシュキーがすべて削除されたとする。
【0138】
この場合、重複排除処理部130は、削除対象のブルームフィルタを示すインデックスを「0x01」と判定する。そして、重複排除処理部130は、検索テーブルTB1-2を検索対象とする最下位ノードのビット列BA3-1-2から、インデックス「0x01」のブルームフィルタBF11を削除する。これにより、階層型ブルームフィルタ118のビット数が削減される。
【0139】
次に、重複排除処理部130は、ビット列BA3-1-2と同じ親ノード(上位ノードのビット列BA2-1)を持つ他のビット列BA3-1-1を参照し、インデックス「0x01」のブルームフィルタが存在するかを判定する。図16の例では、ビット列BA3-1-1においてはインデックス「0x01」のブルームフィルタBF31が削除済みである。この場合、重複排除処理部130は、上位ノードのビット列BA2-1から、インデックス「0x01」のブルームフィルタBF12を削除する。このようにして、削除可能なブルームフィルタの位置が下位階層から上位階層に伝播され、階層型ブルームフィルタ118のビット数を複数階層のブルームフィルタにわたって削除できるようになる。
【0140】
また、ブルームフィルタが削除されても、偽陽率は変化しない。例えば、図15のようにブルームフィルタBF31が削除された後に、上位1バイトが「0x01」のハッシュキー(「入力ハッシュキー」と記載する)の存否判定が行われるとする。そして、上位ノードでの判定結果に基づいて、ビット列BA3-1-1を用いた存否判定が行われるとする。この場合、重複排除処理部130は、ビット列BA3-1-1にインデックス「0x01」のブルームフィルタBF31が存在しないことから、検索テーブルTB1-1には入力ハッシュキーと同じ値のハッシュキーは存在しないと判定する。
【0141】
また、この状態で、上位1バイトが「0x01」以外の入力ハッシュキーが入力されて、ビット列BA3-1-1を用いた存否判定が行われる場合でも、ブルームフィルタBF31の削除とは関係なく存否判定が行われる。したがって、ブルームフィルタBF31が削除されたビット列BA3-1-1のノードを含む、階層型ブルームフィルタ118のすべてのノードでの存否判定でも、偽陽率はブルームフィルタBF31の削除前から変化しない。
【0142】
また、例えば、図16のようにブルームフィルタBF11,BF12が削除された後に、上位1バイトが「0x01」の入力ハッシュキーの存否判定が行われるとする。そして、上位ノードでの判定結果に基づいて、ビット列BA2-1を用いた存否判定が行われるとする。この場合、重複排除処理部130は、ビット列BA2-1にインデックス「0x01」のブルームフィルタBF12が存在しないことから、検索テーブルTB1-1,TB1-2のいずれにも入力ハッシュキーと同じ値のハッシュキーは存在しないと判定する。
【0143】
また、この状態で、上位1バイトが「0x01」以外の入力ハッシュキーが入力されて、ビット列BA2-1を用いた存否判定が行われる場合でも、ブルームフィルタBF12の削除とは関係なく存否判定が行われる。したがって、ブルームフィルタBF12が削除されたビット列BA2-1のノードを含む、階層型ブルームフィルタ118のすべてのノードでの存否判定でも、偽陽率はブルームフィルタBF12の削除前から変化しない。
【0144】
このように、各ノードの一部のビット列を形成するブルームフィルタが削除されても、階層型ブルームフィルタ118のいずれのノードでの存否判定における偽陽率は変化しない。このため、階層型ブルームフィルタ118全体での偽陽率も変化しない。したがって、偽陽率を増加させずに、階層型ブルームフィルタ118のビット数を複数階層のブルームフィルタにわたって削除できるようになる。
【0145】
なお、存否判定に使用するブルームフィルタのインデックスを決定するための分類条件としては、上記のようにハッシュキーの上位1バイトの値を用いる方法に限定されない。例えば、ハッシュキーまたは対応するチャンクの値または属性に応じた様々な分類条件を用いることができる。例えば、上位1バイトに限らず、ハッシュキーのビット列における所定範囲(下位1バイトなど)のビット値を、分類条件として用いることができる。この場合、インデックスの値を分類条件として用いたビット値の値と共通にすることができ、ハッシュキーに基づくインデックスの特定処理が容易になる。
【0146】
また、例えば、ハッシュキーの算出元のチャンクのビット列における所定範囲のビット値が、分類条件として用いられてもよい。さらに、ハッシュキーまたはチャンクの属性を用いた例としては、NASクライアント210から複数の論理記憶領域に属するファイルの書き込みが要求される場合、分類条件として、チャンクの分割元ファイルが属する論理記憶領域の識別番号が用いられてもよい。
【0147】
次に、クラウドストレージゲートウェイ100の処理について、フローチャートを用いて説明する。
図17図18は、ファイル書き込み処理の手順を示すフローチャートの例である。
【0148】
[ステップS11]ファイル入出力部120は、NASクライアント210からファイルの書き込み要求およびファイルのデータを受信する。重複排除処理部130の重複判定部131は、書き込みが要求されたファイルのデータを取得し、ディレクトリテーブル111に、そのファイルのディレクトリ情報を示すレコードを追加する。このとき、ファイルにファイル番号が付与される。また、重複判定部131は、ファイルのデータを可変長のチャンクに分割する。
【0149】
[ステップS12]重複判定部131は、ファイルの先頭側から順に、処理対象のチャンクを1つ選択する。また、重複判定部131は、チャンクマップテーブル112にレコードを追加し、このレコードに次のような情報を登録する。ファイル番号の項目には、書き込みが要求されたファイルのファイル番号が登録され、オフセットおよびサイズの項目には、処理対象のチャンクについての情報が登録される。
【0150】
[ステップS13]重複判定部131は、重複判定処理を実行する。この重複判定処理では、ステップS12で選択されたチャンクと同じ内容のチャンクがすでに格納済みか(重複しているか)が判定される。なお、重複判定処理の詳細については、後の図19において説明する。
【0151】
[ステップS14]重複判定部131は、ステップS13の重複判定処理における判定結果を取得する。重複判定部131は、重複判定処理において、ステップS12で選択されたチャンクと同じ内容のチャンクがすでに格納済み(重複している)と判定された場合、処理をステップS15に進め、格納済みでない(重複していない)と判定された場合、処理を図18のステップS21に進める。
【0152】
[ステップS15]重複判定部131は、ステップS13の重複判定処理で重複すると判定された格納済みチャンクのチャンク番号を、ステップS12でチャンクマップテーブル112に追加したレコードに登録する。
【0153】
[ステップS16]重複判定部131は、重複判定部131は、チャンク管理テーブル113のレコードのうち、ステップS16でレコードに追加したチャンク番号を含むレコードを参照し、このレコードに登録されている参照数をカウントアップする。
【0154】
[ステップS17]重複判定部131は、ステップS11で分割されたすべてのチャンクについて処理済みかを判定する。重複判定部131は、未処理のチャンクがある場合は処理をステップS12に進め、未処理のチャンクを先頭側から1つ選択して処理を継続する。一方、重複判定部131は、すべてのチャンクを処理済みの場合、ファイル書き込みが完了したことをファイル入出力部120に通知する。通知を受けたファイル入出力部120は、NASクライアント210に対してファイル書き込みの完了を示す応答情報を送信する。
【0155】
以下、図18を用いて説明を続ける。
[ステップS21]重複判定部131は、ステップS12で選択されたチャンクについての新たなチャンク番号を算出する。このチャンク番号は、チャンク管理テーブル113に登録されているチャンク番号の最大値に「1」を加算した値とされる。重複判定部131は、チャンク管理テーブル113に新たなレコードを追加し、このレコードに対し、算出された新たなチャンク番号と、チャンクのサイズと、参照数「1」とを登録する。
【0156】
また、重複判定部131は、ステップS12で選択されたチャンクのデータをデータキャッシュ117に格納する。このとき、データの格納位置とチャンク番号との対応付けが行われる。
【0157】
[ステップS22]重複判定部131は、ステップS21で算出された新たなチャンク番号を、ステップS12でチャンクマップテーブル112に追加したレコードに登録する。
【0158】
[ステップS23]チャンク管理部132は、クラウドストレージ240に対して未送信のチャンク数が所定の閾値(「TH」とする)に達したかを判定する。未送信のチャンク数とは、アクティブ状態のオブジェクトに含まれるチャンクの数である。また、閾値THは、例えば10000個程度に設定される。チャンク管理部132は、未送信のチャンク数が閾値THに達した場合、ステップS24に処理を進め、未送信のチャンク数が閾値THに達していない場合、ステップS26に処理を進める。
【0159】
[ステップS24]チャンク管理部132は、未送信のTH個のチャンクを結合して生成したオブジェクトをクラウドストレージ240にアップロードするように、クラウド通信部140に依頼する。これにより、当該オブジェクトは非アクティブの状態となる。クラウド通信部140は、PUTコマンドによりオブジェクトをクラウドストレージ240にアップロードする。
【0160】
[ステップS25]チャンク管理部132は、ステップS12で選択されたチャンクに新たなオブジェクト番号を割り当てる。このオブジェクト番号は、ステップS24でアップロードされたオブジェクトのオブジェクト番号に「1」を加算した値とされる。チャンク管理部132は、ステップS21でチャンク管理テーブル113に追加されたレコードに、新たなオブジェクト番号と、オフセット「0」とを登録する。新たなオブジェクト番号に対応するオブジェクトは、アクティブ状態となる。また、チャンク管理部132は、オブジェクト管理テーブル115に新たなレコードを追加し、このレコードに新たなオブジェクト番号を登録する。
【0161】
[ステップS26]チャンク管理部132は、ステップS12で選択されたチャンクに、既存の最大のオブジェクト番号を割り当てる。このオブジェクト番号は、ステップS23で判定の対象となった未送信のチャンクに割り当てられているオブジェクト番号である。したがって、ステップS26では、これらのチャンクに割り当てられている未送信のオブジェクト(アクティブ状態のオブジェクト)に対して、ステップS12で選択されたチャンクがさらに割り当てられる。
【0162】
チャンク管理部132は、ステップS21でチャンク管理テーブル113に追加されたレコードに、割り当てられたオブジェクト番号と、対応するオブジェクトにおけるオフセットとを登録する。登録されるオフセットは、1つ前のレコードに登録されたオフセットとサイズとから算出される。
【0163】
[ステップS27]チャンク管理部132は、オブジェクト管理テーブル115に対して、有効チャンク数の登録または更新を行う。ステップS25が実行された場合、チャンク管理部132は、ステップS25でオブジェクト管理テーブル115に追加したレコードに、有効チャンク数としてTHを登録する。一方、ステップS26が実行された場合、チャンク管理部132は、オブジェクト管理テーブル115からステップS26で割り当てられたオブジェクト番号を含むレコードを特定し、特定したレコードに登録された有効チャンク数にTHを加算する。
【0164】
[ステップS28]チャンク管理部132は、ブルームフィルタの更新処理を実行する。この処理では、階層型ブルームフィルタ118に含まれるブルームフィルタのうち、新規に登録されたチャンクに関連するブルームフィルタについてのビット設定が行われる。なお、ブルームフィルタの更新処理の詳細については、後の図20において説明する。
【0165】
以上のステップS28の処理が完了すると、処理が図17のステップS17に進められる。
図19は、重複判定処理の手順を示すフローチャートの例である。この図19の処理は、図17のステップS13の処理に対応する。
【0166】
[ステップS31]重複判定部131は、図17のステップS12で選択されたチャンクに基づいてハッシュキーを算出する。
[ステップS32]ブルームフィルタ処理部131aは、算出されたハッシュキーに基づいて、重複判定に使用するブルームフィルタのインデックスを特定する。例えば、図13図16の例のように、ハッシュキーの上位1バイトの値がインデックスの値として特定される。
【0167】
[ステップS33]ブルームフィルタ処理部131aは、ブルームフィルタデータ116に基づき、階層型ブルームフィルタ118における最上位のノードを処理対象として選択する。
【0168】
[ステップS34]ブルームフィルタ処理部131aは、直近に実行されたステップS33またはステップS40で選択されたノードのビット列を特定する。ステップS40の後では複数のノードが選択されるので、各ノードに対応するビット列が特定される。ブルームフィルタ処理部131aは、特定された各ビット列から、ステップS32で特定されたインデックスに対応するブルームフィルタを特定する。このとき、記憶部110における該当するブルームフィルタのビット列範囲は、フィルタ管理テーブル116aに基づいて特定される。
【0169】
[ステップS35]ブルームフィルタ処理部131aは、ステップS34で特定された各ブルームフィルタについて、比較対象とするビット番号を特定する。例えば、ブルームフィルタ処理部131aは、ステップS31で算出されたハッシュキーに対してk種類のハッシュ関数をそれぞれ用いた計算を行って、k個のハッシュ値を算出する。ブルームフィルタ処理部131aは、ブルームフィルタごとに、算出したk個のハッシュ値をブルームフィルタのビット数で除算し、それらの除算によるk個の余り値を、比較対象とするビット番号として特定する。
【0170】
[ステップS36]ブルームフィルタ処理部131aは、ステップS34で特定された各ブルームフィルタを用いて、ステップS31で算出されたハッシュキーの存否判定を行う。例えば、選択されたノードのビット列に該当するブルームフィルタが存在しない場合、そのブルームフィルタの配下にある検索テーブルには同じ値のハッシュキーが存在しないと判定される。また、該当するブルームフィルタが存在する場合、ステップS35で特定された各ビット番号のビット値がすべて「1」であれば、そのブルームフィルタの配下にある検索テーブルには同じ値のハッシュキーが存在すると判定される。一方、該当するブルームフィルタが存在する場合、ステップS35で特定された各ビット番号のビット値のうち1つでも「0」であれば、そのブルームフィルタの配下にある検索テーブルには同じ値のハッシュキーが存在しないと判定される。
【0171】
[ステップS37]ブルームフィルタ処理部131aは、ステップS36の存否判定で、いずれか1つのブルームフィルタに基づいてハッシュキーが存在すると判定された場合、処理をステップS38に進める。一方、ブルームフィルタ処理部131aは、ステップS36におけるいずれのブルームフィルタを用いた存否判定でもハッシュキーが存在しないと判定された場合、重複判定処理を終了して、処理を図17のステップS14に進める。後者の場合、ステップS12で選択されたチャンクと同じ値のチャンクは、格納済みでない(重複していない)と判定される。
【0172】
[ステップS38]ブルームフィルタ処理部131aは、現在処理対象のノードが階層型ブルームフィルタ118における最下層のノードかを判定する。ブルームフィルタ処理部131aは、最下層のノードの場合、処理をステップS39に進め、最下層のノードでない場合、処理をステップS40に進める。
【0173】
[ステップS39]二分木探索処理部131bは、ステップS36でハッシュキーが存在すると判定されたブルームフィルタに対応付けられている検索テーブルを特定する。二分木探索処理部131bは、特定された検索テーブルに登録されたハッシュキーのうち、ステップS31で算出されたハッシュキーが合致している分類条件に合致しているハッシュキーを検索対象として、算出されたハッシュキーと同じ値のハッシュキーを二分木探索により検索する。すなわち、ステップS38までの処理では、階層型ブルームフィルタ118を用いた処理により、特定された検索テーブルの範囲まで検索範囲が絞り込まれ、ステップS39では、絞り込まれた検索範囲に対して二分木探索によって検索が行われる。
【0174】
ステップS39での検索により、算出されたハッシュキーと同じ値のハッシュキーが特定された場合、特定されたハッシュキーに対応するチャンクのチャンク番号が出力され、ステップS12で選択されたチャンクと同じ値のチャンクが格納済みである(重複している)と判定される。一方、算出されたハッシュキーと同じ値のハッシュキーが特定されなかった場合、ステップS12で選択されたチャンクと同じ値のチャンクが格納済みでない(重複していない)と判定される。ステップS39の完了により重複排除処理が終了し、処理が図17のステップS14に進められる。
【0175】
[ステップS40]ブルームフィルタ処理部131aは、ステップS36でハッシュキーが存在すると判定されたブルームフィルタが属するノードの下層に配置されたノードを処理対象としてすべて選択し、処理をステップS34に進める。
【0176】
図20は、ブルームフィルタの更新処理の手順を示すフローチャートの例である。この図20の処理は、図18のステップS28の処理に対応する。
[ステップS41]チャンク管理部132は、図19のステップS31で算出されたハッシュキーの登録先となる検索テーブルを特定し、特定された検索テーブルにハッシュキーを登録する。
【0177】
[ステップS42]チャンク管理部132は、階層型ブルームフィルタ118における最下層のノードの中から、ハッシュキーの登録先の検索テーブルに対応付けられたノードを処理対象として選択する。
【0178】
[ステップS43]チャンク管理部132は、直近のステップS42またはステップS48で処理対象として選択されたノードのビット列を特定し、特定されたビット列に使用対象のブルームフィルタが存在するかを判定する。使用対象のブルームフィルタとは、検索テーブルに登録したハッシュキーから特定されるインデックスに対応するブルームフィルタである。また、使用対象のブルームフィルタの存否は、フィルタ管理テーブル116aにおける処理対象のノードに対応するレコードにおいて、当該インデックスに対応するフィルタアドレスが登録されているか否かによって判定される。チャンク管理部132は、使用対象のブルームフィルタが存在する場合、処理をステップS45に進め、存在しない場合、処理をステップS44に進める。
【0179】
[ステップS44]チャンク管理部132は、使用対象のブルームフィルタを再登録する。この処理では、ブルームフィルタを示すビット列が記憶部110に記録され、そのビット列の記憶領域の先頭アドレスがフィルタ管理テーブル116aの該当する項目に登録される。また、再登録されたブルームフィルタの各ビットのビット値は初期値「0」とされる。
【0180】
[ステップS45]チャンク管理部132は、使用対象のブルームフィルタのビットのうち、「1」に設定するビットのビット番号を特定する。この処理では、検索テーブルに登録されたハッシュキーに対してk種類のハッシュ関数をそれぞれ用いた計算を行うことで、k個のハッシュ値が算出される。そして、算出されたk個のハッシュ値が使用対象のブルームフィルタのビット数で除算され、それらの除算によるk個の余り値が「1」に設定するビット番号として特定される。
【0181】
[ステップS46]チャンク管理部132は、使用対象のブルームフィルタのビットのうち、特定されたビット番号のビットの値を「1」に設定する。
[ステップS47]チャンク管理部132は、現在処理対象のノードが階層型ブルームフィルタ118における最上層のノードかを判定する。チャンク管理部132は、最上層のノードでない場合、処理をステップS48に進め、最上層のノードである場合、ブルームフィルタの更新処理を終了して、処理を図17のステップS17に進める。
【0182】
[ステップS48]チャンク管理部132は、使用対象のブルームフィルタが属するノードに対する上層のノードを処理対象として選択する。この後、処理はステップS43に進められる。
【0183】
図21は、ファイル削除処理の手順を示すフローチャートの例である。
[ステップS51]ファイル入出力部120は、NASクライアント210からファイルの削除要求を受信する。重複排除処理部130のチャンク管理部132は、削除が要求されたファイルのファイル番号をディレクトリテーブル111に基づいて特定する。
【0184】
[ステップS52]チャンク管理部132は、ステップS51で特定されたファイル番号が登録されたレコードをチャンクマップテーブル112から特定して、特定されたレコードの1つを選択する。これにより、削除が要求されたファイルから生成されたチャンクの1つが選択される。
【0185】
[ステップS53]チャンク管理部132は、ステップS52で選択されたレコードからチャンク番号を取得する。チャンク管理部132は、チャンク管理テーブル113において、取得されたチャンク番号に対応付けられた参照数を「1」だけカウントダウンする。
【0186】
[ステップS54]チャンク管理部132は、カウントダウン後の参照数が「0」かを判定する。重複判定部131は、参照数が「0」の場合、処理をステップS55に進め、参照数が「0」でない場合(「1」以上の場合)、処理をステップS60に進める。
【0187】
[ステップS55]このケースでは、ステップS52で選択されたチャンクが無効になっている。チャンク管理部132は、チャンク管理テーブル113から、ステップS53で取得されたチャンク番号に対応付けられたオブジェクト番号を特定する。チャンク管理部132は、オブジェクト管理テーブル115を参照して、特定されたオブジェクト番号に対応付けられた無効チャンク数に「1」を加算し、当該オブジェクト番号に対応付けられた有効チャンク数から「1」を減算する。
【0188】
[ステップS56]チャンク管理部132は、ステップS55での有効チャンク数の減算により、オブジェクト管理テーブル115の該当レコードに登録された有効チャンク数が「0」になったかを判定する。チャンク管理部132は、有効チャンク数が「0」の場合、処理をステップS57に進め、有効チャンク数が「0」でない場合(「1」以上の場合)、処理をステップS58に進める。
【0189】
[ステップS57]このケースでは、ステップS52で選択されたチャンクが属するオブジェクトについて、オブジェクト内の全チャンクが無効になっている。このため、このオブジェクトが不要である。そこで、チャンク管理部132は、このオブジェクトを削除するようにクラウド通信部140に依頼する。クラウド通信部140は、DELETEコマンドによりクラウドストレージ240に対してオブジェクトの削除を要求する。これにより、クラウドストレージ240からオブジェクトが削除される。
【0190】
また、チャンク管理部132は、削除されたオブジェクト内の各チャンクに基づくハッシュキーが登録されている検索テーブルを特定する。チャンク管理部132は、特定された検索テーブルから、削除されたオブジェクト内の各チャンクに基づくハッシュキーを削除する。検索テーブルからは、該当するハッシュキーが含まれるレコードが削除される。
【0191】
[ステップS58]チャンク管理部132は、ステップS52で選択されたチャンクのチャンク番号が登録されている検索テーブルを特定する。チャンク管理部132は、特定された検索テーブルに登録されているチャンク番号から、これらのチャンク番号に対応するチャンクが属するオブジェクトをすべて特定する。これにより、無効チャンクが発生したオブジェクトを含む、同一の検索テーブルに対応付けられたオブジェクト群が特定される。
【0192】
チャンク管理部132は、オブジェクト管理テーブル115を参照して、特定されたオブジェクト群に含まれる全チャンク数(有効チャンク数と無効チャンク数との合計数)に対する無効チャンク数の割合を算出する。チャンク管理部132は、無効チャンク数の割合が所定の閾値を超えた場合、処理をステップS59に進め、閾値以下である場合、処理をステップS60に進める。
【0193】
[ステップS59]ステップS58で無効チャンク数の割合が閾値を超えた場合、ステップS52で選択されたチャンクが属するオブジェクト群について、デフラグによるデータ削減効果が高いと判断される。この場合、チャンク管理部132は、このオブジェクト群をデフラグ対象に設定する。
【0194】
なお、本実施の形態では、ステップS58,S59に示すように、1つの検索テーブルに対応するオブジェクト群を単位としてデフラグの要否が判定されるが、デフラグの要否の判定単位はこの例に限定されない。例えば、オブジェクト単位でデフラグの要否が判定されてもよい。この場合、ステップS56で「No」と判定されたときに、該当オブジェクトがデフラグ対象に設定される。また、例えば、検索テーブルに対応するオブジェクト群に含まれるチャンクのうち、対応するチャンクキーが合致する分類条件が、ステップS52で選択されたチャンクに基づくチャンクキーが合致する分類条件と同じであるチャンクの集合を単位として、デフラグの要否が判定されてもよい。
【0195】
[ステップS60]チャンク管理部132は、ステップS52で特定された全レコードに対応するチャンク(すなわち、削除が要求されたファイルから生成されたすべてのチャンク)について処理済みかを判定する。チャンク管理部132は、未処理のチャンクがある場合は処理をステップS52に進め、未処理のチャンクを1つ選択して処理を継続する。一方、チャンク管理部132は、すべてのチャンクを処理済みの場合、ファイル削除が完了したことをファイル入出力部120に通知する。通知を受けたファイル入出力部120は、NASクライアント210に対してファイル削除の完了を示す応答情報を送信する。
【0196】
図22図23は、デフラグ処理の手順を示すフローチャートの例である。
[ステップS61]重複排除処理部130のデフラグ処理部133は、図21のステップS59でデフラグ対象に設定されたオブジェクト群を1つ選択する。デフラグ処理部133は、選択されたオブジェクト群に属するすべてのオブジェクトを取得するように、クラウド通信部140に依頼する。クラウド通信部140は、GETコマンドにより該当する全オブジェクトをクラウドストレージ240からダウンロードし、デフラグ処理部133に受け渡す。
【0197】
なお、ステップS61では、オブジェクト群に含まれるオブジェクトのうち、オブジェクト内の全チャンク数に対する無効チャンク数の割合が所定値を超えているオブジェクトだけがダウンロードされてもよい。
【0198】
[ステップS62]デフラグ処理部133は、取得した各オブジェクトについて、オブジェクトに含まれる有効チャンクのみを結合してオブジェクトを再構築する。デフラグ処理部133は、再構築された各オブジェクトのアップロードをクラウド通信部140に依頼する。クラウド通信部140は、PUTコマンドにより各オブジェクトをクラウドストレージ240にアップロードする。実際には、ステップS61でダウンロードされた元のオブジェクトが削除された後、再構築されたオブジェクトがアップロードされる。
【0199】
[ステップS63]デフラグ処理部133は、オブジェクト管理テーブル115のレコードのうち、ステップS61で取得した各オブジェクトに対応するレコードに登録された無効チャンク数を「0」にリセットする。
【0200】
[ステップS64]デフラグ処理部133は、ステップS61で取得した各オブジェクト内のチャンクに基づくハッシュキーが登録されている検索テーブルを、これ以後の処理対象として選択する。デフラグ処理部133は、特定された検索テーブルから、無効チャンクに基づくハッシュキー(ステップS62でオブジェクトから除去されたチャンクに基づくハッシュキー)が登録されているレコードを削除する。
【0201】
以下、図23を用いて説明を続ける。図23に示す処理では、ステップS64で選択された検索テーブルに対応するブルームフィルタのビット削減処理が実行される。
[ステップS71]デフラグ処理部133は、インデックスを1つ選択する。
【0202】
[ステップS72]デフラグ処理部133は、処理対象の検索テーブルに、選択されたインデックスによって分類されるハッシュキーがあるかを判定する。例えば、インデックス「0x00」が選択された場合、先頭1バイトが「0x00」のハッシュキーの有無が判定される。デフラグ処理部133は、該当するハッシュキーが1つでもある場合、処理をステップS78に進め、該当するハッシュキーが1つもない場合、処理をステップS73に進める。
【0203】
[ステップS73]デフラグ処理部133は、階層型ブルームフィルタ118の最下層ノードのうち、処理対象の検索テーブルに対応付けられたノードを選択する。デフラグ処理部133は、選択されたノードのビット列の中から、ステップS71で選択されたインデックスに対応するブルームフィルタを特定する。
【0204】
[ステップS74]デフラグ処理部133は、直近のステップS73またはステップS77で特定されたブルームフィルタを削除する。具体的には、デフラグ処理部133は、フィルタ管理テーブル116aから該当ブルームフィルタのフィルタアドレスを削除し、記憶部110における該当ブルームフィルタの記憶領域を解放する。
【0205】
[ステップS75]デフラグ処理部133は、直近のステップS73またはステップS77で特定されたブルームフィルタが属するノードが、階層型ブルームフィルタ118の最上層ノードかを判定する。デフラグ処理部133は、最上層ノードの場合、処理をステップS78に進め、最上層ノードでない場合、処理をステップS76に進める。
【0206】
[ステップS76]デフラグ処理部133は、直近のステップS73またはステップS77で特定されたブルームフィルタが属するノードと同じ階層の他のノードをすべて選択する。デフラグ処理部133は、選択した他のノードの各ビット列に、ステップS71で選択されたインデックスに対応するブルームフィルタがあるかを判定する。この判定では、フィルタ管理テーブル116aにおける該当ブルームフィルタに対応するフィルタアドレスの項目にアドレスが登録されている場合、該当ブルームフィルタがあると判定される。一方、この項目にアドレスが登録されていない場合(NULLが登録されている場合)、該当ブルームフィルタがないと判定される。
【0207】
デフラグ処理部133は、他のすべてのノードのビット列に該当ブルームフィルタがない場合、処理をステップS77に進める。この場合、これらのノードの上層ノードにおける同じインデックスのブルームフィルタを削除できると判定される。一方、デフラグ処理部133は、他の少なくとも1つのノードのビット列に該当ブルームフィルタがある場合、上層ノードのブルームフィルタを削除できないと判定して、処理をステップS78に進める。
【0208】
[ステップS77]デフラグ処理部133は、ステップS74でブルームフィルタが削除されたノードに対する上層ノードを選択する。デフラグ処理部133は、選択された上層ノードのビット列の中から、ステップS71で選択されたインデックスに対応するブルームフィルタを特定する。この後、処理がステップS74に進められ、特定されたブルームフィルタが削除される。
【0209】
[ステップS78]デフラグ処理部133は、すべてのインデックスを処理済みかを判定する。デフラグ処理部133は、未処理のインデックスがある場合、処理をステップS71に進め、未処理のインデックスの中から1つを選択して処理を継続する。一方、デフラグ処理部133は、すべてのインデックスを処理済みの場合、デフラグ処理を終了する。
【0210】
次に、第2の実施の形態に係るクラウドストレージゲートウェイ100の処理の一部を変形した変形例について説明する。
<第1の変形例>
上記の第2の実施の形態では、図11に示したフィルタ管理テーブル116aにより、各ノードのビット列におけるブルームごとに記憶部110における格納先アドレスが管理されていた。このため、重複排除処理部130は、フィルタ管理テーブル116aからフィルタアドレスとフィルタサイズとを読み込むことで、所望のノードにおける所望のインデックスに対応するブルームフィルタにアクセスすることが可能になっていた。しかし、他の方法として、各ノードのビット列を常に連続した記憶領域に格納し、ビット列の先頭アドレスからのオフセット量によって所望のブルームフィルタにアクセスできるようにしてもよい。以下の図24には、この場合のフィルタ管理テーブルについて例示する。
【0211】
図24は、第1の変形例におけるフィルタ管理テーブルの構成例を示す図である。図24に示すフィルタ管理テーブル116a1は、インデックスごとのブルームフィルタのアドレスを保持する代わりに、ビット列の先頭アドレスをフィルタアドレスの項目に保持する点で、図11のフィルタ管理テーブル116aとは異なる。
【0212】
さらに、フィルタ管理テーブル116a1は、各レコードにビットマップを保持する。ビットマップは、各インデックスに対応するビットを備え、各ビットの値は、インデックスに対応するブルームフィルタが存在するか否かを示す。ここでは例として、ブルームフィルタが存在する場合はビット値「1」が設定され、存在しない(削除された場合)はビット値「0」が設定される。したがって、初期状態ではビットマップの各ビット値は「1」に設定される。
【0213】
このフィルタ管理テーブル116a1を用いた場合、重複排除処理部130は、ノードに対応するレコードを特定し、レコード内のフィルタアドレス、フィルタサイズおよびビットマップに基づいて、所望のブルームフィルタにアクセスできる。例えば、ビット列内のいずれのブルームフィルタも削除されていない状態で、インデックス「0x03」のブルームフィルタにアクセスする場合、重複排除処理部130は、フィルタアドレスの項目に登録された先頭アドレスから、フィルタサイズの3倍のオフセット位置を、該当ブルームフィルタの先頭アドレスと特定できる。
【0214】
また、図23のステップS74でビット列内のブルームフィルタが削除されたときには、残りのビット列がまとめられて記憶部110内の別の記憶領域に格納し直され、それに伴ってフィルタ管理テーブル116a1のフィルタアドレスも更新される。また、ビットマップにおいては、削除されたブルームフィルタのインデックスに対応するビット値が「0」に更新される。
【0215】
例えば、ビット列内のインデックス「0x01」のブルームフィルタが削除された状態で、インデックス「0x03」のブルームフィルタにアクセスする場合、重複排除処理部130は、対応するビットマップからインデックス「0x01」のブルームフィルタが削除されていることを認識する。そして、重複排除処理部130は、フィルタアドレスの項目に登録された先頭アドレスから、フィルタサイズの2倍のオフセット位置を、該当ブルームフィルタの先頭アドレスと特定できる。
【0216】
さらに、ビットマップは、図23のステップS76で、同じ階層の他のビット列に、削除したブルームフィルタと同じインデックスのブルームフィルタがあるかを判定するために用いることもできる。すなわち、ビットマップにおいて、該当するインデックスに対応するビット値が「1」の場合はブルームフィルタがあると判定され、「0」の場合はブルームフィルタがない(削除されている)と判定される。
【0217】
以上の第1の変形例では、第2の実施の形態と比較して、各ブルームフィルタの格納位置を管理するための管理データ(フィルタ管理テーブル)のデータサイズを縮小でき、記憶部110の記憶領域の利用効率を高めることができる。その一方、ブルームフィルタが削除されたときに残りのビット列をまとめて別の記憶領域に格納し直すので、ブルームフィルタ削除時における処理負荷は第2の実施の形態と比較して高くなる。
【0218】
<第2の変形例>
階層型ブルームフィルタ118の構成を、次の図25のように変形することもできる。
図25は、第2の変形例における階層型ブルームフィルタの内部構成例を示す図である。図25に示す階層型ブルームフィルタ118aは、最下層ノードのビット列BA3-1-1,BA3-1-2,BA3-2-1,BA3-2-2が、それぞれ一体のブルームフィルタとして使用される点で、図10に示した階層型ブルームフィルタ118の構成と異なる。
【0219】
図25の構成では、最下層ノードのビット列の各ビット値は、対応する検索テーブルに登録されたすべてのハッシュキーを用いて設定される。例えば、ビット列BA3-1-1のビット列は、検索テーブルTB1-1に登録されたすべてのハッシュキーを用いて、k種類のハッシュ関数を用いた計算を行うことで設定される。一方、下位から2番目以上のノードのビット列は、第2の実施の形態と同様にインデックスごとに分割されたブルームフィルタとして利用される。
【0220】
図25の構成では、ある検索テーブルからハッシュキーが削除された場合、対応する最下層のノードのブルームフィルタが再作成される。例えば、検索テーブルTB1-1からある個数のハッシュキーが削除された場合、対応するビット列BA3-1-1については、削除されたハッシュキーの個数に応じてビット数が削減され、全ビット値が「0」にリセットされる。そして、検索テーブルTB1-1に残っているすべてのハッシュキーを用いて、ビット数削減後のビット列BA3-1-1に対するビット値の設定があらためて行われる。
【0221】
ただし、この方法では、重複排除処理部130は、下位から2番目のノードについてブルームフィルタを削減できるかを判定する際に、最下位の各ノードに該当ブルームフィルタがあるか否かを確認できない。そこで、第2の変形例では、フィルタ管理テーブルのレコードのうち少なくとも最下位の各ノードに対応するレコードに、図24に示したビットマップを登録しておく。そして、重複排除処理部130は、最下位ノードの1つに対応する検索テーブルにおいて、あるインデックスに対応するハッシュキーがすべて削除された場合、該当ノードに対応するビットマップのビットのうち、そのインデックスに対応するビットの値を「0」に更新する。これにより、重複排除処理部130は、図23のステップS76で、最下位階層の他のビット列に上記インデックスのブルームフィルタがあるかを、ビットマップに基づいて判定することができる。
【0222】
ここで、第2の実施の形態では、インデックス数や、検索テーブルに格納される同じインデックスに対応するハッシュキーの数に依存して、最下位ノードのビット列についてのビット数削減率が変化する。一方、第2の変形例では、インデックスに関係なく、検索テーブル内のハッシュキーの減少数に応じて、最下位ノードのビット列のビット数を削減できる。そのため、第2の変形例によれば、第2の実施の形態と比較してブルームフィルタの空間効率を向上できる可能性が高まる。
【0223】
なお、上記の各実施の形態に示した装置(例えば、データ処理装置10、クラウドストレージゲートウェイ100)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
【0224】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0225】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【0226】
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 第1データセットに含まれるデータ要素のうち第1分類条件に合致するデータ要素を含む第1データサブセットに対応付けられた第1ブルームフィルタと、前記第1データセットに含まれるデータ要素のうち第2分類条件に合致するデータ要素を含む第2データサブセットに対応付けられた第2ブルームフィルタと、を含む第1ビット列を記憶する記憶部と、
検索対象の第1データ要素が入力されたとき、前記第1データ要素が前記第1分類条件に合致する場合、前記第1ブルームフィルタを用いて前記第1データ要素と同一のデータ要素が前記第1データサブセットに存在するかを判定し、前記第1データ要素が前記第2分類条件に合致する場合、前記第2ブルームフィルタを用いて前記第1データ要素と同一のデータ要素が前記第2データサブセットに存在するかを判定し、
前記第1データサブセットに含まれるすべてのデータ要素が削除されたとき、前記第1ビット列から前記第1ブルームフィルタを削除する、処理部と、
を有するデータ処理装置。
【0227】
(付記2) 前記処理部は、前記第1データ要素が入力され、前記第1データ要素が前記第1分類条件に合致したとき、前記第1ブルームフィルタが削除済みの場合には、前記第1データセットに前記第1データ要素が存在しないと判定する、
付記1記載のデータ処理装置。
【0228】
(付記3) 前記記憶部は、前記第1ビット列を複数記憶するとともに、第3ブルームフィルタと第4ブルームフィルタとを含む第2ビット列をさらに記憶し、
複数の前記第1ビット列には、それぞれ個別の前記第1データセットが対応付けられ、
複数の前記第1ビット列にそれぞれ含まれる前記第1ブルームフィルタは、対応する前記第1データセットに含まれる前記第1データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
複数の前記第1ビット列にそれぞれ含まれる前記第2ブルームフィルタは、対応する前記第1データセットに含まれる前記第2データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
前記第3ブルームフィルタは、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットに含まれる前記第1データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
前記第4ブルームフィルタは、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットに含まれる前記第2データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
前記処理部は、
複数の前記第1ビット列のうち一のビット列に対応付けられた前記第1データセットに含まれる前記第1データサブセットにおいて、すべてのデータ要素が削除されたとき、前記一のビット列から前記第1ブルームフィルタを削除するととともに、前記複数の前記第1ビット列のうち前記一のビット列以外の他のビット列のすべてにおいて、前記第1ブルームフィルタが削除済みかを判定し、
前記他のビット列のすべてにおいて前記第1ブルームフィルタが削除済みの場合、前記第2ビット列から前記第3ブルームフィルタを削除する、
付記1または2記載のデータ処理装置。
【0229】
(付記4) 前記処理部は、
前記第1データ要素が入力されたとき、前記第1データ要素が前記第1分類条件に合致する場合、前記第3ブルームフィルタを用いて、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットに含まれる前記第1データサブセットに、前記第1データ要素と同一のデータ要素が存在するかを判定し、
存在すると判定された場合、複数の前記第1ビット列にそれぞれ含まれる前記第1ブルームフィルタを用いて、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットのうち、どの前記第1データセットに含まれる前記第1データサブセットに、前記第1データ要素と同一のデータ要素が存在するかを判定する、
付記3記載のデータ処理装置。
【0230】
(付記5) 前記第1分類条件および前記第2分類条件は、データ要素の値または属性に基づく条件である、
付記1乃至4のいずれか1つに記載のデータ処理装置。
【0231】
(付記6) 前記第1分類条件は、データ要素における特定の位置のビット値が第1の値であることを示し、
前記第2分類条件は、前記ビット値が第2の値であることを示す、
付記1乃至4のいずれか1つに記載のデータ処理装置。
【0232】
(付記7) コンピュータに、
検索対象の第1データ要素が入力されたとき、第1データセットに含まれるデータ要素のうち第1分類条件に合致するデータ要素を含む第1データサブセットに対応付けられた第1ブルームフィルタと、前記第1データセットに含まれるデータ要素のうち第2分類条件に合致するデータ要素を含む第2データサブセットに対応付けられた第2ブルームフィルタと、を含む第1ビット列を記憶する記憶部を参照して判定処理を実行し、前記判定処理は、前記第1データ要素が前記第1分類条件に合致する場合、前記第1ブルームフィルタを用いて前記第1データ要素と同一のデータ要素が前記第1データサブセットに存在するかを判定し、前記第1データ要素が前記第2分類条件に合致する場合、前記第2ブルームフィルタを用いて前記第1データ要素と同一のデータ要素が前記第2データサブセットに存在するかを判定する処理を含み、
前記第1データサブセットに含まれるすべてのデータ要素が削除されたとき、前記第1ビット列から前記第1ブルームフィルタを削除する、
処理を実行させるデータ処理プログラム。
【0233】
(付記8) 前記判定処理では、前記第1データ要素が入力され、前記第1データ要素が前記第1分類条件に合致したとき、前記第1ブルームフィルタが削除済みの場合には、前記第1データセットに前記第1データ要素が存在しないと判定する、
付記7記載のデータ処理プログラム。
【0234】
(付記9) 前記記憶部は、前記第1ビット列を複数記憶するとともに、第3ブルームフィルタと第4ブルームフィルタとを含む第2ビット列をさらに記憶し、
複数の前記第1ビット列には、それぞれ個別の前記第1データセットが対応付けられ、
複数の前記第1ビット列にそれぞれ含まれる前記第1ブルームフィルタは、対応する前記第1データセットに含まれる前記第1データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
複数の前記第1ビット列にそれぞれ含まれる前記第2ブルームフィルタは、対応する前記第1データセットに含まれる前記第2データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
前記第3ブルームフィルタは、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットに含まれる前記第1データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
前記第4ブルームフィルタは、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットに含まれる前記第2データサブセットに、検索対象のデータ要素が含まれるかの判定に用いられ、
前記削除では、
複数の前記第1ビット列のうち一のビット列に対応付けられた前記第1データセットに含まれる前記第1データサブセットにおいて、すべてのデータ要素が削除されたとき、前記一のビット列から前記第1ブルームフィルタを削除するととともに、前記複数の前記第1ビット列のうち前記一のビット列以外の他のビット列のすべてにおいて、前記第1ブルームフィルタが削除済みかを判定し、
前記他のビット列のすべてにおいて前記第1ブルームフィルタが削除済みの場合、前記第2ビット列から前記第3ブルームフィルタを削除する、
付記7または8記載のデータ処理プログラム。
【0235】
(付記10) 前記判定処理では、
前記第1データ要素が入力されたとき、前記第1データ要素が前記第1分類条件に合致する場合、前記第3ブルームフィルタを用いて、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットに含まれる前記第1データサブセットに、前記第1データ要素と同一のデータ要素が存在するかを判定し、
存在すると判定された場合、複数の前記第1ビット列にそれぞれ含まれる前記第1ブルームフィルタを用いて、複数の前記第1ビット列にそれぞれ対応付けられた前記第1データセットのうち、どの前記第1データセットに含まれる前記第1データサブセットに、前記第1データ要素と同一のデータ要素が存在するかを判定する、
付記9記載のデータ処理プログラム。
【0236】
(付記11) 前記第1分類条件および前記第2分類条件は、データ要素の値または属性に基づく条件である、
付記7乃至10のいずれか1つに記載のデータ処理プログラム。
【0237】
(付記12) 前記第1分類条件は、データ要素における特定の位置のビット値が第1の値であることを示し、
前記第2分類条件は、前記ビット値が第2の値であることを示す、
付記7乃至10のいずれか1つに記載のデータ処理プログラム。
【符号の説明】
【0238】
10 データ処理装置
11 記憶部
12 処理部
20 データセット
21-1,21-2,・・・,21-N データサブセット
30 ビット列
31-1,31-2,・・・,31-N ブルームフィルタ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25