(57)【特許請求の範囲】
【請求項１】
データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがｍ個配列されたブルームフィルタが前記所定数のデータブロック単位でｎ個配列されたブルームフィルタ列と、にアクセス可能なコンピュータに、
前記ブルームフィルタ列の転置要求を受け付ける受付工程と、
前記受付工程によって転置要求が受け付けられた場合、前記ブルームフィルタ列を、前記各ブルームフィルタ内のビット列を同一位置のビットどうしでまとめたｎビットの転置ブルームフィルタがｍ個配列された転置ブルームフィルタ列に転置して記憶装置に保存する転置工程と、
複数種類のハッシュ関数に基づいて、前記ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する変換工程と、
前記転置ブルームフィルタ列の中から、前記変換工程によって変換された位置情報に対応する転置ブルームフィルタを前記位置情報ごとに特定する第１の特定工程と、
前記第１の特定工程によって特定された複数の転置ブルームフィルタに共通する位置情報に基づいて、前記データブロック集合内での前記検索対象データの有無を判定する判定工程と、
を実行させることを特徴とする検索プログラム。
【請求項２】
前記受付工程は、
前記コンピュータの起動完了通知を、前記ブルームフィルタ列の転置要求として受け付けることを特徴とする請求項１に記載の検索プログラム。
【請求項３】
前記受付工程は、
前記データブロック集合に対する検索要求を、前記ブルームフィルタ列の転置要求として受け付けることを特徴とする請求項１に記載の検索プログラム。
【請求項４】
前記第１の特定工程によって特定された複数の転置ブルームフィルタに共通する位置情報に対応するブルームフィルタを、前記ブルームフィルタ列の中から特定する第２の特定工程と、
前記第２の特定工程によって特定されたブルームフィルタを配列要素とするブルームフィルタ列が存在するか否かを判断する判断工程と、を前記コンピュータに実行させ、
前記判定工程は、
前記判断工程によって存在しないと判断された場合、前記データブロック集合のうち、前記第２の特定工程によって特定されたブルームフィルタに対応するデータブロック内での前記検索対象データの有無を判定することを特徴とする請求項１〜３のいずれか一つに記載の検索プログラム。
【請求項５】
データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがｍ個配列されたｎ個のブルームフィルタ内のビット列を同一位置のビットどうしでまとめたｎビットの転置ブルームフィルタをｍ個配列した転置ブルームフィルタ列と、にアクセス可能なコンピュータに、
複数種類のハッシュ関数に基づいて、前記ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する変換工程と、
前記転置ブルームフィルタ列の中から、前記変換工程によって変換された位置情報に対応する転置ブルームフィルタを前記位置情報ごとに特定する第１の特定工程と、
前記第１の特定工程によって特定された複数の転置ブルームフィルタに共通する位置情報に対応するブルームフィルタを、前記ブルームフィルタ列の中から特定する第２の特定工程と、
前記第２の特定工程によって特定されたブルームフィルタを配列要素とするブルームフィルタ列が存在するか否かを判断する判断工程と、
前記判断工程によって存在しないと判断された場合、前記データブロック集合のうち、前記第２の特定工程によって特定されたブルームフィルタに対応するデータブロック内での前記検索対象データの有無を判定する判定工程と、
をコンピュータに実行させることを特徴とする検索プログラム。
【請求項６】
前記第１の特定工程は、
前記判断工程によって存在すると判断された場合、前記第２の特定工程によって特定されたブルームフィルタを配列要素とするブルームフィルタ列を特定対象ブルームフィルタ列とし、前記特定対象ブルームフィルタ列から転置された転置ブルームフィルタ列を特定対象転置ブルームフィルタ列とすることにより、前記特定対象転置ブルームフィルタ列の中から、前記変換工程によって変換された位置情報に対応する特定対象転置ブルームフィルタを前記位置情報ごとに特定し、
前記第２の特定工程は、
前記第１の特定工程によって特定された複数の特定対象転置ブルームフィルタに共通する位置情報に対応するブルームフィルタを、前記特定対象ブルームフィルタ列の中から特定することを特徴とする請求項４または５に記載の検索プログラム。
【請求項７】
データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがｍ個配列されたブルームフィルタが前記所定数のデータブロック単位でｎ個配列されたブルームフィルタ列と、にアクセス可能な検索装置であって、
前記ブルームフィルタ列の転置要求を受け付ける受付手段と、
前記受付手段によって転置要求が受け付けられた場合、前記ブルームフィルタ列を、前記各ブルームフィルタ内のビット列を同一位置のビットどうしでまとめたｎビットの転置ブルームフィルタがｍ個配列された転置ブルームフィルタ列に転置して記憶装置に保存する転置手段と、
複数種類のハッシュ関数に基づいて、前記ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する変換手段と、
前記転置ブルームフィルタ列の中から、前記変換手段によって変換された位置情報に対応する転置ブルームフィルタを前記位置情報ごとに特定する第１の特定手段と、
前記第１の特定手段によって特定された複数の転置ブルームフィルタに共通する位置情報に基づいて、前記データブロック集合内での前記検索対象データの有無を判定する判定手段と、
を備えることを特徴とする検索装置。
【請求項８】
データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがｍ個配列されたブルームフィルタが前記所定数のデータブロック単位でｎ個配列されたブルームフィルタ列と、にアクセス可能なコンピュータが、
前記ブルームフィルタ列の転置要求を受け付ける受付工程と、
前記受付工程によって転置要求が受け付けられた場合、前記ブルームフィルタ列を、前記各ブルームフィルタ内のビット列を同一位置のビットどうしでまとめたｎビットの転置ブルームフィルタがｍ個配列された転置ブルームフィルタ列に転置して記憶装置に保存する転置工程と、
複数種類のハッシュ関数に基づいて、前記ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する変換工程と、
前記転置ブルームフィルタ列の中から、前記変換工程によって変換された位置情報に対応する転置ブルームフィルタを前記位置情報ごとに特定する第１の特定工程と、
前記第１の特定工程によって特定された複数の転置ブルームフィルタに共通する位置情報に基づいて、前記データブロック集合内での前記検索対象データの有無を判定する判定工程と、
を実行することを特徴とする検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブルームフィルタを用いてデータを検索する検索プログラム、検索装置、および検索方法に関する。
【背景技術】
【０００２】
従来、大規模なデータを木構造で管理する場合、Ｂ木（Ｂｔｒｅｅ）と呼ばれるデータ構造での管理が比較的多く行われていた。Ｂ木は、単純な２分木に比べて、一つのブロックに複数のデータエントリを格納するので、データエントリの追加があっても木構造の形の変化が波及する範囲を狭くできるという利点がある。このため、Ｂ木はハードディスクなどのディスク向けのデータ管理方法として利用されることが多い。
【０００３】
しかしながら、ディスク上において木構造で管理されたデータを検索する場合、複数のデータブロックを実際に読み込む必要がある。また、一般に、ディスクに対するＩ／Ｏ（ｉｎｐｕｔ／ｏｕｔｐｕｔ）は、メモリアクセスに比べると遅いことから、ディスク上でのデータ検索には手間と時間を要するおそれがある。
【０００４】
このため、最近では、ディスクＩ／Ｏによる検索の遅延を避けるためには、メモリ中に木構造をもつなどの対応も考えられている。しかるに、Ｂ木では、データエントリ数が多くなると、それに応じて必要なメモリ量が増えてしまうおそれがある。このため、木構造のうち最も良く読みこまれる部分のみをメモリ中に格納する方法（キャッシュ）を利用する方法も考えられている。
【０００５】
これに対し、最近では、ブルームフィルタ（Ｂｌｏｏｍ  Ｆｉｌｔｅｒ）と呼ばれるデータ構造も知られてきている。ブルームフィルタは、あるエントリが既存の集合に属するかどうかを効率的に調べる方法である。また、電子交換機のダイヤルパルス処理で、ダイヤルパルスにパルス速度ビットと偶数／奇数ビットの２つを設けておき、そのビットを取り込む群処理も開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−５２６９８号公報
【特許文献２】特開平４−１８８９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述したように、Ｂ木は多量のデータを扱うことができるため、キャッシュを適切に実装すれば、ディスクＩ／Ｏを減らすことは可能である。しかしながら、その回数はある一定以上減らすことはできない。また、データエントリの追加により木構造が変化すると、木構造管理のためのＩ／Ｏが必要になることもある。また、ブルームフィルタは、データエントリの存在だけがわかるものであるため、そのままではデータ管理に使うことはできない。
【０００８】
本発明は、上述した従来技術による問題点を解消するため、ブルームフィルタを用いたときのデータ検索の高速化を図ることができる検索プログラム、検索装置、および検索方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがｍ個配列されたブルームフィルタが前記所定数のデータブロック単位でｎ個配列されたブルームフィルタ列と、にアクセス可能な場合に、前記ブルームフィルタ列の転置要求を受け付け、転置要求が受け付けられた場合、前記ブルームフィルタ列を、前記各ブルームフィルタ内のビット列を同一位置のビットどうしでまとめたｎビットの転置ブルームフィルタがｍ個配列された転置ブルームフィルタ列に転置し、転置された転置ブルームフィルタ列を用いて、前記データブロック集合内でのデータの有無を判定することを要件とする。
【発明の効果】
【００１０】
本発明にかかる検索プログラム、検索装置、および検索方法によれば、ブルームフィルタを用いたときのデータ検索の高速化を図ることができることという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】実施の形態にかかる管理装置のハードウェア構成例を示すブロック図である。
【図２】本実施の形態にかかる管理装置の構成例を示すブロック図である。
【図３】ハッシュテーブル群の一例を示す説明図である。
【図４】階層型ブルームフィルタの一例を示す説明図である。
【図５】登録処理部による階層型ブルームフィルタの学習処理例を示す説明図である。
【図６】検索処理部による階層型ブルームフィルタの検索処理例を示す説明図である。
【図７】階層型ブルームフィルタ内の第ｐ段のブルームフィルタ列の転置例を示す説明図である。
【図８】検索処理部による階層型転置ブルームフィルタの検索処理例を示す説明図である。
【図９】検索処理部の機能的構成例を示すブロック図である。
【図１０】登録処理部による階層型ブルームフィルタの学習処理手順を示すフローチャートである。
【図１１】検索処理部による検索処理手順を示すフローチャート（その１）である。
【図１２】検索処理部による検索処理手順を示すフローチャート（その２）である。
【図１３】登録処理部による階層型転置ブルームフィルタｔＢＦの学習処理例を示す説明図である。
【図１４】登録処理部による階層型ブルームフィルタＢＦの学習処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明にかかる検索プログラム、検索装置、および検索方法の実施の形態を詳細に説明する。まず、本実施の形態にかかる管理装置の構成例について説明する。
【００１３】
＜管理装置のハードウェア構成例＞
図１は、実施の形態にかかる管理装置のハードウェア構成例を示すブロック図である。図１において、検索装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、磁気ディスクドライブ１０４と、磁気ディスク１０５と、光ディスクドライブ１０６と、光ディスク１０７と、ディスプレイ１０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０９と、キーボード１１０と、マウス１１１と、スキャナ１１２と、プリンタ１１３と、を備えている。また、各構成部はバス１００によってそれぞれ接続されている。
【００１４】
ここで、ＣＰＵ１０１は、管理装置の全体の制御を司る。ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵ１０１のワークエリアとして使用される。磁気ディスクドライブ１０４は、ＣＰＵ１０１の制御にしたがって磁気ディスク１０５に対するデータのリード／ライトを制御する。磁気ディスク１０５は、磁気ディスクドライブ１０４の制御で書き込まれたデータを記憶する。
【００１５】
光ディスクドライブ１０６は、ＣＰＵ１０１の制御にしたがって光ディスク１０７に対するデータのリード／ライトを制御する。光ディスク１０７は、光ディスクドライブ１０６の制御で書き込まれたデータを記憶したり、光ディスク１０７に記憶されたデータをコンピュータに読み取らせたりする。
【００１６】
ディスプレイ１０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００１７】
インターフェース（以下、「Ｉ／Ｆ」と略する。）１０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１１４に接続され、このネットワーク１１４を介して他の装置に接続される。そして、Ｉ／Ｆ１０９は、ネットワーク１１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００１８】
キーボード１１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス１１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００１９】
スキャナ１１２は、画像を光学的に読み取り、管理装置内に画像データを取り込む。なお、スキャナ１１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ１１３は、画像データや文書データを印刷する。プリンタ１１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００２０】
＜管理装置の機能的構成例＞
図２は、本実施の形態にかかる管理装置の構成例を示すブロック図である。管理装置２００は、データブロック集合ｄｂと、ハッシュテーブル群ＨＴｓと、階層型ブルームフィルタＢＦと、階層型転置ブルームフィルタｔＢＦと、登録処理部２０１と、検索処理部２０２と、を備えている。
【００２１】
データブロック集合ｄｂは、複数のデータブロックを有しており、各データブロックは、登録されたデータを保持している。なお、個々のデータブロックをｄｂ＃と表記する。＃は数字であり、ブロック番号を示す。ブロック番号＃は、そのデータブロックｄｂ＃のビット位置に対応する。
【００２２】
ハッシュテーブル群ＨＴｓは、データブロック集合ｄｂ内の各データブロックｄｂ＃に対応するハッシュテーブルの集合である。なお、個々のハッシュテーブルをＨＴ＃と表記する。＃は数字であり、データブロックｄｂ＃のブロック番号と一致する。ハッシュテーブルＨＴ＃は、データをある特定のハッシュ関数に与えたときのハッシュ値と、ハッシュ値の生成元となるデータ（データそのものでもデータへのポインタでもよい）を関連付けたテーブルである。
【００２３】
図３は、ハッシュテーブル群ＨＴｓの一例を示す説明図である。図３では、ハッシュ関数としてＳＨＡ−１を用いている。なお、どのハッシュ関数を用いるかはあらかじめ設定しておけばよい。
【００２４】
図２に戻って、階層型ブルームフィルタＢＦは、ブルームフィルタを階層構造にしたインデックス情報である。階層型ブルームフィルタＢＦについては後述する。ブルームフィルタとは、所定数のデータブロック内での擬陽性（疑陽性、偽陽性ともいう）／陰性を示すビットが複数配列されたインデックス情報である。ブルームフィルタのビットがＯＮのときは擬陽性を示し、ＯＦＦのときは陰性を示す。なお、ビットの値が１をＯＮとし、０をＯＦＦとしてもよく、逆に、ビットの値が０をＯＮとし、１をＯＦＦとしてもよい。本実施の形態では、ビットの値が１をＯＮとし、０をＯＦＦとする。
【００２５】
階層型転置ブルームフィルタｔＢＦは、階層型ブルームフィルタＢＦを転置したインデックス情報である。階層型転置ブルームフィルタｔＢＦは、検索処理部２０２により生成される。階層型転置ブルーフィルタｔＢＦの詳細は後述する。
【００２６】
データブロック集合ｄｂ、ハッシュテーブル群ＨＴｓ、および階層型ブルームフィルタＢＦは、図１に示したＲＯＭ１０２、ＲＡＭ１０３、磁気ディスク１０５などの記憶装置に記憶される。また、図２では、データブロック集合ｄｂ、ハッシュテーブル群ＨＴｓ、および階層型ブルームフィルタＢＦは、管理装置２００内に記憶させているが、管理装置２００外の外部装置に記憶させてもよい。この場合、管理装置２００は、ネットワークを介して外部装置から読み出したり、外部装置に書き込んだりする。
【００２７】
登録処理部２０１は、データブロック集合ｄｂに登録したいデータがエントリされると、データブロック集合ｄｂの空き領域に登録する。データの登録の際には、ハッシュ関数によりハッシュ値を求め、登録先のデータブロックｄｂ＃に対応するハッシュテーブルＨＴ＃に、データ（またはそのポインタ）とハッシュ値とを追加する。また、登録先のデータブロックｄｂ＃にデータが新規に登録されたことを階層型ブルームフィルタＢＦに学習させるため、登録処理部２０１は、階層型ブルームフィルタＢＦを更新する。
【００２８】
検索処理部２０２は、検索対象データが入力されると、階層型ブルームフィルタＢＦを参照して、検索対象データが存在するであろうデータブロックｄｂ＃を特定する。検索対象データが存在するであろうデータブロックｄｂ＃が特定されなかった場合は、いずれのデータブロックｄｂ＃にも検索対象データは存在しない（陰性）。逆に、検索対象データが存在するであろうデータブロックｄｂ＃が特定された場合でも、特定されたデータブロックｄｂ＃には、必ずしも検索対象データが存在するとは限らない（擬陽性）。
【００２９】
なお、擬陽性が陽性になるか陰性になるかは、検索処理部２０２により最終的に特定されたデータブロックｄｂ＃に対応するハッシュテーブルＨＴ＃での検索結果に依存する。たとえば、検索処理部２０２により最終的に特定されたデータブロックｄｂ＃に対応するハッシュテーブルＨＴ＃において、検索対象データのハッシュ値がヒットすれば陽性、ヒットしなければ陰性となる。
【００３０】
なお、上述した登録処理部２０１および検索処理部２０２は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、磁気ディスク１０５、光ディスク１０７などの記憶装置に記憶されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００３１】
＜階層型ブルームフィルタＢＦ＞
図４は、階層型ブルームフィルタＢＦの一例を示す説明図である。階層型ブルームフィルタＢＦは、ｈ段×ｓビット幅のメモリ領域で構成されている。ｓビット幅は、データブロック集合ｄｂのビット幅に対応する。また、各段のビット長ｓは最上段である第ｈ段の分割数ｄに基づいて分割される。分割された各々はブルームフィルタであり、各段においてブルームフィルタ列を構成する。分割数ｄは基本的には２以上の整数であるが、最上段である第ｈ段を単一のブルームフィルタとする場合は、ｄ＝１としてもよい。
【００３２】
任意の段をｐとすると、第ｐ段のブルームフィルタ列ＢＦ（ｐ）を構成するブルームフィルタｂｆ（ｐ）のビット幅ｍは、ｍ＝ｓ／ｄ[h-(p-1)]となる。図４では、ｄ＝２としている。また、第ｐ段のブルームフィルタ列ＢＦ（ｐ）のブルームフィルタｂｆ（ｐ）の配列数ｎは、ｎ＝ｄ[h-(p-1)]となる。
【００３３】
したがって、階層型ブルームフィルタＢＦでは、段が下がる（ｈが小さくなる）につれ、第ｐ段のブルームフィルタ列ＢＦ（ｐ）のブルームフィルタｂｆ（ｐ）の配列数が増加する。なお、最下段（第１段）のブルームフィルタ列Ｂｆ（１）のブルームフィルタｂｆ（１）の配列個数は、データブロックｄｂ＃の個数と同一とする。
【００３４】
これにより、第１段までたどり着いたときにビットしたブルームフィルタｂｆ（１）とデータブロックｄｂ＃とが一対一対応することになる。また、階層型ブルームフィルタＢＦの段数ｈは基本的には複数段であるが、１段（ｈ＝１）としてもよい。ただし、この場合は、ｄ≠１とする。
【００３５】
＜階層型ブルームフィルタＢＦの学習処理例＞
図５は、登録処理部２０１による階層型ブルームフィルタＢＦの学習処理例を示す説明図である。図５では、説明上、全ビット幅ｓ＝４０９６ビット、段数ｈ＝３段、第ｈ段での分割数ｄ＝２とする。
【００３６】
したがって、最下段である第１段のブルームフィルタ列ＢＦ（１）は、８（＝ｄ[h-(p-1)]＝２3）分割されてブルームフィルタｂｆ（１−１）〜ｂｆ（１−８）により構成される。また、第２段のブルームフィルタ列ＢＦ（２）は、４（＝ｄ[h-(p-1)]＝２2）分割されてブルームフィルタｂｆ（２−１）〜ｂｆ（２−４）により構成される。また、最上段である第３段のブルームフィルタ列ＢＦ（３）は、２（＝ｄ[h-(p-1)]＝２1）分割されてブルームフィルタｂｆ（３−１）〜ｂｆ（３−２）により構成される。
【００３７】
また、登録される対象データＤが与えられるハッシュ関数の種類数ｋをｋ＝３とする。ここでは、ハッシュ関数Ｈ１（），Ｈ２（），Ｈ３（）を用いることとする。また、ハッシュテーブルの登録対象となるハッシュ関数をＨ１（）とする。
【００３８】
まず、データブロック集合ｄｂのうちデータブロックｄｂ３に対象データＤが登録されたものとする。対象データＤを各ハッシュ関数Ｈ１（），Ｈ２（），Ｈ３（）に与えたときのハッシュ値は、例として以下の値とする。
Ｈ１（Ｄ）＝１２３４５６７
Ｈ２（Ｄ）＝３９８４０１２
Ｈ３（Ｄ）＝９８０３３２３
【００３９】
また、階層型ブルームフィルタＢＦの学習処理では、更新対象となるブルームフィルタ内の特定のビットをＯＮにするが、その特定のビットがすでにＯＮになっている場合はそのままとする。
【００４０】
ここで、登録処理部２０１は、登録先のデータブロックｄｂ３のブロック番号３のハッシュテーブルＨＴ３に対するハッシュテーブルエントリＥ３を作成する。そして、登録処理部２０１は、作成されたハッシュテーブルエントリＥ３を、ハッシュテーブルＨＴ３に追加登録する。
【００４１】
つぎに、登録処理部２０１は、更新対象となるブルームフィルタを、第１段のブルームフィルタ列ＢＦ（１）の中から特定する。最下段では、登録先のデータブロックｄｂ３のブロック番号３と同一配列番号であるブルームフィルタｂｆ（１−３）が対応する。したがって、ブルームフィルタｂｆ（１−３）を更新対象とする。ブルームフィルタｂｆ（１−３）は５１２ビットのビット列である。
【００４２】
また、登録処理部２０１は、各ハッシュ値を、第１段のブルームフィルタｂｆ（１）のビット幅である５１２で割り算し、余り値を算出する。ハッシュ値Ｈ１（Ｄ）の余り値は「１３５」、ハッシュ値Ｈ２（Ｄ）の余り値は「１４０」、ハッシュ値Ｈ３（Ｄ）の余り値は「５９」になったものとする。
【００４３】
つぎに、登録処理部２０１は、更新対象のブルームフィルタにおいて余り値に対応する位置のビットをＯＮにする。なお、余り値が０の場合は、更新対象のブルームフィルタの末尾ビットをＯＮにする。図５の例では、ブルームフィルタｂｆ（１−３）は、５１２ビット有するため、余り値「１３５」については、先頭から１３５番目のビットをＯＮにする。同様に、余り値「１４０」については、先頭から１４０番目のビットをＯＮにする。余り値「５９」については、先頭から５９番目のビットをＯＮにする。これにより、第１段での学習処理を終了する。
【００４４】
つぎに、第２段の学習処理に移る。登録処理部２０１は、更新対象となるブルームフィルタを、第２段のブルームフィルタ列ＢＦ（２）の中から特定する。具体的には、第１段での更新対象のブルームフィルタｂｆ（１−３）のビット位置を包含するブルームフィルタを、第２段のブルームフィルタ列ＢＦ（２）の中から特定する。本例では、ブルームフィルタｂｆ（２−２）となる。より具体的には、前段の第１段での更新対象のブルームフィルタｂｆ（１−３）の配列番号３を、分割数ｄ（＝２）で割り算し、端数を切り上げることで、更新対象の配列番号は２となる。したがって、ブルームフィルタｂｆ（２−２）が特定される。
【００４５】
そして、登録処理部２０１は、各ハッシュ値を、第２段のブルームフィルタｂｆ（２）のビット幅である１０２４で割り算し、余り値を算出する。ハッシュ値Ｈ１（Ｄ）の余り値は「６４７」、ハッシュ値Ｈ２（Ｄ）の余り値は「６５２」、ハッシュ値Ｈ３（Ｄ）の余り値は「５７１」になったものとする。
【００４６】
つぎに、登録処理部２０１は、更新対象のブルームフィルタにおいて余り値に対応する位置のビットをＯＮにする。なお、余り値が０の場合は、更新対象のブルームフィルタの末尾ビットをＯＮにする。図５の例では、ブルームフィルタｂｆ（２−２）は、１０２４ビット有するため、余り値「６４７」については、先頭から６４７番目のビットをＯＮにする。同様に、余り値「６５２」については、先頭から６５２番目のビットをＯＮにする。余り値「５７１」については、先頭から５７１番目のビットをＯＮにする。これにより、第２段での学習処理を終了する。
【００４７】
つぎに、最上段である第３段の学習処理に移る。登録処理部２０１は、更新対象となるブルームフィルタを、第３段のブルームフィルタ列ＢＦ（３）の中から特定する。具体的には、第２段での更新対象のブルームフィルタｂｆ（２−２）のビット位置を包含するブルームフィルタを、第３段のブルームフィルタ列ＢＦ（３）の中から特定する。本例では、ブルームフィルタｂｆ（３−１）となる。より具体的には、前段の第２段での更新対象のブルームフィルタｂｆ（２−２）の配列番号２を、分割数ｄ（＝２）で割り算することで、更新対象の配列番号は１となる。したがって、ブルームフィルタｂｆ（３−１）が特定される。
【００４８】
そして、登録処理部２０１は、各ハッシュ値を、第３段のブルームフィルタｂｆ（３）のビット幅である２０４８で割り算し、余り値を算出する。ハッシュ値Ｈ１（Ｄ）の余り値は「１６７１」、ハッシュ値Ｈ２（Ｄ）の余り値は「６５２」、ハッシュ値Ｈ３（Ｄ）の余り値は「１５９５」になったものとする。
【００４９】
つぎに、登録処理部２０１は、更新対象のブルームフィルタにおいて余り値に対応する位置のビットをＯＮにする。なお、余り値が０の場合は、更新対象のブルームフィルタの末尾ビットをＯＮにする。図５の例では、ブルームフィルタｂｆ（３−１）は、２０４８ビット有するため、余り値「１６７１」については、先頭から１６７１番目のビットをＯＮにする。同様に、余り値「６５２」については、先頭から６５２番目のビットをＯＮにする。余り値「１５９５」については、先頭から１５９５番目のビットをＯＮにする。これにより、第３段での学習処理を終了する。
【００５０】
このような手順により、登録処理部２０１は、階層型ブルームフィルタＢＦにデータエントリを学習させることとなる。
【００５１】
＜階層型ブルームフィルタＢＦを用いた検索処理例＞
図６は検索処理部２０２による階層型ブルームフィルタＢＦの検索処理例を示す説明図である。図６では、図５と同一の階層型ブルームフィルタＢＦを用いて説明する。なお、図６では、図５で登録された対象データＤを検索対象データとして検索する例について説明する。
【００５２】
図５に示した学習処理では、最下段の第１段から処理したが、検索処理では最上段（図６の場合は第３段）から処理をおこなう。まず、検索処理部２０２は、対象データＤについての３個のハッシュ値を、第３段の各ブルームフィルタｂｆ（３）のビット幅２０４８で割り算したときの余り値「１６７１」、「６５２」、「１５９５」を求める。
【００５３】
つぎに、検索処理部２０２は、フィルタリング対象となるブルームフィルタを第３段のブルームフィルタ列ＢＦ（３）から特定する。第３段は最上段であるため、無条件で第３段のすべてのブルームフィルタｂｆ（３−１），ｂｆ（３−２）が特定される。
【００５４】
そして、検索処理部２０２は、フィルタリング対象に特定されたブルームフィルタ群の中から、算出した余り値に対応する位置のビットがすべてＯＮになっているブルームフィルタを特定する。第３段の場合、ブルームフィルタｂｆ（３−１），ｂｆ（３−２）はいずれも、算出した余り値に対応する位置のビットがすべてＯＮになっているものとする。これにより、第３段でのフィルタリング処理を終了する。
【００５５】
つぎに、第２段のフィルタリング処理に移る。検索処理部２０２は、対象データＤについての３個のハッシュ値を、第２段の各ブルームフィルタｂｆ（２）のビット幅１０２４で割り算したときの余り値「６４７」、「６５２」、「５７１」を求める。
【００５６】
つぎに、検索処理部２０２は、フィルタリング対象となるブルームフィルタを第２段のブルームフィルタ列ＢＦ（２）から特定する。最上段を除く残余の段の場合、１つ上の段において、算出した余り値に対応する位置のビットがすべてＯＮになっているブルームフィルタｂｆ（ｐ＋１）を探し、そのブルームフィルタｂｆ（ｐ＋１）のビット位置に包含されるブルームフィルタｂｆ（ｐ）をフィルタリング対象とする。
【００５７】
第２段の場合、第３段で算出した余り値に対応する位置のビットがすべてＯＮになっているブルームフィルタｂｆ（３−１），ｂｆ（３−２）のビット位置に包含されるブルームフィルタｂｆ（２−１）〜ｂｆ（２−４）をフィルタリング対象とする。
【００５８】
そして、検索処理部２０２は、フィルタリング対象に特定されたブルームフィルタ群の中から、算出した余り値に対応する位置のビットがすべてＯＮになっているブルームフィルタを特定する。第２段の場合、ブルームフィルタｂｆ（２−２），ｂｆ（２−３）は、算出した余り値に対応する位置のビットがすべてＯＮになっているものとする。一方、ブルームフィルタｂｆ（２−１），ｂｆ（２−４）については、算出した余り値に対応する位置のビットのいずれかがＯＦＦであるものとする。
【００５９】
したがって、ブルームフィルタｂｆ（２−１），ｂｆ（２−４）のビット位置に包含される下位の段のブルームフィルタｂｆ（１−１），ｂｆ（１−２），ｂｆ（１−７），ｂｆ（１−８）は、フィルタリング対象外となり、対象データＤの存在するデータブロックｄｂ＃は、ブルームフィルタｂｆ（２−２），ｂｆ（２−３）のビット位置に包含されるデータブロックｄｂ＃に絞り込まれる。これにより、第２段でのフィルタリング処理を終了する。
【００６０】
つぎに、最下段である第１段のフィルタリング処理に移る。検索処理部２０２は、対象データＤについての３個のハッシュ値を、第１段の各ブルームフィルタｂｆ（１）のビット幅５１２で割り算したときの余り値「１３５」、「１４０」、「５９」を求める。
【００６１】
つぎに、検索処理部２０２は、フィルタリング対象となるブルームフィルタを第１段のブルームフィルタ列ＢＦ（１）から特定する。第１段の場合、第２段で算出した余り値に対応する位置のビットがすべてＯＮになっているブルームフィルタｂｆ（２−２），ｂｆ（２−３）のビット位置に包含されるブルームフィルタｂｆ（１−３）〜ｂｆ（１−６）をフィルタリング対象とする。
【００６２】
そして、検索処理部２０２は、フィルタリング対象に特定されたブルームフィルタ群の中から、算出した余り値に対応する位置のビットがすべてＯＮになっているブルームフィルタを特定する。第１段の場合、ブルームフィルタｂｆ（１−３），ｂｆ（１−６）は、算出した余り値に対応する位置のビットがすべてＯＮになっているものとする。一方、ブルームフィルタｂｆ（１−４），ｂｆ（１−５）については、算出した余り値に対応する位置のビットのいずれかがＯＦＦであるものとする。
【００６３】
最下段では、これ以上、下位の段が存在しないため、ブルームフィルタｂｆ（１−３），ｂｆ（１−６）に擬陽性がある。検索処理部２０２は、特定されたブルームフィルタｂｆ（１−３）の配列番号「３」に対応するハッシュテーブルＨＴ３に、ハッシュ値Ｈ１（Ｄ）が登録されているかを判定する。ハッシュテーブルＨＴ３では、エントリＥ３が登録されているため、ハッシュテーブルＨＴ３に対応するデータブロックｄｂ３の中に対象データＤが登録されていることが判明する。
【００６４】
一方、検索処理部２０２は、特定されたブルームフィルタｂｆ（１−６）の配列番号「６」に対応するハッシュテーブルＨＴ６に、ハッシュ値Ｈ１（Ｄ）が登録されているかも判定する。ハッシュテーブルＨＴ６では、ハッシュ値Ｈ１（Ｄ）＝１２３４５６７が登録されていないため、ハッシュテーブルＨＴ６に対応するデータブロックｄｂ６の中に対象データＤが登録されていないことが判明する。これにより、検索処理を終了する。
【００６５】
このような手順により、検索処理部２０２は、階層型ブルームフィルタＢＦを利用して対象データＤが存在するデータブロックを特定することができる。
【００６６】
次に、ブルームフィルタの擬陽性による影響について説明する。
【００６７】
ブルームフィルタの擬陽性の発生確率ＦＰＲは、ビット長がｍのブルームフィルタがｈ段ある場合、データ登録数Ｎ（Ｎ＜ｍ）、ハッシュ関数の個数をｋ個とすると、ブルームフィルタの性質より、次式（２）のように表すことができる。
【００６８】
ＦＰＲ=｛１−（１−１／ｍ）kN｝k≒｛１−ｅ(-kN/m)）｝k        …（１）
【００６９】
この場合、ｋ，ｍ，Ｎを変更することにより、擬陽性の発生確率ＦＰＲを非常に小さくすることができる。すなわち、本実施形態では、ｋ，ｍ，Ｎの設定次第で、擬陽性の発生確率ＦＰＲを１よりも非常に小さい値（ほぼ０）に設定することができるようになる。したがって、図５の例では、ブルームフィルタｂｆ（１−６）が選ばれることはほとんどありえない。
【００７０】
また、本実施形態では、データブロック数Ｎｄｂはｄhであるため、高さ段数ｈは、次式（２）にて表すことができる。
【００７１】
ｈ＝ｌｏｇ（Ｎｄｂ）／ｌｏｇ（ｄ）＋１              …（２）
【００７２】
上記式（２）は、ｌｏｇ（Ｎｄｂ）／ｌｏｇ（ｄ）が割り切れる場合を前提にしたが、そうでない場合、段によりｄの値を他の段とは変えることで、ｈを決定することができる。
【００７３】
また、上述した検索処理では、ハッシュ値の数（ｋ回（定数））だけ照合を行う必要があり、検索における１段あたりのフィルタリング対象の数は多くてもｄ個である。したがって、検索によるメモリアクセス回数ＭＡは、最大でも次式（３）で表される程度である。
【００７４】
ＭＡ＝ｋ×ｄ×ｌｏｇ（Ｎｄｂ）／ｌｏｇ（ｄ）        …（３）
【００７５】
すなわち、段数ｈ（＝メモリ量）は、分割数ｄを増やすことにより小さくすることができ、その一方で、検索回数は分割数ｄの増加とともに大きくなるというトレードオフの関係にある。したがって、この関係を考慮することで、適切なメモリの運用が可能となる。
【００７６】
＜階層型転置ブルームフィルタ＞
つぎに、階層型転置ブルームフィルタについて説明する。上述した説明では、階層型ブルームフィルタＢＦの登録処理や検索処理について説明したが、検索速度をより高速化させるため、階層型ブルームフィルタＢＦを転置させる。
【００７７】
図７は、階層型ブルームフィルタＢＦ内の第ｐ段のブルームフィルタ列ｂｆ（ｐ）の転置例を示す説明図である。（Ａ）は、ブルームフィルタ列ＢＦ（ｐ）を示している。ここでは、ブルームフィルタ列ＢＦ（ｐ）は、例として、４分割されたブルームフィルタｂｆ（ｐ−１）〜ｂｆ（ｐ−４）を示している。すなわち、ブルームフィルタ列ＢＦ（ｐ）は、１０ビット×４フィルタ数のビット列である。転置する場合は、４ビット×１０フィルタ数のビット列となる。
【００７８】
（Ｂ）は、ブルームフィルタ列ＢＦ（ｐ）の転置を示している。転置する場合、各ブルームフィルタｂｆ（ｐ−１）〜ｂｆ（ｐ−４）の同一位置のビットを集めて、同一位置ごとに集められたビット列を、ビット位置順に配列させる。
【００７９】
具体的には、各ブルームフィルタｂｆ（ｐ−１）〜ｂｆ（ｐ−４）の各先頭ビットを配列番号順にまとめてビット列｛０１１０｝とする。左から先頭ビット「０」がブルームフィルタｂｆ（ｐ−１）の先頭ビット、２番目のビット「１」がブルームフィルタｂｆ（ｐ−２）の先頭ビット、３番目のビット「１」がブルームフィルタｂｆ（ｐ−３）の先頭ビット、末尾ビット「０」がブルームフィルタｂｆ（ｐ−４）の先頭ビットである。
【００８０】
このビット列｛０１１０｝を、転置ブルームフィルタｔｂｆ（ｐ−１）と称す。２番目〜末尾のビット位置についても同様にまとめることで、転置ブルームフィルタｔｂｆ（ｐ−１）〜ｔｂｆ（ｐ−１０）を得る。転置ブルームフィルタｔｂｆ（ｐ−１）〜ｔｂｆ（ｐ−１０）がビット位置順に配列されたインデックス情報を、転置ブルームフィルタ列ｔＢＦ（ｐ）と称す。転置ブルームフィルタ列ｔＢＦ（ｐ）をすべての段で生成することで、階層型転置ブルームフィルタｔＢＦとなる。
【００８１】
（Ｃ）は、ブルームフィルタ列ＢＦ（ｐ）と転置ブルームフィルタ列ｔＢＦ（ｐ）との検索比較例を示している。ここでは、２種類のハッシュ関数により対象データＤのハッシュ値を２つ求め、ブルームフィルタ列ＢＦ（ｐ）を構成するブルームフィルタｂｆ（ｐ）のビット幅１０で割り算した余り値を、「４」および「８」とする。
【００８２】
ブルームフィルタ列ＢＦ（ｐ）で検索する場合、余り値「４」および「８」となるビット位置「４」および「８」がすべてＯＮになっているブルームフィルタｂｆ（ｐ）をブルームフィルタ列ＢＦ（ｐ）から探す。この場合、ブルームフィルタｂｆ（ｐ−２）が該当する。
【００８３】
一方、転置ブルームフィルタ列ｔＢＦ（ｐ）を用いる場合、ブルームフィルタ列ＢＦ（ｐ）のように、ビット位置「４」および「８」がすべてＯＮになっているブルームフィルタｂｆ（ｐ）を検索せず、余り値「４」および「８」と同一配列番号の転置ブルームフィルタｔｂｆ（ｐ−４），ｔｂｆ（ｐ−８）を抽出する。そして、抽出された転置ブルームフィルタｔｂｆ（ｐ−４），ｔｂｆ（ｐ−８）をＡＮＤ演算することで、ともにＯＮになっているビット位置「２」を特定する。
【００８４】
ブルームフィルタ列ＢＦ（ｐ）の場合は、４個のブルームフィルタｂｆ（ｐ−１）〜ｂｆ（ｐ−４）内の４ビット目と８ビット目を参照するため、８（＝４×２）のメモリアクセスが必要となる。一方、転置ブルームフィルタ列ｔＢＦ（ｐ）は、転置前のブルームフィルタｂｆ（ｐ−１）〜ｂｆ（ｐ−４）のビット位置ごとに折りたたまれたインデックス情報である。したがって、転置ブルームフィルタｔｂｆ（ｐ−４），ｔｂｆ（ｐ−８）を抽出するという２回のメモリアクセスとそのＡＮＤ演算により判定することが可能となる。したがって、メモリアクセス頻度が低減され、検索速度が高速化することとなる。
【００８５】
＜階層型転置ブルームフィルタを用いた検索処理例＞
図８は検索処理部２０２による階層型転置ブルームフィルタの検索処理例を示す説明図である。図８では、説明上、全ビット幅ｓ＝６４ビット、段数ｈ＝３段、第ｈ段での分割数ｄ＝２とする。
【００８６】
最下段である第１段のブルームフィルタ列ＢＦ（１）を構成するブルームフィルタのビット幅は、８（＝ｓ／ｄh＝６４／２3）ビットであるため、最下段である第１段の転置ブルームフィルタ列ｔＢＦ（１）は、８（＝ｓ／ｄh＝６４／２3）個の転置ブルームフィルタｔｂｆ（１−１）〜ｔｂｆ（１−８）により構成される。
【００８７】
また、第２段の転置ブルームフィルタ列ｔＢＦ（２）を構成するブルームフィルタのビット幅は、１６（＝ｓ／ｄh＝６４／２2）ビットであるため、第２段の転置ブルームフィルタ列ｔＢＦ（２）は、１６（＝ｓ／ｄh＝６４／２2）個の転置ブルームフィルタｔｂｆ（２−１）〜ｔｂｆ（２−１６）により構成される。
【００８８】
また、最上段である第３段のブルームフィルタ列ＢＦ（３）を構成するブルームフィルタのビット幅は、３２（＝ｓ／ｄh＝６４／２1）ビットであるため、最上段である第３段の転置ブルームフィルタ列ｔＢＦ（３）は、３２（＝ｓ／ｄh＝６４／２1）個の転置ブルームフィルタｔｂｆ（３−１）〜ｔｂｆ（３−３２）により構成される。
【００８９】
なお、図８では、説明上、比較のため、転置ブルームフィルタ列ｔＢＦ（１）〜ｔＢＦ（３）とともに、転置前のブルームフィルタ列ＢＦ（１）〜ＢＦ（３）を併記しておく。
【００９０】
まず、検索処理部２０２は、検索対象データＤｘについてのハッシュ関数Ｈ１（）〜Ｈ３（）での３個のハッシュ値を、第３段の転置ブルームフィルタ数３２で割り算したときの余り値「２」、「１９」、「２７」を求める。
【００９１】
つぎに、検索処理部２０２は、フィルタリング対象となる転置ブルームフィルタを第３段の転置ブルームフィルタ列ｔＢＦ（３）から特定する。具体的には、余り値と同一ビット位置（余り値が０の場合は末尾位置）となる転置ブルームフィルタｔｂｆ（３−２），ｔｂｆ（３−１９），ｔｂｆ（３−２７）を特定する。そして、特定された転置ブルームフィルタｔｂｆ（３−２），ｔｂｆ（３−１９），ｔｂｆ（３−２７）の各ビット列｛１０｝，｛１１｝，｛１０｝のＡＮＤ演算をおこなう。そのＡＮＤ結果は、｛１０｝となる。
【００９２】
検索処理部２０２は、ＡＮＤ結果に「１」が含まれていない場合は、データブロック集合ｄｂには検索対象データＤｘが存在しないと判定する。一方、ＡＮＤ結果に「１」が含まれている場合、検索対象データＤｘを登録したかもしれないため、１つ下の段に移る。
【００９３】
第２段においても、まず、検索処理部２０２は、検索対象データＤｘについての３個のハッシュ値を、第２段の転置ブルームフィルタ数１６で割り算したときの余り値「８」、「１１」、「１３」を求める。
【００９４】
つぎに、検索処理部２０２は、フィルタリング対象となる転置ブルームフィルタを第２段の転置ブルームフィルタ列ｔＢＦ（２）から特定する。具体的には、余り値と同一ビット位置（余り値が０の場合は末尾位置）となる転置ブルームフィルタｔｂｆ（２−８），ｔｂｆ（２−１１），ｔｂｆ（２−１３）を特定する。そして、特定された転置ブルームフィルタｔｂｆ（２−８），ｔｂｆ（２−１１），ｔｂｆ（２−１３）の各ビット列｛０１１０｝，｛０１００｝，｛０１１０｝のＡＮＤ演算をおこなう。そのＡＮＤ結果は、｛０１００｝となる。
【００９５】
検索処理部２０２は、ＡＮＤ結果に「１」が含まれていない場合は、データブロック集合ｄｂには検索対象データＤｘが存在しないと判定する。一方、ＡＮＤ結果に「１」が含まれている場合、検索対象データＤｘを登録したかもしれないため、１つ下の段に移る。
【００９６】
最下段である第１段においても、まず、検索処理部２０２は、検索対象データＤｘについての３個のハッシュ値を、第１段の転置ブルームフィルタ数８で割り算したときの余り値「２」、「５」、「７」を求める。
【００９７】
つぎに、検索処理部２０２は、フィルタリング対象となる転置ブルームフィルタを第１段の転置ブルームフィルタ列ｔＢＦ（１）から特定する。具体的には、余り値と同一ビット位置（余り値が０の場合は末尾位置）となる転置ブルームフィルタｔｂｆ（１−２），ｔｂｆ（１−５），ｔｂｆ（１−７）を特定する。そして、特定された転置ブルームフィルタｔｂｆ（１−２），ｔｂｆ（１−５），ｔｂｆ（１−７）の各ビット列｛００１１０１１０｝，｛１００１１０１０｝，｛００１１０１１１｝のＡＮＤ演算をおこなう。そのＡＮＤ結果は、｛０００１００１０｝となる。
【００９８】
これ以上下の段は存在しないため、擬陽性により、ＡＮＤ結果｛０００１００１０｝が「１」のビット位置４，７に対応するデータブロックｄｂ４，ｄｂ７に検索対象データＤｘが存在する可能性がある。
【００９９】
この場合、ハッシュテーブルＨＴ４，ＨＴ７に対しハッシュ関数Ｈ１（）でのハッシュ値をキーにして検索することで、データブロックｄｂ４がヒットし、データブロックｄｂ７はヒットしなかったものとする。これにより、検索対象データＤｘは、データブロックｄｂ４に登録されていることが判明する。これにより、検索処理を終了する。
【０１００】
このような手順により、検索処理部２０２は、階層型転置ブルームフィルタを利用することで、階層型ブルームフィルタＢＦに比べてもより高速に対象データを検索することができる。
【０１０１】
＜検索処理部２０２の詳細な機能的構成＞
つぎに、検索処理部２０２の詳細な機能的構成例について説明する。
【０１０２】
図９は、検索処理部２０２の機能的構成例を示すブロック図である。検索処理部２０２は、受付部９０１と、転置部９０２と、変換部９０３と、第１の特定部９０４と、第２の特定部９０５と、判断部９０６と、判定部９０７と、抽出部９０８と、出力部９０９とを備えている。
【０１０３】
受付部９０１は、ブルームフィルタ列ＢＦ（ｐ）の転置要求を受け付ける機能を有する。たとえば、階層型ブルームフィルタＢＦから階層型転置ブルームフィルタｔＢＦへの転置要求を受け付ける。
【０１０４】
ここで、転置要求とは、ブルームフィルタ列ＢＦ（ｐ）を転置ブルームフィルタ列ｔＢＦ（ｐ）に転置させるリクエストである。たとえば、管理装置２００が起動して起動が完了した旨の起動完了通知を転置要求とする。これにより、管理装置２００が起動することで、階層型ブルームフィルタＢＦが階層型転置ブルームフィルタｔＢＦに転置される。このように起動時に一括して、階層型転置ブルームフィルタｔＢＦに転置しておけば、シャットダウンするまでは常時転置ブルームフィルタｔＢＦを利用することができる。
【０１０５】
また、データブロック集合ｄｂに対する検索要求を転置要求としてもよい。これにより、検索処理部２０２は、検索要求があるまでは待機しておき、検索要求があると、階層型ブルームフィルタＢＦのうち検索処理部２０２で用いられるブルームフィルタ列ＢＦ（ｐ）を転置させることとなる。これにより、検索頻度が高くなるにつれ、転置ブルームフィルタ列ｔＢＦ（ｐ）が増加する。したがって、検索に必要なブルームフィルタ列ＢＦ（ｐ）から徐々に転置させるため、シャットダウンまでに利用されなかったブルームフィルタ列の無駄な転置処理を低減することができる。
【０１０６】
転置部９０２は、受付部９０１によって転置要求が受け付けられた場合、ブルームフィルタ列ＢＦ（ｐ）を、転置ブルームフィルタ列ｔＢＦ（ｐ）に転置する機能を有する。具体的には、転置部９０２では、ブルームフィルタ列ＢＦ（ｐ）を、図７に示したような手法により、転置ブルームフィルタ列ｔＢＦ（ｐ）に転置する。
【０１０７】
たとえば、ブルームフィルタ列ＢＦ（ｐ）は、ｎ（＝ｄ[h-(p-1)]）個のブルームフィルタｂｆ（ｐ−１）〜ｂｆ（ｐ−ｎ）が配列されたインデックス情報である。また、各ブルームフィルタｂｆ（ｐ−１）〜ｂｆ（ｐ−ｎ）のビット幅は、ｍ（＝ｓ／ｎ）ビットである。
【０１０８】
ブルームフィルタ列ＢＦ（ｐ）を図７にしたがって転置すると、転置ブルームフィルタ列ｔＢＦ（ｐ）は、ｍ（＝ｓ／ｎ）個の転置ブルームフィルタｔｂｆ（ｐ−１）〜ｔｂｆ（ｐ−ｍ）が配列されたインデックス情報となる。各転置ブルームフィルタｔｂｆ（ｐ−１）〜ｔｂｆ（ｐ−ｍ）のビット幅は、ｎ（＝ｄ[h-(p-1)]）ビットとなる。このように転置により、配列数とビット幅が入れ替わる。
【０１０９】
変換部９０３は、複数種類（種類数ｋ）のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データを、転置ブルームフィルタの配列位置をあらわす位置情報に変換する機能を有する。具体的には、たとえば、ｋ個の異なるハッシュ関数Ｈ１（）〜Ｈｋ（）に検索対象データを与えることで、ｋ個のハッシュ値が得られる。
【０１１０】
図５に示したブルームフィルタ列ＢＦ（ｐ）へのエントリでは、ブルームフィルタ列ＢＦ（ｐ）を構成するブルームフィルタのビット幅ｍ（＝ｓ／ｎ）でハッシュ値を除算し、その余り値に対応するビット位置をＯＮにしていた。
【０１１１】
このため、変換部９０３では、ｋ個のハッシュ値が得られると、転置ブルームフィルタ列ｔＢＦ（ｐ）を構成する転置ブルームフィルタの配列数ｍ（＝ｓ／ｎ）でハッシュ値を除算し、その余り値を算出する。このｋ個の余り値が、転置ブルームフィルタの配列位置をあらわす位置情報である。なお、算出された余り値が０の場合の位置情報は、ｍとする。
【０１１２】
第１の特定部９０４は、転置ブルームフィルタ列ｔＢＦ（ｐ）の中から、変換部９０３によって変換された位置情報に対応する転置ブルームフィルタを位置情報ごとに特定する機能を有する。具体的には、変換部９０３から得られた位置情報と配列番号が一致する転置ブルームフィルタを転置ブルームフィルタ列ｔＢＦ（ｐ）の中から特定する。
【０１１３】
図８に示した例では、第３段の転置ブルームフィルタ列ｔＢＦ（３）では、余り値（位置情報）が「２」、「１９」、「２７」であるため、配列番号が「２」、「１９」、「２７」である転置ブルームフィルタｔｂｆ（３−２），ｔｂｆ（３−１９），ｔｂｆ（３−２７）を特定する。
【０１１４】
第２の特定部９０５は、第１の特定部９０４によって特定された複数の転置ブルームフィルタｔｂｆ（ｐ）に共通する位置情報に対応するブルームフィルタｂｆ（ｐ）を、ブルームフィルタ列ＢＦ（ｐ）の中から特定する機能を有する。具体的には、第１の特定部９０４によって特定された複数の転置ブルームフィルタｔｂｆ（ｐ）のビット列をＡＮＤ演算する。このＡＮＤ演算によって「１」が出現したビットの位置が、転置前のブルームフィルタ列ＢＦ（ｐ）でエントリ時にＯＮになったであろうビットを有するブルームフィルタである。
【０１１５】
図８に示した例では、第３段において転置ブルームフィルタｔｂｆ（３−２），ｔｂｆ（３−１９），ｔｂｆ（３−２７）をＡＮＤ演算すると、ＡＮＤ結果では先頭のビット位置が「１」となる。したがって、転置前のブルームフィルタ列ＢＦ（３）のうちブルームフィルタｂｆ（３−１）のいずれかのビットが、検索対象データのエントリ時にＯＮになった可能性があることがわかる。
【０１１６】
このように、第１の特定部９０４および第２の特定部９０５により、転置ブルームフィルタ列ｔＢＦ（ｐ）へのアクセス回数が転置前のブルームフィルタ列ＢＦ（ｐ）よりも減少する。したがって、転置ブルームフィルタｔｂｆ（ｐ）の段数ｐが増加すればするほど、転置前のブルームフィルタ列ＢＦ（ｐ）よりもアクセス回数が格段に抑えられ、検索速度の高速化を実現することができる。
【０１１７】
判断部９０６は、第２の特定部９０５によって特定されたブルームフィルタを配列要素とするブルームフィルタ列が存在するか否かを判断する機能を有する。具体的には、転置ブルームフィルタ列ｔＢＦ（ｐ）の１つ下の段の転置ブルームフィルタ列が存在するか否かを判断するだけでよい。より具体的には、ｐ＝１であるか否かをみるだけでよい。
【０１１８】
１つ下の段の転置ブルームフィルタ列が存在する場合（ｐ≠１）は、第１の特定部９０４により、１つ下の段の転置ブルームフィルタ列をあらたに転置ブルームフィルタ列ｔＢＦ（ｐ）とする。一方、１つ下の段の転置ブルームフィルタ列が存在しない場合（ｐ＝１）、転置ブルームフィルタ列ｔＢＦ（ｐ）は、最下段である第１段の転置ブルームフィルタ列ｔＢＦ（１）となる。
【０１１９】
判定部９０７は、判断部９０６によって存在しないと判断された場合、データブロック集合ｄｂのうち、第２の特定部９０５によって特定されたブルームフィルタｂｆ（ｐ）に対応するデータブロックｄｂ＃内での検索対象データの有無を判定する機能を有する。ｐ＝１の場合、第２の特定部９０５によって特定されたブルームフィルタｂｆ（１）はデータブロックと一対一対応するため、第２の特定部９０５でのＡＮＤ結果で「１」になったビットの位置をブロック番号＃とするデータブロックｄｂ＃を判定対象とする。判定部９０７では、判定対象のデータブロックｄｂ＃は擬陽性であるため、陽性であるか陰性であるかを判定することとなる。
【０１２０】
そして、判定対象のデータブロックｄｂ＃のハッシュテーブルＨＴ＃を参照して、検索対象データの擬陽性／陰性を判定する。この場合、階層型ブルームフィルタＢＦを用いた検索処理と同様、特定のハッシュ関数（たとえば、Ｈ１（））による検索対象データのハッシュ値をキーにして、ハッシュテーブルＨＴ＃からデータ（またはそのポインタ）の有無を判定する。存在しない場合は、擬陽性によりヒットミスしたこととなる。
【０１２１】
抽出部９０８は、判定部９０７によって陽性であると判定された場合、判定対象のデータブロックｄｂ＃から検索対象データを抽出する機能を有する。具体的には、たとえば、判定対象のデータブロックに対応するハッシュテーブルＨＴ＃によりデータの格納位置が判明するため、抽出部９０８は、その格納位置から検索対象データや検索対象データに関連するデータを抽出する。
【０１２２】
たとえば、検索対象データそのものを判定対象のデータブロックｄｂ＃から抽出する。抽出できた場合は、検索対象データが登録されていることが判明する。また、検索対象データがファイル番号である場合は、ファイル番号に関連するファイルデータを抽出する。また、検索対象データが辞書や用語の見出し語である場合は、見出し語の用語解説データを抽出する。
【０１２３】
出力部９０９は、判定部９０７による判定結果や抽出部９０８によって抽出されたデータを出力する。たとえば、検索対象データの陽性または陰性といった判定結果や、陽性である場合の抽出データを出力する。出力形式としては、ディスプレイ１０８への表示、音声出力、印刷出力、他の装置への送信などがある。
【０１２４】
＜登録処理部２０１による階層型ブルームフィルタＢＦの学習処理手順＞
図１０は、登録処理部２０１による階層型ブルームフィルタＢＦの学習処理手順を示すフローチャートである。まず、登録処理部２０１は、登録したいデータ（対象データＤ）があるか否かを判断する（ステップＳ１００１）。対象データＤがある場合（ステップＳ１００１：Ｙｅｓ）、登録処理部２０１は、段数ｐをｐ＝１に設定し（ステップＳ１００２）、ｐ＞ｈ（ｈは階層型ブルームフィルタＢＦの最上段）であるか否かを判断する（ステップＳ１００３）。ｐ＞ｈでない場合（ステップＳ１００３：Ｎｏ）、登録処理部２０１は、ｋ種類のハッシュ関数を用いて、対象データのｋ個のハッシュ値を算出する（ステップＳ１００４）。そして、ｋ個のハッシュ値をブルームフィルタ列ＢＦ（ｐ）のビット幅で除算して、ｋ個の余り値を算出する（ステップＳ１００５）。
【０１２５】
つぎに、登録処理部２０１は、ｐ段目のブルームフィルタ列ＢＦ（ｐ）の中から登録先のブルームフィルタｂｆ（ｐ）ｒを特定する（ステップＳ１００６）。ｐ＝１の場合は、保存先のデータブロックｄｂ＃のブロック番号＃に対応するブルームフィルタｂｆ（１−＃）を登録先のブルームフィルタｂｆ（ｐ）ｒとする。
【０１２６】
具体的には、図５に示したように、対象データＤをデータブロックｄｂ３に登録する場合は、データブロックｄｂ３のブロック番号３と同一配列番号である第１段のブルームフィルタｂｆ（１−３）を登録先のブルームフィルタｂｆ（１）ｒとする。
【０１２７】
ｐ≠１の場合は、ｐ段目のブルームフィルタ列ＢＦ（ｐ）の中から、（ｐ−１）段目の登録先のブルームフィルタｂｆ（ｐ−１）ｒのビット位置に対応するブルームフィルタｂｆ（ｐ）をあらたな登録先のブルームフィルタｂｆ（ｐ）ｒとする。
【０１２８】
具体的には、図５に示したように、Ｐ＝２とすると、２段目のブルームフィルタ列ＢＦ（２）の中から、１段目の登録先のブルームフィルタｂｆ（１）ｒであるブルームフィルタｂｆ（１−３）のビット位置を包含するブルームフィルタｂｆ（２−２）をあらたな登録先のブルームフィルタｂｆ（２）ｒとする。
【０１２９】
そして、登録先のブルームフィルタｂｆ（ｐ）ｒに、ステップＳ１００５で算出されたｋ個の余り値をエントリする（ステップＳ１００７）。すなわち、余り値と同一ビット位置のビットをＯＮにする。余り値が０の場合は、末尾ビットをＯＮにする。そして、段数ｐをインクリメントして（ステップＳ１００８）、ステップＳ１００３に戻る。
【０１３０】
ステップＳ１００３において、ｐ＞ｈである場合（ステップＳ１００３：Ｙｅｓ）、対象データのハッシュテーブルエントリを追加する（ステップＳ１００９）。具体的には、たとえば、図４に示したように、ハッシュテーブルエントリＥ３をハッシュテーブルＨＴ３に追加登録する。
【０１３１】
そして、ステップＳ１００１に戻る。ステップＳ１００１において、対象データＤがない場合（ステップＳ１００１：Ｎｏ）、登録処理部２０１による階層型ブルームフィルタＢＦの学習処理を終了する。このような処理手順により、階層型ブルームフィルタＢＦが構築されることとなる。
【０１３２】
＜検索処理部２０２による検索処理手順＞
図１１および図１２は、検索処理部２０２による検索処理手順を示すフローチャートである。なお、検索処理部２０２により利用されるブルームフィルタは、すでに一括転置済みの階層型転置ブルームフィルタｔＢＦでもよく、階層型ブルームフィルタＢＦでもよい。階層型ブルームフィルタＢＦを用いる場合は、未転置のブルームフィルタが特定される都度転置処理をおこなう。
【０１３３】
すなわち、検索しながら階層型転置ブルームフィルタｔＢＦを構築していく。図１１および図１２では、検索しながら階層型転置ブルームフィルタｔＢＦを構築していく場合の修理手順について説明する。なお、一括転置済みの場合は、転置済みか否かの判断（ステップＳ１１０４）と転置処理（ステップＳ１１０５）を省略するだけでよい。
【０１３４】
まず、図１１において、検索処理部２０２は、受付部９０１により、検索対象データＤｘを待ち受け（ステップＳ１１０１：Ｎｏ）、検索対象データＤｘが受け付けられた場合（ステップＳ１１０１：Ｙｅｓ）、検索処理部２０２は、変換部９０３により、検索対象データＤｘをｋ種類のハッシュ関数に与えてｋ個のハッシュ値を算出する（ステップＳ１１０２）。
【０１３５】
そして、検索処理部２０２は、ｐ＝ｈ、すなわち、段数ｐを最大段数ｈに設定し（ステップＳ１１０３）、ｐ段目のブルームフィルタ列ＢＦ（ｐ）が転置済みであるか否かを判断する（ステップＳ１１０４）。転置済みである場合（ステップＳ１１０４：Ｙｅｓ）、ステップＳ１１０６に移行する。一方、未転置である場合（ステップＳ１１０４：Ｎｏ）、検索処理部２０２は、転置部９０２により、ｐ段目のブルームフィルタ列ＢＦ（ｐ）を転置して（ステップＳ１１０５）、ステップＳ１１０６に移行する。
【０１３６】
ステップＳ１１０６では、検索処理部２０２は、変換部９０３により、ｋ個のハッシュ値を転置ブルームフィルタの配列数で除算して、ｋ個の余り値を算出する（ステップＳ１１０６）。そして、検索処理部２０２は、第１の特定部９０４により、ｐ段目の転置ブルームフィルタ列ｔＢＦ（ｐ）から、ｋ個の余り値に対応するｋ個の転置ブルームフィルタｔｂｆ（ｐ）ｒを特定する（ステップＳ１１０７）。
【０１３７】
そして、検索処理部２０２は、第２の特定部９０５により、ｋ個の転置ブルームフィルタｔｂｆ（ｐ）ｒをＡＮＤ演算し（ステップＳ１１０８）、図１２のステップＳ１２０１に移行する。
【０１３８】
図１２において、検索処理部２０２は、第２の特定部９０５により、ＡＮＤ結果の先頭ビットを対象ビットに設定し（ステップＳ１２０１）、対象ビットがＯＮであるか否かを判断する（ステップＳ１２０２）。ＯＮでない場合、検索処理部２０２は、判定部９０７により、対象ビットがシフト可能か否かを判断する（ステップＳ１２０３）。具体的には、対象ビットが末尾ビットであるか否かを判断する。
【０１３９】
シフト可能である場合（ステップＳ１２０３：Ｙｅｓ）、検索処理部２０２は、対象ビットを１ビット末尾方向へシフトし（ステップＳ１２０４）、ステップＳ１２０２に戻る。一方、ステップＳ１２０３においてシフト可能でない場合（ステップＳ１２０３：Ｎｏ）、検索処理部２０２は、判定部９０７により、検索結果（陰性）と判定し、出力部９０９から出力する（ステップＳ１２０５）。これにより、検索結果が陰性である場合の処理手順を終了する。
【０１４０】
一方、ステップＳ１２０２において、対象ビットがＯＮであった場合（ステップＳ１２０２：Ｙｅｓ）、検索処理部２０２は、判断部９０６により、現在の段数ｐがｐ＝１であるか否かを判断する（ステップＳ１２０６）。ｐ＝１でない場合（ステップＳ１２０６：Ｎｏ）、ｐをデクリメントして（ステップＳ１２０７）、ステップＳ１１０４に戻る。
【０１４１】
一方、ｐ＝１である場合（ステップＳ１２０６：Ｙｅｓ）、検索処理部２０２は、判定部９０７により、対象ビットのビット位置に対応するハッシュテーブルを検索する（ステップＳ１２０８）。そして、検索対象データＤｘが存在するか否かを判断する（ステップＳ１２０９）。
【０１４２】
検索対象データが存在しない場合（ステップＳ１２０９：Ｎｏ）、ステップＳ１２０３に戻り、対象ビットがシフト可能か否かを判断することとなる。一方、検索対象データが存在する場合（ステップＳ１２０９：Ｙｅｓ）、検索処理部２０２は、検索結果（陽性）を出力する（ステップＳ１２１０）。検索処理部２０２は、必要に応じて抽出部９０８により関連するデータを抽出して検索結果として出力する。これにより、検索結果が陰性である場合の処理手順を終了する。
【０１４３】
以上説明したように、本実施の形態によれば、ブルームフィルタ列ＢＦ（ｐ）を転置して転置ブルームフィルタ列ｔＢＦ（ｐ）とすることで、メモリアクセスが低減され、検索速度が高速化するという効果を奏する。特に、階層型転置ブルームフィルタｔＢＦとすることで、段ごとのメモリアクセスが低減されるため、より高速に検索をおこなうことができる。
【０１４４】
また、起動完了通知を転置要求とすることで、管理装置２００が起動すると、階層型ブルームフィルタＢＦが階層型転置ブルームフィルタｔＢＦに転置される。このように起動時に一括して、階層型転置ブルームフィルタｔＢＦに転置しておけば、シャットダウンするまでは常時階層型転置ブルームフィルタｔＢＦを利用することができる。
【０１４５】
また、データブロック集合ｄｂに対する検索要求を転置要求とすることで、検索要求があると、階層型ブルームフィルタＢＦのうち検索処理部２０２で用いられるブルームフィルタ列ＢＦ（ｐ）を転置させることとなる。これにより、検索頻度が高くなるにつれ、転置ブルームフィルタ列ｔＢＦ（ｐ）が増加する。したがって、検索に必要なブルームフィルタ列ＢＦ（ｐ）から徐々に転置させるため、シャットダウンまでに利用されなかったブルームフィルタ列の無駄な転置処理を低減することができる。
【０１４６】
また、階層型ブルームフィルタＢＦから転置された階層型転置ブルームフィルタｔＢＦの場合、最下段になるまでは、ＡＮＤ結果のＯＮの有無だけで擬陽性であるか陰性であるかを判断し、ＡＮＤ結果に１つでもＯＮのビットがあれば、擬陽性と判断して、１つ下の段に移行する。このように、ＡＮＤ結果を利用することで、陰性か否かを容易に判断でき、検索対象データが存在しないことを早期に特定することができる。
【０１４７】
また、階層型転置ブルームフィルタｔＢＦだけをメモリに保持しておけば検索が可能であるため、階層型ブルームフィルタＢＦを保持しておく必要なない。これにより、省メモリ化を図ることができる。
【０１４８】
＜階層型転置ブルームフィルタｔＢＦの学習処理例＞
図１３は、登録処理部２０１による階層型転置ブルームフィルタｔＢＦの学習処理例を示す説明図である。ここでは、図８に示した階層型転置ブルームフィルタｔＢＦを例にあげて説明する。また、図８では、検索対象データＤｘを検索してヒットさせた例について説明したが、図１３では、検索対象データＤｘ（図１３では、対象データＤｘとする）がデータブロック集合ｄｂにまだ登録されていないものとして説明する。
【０１４９】
また、登録される対象データＤが与えられるハッシュ関数の種類数ｋをｋ＝３とする。ここでは、ハッシュ関数Ｈ１（），Ｈ２（），Ｈ３（）を用いることとする。また、ハッシュテーブルの登録対象となるハッシュ関数をＨ１（）とする。
【０１５０】
まず、データブロック集合ｄｂのうちデータブロックｄｂ４に対象データＤｘが登録されたものとする。対象データＤｘを各ハッシュ関数Ｈ１（），Ｈ２（），Ｈ３（）に与えたときのハッシュ値は、例として以下の値とする。
Ｈ１（Ｄｘ）＝ｘ１
Ｈ２（Ｄｘ）＝ｘ２
Ｈ３（Ｄｘ）＝ｘ３
【０１５１】
また、階層型転置ブルームフィルタｔＢＦの学習処理では、更新対象となる転置ブルームフィルタｔｂｆ（ｐ）内の特定のビットをＯＮにするが、その特定のビットがすでにＯＮになっている場合はそのままとする。
【０１５２】
ここで、登録処理部２０１は、登録先のデータブロックｄｂ４のブロック番号４のハッシュテーブルＨＴ４に対するハッシュテーブルエントリＥ４を作成する。そして、登録処理部２０１は、作成されたハッシュテーブルエントリＥ４を、ハッシュテーブルＨＴ４に追加登録する。
【０１５３】
そして、第１段の学習処理に移る。登録処理部２０１は、更新対象となる転置ブルームフィルタｔｂｆ（１）を、第１段の転置ブルームフィルタ列ｔＢＦ（１）の中から特定する。具体的には、登録処理部２０１は、各ハッシュ値ｘ１〜ｘ３を、第１段の転置ブルームフィルタ列ｔＢＦ（１）の配列個数である８で割り算し、余り値を算出する。ハッシュ値ｘ１の余り値は「２」、ハッシュ値ｘ２の余り値は「５」、ハッシュ値ｘ３の余り値は「７」になったものとする。したがって、第１段での更新対象となる転置ブルームフィルタｔｂｆ（１）は、転置ブルームフィルタｔｂｆ（１−２），ｔｂｆ（１−５），ｔｂｆ（１−７）となる。
【０１５４】
また、最下段では、登録先のデータブロックｄｂ４のブロック番号４に対応するビット位置を更新対象ビットとする。したがって、更新対象となる転置ブルームフィルタの先頭から４ビット目のビットをＯＮにする。これにより、第１段の転置ブルームフィルタ列ｔＢＦ（１）の学習処理を終了する。
【０１５５】
つぎに、第２段の学習処理に移る。登録処理部２０１は、更新対象となる転置ブルームフィルタｔｂｆ（２）を、第２段の転置ブルームフィルタ列ｔＢＦ（２）の中から特定する。具体的には、登録処理部２０１は、各ハッシュ値ｘ１〜ｘ３を、第２段の転置ブルームフィルタ列ｔＢＦ（２）の配列個数である１６で割り算し、余り値を算出する。ハッシュ値ｘ１の余り値は「８」、ハッシュ値ｘ２の余り値は「１１」、ハッシュ値ｘ３の余り値は「１３」になったものとする。したがって、第２段での更新対象となる転置ブルームフィルタｔｂｆ（２）は、転置ブルームフィルタｔｂｆ（２−８），ｔｂｆ（２−１１），ｔｂｆ（２−１３）となる。
【０１５６】
つぎに、転置ブルームフィルタｔｂｆ（２−８），ｔｂｆ（２−１１），ｔｂｆ（２−１３）内のどのビット位置のビットをＯＮにするかについて説明する。転置前の階層型ブルームフィルタＢＦでは、分割数をｄとして、各ブルームフィルタ列ＢＦ（ｐ）をｎ（＝ｄ[h-(p-1)]）個に分割した。そして、これにより、各ブルームフィルタ列ＢＦ（ｐ）のビット幅は、ｍ（＝ｓ／ｎ）ビットになった。
【０１５７】
このため、階層型ブルームフィルタＢＦの学習処理では、第（ｐ−１）段での更新対象のブルームフィルタｂｆ（（ｐ−１）−＃）のビット位置を包含するブルームフィルタｂｆ（ｐ）を、第ｐ段のブルームフィルタ列ＢＦ（ｐ）の中から特定していた。
【０１５８】
たとえば、図５の例では、第２段において、前段の第１段での更新対象のブルームフィルタｂｆ（１−３）の配列番号３を、分割数ｄ（＝２）で割り算し、端数を切り上げることで、更新対象の配列番号は２となる。したがって、ブルームフィルタｂｆ（２−２）が特定される。
【０１５９】
これに対し、階層型転置ブルームフィルタｔＢＦでは、配列個数ｎとビット幅ｍが入れ替わっているため、第（ｐ−１）段の更新対象のブルームフィルタｂｆ（（ｐ−１）−＃）の配列番号＃ではなく、第（ｐ−１）段での更新対象ビット位置を分割数ｄで割り算し、端数を切り上げる。
【０１６０】
第２段の場合、第１段での更新対象ビットは、先頭から４ビット目のビットであり、転置ブルームフィルタｔｂｆ（１−２），ｔｂｆ（１−５），ｔｂｆ（１−７）の４ビット目がＯＮにされた。したがって、第２段の更新対象ビットは、ｄ＝２であるため、先頭から４／ｄ＝２ビット目のビットを更新対象ビットとする。本例では、転置ブルームフィルタｔｂｆ（２−８），ｔｂｆ（２−１１），ｔｂｆ（２−１３）の先頭から２ビット目のビットをＯＮにすることになる。これにより、第２段の転置ブルームフィルタ列ｔＢＦ（２）の学習処理を終了する。
【０１６１】
つぎに、第３段の学習処理に移る。登録処理部２０１は、更新対象となる転置ブルームフィルタｔｂｆ（３）を、第３段の転置ブルームフィルタ列ｔＢＦ（３）の中から特定する。具体的には、登録処理部２０１は、各ハッシュ値ｘ１〜ｘ３を、第３段の転置ブルームフィルタ列ｔＢＦ（３）の配列個数である３２で割り算し、余り値を算出する。ハッシュ値ｘ１の余り値は「２」、ハッシュ値ｘ２の余り値は「１９」、ハッシュ値ｘ３の余り値は「２７」になったものとする。したがって、第３段での更新対象となる転置ブルームフィルタｔｂｆ（３）は、転置ブルームフィルタｔｂｆ（３−２），ｔｂｆ（３−１９），ｔｂｆ（３−２７）となる。
【０１６２】
つぎに、転置ブルームフィルタｔｂｆ（３−２），ｔｂｆ（３−１９），ｔｂｆ（３−２７）内の更新対象ビットを決める。第２段と同様、第（ｐ−１）段の更新対象のブルームフィルタｂｆ（（ｐ−１）−＃）の配列番号＃ではなく、第（ｐ−１）段での更新対象ビット位置を分割数ｄで割り算し、端数を切り上げる。
【０１６３】
第３段の場合、前段である第２段での更新対象ビットは、先頭から２ビット目のビットであり、転置ブルームフィルタｔｂｆ（２−８），ｔｂｆ（２−１１），ｔｂｆ（２−１３）の２ビット目がＯＮにされた。したがって、第３段の更新対象ビットは、ｄ＝２であるため、先頭から２／ｄ＝１ビット目のビットを更新対象ビットとする。本例では、転置ブルームフィルタｔｂｆ（３−２），ｔｂｆ（３−１９），ｔｂｆ（３−２７）の先頭ビットをＯＮにすることになる。これにより、第３段の転置ブルームフィルタ列ｔＢＦ（３）の学習処理を終了する。
【０１６４】
＜登録処理部２０１による階層型転置ブルームフィルタｔＢＦの学習処理手順＞
図１４は、登録処理部２０１による階層型ブルームフィルタＢＦの学習処理手順を示すフローチャートである。まず、登録処理部２０１は、登録したいデータ（対象データＤｘ）があるか否かを判断する（ステップＳ１４０１）。対象データＤｘがある場合（ステップＳ１４０１：Ｙｅｓ）、登録処理部２０１は、段数ｐをｐ＝１に設定し（ステップＳ１４０２）、ｐ＞ｈ（ｈは階層型転置ブルームフィルタｔＢＦの最上段）であるか否かを判断する（ステップＳ１４０３）。ｐ＞ｈでない場合（ステップＳ１４０３：Ｎｏ）、登録処理部２０１は、ｋ種類のハッシュ関数を用いて、対象データＤｘのｋ個のハッシュ値を算出する（ステップＳ１４０４）。
【０１６５】
つぎに、登録処理部２０１は、ｋ個のハッシュ値を第ｐ段の転置ブルームフィルタｔＢＦ（ｐ）の配列個数で除算して、ｋ個の余り値を算出する（ステップＳ１４０５）。そして、登録処理部２０１は、ｋ個の余り値と同一配列番号のｋ個の転置ブルームフィルタｔｂｆ（ｐ）ｒを特定する（ステップＳ１４０６）。
【０１６６】
このあと、ｐ＝１であるか否かを判断し（ステップＳ１４０７）、ｐ＝１である場合（ステップＳ１４０７：Ｙｅｓ）、登録処理部２０１は、特定されたｋ個の転置ブルームフィルタｔｂｆ（ｐ）ｒに、対象データＤｘの所属データブロックｄｂ＃のブロック番号＃をエントリする（ステップＳ１４０８）。すなわち、対象データＤｘの所属データブロックｄｂ＃のブロック番号＃を更新対象ビット位置＃に設定し、特定されたｋ個の転置ブルームフィルタｔｂｆ（ｐ）ｒの更新対象ビット位置＃のビットをＯＮにする。そして、ステップＳ１４１０に移行する。
【０１６７】
一方、ステップＳ１４０７において、ｐ≠１である場合（ステップＳ１４０７：Ｎｏ）、特定されたｋ個の転置ブルームフィルタｔｂｆ（ｐ）ｒに、対象データＤｘの第（ｐ−１）段での更新対象ビット位置を分割数ｄで除算した商（端数切り上げ）をエントリする（ステップＳ１４０９）。すなわち、対象データＤｘの第（ｐ−１）段での更新対象ビット位置を分割数ｄで除算した商（端数切り上げ）を更新対象ビット位置に設定し、特定されたｋ個の転置ブルームフィルタｔｂｆ（ｐ）ｒの更新対象ビット位置のビットをＯＮにする。そして、ステップＳ１４１０に移行する。
【０１６８】
ステップＳ１４１０において、登録処理部２０１は、段数ｐをインクリメントし（ステップＳ１４１０）、ステップＳ１４０３に戻る。これにより、最下段から最上段まで更新対象ビットをＯＮにすることができる。
【０１６９】
一方、ステップＳ１４０３において、ｐ＞ｈである場合（ステップＳ１４０３：Ｙｅｓ）、登録処理部２０１は、対象データのハッシュテーブルエントリを追加して（ステップＳ１４１１）、ステップＳ１４０１に戻る。対象データＤｘがない場合（ステップＳ１４０１：Ｎｏ）、登録処理部２０１による階層型転置ブルームフィルタｔＢＦの学習処理を終了する。
【０１７０】
このような手順により、登録処理部２０１は、階層型転置ブルームフィルタｔＢＦにデータエントリを学習させることとなる。すなわち、転置後にデータが登録される場合も、階層型転置ブルームフィルタｔＢＦから階層型ブルームフィルタＢＦに戻す必要がなく、転置後の階層型転置ブルームフィルタｔＢＦのまま学習させることができる。したがって、転置前に戻すといった無駄な処理がなくなり、検索効率の向上も図ることができる。
【０１７１】
なお、本実施の形態で説明した検索方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検索プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検索プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１７２】
２００  管理装置
２０１  登録処理部
２０２  検索処理部
９０１  受付部
９０２  転置部
９０３  変換部
９０４  第１の特定部
９０５  第２の特定部
９０６  判断部
９０７  判定部
９０８  抽出部
９０９  出力部
ＢＦ  階層型ブルームフィルタ
ｄｂ  データブロック集合
ＨＴｓ  ハッシュテーブル群
ｔＢＦ  階層型転置ブルームフィルタ
【図１】
0005526985.tif 000002
【図２】
0005526985.tif 000003
【図３】
0005526985.tif 000004
【図４】
0005526985.tif 000005
【図５】
0005526985.tif 000006
【図６】
0005526985.tif 000007
【図７】
0005526985.tif 000008
【図８】
0005526985.tif 000009
【図９】
0005526985.tif 000010
【図１０】
0005526985.tif 000011
【図１１】
0005526985.tif 000012
【図１２】
0005526985.tif 000013
【図１３】
0005526985.tif 000014
【図１４】
0005526985.tif 000015