JP2012252658A - 検索プログラム、検索方法、検索装置、およびノード - Google Patents

検索プログラム、検索方法、検索装置、およびノード Download PDF

Info

Publication number
JP2012252658A
JP2012252658A JP2011126764A JP2011126764A JP2012252658A JP 2012252658 A JP2012252658 A JP 2012252658A JP 2011126764 A JP2011126764 A JP 2011126764A JP 2011126764 A JP2011126764 A JP 2011126764A JP 2012252658 A JP2012252658 A JP 2012252658A
Authority
JP
Japan
Prior art keywords
bloom filter
stage
transposed
data
search
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011126764A
Other languages
English (en)
Other versions
JP5716554B2 (ja
Inventor
Takashi Watanabe
高志 渡辺
Yoshihiro Tsuchiya
芳浩 土屋
Yasuo Noguchi
泰生 野口
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2011126764A priority Critical patent/JP5716554B2/ja
Priority to US13/461,176 priority patent/US8423562B2/en
Publication of JP2012252658A publication Critical patent/JP2012252658A/ja
Application granted granted Critical
Publication of JP5716554B2 publication Critical patent/JP5716554B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】データ検索の高速化と管理可能なデータ量の拡大化を図ること。
【解決手段】ノードN2のデータブロックdb4に検索対象データDxが記憶されているため、ノードN2は、検索対象データDxが存在する旨をクライアントC1に返す。一方、ノードN4のデータブロックdb7に検索対象データDxが記憶されていないため、ノードN4は、検索対象データDxが存在しない旨をクライアントC1に返す。なお、クライアントC1がデータブロックdb4について先にリクエストを送った場合、検索対象データDxが存在する旨の検索結果が得られるため、ノードN4に対してリクエストを送信しなくてもよい。これにより、検索処理の高速化を実現することができる。このような手順により、階層型分割転置ブルームフィルタ群を利用することで、より高速かつ広範囲で対象データを検索することができる。
【選択図】図14

Description

本発明は、データを検索する検索プログラム、検索方法、検索装置、ノードおよび検索システムに関する。
従来、大規模なデータを木構造で管理する場合、B木(Btree)と呼ばれるデータ構造での管理が比較的多く行われていた。B木は、単純な2分木に比べて、一つのブロックに複数のデータエントリを格納するので、データエントリの追加があっても木構造の形の変化が波及する範囲を狭くできるという利点がある。このため、B木はハードディスクなどのディスク向けのデータ管理方法として利用されることが多い。
しかしながら、ディスク上において木構造で管理されたデータを検索する場合、複数のデータブロックを実際に読み込む必要がある。また、一般に、ディスクに対するI/O(input/output)は、メモリアクセスに比べると遅いことから、ディスク上でのデータ検索には手間と時間を要するおそれがある。
このため、最近では、ディスクI/Oによる検索の遅延を避けるためには、メモリ中に木構造をもつなどの対応も考えられている。しかるに、B木では、データエントリ数が多くなると、それに応じて必要なメモリ量が増えてしまうおそれがある。このため、木構造のうち最も良く読みこまれる部分のみをメモリ中に格納する方法(キャッシュ)を利用することも考えられている。
これに対し、最近では、ブルームフィルタ(Bloom Filter)と呼ばれるデータ構造も知られてきている。ブルームフィルタは、あるエントリが既存の集合に属するかどうかを効率的に調べる方法である。また、電子交換機のダイヤルパルス処理で、ダイヤルパルスにパルス速度ビットと偶数/奇数ビットの2つを設けておき、そのビットを取り込む群処理も開示されている。
また、複数のデータの索引情報を階層型に構成し、分散して配置するデータ検索技術も開示されている。また、データの属性とエントリ情報を分散させてデータを分割してそれぞれに索引を作り、複数の処理装置と記憶装置に分散して格納し、各ノードで並列に検索させるデータベース検索方式も開示されている。また、同じデータがすでに格納されているかどうかをチェックするために、データから識別子としてハッシュ値を求め、同じ識別子がみつからない場合は同じデータは存在しないとしてデータを格納するストレージシステムも開示されている。
また、検索キーをもとにブルームフィルタのビットベクトルを求め、値の特定のセットを含む少なくとも一つのネットワークメッセージを生成しデータソースに伝送する、複数のノードを有するネットワークデータベースも開示されている。また、格納データ集合ごとに複数のハッシュ値を求め、その値をビット位置とした第3の表(ブルームフィルタ)を作り、入力値からハッシュ値を求め、符号化した値が表中に存在するかどうかで集合内に存在するかどうかを判定する情報検索も開示されている。
特開2007−52698号公報 特開平4−18895号公報 特開2001−101047号公報 特開平02−297670号公報 特開2010−182302号公報 特表2006−503342号公報 特表2007−524946号公報
上述したように、B木は多量のデータを扱うことができるため、キャッシュを適切に実装すれば、ディスクI/Oを減らすことは可能である。しかしながら、その回数をある一定以上減らすことはできない。また、データエントリの追加により木構造が変化すると、木構造管理のためのI/Oが必要になることもある。また、ブルームフィルタは、データエントリの存在だけがわかるものであるため、そのままではデータ管理に使うことはできない。
また、ブルームフィルタは、管理可能なデータ量に比例したサイズのメモリを占有する。したがって、重複除去ストレージシステムに適用した場合、当該システム全体の容量がノードに搭載できるメモリ量によって決まってしまうという問題があった。したがって、重複データを広い範囲で検索できないという問題があった。
1つの側面では、本発明は、データ検索の高速化又は管理可能なデータ量の拡大化を図ることができる検索プログラム、検索方法、検索装置、ノードおよび検索システムを提供することを目的とする。
本発明の一側面では、段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群にアクセス可能なコンピュータが、複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換し、前記第p段の転置ブルームフィルタ列の中から、前記位置情報に対応する前記第p段の転置ブルームフィルタを位置情報ごとに特定し、特定された前記第p段の転置ブルームフィルタを保持するノードから、特定された前記第p段の転置ブルームフィルタを取得し、取得された前記第p段の転置ブルームフィルタで擬陽性を示すビットのビット位置が同一であるか否かを判断し、同一であると判断された場合、第p段が第1段であるか否かを判断し、第1段であると判断された場合、擬陽性を示すビットのビット位置に応じた特定のデータブロックを有するノードから、前記特定のデータブロック内での前記検索対象データの存否を示す検索結果を取得する、検索プログラム、検索方法、および検索装置を用いる。
本発明の他の側面では、段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群で検索システムが構成される場合、前記ノード群内の各ノードが、前記ノード群にアクセス可能なコンピュータから、複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データから変換された前記転置ブルームフィルタの配列位置をあらわす位置情報を受信し、前記位置情報が受信された場合、前記第p段の転置ブルームフィルタ列の中から位置情報ごとに特定された、前記位置情報に対応する前記第p段の転置ブルームフィルタを前記コンピュータに送信し、前記コンピュータから前記複数種類のハッシュ関数の中の特定のハッシュ関数に前記検索対象データを与えたときのハッシュ値を受信し、前記いずれかのノードに対応するデータブロックに記憶されているデータと当該データを前記特定のハッシュ関数に与えたときのハッシュ値とを関連付けたハッシュテーブルを参照することにより、受信されたハッシュ値に関連付けられているデータを、前記いずれかのノードに対応するデータブロックの中から検索し、検索結果を前記コンピュータに送信する、検索プログラム、検索方法、検索装置、ノードおよび検索システムを用いる。
一態様によれば、データ検索の高速化を図ることができる。また、一態様によれば、管理可能なデータ量の拡大化を図ることができる。
図1は、実施の形態にかかる検索システムのシステム構成例を示す説明図である。 図2は、階層型ブルームフィルタの一例を示す説明図である。 図3は、階層型ブルームフィルタBF内の第p段のブルームフィルタ列BF(p)の転置例を示す説明図である。 図4は、実施の形態にかかるコンピュータ(ノードN1〜N4、管理サーバM、クライアントC1〜C3)のハードウェア構成例を示すブロック図である。 図5は、エントリ処理の一例を示す説明図である。 図6は、実施の形態にかかる登録元コンピュータによるエントリ処理手順例を示すフローチャートである。 図7は、図6に示したデータエントリ処理の詳細な処理手順例を示すフローチャートである。 図8は、データエントリリクエスト801およびリプライのデータ構造例を示す説明図である。 図9は、図6に示したフィルタエントリ処理の詳細な処理手順例を示すフローチャートである。 図10は、フィルタエントリリクエストのデータ構造例を示す説明図である。 図11は、実施の形態にかかるノードによるエントリ処理の詳細な処理手順例を示すフローチャートである。 図12は、検索処理例を示す説明図(その1)である。 図13は、検索処理例を示す説明図(その2)である。 図14は、検索処理例を示す説明図(その3)である。 図15は、実施の形態にかかる検索元コンピュータによる検索処理手順例を示すフローチャート(前半)である。 図16は、AND演算要求のリクエストおよびリプライのデータ構造例を示す説明図である。 図17は、実施の形態にかかる検索元コンピュータによる検索処理手順例を示すフローチャート(後半)である。 図18は、ハッシュテーブル検索のリクエストおよびリプライのデータ構造例を示す説明図(その1)である。 図19は、ハッシュテーブル検索のリクエストおよびリプライのデータ構造例を示す説明図(その2)である。
以下に添付図面を参照して、本発明にかかる検索プログラム、検索方法、検索装置、ノードおよび検索システムの実施の形態を詳細に説明する。
<検索システムのシステム構成例>
図1は、実施の形態にかかる検索システムのシステム構成例を示す説明図である。図1において、検索システム100は、複数(図1では例として4台)のノードN1〜N4と、管理サーバMと、一または複数(図1では例として3台)のクライアントC1〜C3と、がネットワークNWを介して通信可能に接続されて構成されている。ネットワークNWとしては、たとえば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットが挙げられる。
本実施の形態では、階層型転置ブルームフィルタtBFをノード数で分割して、階層型分割転置ブルームフィルタを各ノードに持たせておく。階層型転置ブルームフィルタtBFとは、階層型ブルームフィルタを転置したインデックス情報である。
階層型ブルームフィルタとは、ブルームフィルタを階層構造にしたインデックス情報である。ブルームフィルタとは、所定数のデータブロック内での擬陽性(疑陽性、偽陽性ともいう)または陰性を示すビットが複数配列されたインデックス情報である。ブルームフィルタのビットがONのときは擬陽性を示し、OFFのときは陰性を示す。なお、ビットの値が1をONとし、0をOFFとしてもよく、逆に、ビットの値が0をONとし、1をOFFとしてもよい。本実施の形態では、ビットの値が1をON(擬陽性)とし、0をOFF(陰性)とする。
なお、階層型ブルームフィルタについては、図2を用いて後述する。また、階層型ブルームフィルタと階層型転置ブルームフィルタtBFとの対応関係については、図3を用いて後述する。
また、図1では、例として階層型転置ブルームフィルタtBFの階層数を3とする。したがって、階層型転置ブルームフィルタtBFは、1段目(最下段)の転置ブルームフィルタ列tBF(1)、2段目の転置ブルームフィルタ列tBF(2)、3段目(最上段)の転置ブルームフィルタ列tBF(3)を階層化したブルームフィルタである。
また、図1では、例として階層型転置ブルームフィルタtBFのビット幅sを64ビットとする。また、図1では、例として4台のノードで階層型転置ブルームフィルタtBFを16ビットのビット幅で分割するものとする。たとえば、ノードN1に割り当てられる階層型分割転置ブルームフィルタtBF1は、階層型転置ブルームフィルタtBFの1ビット目から16ビット目までのインデックス範囲となる。ノードN2〜N4についても同様に、図1に示したようにインデックス範囲が決まる。
また、階層型転置ブルームフィルタtBFにはデータブロック集合dbが対応付けられている。データブロック集合dbは、階層型転置ブルームフィルタtBFのビット幅sと同一ビット幅とする。したがって、データブロック集合dbは、階層型転置ブルームフィルタtBFと同じインデックス範囲で分割される。たとえば、分割データブロック集合ddb1は、階層型分割転置ブルームフィルタtBF1とともにノードN1に割り当てられることとなる。分割データブロック集合ddb2〜dbb4についても同様に、図1に示したように割り当てられる。
また、各ノードN1〜N4は、ハッシュテーブルHT1〜HT8を有している。ハッシュテーブルHT1〜HT8とは、データと、当該データを各ノードに共通のハッシュ関数(たとえば、SHA−1)に与えたときのハッシュ値と、を関連付けたテーブルである。ハッシュテーブルHT1〜HT8は、データブロックごとに用意されている。たとえば、ハッシュテーブルHT1はデータブロックdb1に対応する。
また、ハッシュテーブルHT1〜HT8のポインタで指定されるデータは、そのハッシュテーブルHT1〜HT8に対応するデータブロックdb1〜db8に格納されている。たとえば、ハッシュテーブルHT1のポインタで指定されるデータD11,D12は、データブロックdb1に格納されている。
なお、図1の例では、分割データブロック集合ddb1〜ddb4内の数字#はデータブロックの番号#を示しており、たとえば、分割データブロック集合ddb1内の「1」はデータブロックdb1、分割データブロック集合ddb1内の「2」はデータブロックdb2となる。
このように、階層型転置ブルームフィルタtBFおよびデータブロック集合dbを複数のノードに分散させることにより、重複除去ストレージのスケーラビリティの向上を図ることができる。また、階層型転置ブルームフィルタtBFを分散させておくことで、検索速度の高速化も図ることができる。
管理サーバMは、複数のノードN1〜N4を管理するコンピュータである。管理サーバMは、対応テーブルTを有している。対応テーブルTとは、階層型分割転置ブルームフィルタのインデックス範囲と当該インデックス範囲を担当するノードとを関連付けたテーブルである。管理サーバMは、対応テーブルTを参照することで、複数のノードN1〜N4のいずれかのノードにデータエントリ処理やフィルタエントリ処理を実行したり、複数のノードN1〜N4からデータの検索処理を実行したりする。なお、管理サーバMは、物理マシンでもよいが、いずれかのノードにおいて仮想マシンとして機能させてもよい。
クライアントC1〜C3は、複数のノードN1〜N4を利用するコンピュータである。クライアントC1〜C3は、対応テーブルTを有していない場合は、管理サーバMを介してデータエントリ処理やフィルタエントリ処理、データの検索処理を実行する。クライアントC1〜C3は、対応テーブルTを有している場合は、管理サーバMを介さずにデータエントリ処理やフィルタエントリ処理、データの検索処理を実行する。クライアントC1〜C3に対応テーブルTを持たせた場合は、必ずしも管理サーバMは必要ではない。
また、クライアントC1〜C3が対応テーブルTを有している場合でも、たとえば、管理サーバMはデータエントリ処理やフィルタエントリ処理をおこない、クライアントC1〜C3はデータの検索処理をおこなうなど、担当する処理を分けて実行することとしてもよい。なお、データエントリ処理やフィルタエントリ処理を実行するコンピュータは、フィルタエントリ処理に必要な各段の転置ブルームフィルタ列tBF(p)の配列数やビット幅sを記憶しているものとする。
このような検索システム100では、検索対象データが与えられると、階層型分割転置ブルームフィルタtBF1〜tBF4を参照して、検索対象データが存在するであろうデータブロックdb#を特定することになる。検索対象データが存在するであろうデータブロックdb#が特定されなかった場合は、いずれのデータブロックdb#にも検索対象データは存在しない(陰性)。逆に、検索対象データが存在するであろうデータブロックdb#が特定された場合でも、特定されたデータブロックdb#には、必ずしも検索対象データが存在するとは限らない(擬陽性)。
なお、擬陽性が陽性になるか陰性になるかは、最終的に特定されたデータブロックdb#に対応するハッシュテーブルHT#での検索結果に依存する。たとえば、最終的に特定されたデータブロックdb#に対応するハッシュテーブルHT#において、検索対象データのハッシュ値がヒットすれば陽性、ヒットしなければ陰性となる。
<階層型ブルームフィルタ>
つぎに、図1に示した階層型転置ブルームフィルタtBFの転置元となる階層型ブルームフィルタについて説明する。
図2は、階層型ブルームフィルタの一例を示す説明図である。階層型ブルームフィルタBFは、h段×sビット幅のメモリ領域で構成されている。sビット幅は、データブロック集合dbのビット幅に対応する。また、各段のビット長sは最上段である第h段の分割数dに基づいて分割される。分割された各々はブルームフィルタであり、各段においてブルームフィルタ列を構成する。分割数dは基本的には2以上の整数であるが、最上段である第h段を単一のブルームフィルタとする場合は、d=1としてもよい。
任意の段をpとすると、第p段のブルームフィルタ列BF(p)を構成するブルームフィルタbf(p)のビット幅mは、m=s/d[h-(p-1)]となる。図2では、d=2としている。また、第p段のブルームフィルタ列BF(p)のブルームフィルタbf(p)の配列数nは、n=d[h-(p-1)]となる。
したがって、階層型ブルームフィルタBFでは、段が下がる(hが小さくなる)につれ、第p段のブルームフィルタ列BF(p)のブルームフィルタbf(p)の配列数が増加する。なお、最下段(第1段)のブルームフィルタ列BF(1)のブルームフィルタbf(1)の配列数は、データブロックdb#の個数と同一とする。
これにより、第1段までたどり着いたときにヒットしたブルームフィルタbf(1)とデータブロックdb#とが一対一対応することになる。また、階層型ブルームフィルタBFの段数hは基本的には複数段であるが、1段(h=1)としてもよい。ただし、この場合は、d≠1とする。
ここで、ブルームフィルタの擬陽性による影響について説明する。ブルームフィルタの擬陽性の発生確率FPRは、ビット長がmのブルームフィルタがh段ある場合、データ登録数N(N<m)、ハッシュ関数の個数をk個とすると、ブルームフィルタの性質より、次式(1)のように表すことができる。
FPR={1−(1−1/m)kNk≒{1−e(-kN/m))}k・・・(1)
この場合、k,m,Nを変更することにより、擬陽性の発生確率FPRを非常に小さくすることができる。すなわち、k,m,Nの設定次第で、擬陽性の発生確率FPRを1よりも非常に小さい値(ほぼ0)に設定することができるようになる。
また、データブロック数Ndbをdhとすると、高さ段数hは、次式(2)にて表すことができる。
h=log(Ndb)/log(d)+1・・・(2)
上記式(2)は、log(Ndb)/log(d)が割り切れる場合を前提にしたが、そうでない場合、段によりdの値を他の段とは変えることで、hを決定することができる。
また、検索処理ではハッシュ値の数(k回(定数))だけ照合を行う必要があり、検索における1段あたりのフィルタリング対象の数は多くてもd個である。したがって、検索によるメモリアクセス回数MAは、最大でも次式(3)で表される程度である。
MA=k×d×log(Ndb)/log(d)・・・(3)
すなわち、段数h(=メモリ量)は、分割数dを増やすことにより小さくすることができ、その一方で、検索回数は分割数dの増加とともに大きくなるというトレードオフの関係にある。したがって、この関係を考慮することで、適切なメモリの運用が可能となる。
<階層型転置ブルームフィルタtBF>
つぎに、階層型転置ブルームフィルタtBFについて説明する。図2に示した階層型ブルームフィルタBFを転置させることで、階層型ブルームフィルタBFよりも検索速度をさらに高速化させることができる。
図3は、階層型ブルームフィルタBF内の第p段のブルームフィルタ列BF(p)の転置例を示す説明図である。(A)は、ブルームフィルタ列BF(p)を示している。ここでは、ブルームフィルタ列BF(p)は、例として、4分割されたブルームフィルタbf(p−1)〜bf(p−4)を示している。すなわち、ブルームフィルタ列BF(p)は、8ビット×4フィルタ数のビット列である。転置する場合は、4ビット×8フィルタ数のビット列となる。すなわち、転置により、配列数とビット幅が入れ替わる。
(B)は、ブルームフィルタ列BF(p)の転置を示している。転置する場合、各ブルームフィルタbf(p−1)〜bf(p−4)の同一位置のビットを集めて、同一位置ごとに集められたビット列を、ビット位置順に配列させる。
具体的には、各ブルームフィルタbf(p−1)〜bf(p−4)の各先頭ビットを配列番号順にまとめてビット列{0110}とする。左から先頭ビット「0」がブルームフィルタbf(p−1)の先頭ビット、2番目のビット「1」がブルームフィルタbf(p−2)の先頭ビット、3番目のビット「1」がブルームフィルタbf(p−3)の先頭ビット、末尾ビット「0」がブルームフィルタbf(p−4)の先頭ビットである。
このビット列{0110}を、転置ブルームフィルタtbf(p−1)と称す。2番目〜末尾のビット位置についても同様にまとめることで、転置ブルームフィルタtbf(p−1)〜tbf(p−8)を得る。転置ブルームフィルタtbf(p−1)〜tbf(p−8)がビット位置順に配列されたインデックス情報が、転置ブルームフィルタ列tBF(p)である。転置ブルームフィルタ列tBF(p)をすべての段で生成することで、階層型転置ブルームフィルタtBFとなる。
(C)は、ブルームフィルタ列BF(p)と転置ブルームフィルタ列tBF(p)との検索比較例を示している。ここでは、2種類のハッシュ関数により対象データDのハッシュ値を2つ求め、ブルームフィルタ列BF(p)を構成するブルームフィルタbf(p)のビット幅10で割り算した余り値を、「4」および「8」とする。
ブルームフィルタ列BF(p)で検索する場合、余り値「4」および「8」となるビット位置「4」および「8」がすべてONになっているブルームフィルタbf(p)をブルームフィルタ列BF(p)から探す。この場合、ブルームフィルタbf(p−2)が該当する。
一方、転置ブルームフィルタ列tBF(p)を用いる場合、ブルームフィルタ列BF(p)のように、ビット位置「4」および「8」がすべてONになっているブルームフィルタbf(p)を検索せず、余り値「4」および「8」と同一配列番号の転置ブルームフィルタtbf(p−4),tbf(p−8)を抽出する。そして、抽出された転置ブルームフィルタtbf(p−4),tbf(p−8)をAND演算することで、ともにONになっているビット位置「2」を特定する。
ブルームフィルタ列BF(p)の場合は、4個のブルームフィルタbf(p−1)〜bf(p−4)内の4ビット目と8ビット目を参照するため、8(=4×2)のメモリアクセスが必要となる。一方、転置ブルームフィルタ列tBF(p)は、転置前のブルームフィルタbf(p−1)〜bf(p−4)のビット位置ごとに折りたたまれたインデックス情報である。したがって、転置ブルームフィルタtbf(p−4),tbf(p−8)を抽出するという2回のメモリアクセスとそのAND演算により判定することが可能となる。したがって、階層型ブルームフィルタBFよりもメモリアクセス頻度が低減され、検索速度が高速化することとなる。
このようにして得られた階層型転置ブルームフィルタtBFをインデックス範囲で分割してノードに割り当てることで、各ノードでの検索処理において、メモリアクセス頻度が低減され、検索速度が高速化することとなる。また、複数のノードに分散されているため、単ノードに比べて、複数のノード全体でのインデックス範囲を広くとることができる。このように、管理可能なデータ量の拡大を図ることで、重複データを広い範囲で検索をおこなうことができ、検索対象データを見つけやすくすることができる。
<コンピュータのハードウェア構成例>
図4は、実施の形態にかかるコンピュータ(ノードN1〜N4、管理サーバM、クライアントC1〜C3)のハードウェア構成例を示すブロック図である。図4において、検索装置は、CPU(Central Processing Unit)401と、ROM(Read Only Memory)402と、RAM(Random Access Memory)403と、磁気ディスクドライブ404と、磁気ディスク405と、光ディスクドライブ406と、光ディスク407と、ディスプレイ408と、I/F(Interface)409と、キーボード140と、マウス411と、スキャナ412と、プリンタ413と、を備えている。また、各構成部はバス400によってそれぞれ接続されている。
ここで、CPU401は、コンピュータの全体の制御を司る。ROM402は、ブートプログラムなどのプログラムを記憶している。RAM403は、CPU401のワークエリアとして使用される。磁気ディスクドライブ404は、CPU401の制御にしたがって磁気ディスク405に対するデータのリード/ライトを制御する。磁気ディスク405は、磁気ディスクドライブ404の制御で書き込まれたデータを記憶する。
光ディスクドライブ406は、CPU401の制御にしたがって光ディスク407に対するデータのリード/ライトを制御する。光ディスク407は、光ディスクドライブ406の制御で書き込まれたデータを記憶したり、光ディスク407に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ408は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ408は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)409は、通信回線を通じてネットワークNWに接続され、このネットワークNWを介して他の装置に接続される。そして、I/F409は、ネットワークNWと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F409には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード410は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス411は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ412は、画像を光学的に読み取り、コンピュータ内に画像データを取り込む。なお、スキャナ412は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ413は、画像データや文書データを印刷する。プリンタ413には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
<エントリ処理例>
つぎに、エントリ処理について説明する。エントリ処理では、エントリの対象となるデータ(以下、対象データ)を登録するデータエントリ処理と、階層型分割転置ブルームフィルタ群へのフィルタエントリ処理とが実行される。以下、図5を用いて説明する。
図5は、エントリ処理の一例を示す説明図である。ここでは、図1に示した階層型分割転置ブルームフィルタ群(tBF1〜tBF4)を例にあげて説明する。図5では、対象データDxがデータブロック集合dbにまだエントリされていないものとする。また、エントリ処理を実行するコンピュータは、管理サーバMまたはクライアントC1〜C3となるが、ここでは一例として管理サーバMとする。
(データエントリ処理例)
まず、データエントリ処理例について説明する。登録される対象データDxが与えられるハッシュ関数の種類数kをk=3とする。ここでは、ハッシュ関数H1(),H2(),H3()を用いることとする。また、ハッシュテーブルHT1〜HT8の登録対象となるハッシュ関数をH1()とする。
まず、管理サーバMでは、対象データをエントリさせるノード(登録先ノード)を指定する。どのノードにエントリするかは、管理サーバMの利用者が任意に指定することができる。また、あらかじめ各ノードの空き容量に応じて、エントリさせるノードを指定することとしてもよい。各ノードの空き容量は、各ノードが管理サーバMに対して定期的にまたは管理サーバMからの要求に応じて通知されるものとする。図5では、ノードN2が指定されたものとする。
また、対象データDxを各ハッシュ関数H1(),H2(),H3()に与えたときのハッシュ値は、例として以下の値とする。
H1(Dx)=x1
H2(Dx)=x2
H3(Dx)=x3
また、エントリ処理では、更新対象となる転置ブルームフィルタtbf(p)内の特定のビットをONにするが、その特定のビットがすでにONになっている場合はそのままとする。
ここで、管理サーバMは、対象データDxについてのハッシュテーブルエントリExを作成する。そして、管理サーバMは、作成されたハッシュテーブルエントリExを、登録先ノードとなるノードN2に送信する。なお、図5の例では、ノードN2は、分割データブロック集合ddb2内のデータブロックdb4に、対象データDxを登録したものとする。
この場合、ハッシュテーブルエントリExは、ノードN2のハッシュテーブルHT4に追加される。なお、実際には、対象データDxは、データブロックdb4に格納されており、ハッシュテーブルHT4では、ハッシュ値x1とデータブロックdb4に格納された対象データDxへのポインタとが関連付けられることになる。
ノードN2は、ハッシュテーブルHT4へのエントリが完了すると、管理サーバMにリプライを返す。リプライには、登録先のデータブロックのブロック番号が含まれている。この場合は、登録先のデータブロックdb4のブロック番号4が含まれている。
(フィルタエントリ処理例)
つぎに、フィルタエントリ処理例について説明する。まずは、第1段のフィルタエントリ処理が実行される。管理サーバMは、更新対象となる転置ブルームフィルタtbf(1)を、第1段の転置ブルームフィルタ列tBF(1)の中から特定する。具体的には、管理サーバMは、各ハッシュ値x1〜x3を、第1段の転置ブルームフィルタ列tBF(1)の配列数である「8」で割り算し、余り値を算出する。余り値は、転置ブルームフィルタの配列位置をあらわす位置情報となる。
ここでは、ハッシュ値x1の余り値は「2」、ハッシュ値x2の余り値は「5」、ハッシュ値x3の余り値は「7」になったものとする。したがって、第1段での更新対象となる転置ブルームフィルタtbf(1)は、転置ブルームフィルタtbf(1−2),tbf(1−5),tbf(1−7)となる。
また、第1段(最下段)では、リプライで特定される登録先のデータブロックdb4のブロック番号4に対応するビット位置を更新対象ビットとする。そして、管理サーバMは、第1段での更新対象となる転置ブルームフィルタtbf(1−2),tbf(1−5),tbf(1−7)のインデックス範囲を特定する。
たとえば、第1段の転置ブルームフィルタtbf(1)のビット幅は8ビットであるため、先頭から2番目の転置ブルームフィルタtbf(1−2)のインデックス範囲は、9ビット目から16ビット目となる。このインデックス範囲は、対応テーブルTを参照することで、ノードN1のインデックス範囲であると特定される。したがって、転置ブルームフィルタtbf(1−2)はノードN1に属していることが判明する。転置ブルームフィルタtbf(1−5),tbf(1−7)についても同様に、それぞれノードN3,N4に属していることが判明する。そして、管理サーバMは、ノードN1,N3,N4に更新対象ビット位置を通知する。
通知を受けたノードN1,N3,N4は、更新対象となる転置ブルームフィルタtbf(1)の先頭から4ビット目のビットをONにする。これにより、第1段の転置ブルームフィルタ列tBF(1)のフィルタエントリ処理を終了する。
つぎに、第2段のフィルタエントリ処理が実行される。管理サーバMは、更新対象となる転置ブルームフィルタtbf(2)を、第2段の転置ブルームフィルタ列tBF(2)の中から特定する。具体的には、管理サーバMは、各ハッシュ値x1〜x3を、第2段の転置ブルームフィルタ列tBF(2)の配列数である「16」で割り算し、余り値を算出する。
ここでは、ハッシュ値x1の余り値は「8」、ハッシュ値x2の余り値は「11」、ハッシュ値x3の余り値は「13」になったものとする。したがって、第2段での更新対象となる転置ブルームフィルタtbf(2)は、転置ブルームフィルタtbf(2−8),tbf(2−11),tbf(2−13)となる。
つぎに、転置ブルームフィルタtbf(2−8),tbf(2−11),tbf(2−13)内のどのビット位置のビットをONにするかについて説明する。転置前の階層型ブルームフィルタBFでは、分割数をdとして、各ブルームフィルタ列BF(p)をn(=d[h-(p-1)])個に分割した。そして、これにより、各ブルームフィルタ列BF(p)のビット幅は、m(=s/n)ビットになった。
このため、階層型ブルームフィルタBFでは、第(p−1)段での更新対象のブルームフィルタbf((p−1)−#)のビット位置を包含するブルームフィルタbf(p)を、第p段のブルームフィルタ列BF(p)の中から特定していた。
これに対し、階層型転置ブルームフィルタtBFでは、配列数nとビット幅mが入れ替わっているため、第(p−1)段の更新対象のブルームフィルタbf((p−1)−#)の配列番号#ではなく、第(p−1)段での更新対象ビット位置を分割数dで割り算し、端数を切り上げる。分割数dは転置後では最上段hの転置ブルームフィルタtbf(h)のビット幅となる。
第2段の場合、前段である第1段での更新対象ビットは、先頭から4ビット目のビットであり、転置ブルームフィルタtbf(1−2),tbf(1−5),tbf(1−7)の4ビット目がONにされた。したがって、第2段の更新対象ビットは、d=2であるため、先頭から4/d=2ビット目のビットを更新対象ビットとする。
本例では、転置ブルームフィルタtbf(2−8),tbf(2−11),tbf(2−13)の先頭から2ビット目が更新対象ビット位置となる。そして、管理サーバMは、第1段と同様、転置ブルームフィルタtbfのビット幅(第2段は4ビット)と対応テーブルTを用いることで、第2段での更新対象となる転置ブルームフィルタtbf(2−8),tbf(2−11),tbf(2−13)を有するノードN2〜N4を特定する。そして、管理サーバMは、ノードN2〜N4に更新対象ビット位置を通知する。
通知を受けたノードN2〜N4は、更新対象となる転置ブルームフィルタtbf(2)の先頭から2ビット目のビットをONにする。これにより、第2段の転置ブルームフィルタ列tBF(2)のフィルタエントリ処理を終了する。
つぎに、第3段(最上段)のフィルタエントリ処理が実行される。管理サーバMは、更新対象となる転置ブルームフィルタtbf(3)を、第3段の転置ブルームフィルタ列tBF(3)の中から特定する。具体的には、管理サーバMは、各ハッシュ値x1〜x3を、第3段の転置ブルームフィルタ列tBF(3)の配列数である32で割り算し、余り値を算出する。
ハッシュ値x1の余り値は「2」、ハッシュ値x2の余り値は「19」、ハッシュ値x3の余り値は「27」になったものとする。したがって、第3段での更新対象となる転置ブルームフィルタtbf(3)は、転置ブルームフィルタtbf(3−2),tbf(3−19),tbf(3−27)となる。
つぎに、転置ブルームフィルタtbf(3−2),tbf(3−19),tbf(3−27)内の更新対象ビット位置を決める。第2段と同様、第(p−1)段の更新対象のブルームフィルタbf((p−1)−#)の配列番号#ではなく、第(p−1)段での更新対象ビット位置を分割数dで割り算し、端数を切り上げる。
第3段の場合、前段である第2段での更新対象ビットは、先頭から2ビット目のビットであり、転置ブルームフィルタtbf(2−8),tbf(2−11),tbf(2−13)の2ビット目がONにされた。したがって、第3段の更新対象ビットは、d=2であるため、先頭から2/d=1ビット目を更新対象ビット位置とする。
本例では、転置ブルームフィルタtbf(3−2),tbf(3−19),tbf(3−27)の先頭から1ビット目が更新対象ビット位置となる。そして、管理サーバMは、第1段、第2段と同様、転置ブルームフィルタtbfのビット幅(第3段は2ビット)と対応テーブルTを用いることで、第3段での更新対象となる転置ブルームフィルタtbf(3−2),tbf(3−19),tbf(3−27)を有するノードN1,N3,N4を特定する。そして、管理サーバMは、ノードN1,N3,N4に更新対象ビット位置を通知する。
通知を受けたノードN1,N3,N4は、更新対象となる転置ブルームフィルタtbf(3)の先頭から1ビット目のビットをONにする。これにより、第3段の転置ブルームフィルタ列tBF(3)のフィルタエントリ処理を終了する。
(登録元コンピュータによるエントリ処理手順)
図6は、実施の形態にかかる登録元コンピュータによるエントリ処理手順例を示すフローチャートである。エントリ処理を実行するコンピュータ(たとえば、管理サーバMまたはクライアント。以下、単に「登録元コンピュータ」。)は、登録したい対象データ(たとえば、図5に示した対象データDx)があるか否かを判断する(ステップS601)。対象データDxがある場合(ステップS601:Yes)、登録元コンピュータは、k種類のハッシュ関数(H1()を含む)のそれぞれに対象データを与えてk個のハッシュ値を算出する(ステップS602)。そして、登録元コンピュータは、段数pをp=1に設定し(ステップS603)、データエントリ処理(ステップS604)およびフィルタエントリ処理(ステップS605)を実行する。
その後、ステップS601に戻る。そして、コンピュータは、登録したい対象データがない場合(ステップS601:No)、エントリ処理を終了する。これにより、図5に示したように、対象データDxについてデータエントリ処理とフィルタエントリ処理が実行され、対象データDxについて検索可能状態となる。
(データエントリ処理手順)
図7は、図6に示したデータエントリ処理の詳細な処理手順例を示すフローチャートである。図7において、まず、登録元コンピュータは、対象データDxのハッシュテーブルエントリを生成する(ステップS701)。たとえば、登録元コンピュータは、図5に示したように、ハッシュテーブルエントリExを生成する。
つぎに、登録元コンピュータは、登録先ノードを指定する(ステップS702)。具体的には、たとえば、管理サーバMの利用者が入力装置を操作することで任意に指定することができる。また、あらかじめ各ノードの空き容量に応じて、エントリさせるノードを指定することとしてもよい。図5に示した例では、ノードN2が指定されている。
そして、登録元コンピュータは、登録先ノードにデータエントリリクエスト801を送信し(ステップS703)、データエントリリクエスト801に対する登録先ノードからのリプライを待ち受ける(ステップS704)。
図8は、データエントリリクエスト801およびリプライのデータ構造例を示す説明図である。図8において、(A)はデータエントリリクエスト801、(B)はリプライ802を示す。図8のデータ構造例は、図5のデータエントリ処理例に対応している。(A)のデータエントリリクエスト801のヘッダは、データエントリリクエスト801の送信元アドレスと宛先アドレスとを保持する。図8では、コンピュータに割り当てた符号M,N2をアドレスの代わりに表記している。
また、(A)のデータエントリリクエスト801のペイロードは、種類項目、属性項目、ハッシュ値項目、登録データ項目に対しそれぞれの情報が保持されている。たとえば、種類項目には、「登録」、属性項目には「データエントリ」、ハッシュ値項目には「x1」、登録データ項目には、「Dx」が保持されている。
また、(B)のリプライ802のヘッダは、データエントリリクエスト801の送信元アドレスと宛先アドレスとが入れ替わった送信元アドレスと宛先アドレスとを保持する。(B)のリプライ802のペイロードは、登録データである対象データDxが登録されたデータブロックdb4のブロック番号「4」が保持されている。
図7に戻り、リプライ802が受信されていない場合(ステップS704:No)、登録元コンピュータは、データエントリリクエスト801の送信から所定時間経過したか否かを判断する(ステップS705)。所定時間経過していない場合(ステップS705:No)、ステップS704に戻る。一方、所定時間経過した場合(ステップS705:Yes)、登録元コンピュータは、エラー出力をおこなう(ステップS706)。たとえば、ディスプレイ408に、データエントリできなかった旨の表示をおこなう。
一方、リプライ802が受信された場合(ステップS704:Yes)、フィルタエントリ処理(ステップS605)を実行することとなる。このデータエントリ処理(ステップS604)により、対象データDxが、指定された登録先ノードに、対象データDxのハッシュ値と関連付けられて登録されることとなる。
(フィルタエントリ処理)
図9は、図6に示したフィルタエントリ処理の詳細な処理手順例を示すフローチャートである。図9において、まず、登録元コンピュータは、図7のステップS704で受信したリプライ802から登録先データブロックのブロック番号を抽出する(ステップS901)。図8の(B)に示した例では、「4」が抽出される。
つぎに、登録元コンピュータは、p>h(hは階層型分割転置ブルームフィルタ群の最上段)であるか否かを判断する(ステップS902)。p>hでない場合(ステップS902:No)、登録元コンピュータは、k個のハッシュ値を第p段の転置ブルームフィルタtbf(p)の配列数で除算して、k個の余り値を算出する(ステップS903)。なお、階層型転置ブルームフィルタtBFのビット幅sと段ごとの転置ブルームフィルタの配列数については登録元コンピュータに保持されているものとする。
そして、登録元コンピュータは、k個の余り値と同一配列番号のk個の転置ブルームフィルタtbf(p)を特定する(ステップS904)。このあと、p=1であるか否かを判断し(ステップS905)、p=1である場合(ステップS905:Yes)、登録元コンピュータは、ステップS901で抽出された登録先データブロックのブロック番号を、エントリすべきブロック番号として特定する(ステップS906)。図5の例では、ブロック番号は「4」であるため、エントリすべきブロック番号は「4」である。
一方、p≠1である場合(ステップS905:No)、登録元コンピュータは、特定されたk個の転置ブルームフィルタtbf(p)に、対象データDxの第(p−1)段での更新対象ビット位置(エントリ番号e(p−1))を分割数dで除算した商(端数切り上げ)を、エントリすべきブロック番号として特定する(ステップS907)。図5の例において、第2段の場合、第1段での更新対象ビット位置である「4」を、転置前の最上段の分割数=2で除算した商「2」がエントリすべきブロック番号となる。
ステップS906またはS907のあと、登録元コンピュータは、転置ブルームフィルタtbf(p)を有するノードを特定する(ステップS908)。第1段を例に挙げると、第1段の転置ブルームフィルタtbfのビット幅は8ビットであるため、先頭から2番目の転置ブルームフィルタtbf(1−2)のインデックス範囲は、9ビット目から16ビット目となる。このインデックス範囲は、対応テーブルTを参照することで、ノードN1のインデックス範囲であると特定される。
そして、登録元コンピュータは、ステップS908での特定先ノードに対し、フィルタエントリリクエストを配信し(ステップS909)、リプライ802(ACK)を待ち受ける(ステップS910)。
図10は、フィルタエントリリクエストのデータ構造例を示す説明図である。図10のデータ構造例は、図5の第1段でのデータエントリ処理例に対応している。フィルタエントリリクエスト1000のヘッダは、フィルタエントリリクエスト1000の送信元アドレスと宛先アドレスとを保持する。図10では、コンピュータに割り当てた符号M,N1をアドレスの代わりに表記している。
また、フィルタエントリリクエスト1000のペイロードは、種類項目、属性項目、特定先転置ブルームフィルタ項目、特定先ブロック番号項目に対しそれぞれの情報が保持されている。たとえば、種類項目には、「登録」、属性項目には「フィルタエントリ」、転置ブルームフィルタ項目には特定された転置ブルームフィルタの識別子「tbf(1−2)」(特定先ノード(宛先)がN1のため)、特定先ブロック番号項目には、「4」が保持されている。
転置ブルームフィルタ項目において、特定された転置ブルームフィルタの識別子としては、特定された転置ブルームフィルタのビット位置を示すインデックス範囲が挙げられる。たとえば、tbf(1−2)の場合は、9ビット目〜16ビット目となる。
図9に戻り、リプライが受信されていない場合(ステップS910:No)、登録元コンピュータは、フィルタエントリリクエスト1000の送信から所定時間経過したか否かを判断する(ステップS911)。所定時間経過していない場合(ステップS911:No)、ステップS910に戻る。一方、所定時間経過した場合(ステップS911:Yes)、登録元コンピュータは、エラー出力をおこなう(ステップS912)。たとえば、ディスプレイに、フィルタエントリできなかった旨の表示をおこなう。
一方、リプライが受信された場合(ステップS910:Yes)、登録元コンピュータは、段数pを1つインクリメントし(ステップS913)、ステップS902に戻る。そして、登録元コンピュータは、p>hと判断した場合(ステップS902:Yes)、ステップS601に戻ることで、フィルタエントリ処理(ステップS605)を終了する。このフィルタエントリ処理(ステップS605)により、対象データを検索するためのフィルタが設定されることとなる。
(ノードによるエントリ処理)
図11は、実施の形態にかかるノードによるエントリ処理の詳細な処理手順例を示すフローチャートである。図11の処理手順は、複数のノード(ノードN1〜N4)のいずれのノードでも実行される処理手順である。
まず、ノードは、リクエストの受信を待ち受ける(ステップS1101:No)。リクエストが受信された場合(ステップS1101:Yes)、ノードは、リクエストの種類を特定する(ステップS1102)。具体的には、リクエスト内の種類項目が「登録」または「検索」であるかを特定する。
「登録」である場合(ステップS1102:登録)、ノードは、属性を特定する(ステップS1103)。具体的には、リクエスト内の属性項目が「データエントリ」または「フィルタエントリ」であるかを特定する。「データエントリ」の場合(ステップS1103:データエントリ)、受信したリクエストがデータエントリリクエスト801であると判明する。この場合、ノードは、データエントリリクエスト801の登録データ項目内のデータを、保持しているいずれかのデータブロックに登録する(ステップS1104)。
また、ノードは、データエントリリクエスト801のハッシュ値項目内のハッシュ値をハッシュテーブルに登録し、ステップS1104で登録されたデータおよびハッシュ値を関連付ける(ステップS1105)。このあと、ノードは、登録先データブロックのブロック番号を含むリプライ802を、データエントリリクエスト801の送信元に返す(ステップS1106)。これにより、ノードによるデータエントリ処理が終了する。
一方、ステップS1103において、属性が「フィルタエントリ」である場合(ステップS1103:フィルタエントリ)、受信したリクエストがフィルタエントリリクエスト1000であると判明する。この場合、ノードは、転置ブルームフィルタtbf(p)の特定先ブロック番号をエントリする(ステップS1107)。具体的には、ノードは、フィルタエントリリクエスト1000の転置ブルームフィルタ項目で特定される転置ブルームフィルタtbf(p)において、特定先ブロック番号が更新対象ビット位置であるとして、更新対象ビット位置のビットをONにする。
このあと、ノードは、エントリした旨のリプライを、フィルタエントリリクエスト1000の送信元に返す(ステップS1108)。これにより、ノードによるフィルタエントリ処理が終了する。なお、「検索」の場合(ステップS1102:検索)以降の処理手順S1109〜S1115については後述する。
<検索処理例>
つぎに、検索処理について説明する。検索処理では、検索対象データが与えられると、階層型分割転置ブルームフィルタ群で絞り込むことで、検索対象データがノード群に存在するか否かを特定する処理である。以下、図12〜図14を用いて説明する。図12〜図14では、図1に示した階層型転置ブルームフィルタ群(tBF1〜tBF4)を例にあげて説明する。また、検索処理を実行する検索元コンピュータは、管理サーバMまたはいずれかのクライアントC1〜C3となるが、ここでは一例としてクライアントC1とする。
図12〜図14は、検索処理例を示す説明図である。図12〜図14では、説明上、図1に示したように、全ビット幅s=64ビット、段数h=3段、転置前の第h段での分割数d=2とする。
図12において、最上段である第3段のブルームフィルタ列BF(3)を構成するブルームフィルタのビット幅は、32(=s/dh=64/21)ビットである。このため、最上段である第3段の転置ブルームフィルタ列tBF(3)は、32(=s/dh=64/21)個の転置ブルームフィルタtbf(3−1)〜tbf(3−32)により構成される。
図13において、第2段の転置ブルームフィルタ列tBF(2)を構成するブルームフィルタのビット幅は、16(=s/dh=64/22)ビットである。このため、第2段の転置ブルームフィルタ列tBF(2)は、16(=s/dh=64/22)個の転置ブルームフィルタtbf(2−1)〜tbf(2−16)により構成される。
図14において、最下段である第1段のブルームフィルタ列BF(1)を構成するブルームフィルタのビット幅は、8(=s/dh=64/23)ビットである。このため、最下段である第1段の転置ブルームフィルタ列tBF(1)は、8(=s/dh=64/23)個の転置ブルームフィルタtbf(1−1)〜tbf(1−8)により構成される。
なお、図12〜図14では、説明上、比較のため、転置ブルームフィルタ列tBF(1)〜tBF(3)とともに、転置前のブルームフィルタ列BF(1)〜BF(3)を併記しておく。
まず、図12において、クライアントC1は、検索対象データDxについてのハッシュ関数H1()〜H3()での3個のハッシュ値を、第3段の転置ブルームフィルタ数32で割り算したときの余り値「2」、「5」、「22」を求める。
つぎに、クライアントC1は、フィルタリング対象となる転置ブルームフィルタを第3段の転置ブルームフィルタ列tBF(3)から特定する。具体的には、余り値と同一ビット位置(余り値が0の場合は末尾位置)となる転置ブルームフィルタtbf(3−2),tbf(3−5),tbf(3−22)を特定する。
第3段の転置ブルームフィルタtbf(3−1)〜tbf(3−32)は、32個であるため、全ビット幅s=64ビットを32個で割ることで、第3段の転置ブルームフィルタ1個あたりのビット幅は2ビットである。このことから、クライアントC1は、先頭から2番目の転置ブルームフィルタtbf(3−2)のインデックス範囲を、3ビット目〜4ビット目であることを割り出す。
これにより、クライアントC1は、対応テーブルTを参照することで、転置ブルームフィルタtbf(3−2)がノードN1に所属することが判明する。転置ブルームフィルタtbf(3−5),tbf(3−22)についても同様に処理することで、転置ブルームフィルタtbf(3−5)はノードN1に所属することが判明し、転置ブルームフィルタtbf(3−22)は、ノードN3に所属することが判明する。
そして、クライアントC1は、特定された転置ブルームフィルタtbf(3−2),tbf(3−5),tbf(3−22)が所属するノードN1,N3に対し、AND演算要求のリクエストを配信する。当該リクエストを受けたノードN1,N3は、特定された転置ブルームフィルタtbf(3−2),tbf(3−5),tbf(3−22)のAND演算を実行する。
具体的には、たとえば、ノードN1は、所属する転置ブルームフィルタtbf(3−2),tbf(3−5)のAND演算を実行する。図12の場合、AND結果r3−1は、r3−1={10}となる。ノードN1は、AND結果r3−1をクライアントC1に返す。同様に、ノードN3の特定された所属転置ブルームフィルタはtbf(3−22)だけなので、AND結果r3−3は、r3−3=tbf(3−22)={10}となる。ノードN3は、AND結果r3−3をクライアントC1に返す。このように、必要なノードのみAND演算が実行されるため、検索処理の効率化を図ることができる。
また、クライアントC1では、ノードN1,N3から返ってきたAND結果r3−1,r3−3のAND演算を実行し、AND結果R3={10}を得る。クライアントC1は、AND結果R3に「1」が含まれていない場合は、いずれのデータブロックdb1〜db8にも検索対象データDxが存在しないと判定する。一方、AND結果R3に「1」が含まれている場合、検索対象データDxを登録したかもしれないため、1つ下の段に移る。図12の場合、AND結果R3にはビット位置が1ビット目において「1」が存在するため、1つ下の第2段(図13を参照)に移行する。
つぎに、図13において、第2段においても、まず、クライアントC1は、検索対象データDxについての3個のハッシュ値を、第2段の転置ブルームフィルタ数16で割り算したときの余り値「6」、「8」、「13」を求める。
つぎに、クライアントC1は、フィルタリング対象となる転置ブルームフィルタを第2段の転置ブルームフィルタ列tBF(2)から特定する。具体的には、余り値と同一ビット位置(余り値が0の場合は末尾位置)となる転置ブルームフィルタtbf(2−6),tbf(2−8),tbf(2−13)を特定する。
第2段の転置ブルームフィルタtbf(2−1)〜tbf(2−16)は、16個であるため、全ビット幅s=64ビットを16個で割ることで、第2段の転置ブルームフィルタ1個あたりのビット幅は4ビットである。このことから、クライアントC1は、先頭から6番目の転置ブルームフィルタtbf(2−6)のインデックス範囲を、21ビット目〜24ビット目であることを割り出す。
これにより、クライアントC1は、対応テーブルTを参照することで、転置ブルームフィルタtbf(2−6)がノードN2に所属することが判明する。転置ブルームフィルタtbf(2−8),tbf(2−13)についても同様に処理することで、転置ブルームフィルタtbf(2−8)はノードN2に所属することが判明し、転置ブルームフィルタtbf(2−13)は、ノードN4に所属することが判明する。
そして、クライアントC1は、特定された転置ブルームフィルタtbf(2−6),tbf(2−8),tbf(2−13)が所属するノードN2,N4に対し、AND演算要求のリクエストを配信する。当該リクエストを受けたノードN2,N4は、特定された転置ブルームフィルタtbf(2−6),tbf(2−8),tbf(2−13)のAND演算を実行する。
具体的には、たとえば、ノードN2は、所属する転置ブルームフィルタtbf(2−6),tbf(2−8)のAND演算を実行する。図13の場合、AND結果r2−2は、r2−2={0100}となる。ノードN2は、AND結果r2−2をクライアントC1に返す。同様に、ノードN4の特定された所属転置ブルームフィルタはtbf(2−13)だけなので、AND結果r2−4は、r2−4=tbf(2−13)={0100}となる。ノードN4は、AND結果r2−4をクライアントC1に返す。このように、必要なノードのみAND演算が実行されるため、検索処理の効率化を図ることができる。
また、クライアントC1では、ノードN2,N4から返ってきたAND結果r2−2,r2−4のAND演算を実行し、AND結果R2={0100}を得る。クライアントC1は、AND結果R2に「1」が含まれていない場合は、いずれのデータブロックdb1〜db8にも検索対象データDxが存在しないと判定する。一方、AND結果R2に「1」が含まれている場合、検索対象データDxを登録したかもしれないため、1つ下の段に移る。図13の場合、AND結果R2にはビット位置が2ビット目において「1」が存在するため、1つ下の第1段(図14を参照)に移行する。
つぎに、図14において、第1段においても、まず、クライアントC1は、検索対象データDxについての3個のハッシュ値を、第1段の転置ブルームフィルタ数8で割り算したときの余り値「1」、「2」、「7」を求める。
つぎに、クライアントC1は、フィルタリング対象となる転置ブルームフィルタを第1段の転置ブルームフィルタ列tBF(1)から特定する。具体的には、余り値と同一ビット位置(余り値が0の場合は末尾位置)となる転置ブルームフィルタtbf(1−1),tbf(1−2),tbf(1−7)を特定する。
第1段の転置ブルームフィルタtbf(1−1)〜tbf(1−8)は、8個であるため、全ビット幅s=64ビットを8個で割ることで、第1段の転置ブルームフィルタ1個あたりのビット幅は8ビットである。このことから、クライアントC1は、先頭から1番目の転置ブルームフィルタtbf(1−1)のインデックス範囲を、1ビット目〜8ビット目であることを割り出す。
これにより、クライアントC1は、対応テーブルTを参照することで、転置ブルームフィルタtbf(1−1)がノードN1に所属することが判明する。転置ブルームフィルタtbf(1−2),tbf(1−7)についても同様に処理することで、転置ブルームフィルタtbf(1−2)はノードN1に所属することが判明し、転置ブルームフィルタtbf(1−7)は、ノードN4に所属することが判明する。
そして、クライアントC1は、特定された転置ブルームフィルタtbf(1−1),tbf(1−2),tbf(1−7)が所属するノードN1,N4に対し、AND演算要求のリクエストを配信する。当該リクエストを受けたノードN1,N4は、特定された転置ブルームフィルタtbf(1−1),tbf(1−2),tbf(1−7)のAND演算を実行する。
具体的には、たとえば、ノードN1は、所属する転置ブルームフィルタtbf(1−1),tbf(1−2)のAND演算を実行する。図14の場合、AND結果r1−1は、r1−1={00110010}となる。ノードN1は、AND結果r1−1をクライアントC1に返す。同様に、ノードN4の特定された所属転置ブルームフィルタはtbf(1−7)だけなので、AND結果r1−4は、r1−4=tbf(1−7)={00010010}となる。ノードN4は、AND結果r1−4をクライアントC1に返す。このように、必要なノードのみAND演算が実行されるため、検索処理の効率化を図ることができる。
また、クライアントC1では、ノードN1,N4から返ってきたAND結果r1−1,r1−4のAND演算を実行し、AND結果R1={00010010}を得る。クライアントC1は、AND結果R1に「1」が含まれていない場合は、いずれのデータブロックdb1〜db8にも検索対象データDxが存在しないと判定する。一方、AND結果R1に「1」が含まれている場合、検索対象データDxを登録したかもしれないため、1つ下の段に移る。図14の場合、AND結果R1にはビット位置が4ビット目および7ビット目において「1」が存在する。
この場合、これ以上下の段は存在しないため、擬陽性により、AND結果R1={00010010}が「1」のビット位置4,7に対応するデータブロックdb4,db7に検索対象データDxが存在する可能性がある。
データブロックdb4,db7のインデックス範囲は、第1段の転置ブルームフィルタtbf(1−4),tbf(1−7)と同一である。したがって、クライアントC1は、先頭から4番目の転置ブルームフィルタtbf(1−4)のインデックス範囲を、25ビット目〜32ビット目であることを割り出す。同様に、クライアントC1は、転置ブルームフィルタtbf(1−7)のインデックス範囲を、49ビット目〜56ビット目であることを割り出す。
これにより、データブロックdb4がノードN2に所属し、データブロックdb7がノードN4に所属することが判明する。したがって、クライアントC1は、ノードN2,N4に対しハッシュテーブル検索のリクエストを配信する。当該リクエストを受けたノードN2,N4は、それぞれ該当するハッシュテーブルHT4,HT7を検索して、リクエストに含まれているH1()のハッシュ値に対応するデータを検索する。
図14の例では、ノードN2のデータブロックdb4に検索対象データDxが記憶されているため、ノードN2は、検索対象データDxが存在する旨をクライアントC1に返す。たとえば、検索対象データDxが辞書の見出し語である場合は、検索対象データDxに関連付けて記憶されている解説文データも読み出して検索結果としてクライアントC1に返してもよい。
一方、ノードN4のデータブロックdb7に検索対象データDxが記憶されていないため、ノードN4は、検索対象データDxが存在しない旨をクライアントC1に返す。なお、クライアントC1がデータブロックdb4について先にリクエストを送った場合、検索対象データDxが存在する旨の検索結果が得られるため、ノードN4に対してリクエストを送信しなくてもよい。これにより、検索処理の高速化を実現することができる。このような手順により、クライアントC1は、階層型分割転置ブルームフィルタ群を利用することで、より高速かつ広範囲で対象データを検索することができる。
(検索元コンピュータによるエントリ処理手順)
図15は、実施の形態にかかる検索元コンピュータによる検索処理手順例を示すフローチャート(前半)である。検索処理を実行するコンピュータ(たとえば、管理サーバMまたはクライアント。以下、単に「検索元コンピュータ」。)は、検索対象データDxを待ち受け(ステップS1501:No)、検索対象データDxが受け付けられた場合(ステップS1501:Yes)、検索元コンピュータは、検索対象データDxをk種類のハッシュ関数に与えてk個のハッシュ値を算出する(ステップS1502)。
そして、検索元コンピュータは、p=h、すなわち、段数pを最大段数hに設定し(ステップS1503)、検索元コンピュータは、k個のハッシュ値をp段目の転置ブルームフィルタtbf(p)の配列数で除算して、k個の余り値を算出する(ステップS1504)。そして、検索元コンピュータは、p段目の転置ブルームフィルタ列tBF(p)から、k個の余り値に対応するk個の転置ブルームフィルタtbf(p)を特定する(ステップS1505)。
そして、検索元コンピュータは、k個の転置ブルームフィルタtbf(p)が所属するノードを、対応テーブルTを参照することで特定する(ステップS1506)。このあと、検索元コンピュータは、ステップS1506での特定先ノードに対し、AND演算要求のリクエストを配信し(ステップS1507)、特定先ノードからのリプライを待ち受ける(ステップS1508)。
図16は、AND演算要求のリクエストおよびリプライのデータ構造例を示す説明図である。図16において、(A)はAND演算要求のリクエスト1601、(B)はリプライ1602を示す。図16のデータ構造例は、図12〜図14の検索処理例に対応している。(A)のAND演算要求のリクエスト1601のヘッダは、AND演算要求のリクエスト1601の送信元アドレスと宛先アドレスとを保持する。図16では、コンピュータに割り当てた符号C1,N1をアドレスの代わりに表記している。
また、(A)のAND演算要求のリクエスト1601のペイロードは、種類項目、属性項目、特定先転置ブルームフィルタ項目に対しそれぞれの情報が保持されている。たとえば、種類項目には、「検索」、属性項目には「AND演算要求」、特定先転置ブルームフィルタ項目には、特定された転置ブルームフィルタの識別子「tbf(3−2),tbf(3−5)」が保持されている。特定された転置ブルームフィルタの識別子としては、特定された転置ブルームフィルタのビット位置を示すインデックス範囲が挙げられる。たとえば、tbf(3−2)の場合は、3ビット目〜4ビット目となる。
また、(B)のリプライ1602のヘッダは、AND演算要求のリクエスト1601の送信元アドレスと宛先アドレスとが入れ替わった送信元アドレスと宛先アドレスとを保持する。(B)のリプライ1602のペイロードには、特定先ノードN1でのAND結果r3−1={10}が保持されている。
図15に戻り、リプライ1602が受信されていない場合(ステップS1508:No)、検索元コンピュータは、AND演算要求のリクエスト1601の送信から所定時間経過したか否かを判断する(ステップS1509)。所定時間経過していない場合(ステップS1509:No)、ステップS1508に戻る。一方、所定時間経過した場合(ステップS1509:Yes)、検索元コンピュータは、エラー出力をおこなう(ステップS1510)。たとえば、ディスプレイ408に、AND演算要求できなかった旨の表示をおこなう。
一方、リプライ1602が受信された場合(ステップS1508:Yes)、検索元コンピュータは、各リプライ1602に含まれているAND結果についてAND演算を実行する(ステップS1511)。たとえば、図16に示したように、ノードN1からのリプライ1602に含まれているAND結果r3−1とノードN3からのリプライ(不図示)に含まれているAND結果r3−3のAND演算を実行してAND結果R3を得る。このあと、図17のステップS1701に移行する。
図17は、実施の形態にかかる検索元コンピュータによる検索処理手順例を示すフローチャート(後半)である。検索元コンピュータは、ステップS1511のAND演算のあと、当該AND結果の先頭ビットを対象ビットに設定する(ステップS1701)。たとえば、上述のAND結果R3={10}の場合、先頭ビット「1」を対象ビットに設定する。
つぎに、検索元コンピュータは、対象ビットがON(=1)であるか否かを判断する(ステップS1702)。ONでない(対象ビット=0)場合(ステップS1702:No)、検索元コンピュータは、後続ビットへシフト可能か否かを判断する(ステップS1703)。具体的には、対象ビットが末尾ビットであるか否かを判断する。上述のAND結果R3={10}の場合、対象ビットが先頭ビット「1」である場合、シフト可能となり、対象ビットが末尾ビット「0」である場合、シフト不可能と判断する。
シフト可能である場合(ステップS1703:Yes)、検索元コンピュータは、対象ビットを1ビット末尾方向へシフトし(ステップS1704)、ステップS1702に戻る。一方、ステップS1703においてシフト可能でない場合(ステップS1703:No)、検索元コンピュータは、検索結果(陰性)と判定し、その旨を出力する(ステップS1705)。検索結果(陰性)である場合、検索対象データDxは、ノード群には存在しないデータであることがわかる。これにより、検索結果が陰性である場合の処理手順を終了する。
一方、ステップS1702において、対象ビットがONであった場合(ステップS1702:Yes)、検索元コンピュータは、現在の段数pがp=1であるか否かを判断する(ステップS1706)。p=1でない場合(ステップS1706:No)、pを1つデクリメントして(ステップS1707)、図15のステップS1504に戻る。これにより、第1段になるまで、ステップS1504〜S1511、S1701〜S1705が繰り返し実行(ただし、図15および図17でENDになればその時点で終了)されることになる。
一方、p=1である場合(ステップS1706:Yes)、検索元コンピュータは、登録先ノード候補を特定する(ステップS1708)。具体的には、たとえば、図14に示したように、クライアントC1が第1段でのAND結果R1においてステップS1702でONになったビット位置「4」で指定されるデータブロックdb4の所属ノードN2を、登録先ノード候補として特定する。
より具体的には、データブロックdb4に対応する転置ブルームフィルタtbf(1−4)のインデックス範囲(25ビット目〜32ビット目)から、対応テーブルTを参照することで、登録先ノード候補であるノードN2を割り出すことになる。そして、検索元コンピュータは、登録先ノード候補に、ハッシュテーブル検索のリクエストを送信し(ステップS1709)、リプライを待ち受ける(ステップS1710)。
図18および図19は、ハッシュテーブル検索のリクエストおよびリプライのデータ構造例を示す説明図である。図18および図19において、(A)はハッシュテーブル検索のリクエスト1801,1901、(B)はリプライ1802,1902を示す。図18および図19のデータ構造例は、図12〜図14の検索処理例に対応している。なお、図18は登録先ノード候補がノードN2の場合であり、図19は登録先ノード候補がノードN4の場合である。
図18および図19において、(A)のハッシュテーブル検索のリクエスト1801,1901のヘッダは、ハッシュテーブル検索のリクエスト1801,1901の送信元アドレスと宛先アドレスとを保持する。図18および図19では、コンピュータに割り当てた符号C1,N2,N4をアドレスの代わりに表記している。
また、(A)のハッシュテーブル検索のリクエスト1801,1901のペイロードは、種類項目、属性項目、特定先転置ブルームフィルタ項目に対しそれぞれの情報が保持されている。たとえば、種類項目には、「検索」、属性項目には「ハッシュテーブル検索」、ハッシュ値項目には、検索対象データDxのハッシュ関数H1()でのハッシュ値「x1」が保持されている。
また、(B)のリプライ1802,1902のヘッダは、ハッシュテーブル検索のリクエスト1801,1901の送信元アドレスと宛先アドレスとが入れ替わった送信元アドレスと宛先アドレスとを保持する。(B)のリプライ1802,1902のペイロードには、図18の場合は、登録先ノード候補であるノードN2での検索結果(Dxあり)、すなわち、陰性である旨が保持されており、図19の場合は、登録先ノード候補であるノードN4での検索結果(Dxなし)が保持されている。
図17に戻り、リプライ(たとえば1802)が受信されていない場合(ステップS1710:No)、検索元コンピュータは、ハッシュテーブル検索のリクエスト(たとえば1801)の送信から所定時間経過したか否かを判断する(ステップS1711)。所定時間経過していない場合(ステップS1711:No)、ステップS1710に戻る。一方、所定時間経過した場合(ステップS1711:Yes)、検索元コンピュータは、エラー出力をおこなう(ステップS1712)。たとえば、ディスプレイ408に、ハッシュテーブル検索できなかった旨の表示をおこなう。
一方、リプライが受信された場合(ステップS1710:Yes)、検索元コンピュータは、リプライに検索対象データDxが存在するか否かを判断する(ステップS1713)。検索対象データDxが存在しない場合(ステップS1713:No)、ステップS1703に戻り、対象ビットがシフト可能か否かを判断することとなる。一方、検索対象データDxが存在する場合(ステップS1713:Yes)、検索元コンピュータは、検索結果(陽性)を出力する(ステップS1714)。なお、検索元コンピュータは、必要に応じてより関連するデータを抽出して検索結果として出力する。これにより、検索結果が陰性である場合の処理手順を終了する。
(ノードによる検索処理手順)
つぎに、ノードによる検索処理手順について図11を用いて説明する。図11において、ノードは、リクエストの受信を待ち受ける(ステップS1101:No)。リクエストが受信された場合(ステップS1101:Yes)、ノードは、リクエストの種類を特定する(ステップS1102)。具体的には、リクエスト内の種類項目が「登録」または「検索」であるかを特定する。
「検索」である場合(ステップS1102:検索)、ノードは、属性を特定する(ステップS1109)。具体的には、リクエスト内の属性項目が「AND演算要求」または「ハッシュテーブル検索」であるかを特定する。「AND演算要求」の場合(ステップS1109:AND演算要求)、受信したリクエストがAND演算要求のリクエスト1601であると判明する。この場合、ノードは、AND演算要求のリクエスト1601の転置ブルームフィルタ項目内の転置ブルームフィルタの識別子を抽出する(ステップS1110)。たとえば、図16の(A)の場合、転置ブルームフィルタtbf(3−2),tbf(3−5)のインデックス範囲をAND演算要求のリクエスト1601から抽出する。
そして、ノードは、抽出されたインデックス範囲から所属する転置ブルームフィルタを特定し、AND演算を実行する(ステップS1111)。上記の例では、転置ブルームフィルタtbf(3−2),tbf(3−5)が特定されるため、ノードN1では、tbf(3−2)={10}と,tbf(3−5)={11}のAND演算を実行し、AND結果r3−1={10}を得る。
このあと、ノードは、ステップS1111でのAND演算によるAND結果を含むリプライを、検索元コンピュータに送信して(ステップS1112)、ノードによる検索処理を終了する。上記の例では、図16の(B)に示したように、ノードN1は、AND結果r3−1={10}を含むリプライ1602を返すことになる。
また、ステップS1109において、属性が「ハッシュテーブル検索」である場合(ステップS1109:ハッシュテーブル検索)、受信したリクエストがハッシュテーブル検索のリクエスト1801,1901であると判明する。この場合、ノードは、ハッシュテーブル検索のリクエスト1801,1901に含まれているハッシュ関数による検索対象データのハッシュ値を、ハッシュテーブル検索のリクエスト1801,1901から抽出する(ステップS1113)。
たとえば、図18の(A)の場合、ハッシュテーブル検索のリクエスト1801,1901に含まれているハッシュ関数H1()による検索対象データDxのハッシュ値x1を、ハッシュテーブル検索のリクエスト1801,1901から抽出する。
そして、ノードは、保持しているハッシュテーブルを参照して、抽出されたハッシュ値に関連付けられているデータを検索し(ステップS1114)、検索結果をリプライ1802,1902として、検索元コンピュータに送信する(ステップS1115)。たとえば、上記の例では、図18の(B)に示したように、ノードN1は、検索結果(陰性)、すなわち、検索対象データDxを含むリプライ1802を返すことになる。これにより、ノードによる検索処理を終了する。
なお、図11において、リクエストの属性がAND演算要求の場合、ステップS1111において、転置ブルームフィルタtbf(p)が複数あると、ノードがAND演算を実行する内容としたが、各転置ブルームフィルタtbf(p)(のビット列)をそのままリプライとして検索元コンピュータに返してもよい。これにより、ノードでAND演算を実行する必要がなくなり、ノードの負荷低減を図ることができる。
このように、上述した検索処理では、階層型分割転置ブルームフィルタ群を利用することで、より高速かつ広範囲で対象データを検索することができる。
以上説明したように、本実施の形態によれば、ブルームフィルタ列BF(p)を転置して転置ブルームフィルタ列tBF(p)とすることで、メモリアクセスが低減され、検索速度が高速化するという効果を奏する。特に、階層型転置ブルームフィルタtBFとすることで、段ごとのメモリアクセスが低減されるため、より高速に検索をおこなうことができる。また、階層型転置ブルームフィルタtBFをビット幅方向に分割して、複数のノードに割り当てているため、管理可能なデータ量の増大化を図ることができる。また、階層型分割転置ブルームフィルタ群を利用することで、より高速かつ広範囲で対象データを検索することができる。
また、対応テーブルTを参照することで、検索元コンピュータでは、第p段の転置ブルームフィルタを保持するノードやデータブロックを有するノードを特定することができる。したがって、ノード群以外のコンピュータからでもノード群に対し検索をおこなうことができる。
また、特定先ノードにおいて、第p段の転置ブルームフィルタが複数存在する場合、AND演算をおこなってAND結果を検索元コンピュータにリプライとして返している。このように、ノードにおいて複数の転置ブルームフィルタをAND演算することで、AND結果という1個のビット列に圧縮できるため、検索元コンピュータでの演算負荷の低減化を図ることができる。
これに対し、特定先ノードにおいて、第p段の転置ブルームフィルタが複数存在する場合、AND演算をおこなわずに、複数の転置ブルームフィルタのビット列の各々をリプライとして検索元コンピュータに返してもよい。この場合は、ノードの計算負荷の低減化を図ることができる。
また、上述した各フローチャートで示したステップは、具体的には、たとえば、図4に示したROM402、RAM403、磁気ディスク405、光ディスク407などの記憶装置に記憶された検索プログラムをCPU401に実行させた処理である。また、実行させた実行結果は、その都度、記憶装置に書き込まれ、他の処理で必要に応じて読み出される。
これにより、本実施の形態で説明した検索方法は、検索プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検索プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行されることになる。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群にアクセス可能なコンピュータに、
複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換し、
前記第p段の転置ブルームフィルタ列の中から、前記位置情報に対応する前記第p段の転置ブルームフィルタを位置情報ごとに特定し、
特定された前記第p段の転置ブルームフィルタを保持するノードから、特定された前記第p段の転置ブルームフィルタを取得し、
取得された前記第p段の転置ブルームフィルタで擬陽性を示すビットのビット位置が同一であるか否かを判断し、
同一であると判断された場合、第p段が第1段であるか否かを判断し、
第1段であると判断された場合、擬陽性を示すビットのビット位置に応じた特定のデータブロックを有するノードから、前記特定のデータブロック内での前記検索対象データの存否を示す検索結果を取得する、
処理を実行させることを特徴とする検索プログラム。
(付記2)前記ビット幅sのうち前記所定ビット幅に応じた前記分割データ構造のビット範囲と前記ノード群の各ノードとを対応付けた対応テーブルを参照することで、特定された前記第p段の転置ブルームフィルタを保持するノードを特定する処理を前記コンピュータに実行させ、
前記第p段の転置ブルームフィルタを取得する処理では、
特定先ノードから、特定された前記第p段の転置ブルームフィルタを取得することを特徴とする付記1に記載の検索プログラム。
(付記3)前記第p段の転置ブルームフィルタを取得する処理では、
特定された前記第p段の転置ブルームフィルタが複数存在する特定先ノードから前記第p段の転置ブルームフィルタの論理積を取得し、
擬陽性を示すビットのビット位置が同一であるか否かを判断する処理では、
取得された論理積に基づいて、前記第p段の転置ブルームフィルタで擬陽性を示すビットのビット位置が同一であるか否かを判断することを特徴とする付記2に記載の検索プログラム。
(付記4)第p段が第1段であると判断された場合、前記対応テーブルを参照することで、前記特定のデータブロックを有するノードを特定する処理を、前記コンピュータに実行させることを特徴とする付記1〜3のいずれか一つに記載の検索プログラム。
(付記5)第p段が第1段ではないと判断された場合、第p段の1つ下の段をあらたに第p段として前記コンピュータに実行させることを特徴とする付記1〜4のいずれか一つに記載の検索プログラム。
(付記6)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群のいずれかのノードに、
前記ノード群にアクセス可能なコンピュータから、複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データから変換された前記転置ブルームフィルタの配列位置をあらわす位置情報を受信し、
前記位置情報が受信された場合、前記第p段の転置ブルームフィルタ列の中から位置情報ごとに特定された、前記位置情報に対応する前記第p段の転置ブルームフィルタを前記コンピュータに送信し、
前記コンピュータから前記複数種類のハッシュ関数の中の特定のハッシュ関数に前記検索対象データを与えたときのハッシュ値を受信し、
前記いずれかのノードに対応するデータブロックに記憶されているデータと当該データを前記特定のハッシュ関数に与えたときのハッシュ値とを関連付けたハッシュテーブルを参照することにより、受信されたハッシュ値に関連付けられているデータを、前記いずれかのノードに対応するデータブロックの中から検索し、
検索結果を前記コンピュータに送信する、
処理を実行させることを特徴とする検索プログラム。
(付記7)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群にアクセス可能なコンピュータが、
複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換し、
前記第p段の転置ブルームフィルタ列の中から、前記位置情報に対応する前記第p段の転置ブルームフィルタを位置情報ごとに特定し、
特定された前記第p段の転置ブルームフィルタを保持するノードから、特定された前記第p段の転置ブルームフィルタを取得し、
取得された前記第p段の転置ブルームフィルタで擬陽性を示すビットのビット位置が同一であるか否かを判断し、
同一であると判断された場合、第p段が第1段であるか否かを判断し、
第1段であると判断された場合、擬陽性を示すビットのビット位置に応じた特定のデータブロックを有するノードから、前記特定のデータブロック内での前記検索対象データの存否を示す検索結果を取得する、
処理を実行することを特徴とする検索方法。
(付記8)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群のいずれかのノードが、
前記ノード群にアクセス可能なコンピュータから、複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データから変換された前記転置ブルームフィルタの配列位置をあらわす位置情報を受信し、
前記位置情報が受信された場合、前記第p段の転置ブルームフィルタ列の中から位置情報ごとに特定された、前記位置情報に対応する前記第p段の転置ブルームフィルタを前記コンピュータに送信し、
前記コンピュータから前記複数種類のハッシュ関数の中の特定のハッシュ関数に前記検索対象データを与えたときのハッシュ値を受信し、
前記いずれかのノードに対応するデータブロックに記憶されているデータと当該データを前記特定のハッシュ関数に与えたときのハッシュ値とを関連付けたハッシュテーブルを参照することにより、受信されたハッシュ値に関連付けられているデータを、前記いずれかのノードに対応するデータブロックの中から検索し、
検索結果を前記コンピュータに送信する、
処理を実行することを特徴とする検索方法。
(付記9)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群にアクセス可能な検索装置であって、
複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する処理部と、
前記第p段の転置ブルームフィルタ列の中から、前記位置情報に対応する前記第p段の転置ブルームフィルタを位置情報ごとに特定する処理部と、
特定された前記第p段の転置ブルームフィルタを保持するノードから、特定された前記第p段の転置ブルームフィルタを取得する処理部と、
取得された前記第p段の転置ブルームフィルタで擬陽性を示すビットのビット位置が同一であるか否かを判断する処理部と、
同一であると判断された場合、第p段が第1段であるか否かを判断する処理部と、
第1段であると判断された場合、擬陽性を示すビットのビット位置に応じた特定のデータブロックを有するノードから、前記特定のデータブロック内での前記検索対象データの存否を示す検索結果を取得する処理部と、
を備えることを特徴とする検索装置。
(付記10)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群のいずれかのノードであって、
前記ノード群にアクセス可能なコンピュータから、複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データから変換された前記転置ブルームフィルタの配列位置をあらわす位置情報を受信する処理部と、
前記位置情報が受信された場合、前記第p段の転置ブルームフィルタ列の中から位置情報ごとに特定された、前記位置情報に対応する前記第p段の転置ブルームフィルタを前記コンピュータに送信する処理部と、
前記コンピュータから前記複数種類のハッシュ関数の中の特定のハッシュ関数に前記検索対象データを与えたときのハッシュ値を受信する処理部と、
前記いずれかのノードに対応するデータブロックに記憶されているデータと当該データを前記特定のハッシュ関数に与えたときのハッシュ値とを関連付けたハッシュテーブルを参照することにより、受信されたハッシュ値に関連付けられているデータを、前記いずれかのノードに対応するデータブロックの中から検索する処理部と、
検索結果を前記コンピュータに送信する処理部と、
を備えることを特徴とするノード。
(付記11)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群で構成される検索システムであって、
前記ノード群内の各ノードが、
前記ノード群にアクセス可能なコンピュータから、複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データから変換された前記転置ブルームフィルタの配列位置をあらわす位置情報を受信する処理部と、
前記位置情報が受信された場合、前記第p段の転置ブルームフィルタ列の中から位置情報ごとに特定された、前記位置情報に対応する前記第p段の転置ブルームフィルタを前記コンピュータに送信する処理部と、
前記コンピュータから前記複数種類のハッシュ関数の中の特定のハッシュ関数に前記検索対象データを与えたときのハッシュ値を受信する処理部と、
自ノードに対応するデータブロックに記憶されているデータと当該データを前記特定のハッシュ関数に与えたときのハッシュ値とを関連付けたハッシュテーブルを参照することにより、受信されたハッシュ値に関連付けられているデータを、前記いずれかのノードに対応するデータブロックの中から検索する処理部と、
検索結果を前記コンピュータに送信する処理部と、
を備えることを特徴とする検索システム。
100 検索システム
C1〜C3 クライアント
N1〜N4 ノード
M 管理サーバ
T 対応テーブル
tBF 階層型転置ブルームフィルタ
tBF1〜tBF4 階層型分割転置ブルームフィルタ

Claims (9)

  1. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群にアクセス可能なコンピュータに、
    複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換し、
    前記第p段の転置ブルームフィルタ列の中から、前記位置情報に対応する前記第p段の転置ブルームフィルタを位置情報ごとに特定し、
    特定された前記第p段の転置ブルームフィルタを保持するノードから、特定された前記第p段の転置ブルームフィルタを取得し、
    取得された前記第p段の転置ブルームフィルタで擬陽性を示すビットのビット位置が同一であるか否かを判断し、
    同一であると判断された場合、第p段が第1段であるか否かを判断し、
    第1段であると判断された場合、擬陽性を示すビットのビット位置に応じた特定のデータブロックを有するノードから、前記特定のデータブロック内での前記検索対象データの存否を示す検索結果を取得する、
    処理を実行させることを特徴とする検索プログラム。
  2. 前記ビット幅sのうち前記所定ビット幅に応じた前記分割データ構造のビット範囲と前記ノード群の各ノードとを対応付けた対応テーブルを参照することで、特定された前記第p段の転置ブルームフィルタを保持するノードを特定する処理を前記コンピュータに実行させ、
    前記第p段の転置ブルームフィルタを取得する処理では、
    特定先ノードから、特定された前記第p段の転置ブルームフィルタを取得することを特徴とする請求項1に記載の検索プログラム。
  3. 前記第p段の転置ブルームフィルタを取得する処理では、
    特定された前記第p段の転置ブルームフィルタが複数存在する特定先ノードから前記第p段の転置ブルームフィルタの論理積を取得し、
    擬陽性を示すビットのビット位置が同一であるか否かを判断する処理では、
    取得された論理積に基づいて、前記第p段の転置ブルームフィルタで擬陽性を示すビットのビット位置が同一であるか否かを判断することを特徴とする請求項2に記載の検索プログラム。
  4. 第p段が第1段であると判断された場合、前記対応テーブルを参照することで、前記特定のデータブロックを有するノードを特定する処理を前記コンピュータに実行させることを特徴とする請求項1〜3のいずれか一つに記載の検索プログラム。
  5. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群のいずれかのノードに、
    前記ノード群にアクセス可能なコンピュータから、複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データから変換された前記転置ブルームフィルタの配列位置をあらわす位置情報を受信し、
    前記位置情報が受信された場合、前記第p段の転置ブルームフィルタ列の中から位置情報ごとに特定された、前記位置情報に対応する前記第p段の転置ブルームフィルタを前記コンピュータに送信し、
    前記コンピュータから前記複数種類のハッシュ関数の中の特定のハッシュ関数に前記検索対象データを与えたときのハッシュ値を受信し、
    前記いずれかのノードに対応するデータブロックに記憶されているデータと当該データを前記特定のハッシュ関数に与えたときのハッシュ値とを関連付けたハッシュテーブルを参照することにより、受信されたハッシュ値に関連付けられているデータを、前記いずれかのノードに対応するデータブロックの中から検索し、
    検索結果を前記コンピュータに送信する、
    処理を実行させることを特徴とする検索プログラム。
  6. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群にアクセス可能なコンピュータが、
    複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換し、
    前記第p段の転置ブルームフィルタ列の中から、前記位置情報に対応する前記第p段の転置ブルームフィルタを位置情報ごとに特定し、
    特定された前記第p段の転置ブルームフィルタを保持するノードから、特定された前記第p段の転置ブルームフィルタを取得し、
    取得された前記第p段の転置ブルームフィルタで擬陽性を示すビットのビット位置が同一であるか否かを判断し、
    同一であると判断された場合、第p段が第1段であるか否かを判断し、
    第1段であると判断された場合、擬陽性を示すビットのビット位置に応じた特定のデータブロックを有するノードから、前記特定のデータブロック内での前記検索対象データの存否を示す検索結果を取得する、
    処理を実行することを特徴とする検索方法。
  7. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群のいずれかのノードが、
    前記ノード群にアクセス可能なコンピュータから、複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データから変換された前記転置ブルームフィルタの配列位置をあらわす位置情報を受信し、
    前記位置情報が受信された場合、前記第p段の転置ブルームフィルタ列の中から位置情報ごとに特定された、前記位置情報に対応する前記第p段の転置ブルームフィルタを前記コンピュータに送信し、
    前記コンピュータから前記複数種類のハッシュ関数の中の特定のハッシュ関数に前記検索対象データを与えたときのハッシュ値を受信し、
    前記いずれかのノードに対応するデータブロックに記憶されているデータと当該データを前記特定のハッシュ関数に与えたときのハッシュ値とを関連付けたハッシュテーブルを参照することにより、受信されたハッシュ値に関連付けられているデータを、前記いずれかのノードに対応するデータブロックの中から検索し、
    検索結果を前記コンピュータに送信する、
    処理を実行することを特徴とする検索方法。
  8. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群にアクセス可能な検索装置であって、
    複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する処理部と、
    前記第p段の転置ブルームフィルタ列の中から、前記位置情報に対応する前記第p段の転置ブルームフィルタを位置情報ごとに特定する処理部と、
    特定された前記第p段の転置ブルームフィルタを保持するノードから、特定された前記第p段の転置ブルームフィルタを取得する処理部と、
    取得された前記第p段の転置ブルームフィルタで擬陽性を示すビットのビット位置が同一であるか否かを判断する処理部と、
    同一であると判断された場合、第p段が第1段であるか否かを判断する処理部と、
    第1段であると判断された場合、擬陽性を示すビットのビット位置に応じた特定のデータブロックを有するノードから、前記特定のデータブロック内での前記検索対象データの存否を示す検索結果を取得する処理部と、
    を備えることを特徴とする検索装置。
  9. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、からなるデータ構造が、所定ビット幅で分割されており、前記所定ビット幅で分割された各分割データ構造を保持するノード群のいずれかのノードであって、
    前記ノード群にアクセス可能なコンピュータから、複数種類のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データから変換された前記転置ブルームフィルタの配列位置をあらわす位置情報を受信する処理部と、
    前記位置情報が受信された場合、前記第p段の転置ブルームフィルタ列の中から位置情報ごとに特定された、前記位置情報に対応する前記第p段の転置ブルームフィルタを前記コンピュータに送信する処理部と、
    前記コンピュータから前記複数種類のハッシュ関数の中の特定のハッシュ関数に前記検索対象データを与えたときのハッシュ値を受信する処理部と、
    前記いずれかのノードに対応するデータブロックに記憶されているデータと当該データを前記特定のハッシュ関数に与えたときのハッシュ値とを関連付けたハッシュテーブルを参照することにより、受信されたハッシュ値に関連付けられているデータを、前記いずれかのノードに対応するデータブロックの中から検索する処理部と、
    検索結果を前記コンピュータに送信する処理部と、
    を備えることを特徴とするノード。
JP2011126764A 2011-06-06 2011-06-06 検索プログラム、検索方法、検索装置、およびノード Active JP5716554B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011126764A JP5716554B2 (ja) 2011-06-06 2011-06-06 検索プログラム、検索方法、検索装置、およびノード
US13/461,176 US8423562B2 (en) 2011-06-06 2012-05-01 Non-transitory, computer readable storage medium, search method, and search apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011126764A JP5716554B2 (ja) 2011-06-06 2011-06-06 検索プログラム、検索方法、検索装置、およびノード

Publications (2)

Publication Number Publication Date
JP2012252658A true JP2012252658A (ja) 2012-12-20
JP5716554B2 JP5716554B2 (ja) 2015-05-13

Family

ID=47262477

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011126764A Active JP5716554B2 (ja) 2011-06-06 2011-06-06 検索プログラム、検索方法、検索装置、およびノード

Country Status (2)

Country Link
US (1) US8423562B2 (ja)
JP (1) JP5716554B2 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014130549A (ja) * 2012-12-28 2014-07-10 Fujitsu Ltd ストレージ装置、制御方法、および制御プログラム
US9646035B1 (en) * 2013-04-26 2017-05-09 Veritas Technologies Llc Centralized metaobject ingest using a temporally-expanded bloom filter
US9613121B2 (en) * 2014-03-10 2017-04-04 International Business Machines Corporation Data duplication detection in an in memory data grid (IMDG)
US9940356B2 (en) * 2014-07-31 2018-04-10 International Business Machines Corporation Efficient join-filters for parallel processing
US9608863B2 (en) * 2014-10-17 2017-03-28 Cisco Technology, Inc. Address autoconfiguration using bloom filter parameters for unique address computation
US10078687B2 (en) * 2015-09-09 2018-09-18 Amazon Technologies, Inc. Deletion of elements from a probabilistic data structure
US10263784B2 (en) 2015-09-09 2019-04-16 Amazon Technologies, Inc. Signature verification for data set components using probabilistic data structures
US10262160B2 (en) 2015-09-09 2019-04-16 Amazon Technologies, Inc. Verification of data set components using digitally signed probabilistic data structures
US10691731B2 (en) * 2015-11-26 2020-06-23 International Business Machines Corporation Efficient lookup in multiple bloom filters
US11468053B2 (en) 2015-12-30 2022-10-11 Dropbox, Inc. Servicing queries of a hybrid event index
US10452297B1 (en) * 2016-05-02 2019-10-22 Pure Storage, Inc. Generating and optimizing summary index levels in a deduplication storage system
US9940060B1 (en) * 2016-05-02 2018-04-10 Pure Storage, Inc. Memory use and eviction in a deduplication storage system
CN106874458B (zh) * 2017-02-14 2019-10-22 中国科学技术大学 一种基于分层分配的多层数据库的布隆过滤器构造方法
US10248646B1 (en) 2018-08-22 2019-04-02 Cognigo Research Ltd. Token matching in large document corpora
CN110659265B (zh) * 2019-09-27 2020-11-24 广州峻林互联科技有限公司 一种分布式并行数据库资源管理方法
CN113934361B (zh) * 2020-06-29 2024-05-03 伊姆西Ip控股有限责任公司 用于管理存储系统的方法、设备和计算机程序产品
US11645231B1 (en) * 2022-04-24 2023-05-09 Morgan Stanley Services Group Inc. Data indexing for distributed query execution and aggregation

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001043237A (ja) * 1999-07-30 2001-02-16 Mitsubishi Electric Corp データファイル及びデータ検索方法
JP2002171525A (ja) * 2000-11-29 2002-06-14 Canon Inc ビットプレーン演算命令を備えたsimd型演算装置
JP2007088962A (ja) * 2005-09-26 2007-04-05 Nippon Telegr & Teleph Corp <Ntt> 順序データ圧縮方法、順序データ解凍方法、順序データ処理プログラム、順序データ圧縮装置、順序データ解凍装置、および、順序データ処理システム
JP2007323558A (ja) * 2006-06-05 2007-12-13 Nippon Telegr & Teleph Corp <Ntt> キーワード生成装置、文書検索装置、その方法、およびそのプログラム
US20100094877A1 (en) * 2008-10-13 2010-04-15 Wolf Garbe System and method for distributed index searching of electronic content

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02297670A (ja) 1989-05-12 1990-12-10 Matsushita Electric Ind Co Ltd データベース検索方式
JPH0418895A (ja) 1990-05-11 1992-01-23 Mitsubishi Electric Corp 電子交換機のダイヤルパルス送出回路
JP2001101047A (ja) 1999-09-29 2001-04-13 Toshiba Corp データ管理装置、データ管理方法および記録媒体
US6961728B2 (en) 2000-11-28 2005-11-01 Centerboard, Inc. System and methods for highly distributed wide-area data management of a network of data sources through a database interface
US7019674B2 (en) 2004-02-05 2006-03-28 Nec Laboratories America, Inc. Content-based information retrieval architecture
US7933208B2 (en) * 2004-09-27 2011-04-26 Polytechnic Institute Of New York University Facilitating storage and querying of payload attribution information
JP4722620B2 (ja) 2005-08-19 2011-07-13 Kddi株式会社 暗号化文書検索方法および暗号化文書検索システム
US7937428B2 (en) * 2006-12-21 2011-05-03 International Business Machines Corporation System and method for generating and using a dynamic bloom filter
US20100199065A1 (en) 2009-02-04 2010-08-05 Hitachi, Ltd. Methods and apparatus for performing efficient data deduplication by metadata grouping
US8484438B2 (en) * 2009-06-29 2013-07-09 Oracle America, Inc. Hierarchical bloom filters for facilitating concurrency control
US8560558B2 (en) * 2010-04-28 2013-10-15 Fujitsu Limited Computer product, search apparatus, management apparatus, search method, and management method

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001043237A (ja) * 1999-07-30 2001-02-16 Mitsubishi Electric Corp データファイル及びデータ検索方法
JP2002171525A (ja) * 2000-11-29 2002-06-14 Canon Inc ビットプレーン演算命令を備えたsimd型演算装置
JP2007088962A (ja) * 2005-09-26 2007-04-05 Nippon Telegr & Teleph Corp <Ntt> 順序データ圧縮方法、順序データ解凍方法、順序データ処理プログラム、順序データ圧縮装置、順序データ解凍装置、および、順序データ処理システム
JP2007323558A (ja) * 2006-06-05 2007-12-13 Nippon Telegr & Teleph Corp <Ntt> キーワード生成装置、文書検索装置、その方法、およびそのプログラム
US20100094877A1 (en) * 2008-10-13 2010-04-15 Wolf Garbe System and method for distributed index searching of electronic content

Also Published As

Publication number Publication date
JP5716554B2 (ja) 2015-05-13
US20120310960A1 (en) 2012-12-06
US8423562B2 (en) 2013-04-16

Similar Documents

Publication Publication Date Title
JP5716554B2 (ja) 検索プログラム、検索方法、検索装置、およびノード
US8266152B2 (en) Hashed indexing
JP5116775B2 (ja) 情報検索方法及び装置及びプログラム及びコンピュータ読取可能な記録媒体
US7720837B2 (en) System and method for multi-dimensional aggregation over large text corpora
EP3767483A1 (en) Method, device, system, and server for image retrieval, and storage medium
CN103530415A (zh) 一种兼容关键词搜索的自然语言搜索方法及系统
JPWO2007119567A1 (ja) 文書処理装置および文書処理方法
KR101296683B1 (ko) 데이터 스트림에서의 다중 조인 질의 처리를 위한 2 페이즈 수행 방법
JPWO2010013473A1 (ja) データ分類システム、データ分類方法、及びデータ分類プログラム
JP6434162B2 (ja) データ管理システム、データ管理方法およびプログラム
US10049164B2 (en) Multidimensional-range search apparatus and multidimensional-range search method
JP5664467B2 (ja) 検索プログラム、検索方法、検索装置、およびノード
CN112486988A (zh) 数据处理方法、装置、设备及存储介质
Xu et al. Top-k string auto-completion with synonyms
Flick et al. Parallel construction of suffix trees and the all-nearest-smaller-values problem
US7774347B2 (en) Vortex searching
KR102062139B1 (ko) 지능형 자료구조 기반의 데이터 처리 방법 및 그를 위한 장치
WO2012061983A1 (en) Seed set expansion
JP6291435B2 (ja) プログラムおよびクラスタシステム
JP5526985B2 (ja) 検索プログラム、検索装置、および検索方法
WO2010013320A1 (ja) 表形式データを操作する方法、分散メモリ型マルチプロセッサ、及び、プログラム
JP2015022723A (ja) 文書を検索する装置及び方法
JP6970867B1 (ja) 検索装置、検索方法、およびプログラム
CN110928998B (zh) 一种基于等价类代表元索引和存储的拉丁方搜索引擎
Peng et al. Using partial evaluation in holistic subgraph search

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140620

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140715

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140912

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150217

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150302

R150 Certificate of patent or registration of utility model

Ref document number: 5716554

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150