(57)【要約】【課題】記憶手段へのアクセス回数を低減する。【解決手段】複数段のブルームフィルタの１段目が、複数のデータブロックと少なくとも同一数のフィルタ部ｆ（１）に分割され、ｐ（ｐは２以上の整数）段目が、（ｐ−１）段目のフィルタ部を複数個まとめた大きさのフィルタ部に分割される。データのハッシュ値を用いてデータのエントリを登録する登録部１３は、１段目において、データが記憶されているデータブロックに対応するフィルタ部にデータのエントリを登録するとともに、ｐ段目において、１段目のブルームフィルタでデータのエントリが登録されたフィルタ部に対応するフィルタ部にデータのエントリを登録する。検索部１５は、検索対象のデータのエントリが１段目のブルームフィルタのフィルタ部のいずれに登録されているかを、ブルームフィルタの段数の大きい側から絞り込みながら検索する。【選択図】図２
2011186954.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータブロックを有し、当該データブロック上にデータを記憶する記憶手段と、
前記データのハッシュ値を生成するハッシュ値生成手段と、
複数段のブルームフィルタを有し、当該ブルームフィルタの１段目が、前記複数のデータブロックと少なくとも同一数のフィルタ部に分割され、ｐ（ｐは２以上の整数）段目が、（ｐ−１）段目のフィルタ部を複数個まとめた大きさのフィルタ部に分割された、メモリ手段と、
前記データのハッシュ値を用いて前記データのエントリを複数段のブルームフィルタそれぞれに登録する登録手段と、
前記複数段のブルームフィルタの各フィルタ部に、検索対象のデータのエントリが登録されている可能性があるか否かを、前記ハッシュ値生成手段において生成された前記検索対象のデータのハッシュ値を用いて検索する検索手段と、を備え、
前記登録手段は、前記１段目のブルームフィルタにおいて、前記データが記憶されているデータブロックに対応するフィルタ部に前記データのエントリを登録するとともに、前記ｐ段目のブルームフィルタにおいて、前記１段目のブルームフィルタで前記データのエントリが登録されたフィルタ部に対応するフィルタ部に前記データのエントリを登録し、
前記検索手段は、前記検索対象のデータのエントリが前記１段目のブルームフィルタのフィルタ部のいずれに登録されているかを、前記ブルームフィルタの段数の大きい側から絞り込みながら検索することを特徴とするデータ管理装置。
【請求項２】
記憶手段が有する複数のデータブロックにデータを記憶する工程と、
前記データのハッシュ値を生成する工程と、
前記複数のデータブロックと少なくとも同一数のフィルタ部に分割された１段目のブルームフィルタと、（ｐ−１）段目（ｐは２以上の整数）のブルームフィルタのフィルタ部を複数個まとめた大きさのフィルタ部に分割されたｐ（ｐは２以上の整数）段目のブルームフィルタと、を含む複数段のブルームフィルタに、前記ハッシュ値を用いて前記データのエントリを登録する工程と、
前記複数段のブルームフィルタに検索対象のデータのエントリが登録されているか可能性があるか否かを、前記検索対象のデータのハッシュ値から検索する工程と、を含み、
前記登録する工程では、前記１段目のブルームフィルタにおいて、前記データが記憶されているデータブロックに対応するフィルタ部に前記データのエントリを登録し、前記ｐ段目のブルームフィルタにおいて、前記１段目のブルームフィルタで前記データのエントリが登録されたフィルタ部に対応するフィルタ部に前記データのエントリを登録し、
前記検索する工程では、前記検索対象のデータのエントリが前記１段目のブルームフィルタのフィルタ部のいずれに登録されているかを、前記ブルームフィルタの段数の大きい側から絞り込みながら検索することを特徴とするデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、データ管理装置及びデータ管理方法に関する。
【背景技術】
【０００２】
従来、大規模なデータを木構造で管理する場合、Ｂ木（Ｂｔｒｅｅ）と呼ばれるデータ構造での管理が比較的多く行われていた。Ｂ木は、単純な２分木に比べて、一つのブロックに複数のデータエントリ（以下、エントリと呼ぶ）を格納するので、エントリの追加があっても木構造の形の変化が波及する範囲を狭くできるという利点がある。このため、Ｂ木はハードディスクなどのディスク向けのデータ管理方法として利用されることが多い。
【０００３】
しかしながら、ディスク上において木構造で管理されたデータを検索する場合、複数のデータブロックを実際に読み込む必要がある。また、一般に、ディスクに対するＩ／Ｏ（input/output）は、メモリアクセスに比べると遅いことから、ディスク上でのデータ検索には手間と時間を要するおそれがある。このため、最近では、ディスクＩ／Ｏによる検索の遅延を避けるためには、メモリ中に木構造をもつなどの対応も考えられている。しかるに、Ｂ木では、エントリ数が多くなると、それに応じて必要なメモリ量が増えてしまうおそれがある。このため、木構造のうち最も良く読みこまれる部分のみをメモリ中に格納する方法（キャッシュ）を利用する方法も考えられている。
【０００４】
これに対し、最近では、ブルームフィルタ（Bloom Filter）と呼ばれるデータ構造も知られてきている。ブルームフィルタは、あるエントリが既存の集合に属するかどうかを効率的に調べる方法である（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−５２６９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したように、Ｂ木は多量のデータを扱うことができるため、キャッシュを適切に実装すれば、ディスクＩ／Ｏを減らすことは可能である。しかしながら、その回数はある一定以上減らすことはできないし、また、エントリの追加により木構造が変化すると、木構造管理のためのＩ／Ｏが必要になることもある。また、ブルームフィルタは、エントリの存在だけがわかるものであるため、そのままではデータ管理に使うことはできない。
【０００７】
そこで本件は上記の課題に鑑みてなされたものであり、記憶手段へのアクセス回数を低減することが可能なデータ管理装置及びデータ管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本明細書に記載のデータ管理装置は、複数のデータブロックを有し、当該データブロック上にデータを記憶する記憶手段と、前記データのハッシュ値を生成するハッシュ値生成手段と、複数段のブルームフィルタを有し、当該ブルームフィルタの１段目が、前記複数のデータブロックと少なくとも同一数のフィルタ部に分割され、ｐ（ｐは２以上の整数）段目が、（ｐ−１）段目のフィルタ部を複数個まとめた大きさのフィルタ部に分割された、メモリ手段と、前記データのハッシュ値を用いて前記データのエントリを複数段のブルームフィルタそれぞれに登録する登録手段と、前記複数段のブルームフィルタの各フィルタ部に、検索対象のデータのエントリが登録されている可能性があるか否かを、前記ハッシュ値生成手段において生成された前記検索対象のデータのハッシュ値を用いて検索する検索手段と、を備え、前記登録手段は、前記１段目のブルームフィルタにおいて、前記データが記憶されているデータブロックに対応するフィルタ部に前記データのエントリを登録するとともに、前記ｐ段目のブルームフィルタにおいて、前記１段目のブルームフィルタで前記データのエントリが登録されたフィルタ部に対応するフィルタ部に前記データのエントリを登録し、前記検索手段は、前記検索対象のデータのエントリが前記１段目のブルームフィルタのフィルタ部のいずれに登録されているかを、前記ブルームフィルタの段数の大きい側から絞り込みながら検索するデータ管理装置である。
【０００９】
本明細書に記載のデータ管理方法は、記憶手段が有する複数のデータブロックにデータを記憶する工程と、前記データのハッシュ値を生成する工程と、前記複数のデータブロックと少なくとも同一数のフィルタ部に分割された１段目のブルームフィルタと、（ｐ−１）段目（ｐは２以上の整数）のブルームフィルタのフィルタ部を複数個まとめた大きさのフィルタ部に分割されたｐ（ｐは２以上の整数）段目のブルームフィルタと、を含む複数段のブルームフィルタに、前記ハッシュ値を用いて前記データのエントリを登録する工程と、前記複数段のブルームフィルタに検索対象のデータのエントリが登録されているか可能性があるか否かを、前記検索対象のデータのハッシュ値から検索する工程と、を含み、前記登録する工程では、前記１段目のブルームフィルタにおいて、前記データが記憶されているデータブロックに対応するフィルタ部に前記データのエントリを登録し、前記ｐ段目のブルームフィルタにおいて、前記１段目のブルームフィルタで前記データのエントリが登録されたフィルタ部に対応するフィルタ部に前記データのエントリを登録し、前記検索する工程では、前記検索対象のデータのエントリが前記１段目のブルームフィルタのフィルタ部のいずれに登録されているかを、前記ブルームフィルタの段数の大きい側から絞り込みながら検索するデータ管理方法である。
【発明の効果】
【００１０】
本明細書に記載のデータ管理装置及びデータ管理方法は、記憶手段へのアクセス回数を低減することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】一実施形態に係る情報処理システムの構成を概略的に示すブロック図である。
【図２】多段ブルームフィルタの構成及び役割を説明するための図である。
【図３】多段ブルームフィルタを模式的に示した図である。
【図４】データの登録処理を示すフローチャートである。
【図５】登録する対象データのハッシュ値及びハッシュ値を１０２４，２０４８，４０９６で除したときの余りを示す表である。
【図６】データの登録処理を説明するための図である。
【図７】データの検索処理を示すフローチャートである。
【図８】検索する対象データのハッシュ値及びハッシュ値を１０２４，２０４８，４０９６で除したときの余りを示す表である。
【図９】データの検索処理を説明するための図（その１）である。
【図１０】データの検索処理を説明するための図（その２）である。
【図１１】データの検索処理の変形例を示す図である。
【発明を実施するための形態】
【００１２】
以下、データ管理装置及びデータ管理方法の一実施形態について、図１〜図１０に基づいて詳細に説明する。
【００１３】
図１には、データ管理装置としての情報処理システム１００の概略構成がブロック図にて示されている。図１に示すように、情報処理システム１００は、情報処理装置１０と、記憶手段としての磁気記録装置（ＨＤＤ（Hard disk drive））２０と、を備えている。
【００１４】
情報処理装置１０は、ＣＰＵ（Central Processing Unit）１２と、メモリ手段としてのメモリ１４と、を有する。ＣＰＵ１２は、ＨＤＤ２０におけるＩ／Ｏの制御や、ＨＤＤ２０に記憶されているデータ管理などを行う。ＣＰＵ１２は、図１に示すように、ハッシュ値生成手段としてのハッシュ値生成部１６と、登録手段としての登録部１３と、検索手段としての検索部１５と、を有する。ハッシュ値生成部１６は、ｋ個のハッシュ値を生成する。登録部１３は、ハッシュ値生成部１６で生成されたハッシュ値を用いて、ＨＤＤ２０に記憶されたデータのエントリをメモリ１４に登録する。検索部１５は、ハッシュ値生成部１６で生成されたハッシュ値を用いて、メモリ１４上で、ＨＤＤ２０に記憶されたデータエントリを検索する。メモリ１４は、ＲＡＭ（Random Access Memory）から成り、多段ブルームフィルタ１８を有している。多段ブルームフィルタ１８には、ＨＤＤ２０のデータブロックに記録されたデータのエントリが登録される。
【００１５】
ＨＤＤ２０は、記憶媒体としてのハードディスク上に、多数（ここでは、ｂ個とする）のデータブロック（図２の最下部参照）を有している。１つのデータブロックには、固定長のデータをａ個記憶できる容量が設定されており、データはいずれかのデータブロックに追記されるものとする。すなわち、本実施形態では、ＨＤＤ２０のハードディスク上に、最大でｎ＝ａ×ｂ個のエントリを記憶できるようになっている。ＨＤＤ２０の動作は、ＣＰＵ１２により制御されており、ＣＰＵ１２では、ｂ個のデータブロックのうち、現在書き込み中のブロック番号（ｉ）を管理している。また、ＣＰＵ１２は、データブロック中で最後に書き込みが行われたオフセット（ｊ）を管理している。なお、ＨＤＤ２０に記憶されるデータは固定長である場合に限らず、不定長であっても勿論良い。
【００１６】
図２は、多段ブルームフィルタ１８の構成及び役割を説明するための図である。この図２に示すように、多段ブルームフィルタ１８は、メモリ量ｓビットのブルームフィルタをｈ段含んでいる。この場合、多段ブルームフィルタ１８全体でのメモリ量はｈ×ｓビットとなる。
【００１７】
ｈ段のブルームフィルタのうち、最上段（ｈ段目）のブルームフィルタ１８（ｈ）は、ｎ個のデータエントリすべてを登録する役割を有している。すなわち、ｈ段目のブルームフィルタ１８（ｈ）は、データエントリが全て登録される１つのフィルタ部ｆ（ｈ）を有している。
【００１８】
（ｈ−１）段目のブルームフィルタ１８（ｈ−１）は、ｓ／ｘビットごとに分割されたフィルタ部ｆ（ｈ−１）をｘ個（図２ではｘ＝２）有している。これらｓ／ｘビットのフィルタ部ｆ（ｈ−１）それぞれには、ＨＤＤ２０のｂ個のデータブロックをｘ等分したグループが対応しており、各フィルタ部ｆ（ｈ−１）は、ｎ／ｘエントリを登録する役割を有している。
【００１９】
（ｈ−２）段目のブルームフィルタ１８（ｈ−２）では、ｓ／ｘ2ビットごとに分割されたフィルタ部ｆ（ｈ−２）をｘ2個有している。これらｓ／ｘ2ビットのフィルタ部ｆ（ｈ−２）それぞれには、ＨＤＤ２０のｂ個のデータブロックをｘ2等分したグループが対応しており、各フィルタ部ｆ（ｈ−２）は、ｎ／ｘ2エントリを登録する役割を有している。
【００２０】
すなわち、換言すれば、本実施形態では、ｐ（ｐは２以上の整数）段目のブルームフィルタ１８（ｐ）は、（ｐ−１）段目のブルームフィルタ１８（ｐ−１）のフィルタ部を複数個（ここでは２個）まとめた大きさのフィルタ部に分割されているともいえる。
【００２１】
最後の段（１段目）のブルームフィルタ１８（１）も同様に分割されているが、特に、１段目のブルームフィルタ１８（１）では、ｓ／ｂビットごとに分割されたフィルタ部ｆ（１）をｂ個有している。すなわち、１段目のブルームフィルタのフィルタ部の数は、データブロックの数と同一数に設定されている。これらｓ／ｂビットのフィルタ部ｆ（１）それぞれには、ＨＤＤ２０のｂ個のデータブロックをｂ等分したグループ（データブロック１つ）が対応しており、各フィルタ部ｆ（１）は、ｎ／ｂエントリを登録する役割を有している。なお、ｂは、次式（１）にて表すことができる。
ｂ＝ｘ(h-1)            …（１）
【００２２】
なお、上記においては、上式（１）を満たす整数ｈが存在することを前提としているが、これに限られるものではない。整数ｈが存在しない場合には、例えば各段で用いているｘの値を異なる値にしても良く、要は、結果的に１段目のブルームフィルタのフィルタ部ｆ（１）の数がｂ個となるようにすれば良い。
【００２３】
図３は、説明を簡易にするために、多段ブルームフィルタ１８を模式的に示した図である。この図３の例は、多段ブルームフィルタ１８がブルームフィルタを３段有している例である。１段目のブルームフィルタ１８（１）は、４つのデータブロックと同一数のフィルタ部ｆ（１）を有している。２段目のブルームフィルタ１８（２）は、１段目のブルームフィルタ１８（１）のフィルタ部ｆ（１）を２つ分まとめた大きさのフィルタ部ｆ（２）を２つ有している。３段目のブルームフィルタ１８（３）は、２段目のブルームフィルタ１８（２）のフィルタ部ｆ（２）を２つ分まとめた大きさの１つのフィルタ部ｆ（３）を有している。なお、図３では、フィルタ部ｆ（１）が１０２４ビット、フィルタ部ｆ（２）が２０４８ビット、フィルタ部ｆ（３）が４０９６ビットであるものとする。
【００２４】
次に、本実施形態の情報処理システム１００におけるデータ管理方法（データ（エントリ）の登録方法及びデータ（エントリ）の検索方法）について、図３の場合を例に採り、図４〜図１０に基づいて詳細に説明する。
【００２５】
（データ（エントリ）の登録方法）
まず、データ（エントリ）の登録方法について、図４のフローチャートに沿って、その他の図面を適宜参照しつつ説明する。なお、本処理の前提として、データは、ＨＤＤ２０に対して入力されるが、ＨＤＤ２０から削除されることはないものとする。
【００２６】
図４では、まず、ステップＳ１０において、ＣＰＵ１２の登録部１３が、段数を示すパラメータｐを１に設定する。次いで、ステップＳ１２では、登録部１３が、対象データを受領したか、すなわち、データエントリがあったか否かを判断する。ここでの判断が肯定されると、次のステップＳ１４において、ハッシュ値生成部１６が、対象データのｋ個のハッシュ値を計算する。本実施形態では、ハッシュ値生成部１６は、１つのデータにつき、ハッシュ値を３個計算するものとする（すなわち、ｋ＝３）。ここでは、例えば、図５の表に示すように、対象データのハッシュ値として、「１２３４５６７」、「３９８４０１２」、「９８０３３２３」が算出されたものとする。
【００２７】
図４に戻り、次のステップＳ１６では、登録部１３は、ｐ段目、ここでは１段目、のブルームフィルタに、ｋ個、ここでは３個、のハッシュ値を用いてデータエントリを登録する。具体的には、登録部１３は、１段目のブルームフィルタのフィルタ部ｆ（１）それぞれのメモリ量（１０２４ビット）を用い、３つのハッシュ値を１０２４で割った余りを算出する。そして、登録部１３は、図５に示すように算出された余り「６４７」、「６５２」、「５７１」を、対象データが格納されたデータブロックに対応するフィルタ部に登録する。この場合の登録は、対応するフィルタ部の１０２４ビットのうち、６４７ビット、６５２ビット、５７１ビットをＯＮにすることにより行う。なお、図６の１段目のブルームフィルタｆ（１）では、当該ブルームフィルタのフィルタ部に対象データのエントリが登録された状態が示されている。
【００２８】
次いで、ステップＳ１８においては、登録部１３は、ｐがｈ（ここでは、ｈ＝３）であるか否かを判断する。すなわち、登録部１３は、最上段のブルームフィルタまで、対象データを登録したか否かを判断する。ここでの判断が否定されると、ステップＳ２０に移行し、登録部１３は、ｐを１インクリメント（ｐ←ｐ＋１、すなわちＰ←２）して、ステップＳ１６に戻る。
【００２９】
次のステップＳ１６では、登録部１３は、ｐ段目（ここでは、２段目）のブルームフィルタにデータエントリを登録する。この場合、登録部１３は、２段目のブルームフィルタ１８（２）の１つのフィルタ部ｆ（２）のメモリ量（２０４８ビット）を用いて、３つのハッシュ値を２０４８で割った余りを算出する。そして、登録部１３は、図５に示すように算出された余り「１６７１」、「６５２」、「１５９５」を１段目のブルームフィルタ１８（１）においてデータが登録されたフィルタ部ｆ（１）に対応する２段目のブルームフィルタ１９（２）のフィルタ部ｆ（２）に登録する。ここで、「データが登録されたフィルタ部ｆ（１）に対応するフィルタ部ｆ（２）」とは、データが登録されたフィルタ部ｆ（１）の真上に位置するフィルタ部ｆ（２）（図６においてハッチングを付して示すフィルタ部ｆ（２））を意味する。この登録においては、ハッチングを付して示すフィルタ部ｆ（２）の２０４８ビットのうち、１６７１ビット、６５２ビット、１５９５ビットをＯＮにする。
【００３０】
次いで、ステップＳ１８では、登録部１３は、ｐがｈ（ここでは、ｈ＝３）であるか否かを判断する。ここでの判断が否定されると、ステップＳ２０に移行し、登録部１３は、ｐを１インクリメント（ｐ←ｐ＋１、すなわちＰ←３）して、ステップＳ１６に戻る。
【００３１】
次のステップＳ１６では、登録部１３は、ｐ段目（ここでは、３段目）のブルームフィルタ１８（３）にデータエントリを登録する。この場合、登録部１３は、３段目のブルームフィルタ１８（３）の１つのフィルタ部ｆ（３）のメモリ量（４０９６ビット）を用いて、３つのハッシュ値を４０９６で割った余りを算出する。そして、登録部１３は、図５に示すように算出された余り「１６７１」、「２７００」、「１５９５」を１、２段目のブルームフィルタ１８（１）、１８（２）においてデータが登録されたフィルタ部に対応する３段目のブルームフィルタ１８（３）のフィルタ部ｆ（３）に登録する。この登録では、フィルタ部ｆ（３）の４０９６ビットのうち、１６７１ビット、２７００ビット、１５９５ビットをＯＮにする。図６の３段目のブルームフィルタ１８（３）では、当該ブルームフィルタのフィルタ部ｆ（３）に対象データのエントリが登録された状態が示されている。
【００３２】
以上のようにして、ステップＳ１６の処理が終了すると、ステップＳ１８の判断が肯定されるので、図４の対象データの登録処理が全て終了することとなる。
【００３３】
（データ（エントリ）の検索方法）
次に、データ（エントリ）の検索方法について、図７のフローチャートに沿って、その他の図面を適宜参照しつつ説明する。
【００３４】
図７のフローチャートでは、まず、ステップＳ３０において、ＣＰＵ１２の検索部１５が、段数を示すパラメータｐをｈ（ここではｈ＝３）に設定する。次いで、ステップＳ３２では、検索部１５が、ｈ段目のブルームフィルタの全フィルタ部を対象フィルタに設定する。本実施形態では、図３における３段目のブルームフィルタ１８（３）の１つのフィルタ部ｆ（３）が対象フィルタに設定される。
【００３５】
次いで、検索部１５は、ステップＳ３４において、検索対象データの検索要求を受領したか否かを判断する。ここでの判断が肯定されると、ステップＳ３６に移行し、ハッシュ値生成部１６が、検索対象データのｋ個（ここでは３個）のハッシュ値を計算する。本実施形態では、図８に示すような３つのハッシュ値「８３２４７９７」、「５８９０８３１」、「３９８０３３９」が算出されたものとする。
【００３６】
次いで、ステップＳ３８では、検索部１５が、ｐ段目（３段目）の対象フィルタにおいて、ｋ個のハッシュ値を用いた照合を行う。この照合では、検索部１５は、登録の場合と同様、図８に示すように、ハッシュ値を３段目のビット数（４０９６）で除したときの余り「１７２５」、「７８３」、「３１２３」ビットを算出する。そして、検索部１５は、これら各ビットが、対象フィルタ部においてＯＮになっているか否かを判定する。
【００３７】
次いで、ステップＳ４０では、検索部１５が、余りのビットの全てがＯＮであるフィルタ部の抽出を行う。なお、ここでは、対象フィルタ部において余りのビットの全てがＯＮになっていたものとする。図９では、余りのビットが全てＯＮになっていた対象フィルタに、「○」印を付し、余りのビットの全てがＯＮではなかった対象フィルタに、「×」印を付している。なお、「○」印が付されたフィルタ部は、陽性、又は疑陽性のフィルタ部であると言うことができ、「×」印が付されたフィルタ部は、陰性のフィルタ部であると言うことができる。
【００３８】
次いで、ステップＳ４２では、検索部１５は、抽出されたフィルタ部があったか否かを判断する。ここでの判断が否定された場合には、ステップＳ５６に移行し、検索部１５は、検索対象データが新たなデータ、すなわちＨＤＤ２０に記憶されていないデータであるとの判定を行い、図７の全処理を終了する。一方、ステップＳ４２の判断が肯定された場合には、ステップＳ４４に移行する。
【００３９】
ステップＳ４４では、検索部１５は、ｐが１であるか否かを判断する。ここでの判断が否定された場合には、ステップＳ４６に移行し、検索部１５は、抽出されたフィルタ部に対応する（ｐ−１）段目のフィルタ部を新たな対象フィルタ部に設定する。本実施形態では、３段目のフィルタ部ｆ（３）の直下に位置する２段目の２つのフィルタ部ｆ（２）の両方が対象フィルタ部に設定されることになる。
【００４０】
次いで、ステップＳ４８では、検索部１５が、ｐを１デクリメント（ｐ←ｐ−１，ここではｐ←２）した後、ステップＳ３８に戻る。
【００４１】
ステップＳ３８では、検索部１５が、ｐ段目（２段目）の対象フィルタ部において、ｋ個（３個）のハッシュ値を用いた照合を行う。この照合では、検索部１５は、ハッシュ値を２段目のビット数（２０４８）で除したときの余り「１７２５」、「７８３」、「１０７５」を算出し、これらのビットが、対象フィルタ部ｆ（２）においてＯＮになっているか否かを判定する。そして、ステップＳ４０では、検索部１５は、余りのビットの全てがＯＮになっていたフィルタ部を抽出する。なお、ここでは、図９の２段目のブルームフィルタ１８（２）の左側のフィルタ部ｆ（２）のみが抽出されたものとする。
【００４２】
次いで、ステップＳ４２では、検索部１５は、抽出されたフィルタ部があったか否かを判断する。ここでの判断が否定された場合には、ステップＳ５６に移行するが、肯定された場合には、ステップＳ４４に移行する。ステップＳ４４では、検索部１５が、ｐが１であるか否かを判断する。ここでの判断が否定された場合には、ステップＳ４６に移行し、検索部１５が、抽出されたフィルタ部に対応する（ｐ−１）段目のフィルタ部を新たな対象フィルタ部に設定する。本実施形態では、２段目の左端のフィルタ部ｆ（２）の直下に位置する１段目の２つのフィルタ部（左端及び左から２番目のフィルタ部ｆ（１））が対象フィルタ部に設定されることになる。
【００４３】
次いで、ステップＳ４８では、検索部１５がｐを１デクリメント（ｐ←ｐ−１，ここではｐ←１）した後、ステップＳ３８に戻る。ステップＳ３８では、検索部１５が、ｐ段目（１段目）の対象フィルタにおいて、ｋ個（３個）のハッシュ値を用いた照合を行う。この照合では、検索部１５は、ハッシュ値を１段目のビット数（１０２４）で除したときの余り「７０１」、「７８３」、「５１」を算出し、これらのビットが、対象フィルタ部においてＯＮになっているか否かを判定する。そして、ステップＳ４０では、検索部１５は、余りのビットの全てがＯＮになっていたフィルタ部を抽出する。なお、ここでは、図９の１段目のブルームフィルタ１８（１）の左端のフィルタ部のみが抽出されたものとする。
【００４４】
次いで、ステップＳ４２では、検索部１５は、抽出されたフィルタ部があったか否かを判断する。ここでの判断が否定された場合には、ステップＳ５６に移行するが、肯定された場合には、ステップＳ４４に移行する。ステップＳ４４では、検索部１５が、ｐが１であるか否かを判断する。ここでの判断が肯定されると、ステップＳ５０に移行する。
【００４５】
ステップＳ５０では、検索部１５は、抽出されたフィルタ部に対応するディスクブロックを読み出してデータの有無をチェックする。このステップＳ５２においてデータの有無を実際にチェックするのは、ブルームフィルタでは、疑陽性の発生の可能性があり、抽出されたフィルタ部に対応するデータブロックにデータが存在しない場合があるからである。なお、疑陽性については、後述する。
【００４６】
次いで、ステップＳ５２では、検索部１５は、対象データが存在していた否かを判断する。ここでの判断が肯定された場合には、ステップＳ５４において検索対象データがＨＤＤ２０に保存されていると判定して、図７の全処理を終了する。一方、ステップＳ５２の判断が否定された場合には、ステップＳ５０に戻り、検索部１５は、抽出されたフィルタ部が複数あれば、先ほどチェックしたフィルタ部以外のフィルタ部に対応するディスクブロックを読み出して、検索対象データが存在するか否かをチェックする。
【００４７】
なお、上記においては、ブルームフィルタが３段で、ディスクブロックが４個である場合を例に採り説明したが、図４、図７の処理は、ブルームフィルタの段数、ディスクブロックの個数等にかかわらず、実行することができる。
【００４８】
次に、ブルームフィルタの疑陽性による影響について説明する。
【００４９】
疑陽性とは、図１０の１段目のブルームフィルタの左端のフィルタ部に示すように、検索対象データがないにもかかわらず、対応するデータブロックに検索対象データが存在すると判定される場合をいう。ブルームフィルタには、このような疑陽性が発生する可能性がある。
【００５０】
ブルームフィルタの疑陽性の発生確率ＦＰＲは、ビット長がｍのブルームフィルタがｈ段ある場合、エントリ数ｎ（ｎ＜ｍ）、ハッシュ関数の個数をｋ個とすると、ブルームフィルタの性質より、次式（２）のように表すことができる。
ＦＰＲ=（１−（１−１／ｍ)kn)k≒（１−ｅ(-kn/m)）k        …（２）
【００５１】
この場合、ｋ，ｍ，ｎを変更することにより、ＦＰＲを非常に小さくすることができる。すなわち、本実施形態では、ｋ，ｍ、ｎの設定次第で、ＦＰＲを１よりも非常に小さい値（ほぼ０）に設定することができるようになる。このため、図７のステップＳ５２の判断が否定される可能性をほぼ０とすることができる（つまりＦＰＲ＝０)ので、ステップＳ５０におけるデータのチェック回数をほぼ１回（１＋ＦＰＲ）に抑えることが可能である。
【００５２】
また、上述したように、本実施形態では、ｘ(h-1)＝ｂの関係が成り立っていることから、高さ（段数）ｈは、次式（３）にて表すことができる。
ｈ＝log（ｂ）／log（ｘ）＋１              …（３）
【００５３】
上記は、log(b)/log(x)が割り切れる場合を前提にしたが、そうでない場合、段によりｘの値を他の段とは変えることで、ｈを決定することができる。
【００５４】
ここで、一つのフィルタ部ではハッシュ値の数（ｋ回（定数））だけ照合を行う必要があり、検索における１段あたりのフィルタ部の数は多くてもｘである。したがって、検索によるメモリアクセス回数Ｍは、最大でも次式（３）で表される程度である。
Ｍ＝ｋ×ｘ×log（ｂ）／log（ｘ）        …（３）
【００５５】
すなわち、高さ（段数）ｈ（＝メモリ量）は、ｘを増やすことにより小さくすることができ、その一方で、検索回数はｘの増加とともに大きくなるというトレードオフの関係にある。したがって、この関係を考慮することで、適切なメモリの運用が可能となる。
【００５６】
以上、詳細に説明したように、本実施形態によると、メモリ１４が、複数段のブルームフィルタ１８を有し、当該ブルームフィルタの１段目が、複数のデータブロックと少なくとも同一数のフィルタ部ｆ（１）に分割され、ｐ（ｐは２以上の整数）段目が、（ｐ−１）段目のフィルタ部を複数個まとめた大きさのフィルタ部に分割されている。また、ハッシュ値生成部１６により生成されたデータのハッシュ値を用いてデータのエントリを複数段のブルームフィルタそれぞれに登録する登録部１３は、１段目のブルームフィルタにおいて、データが記憶されているデータブロックに対応するフィルタ部にデータのエントリを登録するとともに、ｐ段目のブルームフィルタにおいて、１段目のブルームフィルタで前記データのエントリが登録されたフィルタ部に対応するフィルタ部にデータのエントリを登録する。更に、検索部１５は、検索対象のデータのエントリが１段目のブルームフィルタのフィルタ部のいずれに登録されているかを、ブルームフィルタの段数の大きい側から絞り込みながら検索する。このように、本実施形態では、データが記憶されているデータブロックに対応する多段ブルームフィルタの各フィルタ部にデータのエントリを登録をすることで、検索対象データを読み出すためのＨＤＤ２０に対するアクセス（Ｉ／Ｏ）を、ほぼ１回とすることができる。また、本実施形態では、管理するデータのビット長（例えば１６０ビット）とは関係なく、メモリ１４の大きさに合わせて、ブルームフィルタの段数ｈを変更することができるので、メモリ効率を向上することが可能である。また、エントリの追加によりブルームフィルタの構造等が変化することがないため、簡易にエントリの追加を行うことができる。
【００５７】
なお、上記実施形態では、図１０のように、検索対象データが存在する可能性のあるデータブロックが複数ある場合に、当該可能性のあるデータブロックを全て抽出した上で、データブロックのチェックを行う場合について説明した。しかしながら、これに限られるものではなく、例えば、図１１に示すように、検索対象データが存在する可能性のあるデータブロックを１つ抽出した直後に、当該データブロックのチェックを行うこととしても良い。この場合、当該データブロックにデータがないと判断された場合にのみ、次のデータブロックのチェックを行うこととすれば良い。このようにすることで、データチェックの効率を向上することが可能となる。
【００５８】
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。
【符号の説明】
【００５９】
１３  登録部（登録手段）
１４  メモリ（メモリ手段）
１５  検索部（検索手段）
１６  ハッシュ値生成部（ハッシュ値生成手段）
１８  多段ブルームフィルタ
１００  情報処理システム（データ管理装置）
【図１】
2011186954.tif 000003
【図２】
2011186954.tif 000004
【図３】
2011186954.tif 000005
【図４】
2011186954.tif 000006
【図５】
2011186954.tif 000007
【図６】
2011186954.tif 000008
【図７】
2011186954.tif 000009
【図８】
2011186954.tif 000010
【図９】
2011186954.tif 000011
【図１０】
2011186954.tif 000012
【図１１】
2011186954.tif 000013