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

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

Info

Publication number
JP5664467B2
JP5664467B2 JP2011131220A JP2011131220A JP5664467B2 JP 5664467 B2 JP5664467 B2 JP 5664467B2 JP 2011131220 A JP2011131220 A JP 2011131220A JP 2011131220 A JP2011131220 A JP 2011131220A JP 5664467 B2 JP5664467 B2 JP 5664467B2
Authority
JP
Japan
Prior art keywords
bloom filter
node
search
stage
target data
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.)
Expired - Fee Related
Application number
JP2011131220A
Other languages
English (en)
Other versions
JP2013003653A (ja
Inventor
渡辺 高志
高志 渡辺
芳浩 土屋
芳浩 土屋
泰生 野口
泰生 野口
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 JP2011131220A priority Critical patent/JP5664467B2/ja
Priority to US13/458,666 priority patent/US8819036B2/en
Publication of JP2013003653A publication Critical patent/JP2013003653A/ja
Application granted granted Critical
Publication of JP5664467B2 publication Critical patent/JP5664467B2/ja
Expired - Fee Related 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/903Querying
    • G06F16/90335Query processing
    • G06F16/90348Query processing by searching ordered data, e.g. alpha-numerically ordered data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1824Distributed file systems implemented using Network-attached Storage [NAS] architecture
    • 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/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques

Landscapes

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

Description

本発明は、データを検索する検索プログラム、検索方法、検索装置、およびノードに関する。
従来、大規模なデータを木構造で管理する場合、B木(Btree)と呼ばれるデータ構造での管理が比較的多くおこなわれていた。B木は、単純な2分木に比べて、一つのブロックに複数のデータエントリを格納するので、データエントリの追加があっても木構造の形の変化が波及する範囲を狭くできるという利点がある。このため、B木はハードディスクなどのディスク向けのデータ管理方法として利用されることが多い。
しかし、ディスク上において木構造で管理されたデータを検索する場合、複数のデータブロックを読み込む必要がある。また、一般に、ディスクに対するI/O(Input/Output)は、メモリアクセスに比べると遅いことから、ディスク上でのデータ検索には時間を要することがある。
このため、最近では、ディスクI/Oによる検索の遅延を避けるためには、メモリ中に木構造をもつなどの対応も考えられている。しかるに、B木では、データエントリ数が多くなると、それに応じて必要なメモリ量が増えてしまうおそれがある。このため、木構造のうち最も良く読みこまれる部分のみをメモリ中に格納する方法(キャッシュ)を利用する方法も考えられている。
これに対し、最近では、ブルームフィルタ(Bloom Filter)と呼ばれるデータ構造も知られてきている。ブルームフィルタは、あるエントリが既存の集合に属するかどうかを効率的に調べる方法である。
また、情報検索において、複数のサーバからディジーチェーン方式で検索する技術が開示されている。また、情報検索において、ヒット率を予測して、ヒット率の高い内容を読みだす技術が開示されている。また、情報検索において、複数の代替検索条件のうち、利用者が要求するデータを含む率の高い順に代替検索条件を使用して検索をおこなう技術が開示されている。
特開2005−234759号公報 特開昭63−31785号公報 特開平7−302267号公報
上述したように、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段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持しており、前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での検索対象データの存否を判定し、前記検索対象データの送信元コンピュータへ前記検索対象データの存否を示す検索結果を送信する処理を実行するノード群にアクセス可能な前記送信元コンピュータが、前記ノード群から未選択なノードを選択し、選択されたノードに前記検索対象データを送信し、前記選択されたノードから前記検索結果を受信し、受信された前記検索結果が、前記検索対象データが存在することを示しているか否かを判断し、判断結果を出力する、検索プログラム、検索方法および検索装置を用いる。
また、本発明の他の側面によれば、段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードが、検索対象データを受信し、前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での受信された前記検索対象データの存否を判定し、前記検索対象データの送信元へ前記検索対象データの存否を示す検索結果を送信する、検索プログラム、検索方法、およびノードを用いる。
本発明の一態様によれば、データ検索の高速化を図ることができる。また、本発明の一態様によれば管理可能なデータ量の拡大化を図ることができる。
図1は、実施の形態にかかる検索システムのシステム構成例を示す説明図である。 図2は、階層型ブルームフィルタの一例を示す説明図である。 図3は、階層型ブルームフィルタBFi内の第p段のブルームフィルタ列BFi(p)の転置例を示す説明図である。 図4は、実施の形態にかかるコンピュータのハードウェア構成例を示すブロック図である。 図5は、送信元コンピュータによる検索通知処理例を示す説明図である。 図6は、検索リクエストおよびリプライのデータ構造例を示す説明図(その1)である。 図7は、検索リクエストおよびリプライのデータ構造例を示す説明図(その2)である。 図8は、ノードN2による階層型転置ブルームフィルタtBF2の検索処理例を示す説明図である。 図9は、送信元コンピュータによる検索通知処理手順の一例を示すフローチャートである。 図10は、ノードNiによる検索・エントリ処理手順を示すフローチャートである。 図11は、図10で示した検索処理(ステップS1004)の詳細な説明を示すフローチャート(その1)である。 図12は、図10で示した検索処理(ステップS1004)の詳細な説明を示すフローチャート(その2)である。 図13は、送信元コンピュータによるエントリ通知処理例を示す説明図である。 図14は、エントリリクエストおよびリプライのデータ構造例を示す説明図である。 図15は、ノードN2による階層型転置ブルームフィルタtBF2のエントリ処理例を示す説明図である。 図16は、送信元コンピュータによるエントリ通知処理手順の一例を示すフローチャートである。 図17は、図10で示したエントリ処理(ステップS1003)の詳細な説明を示すフローチャートである。 図18は、ノードの追加例を示す説明図である。 図19は、管理サーバMによるノードの追加処理手順の一例を示すフローチャートである。
以下に添付図面を参照して、本発明にかかる検索プログラム、検索方法、検索装置、およびノードの実施の形態を詳細に説明する。
<検索システムのシステム構成例>
図1は、実施の形態にかかる検索システムのシステム構成例を示す説明図である。図1において、検索システム100は、複数(図1では例として4台)のノードN1〜N4と、管理サーバMと、一または複数(図1では例として3台)のクライアントC1〜C3と、がネットワークNWを介して通信可能に接続されて構成されている。ネットワークNWとしては、たとえば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットが挙げられる。
本実施の形態では、ノードN1〜N4がそれぞれ階層型転置ブルームフィルタtBF1〜tBF4を有している。階層型転置ブルームフィルタtBF1〜tBF4とは、それぞれの階層型ブルームフィルタを転置したインデックス情報である。
階層型ブルームフィルタとは、ブルームフィルタを階層構造にしたインデックス情報である。ブルームフィルタとは、所定数のデータブロック内での擬陽性(疑陽性、偽陽性とも称する)または陰性を示すビットが複数配列されたインデックス情報である。ブルームフィルタのビットがONのときは擬陽性を示し、OFFのときは陰性を示す。なお、ビットの値が1をONとし、0をOFFとしてもよく、逆に、ビットの値が0をONとし、1をOFFとしてもよい。本実施の形態では、ビットの値が1をON(擬陽性)とし、0をOFF(陰性)とする。
なお、階層型ブルームフィルタについては、図2を用いて後述する。また、階層型ブルームフィルタと階層型転置ブルームフィルタtBFi(i=1〜4(iはノードに付した符号に対応している。))との対応関係については、図3を用いて後述する。また、階層型転置ブルームフィルタtBF1〜tBF4については、それぞれ独立している。階層型転置ブルームフィルタtBF1〜tBF4は階層数(段数)、ビット幅、分割数がすべて同一でもよい。また、階層型転置ブルームフィルタtBF1〜tBF4のすくなくとも2つの階層型転置ブルームフィルタ間で階層数(段数)、ビット幅、分割数のいずれかが異なっていてもよい。
また、図1では、例として階層型転置ブルームフィルタtBF1の階層数を3とする。したがって、階層型転置ブルームフィルタtBF1は、1段目(最下段)の転置ブルームフィルタ列tBF1(1)、2段目の転置ブルームフィルタ列tBF1(2)、3段目(最上段)の転置ブルームフィルタ列tBF1(3)を階層化したブルームフィルタである。
また、図1では、例として階層型転置ブルームフィルタtBF1のビット幅s1を128ビットとする。
また、図1では、例として階層型転置ブルームフィルタtBF2の階層数を3とする。したがって、階層型転置ブルームフィルタtBF2は、1段目(最下段)の転置ブルームフィルタ列tBF2(1)、2段目の転置ブルームフィルタ列tBF2(2)、3段目(最上段)の転置ブルームフィルタ列tBF2(3)を階層化したブルームフィルタである。
また、図1では、例として階層型転置ブルームフィルタtBF2のビット幅s2を64ビットとする。
また、図1では、階層型転置ブルームフィルタtBF3の階層数を4とする。したがって、階層型転置ブルームフィルタtBF3は、1段目(最下段)の転置ブルームフィルタ列tBF3(1)から4段目(最上段)の転置ブルームフィルタ列tBF3(4)を階層化したブルームフィルタである。
また、図1では、例として階層型転置ブルームフィルタtBF3のビット幅s3を128ビットとする。
また、図1では、階層型転置ブルームフィルタtBF4の階層数を3とする。したがって、階層型転置ブルームフィルタtBF4は、1段目(最下段)の転置ブルームフィルタ列tBF4(1)、2段目の転置ブルームフィルタ列tBF4(2)、3段目の転置ブルームフィルタ列tBF4(3)を階層化したブルームフィルタである。
また、図1では、例として階層型転置ブルームフィルタtBF4のビット幅s4を64ビットとする。
また、階層型転置ブルームフィルタtBFiにはデータブロック集合dbi(i=1〜4)が対応付けられている。データブロック集合dbiは、それぞれ階層型転置ブルームフィルタtBFiのビット幅si(i=1〜4)と同一ビット幅とする。
データブロック集合dbiは、複数のデータブロックを有しており、各データブロックは、登録されたデータを保持している。なお、個々のデータブロックをdbi−#と表記する。#は数字であり、ブロック番号を示す。ブロック番号#は、そのデータブロックdbi−#のビット位置に対応する。
ハッシュテーブル群HTi(i=1〜4)−siは、データブロック集合dbi内の各データブロックdbi−#に対応するハッシュテーブルの集合である。なお、個々のハッシュテーブルをHTi−#と表記する。#は数字であり、データブロックdbi−#のブロック番号と一致する。ハッシュテーブルHTi−#は、データをある特定のハッシュ関数に与えたときのハッシュ値と、ハッシュ値の生成元となるデータ(データそのものでもデータへのポインタでもよい)を関連付けたテーブルである。
管理サーバMは、複数のノードN1〜N4を管理するコンピュータである。管理サーバMは、クライアントリスト102と、ノードリスト101とを有している。管理サーバMは、あらたにノードが追加された場合に、ノードリスト101を更新したり、クライアントリスト102を参照して、ノードの追加をクライアントC1〜C3へ通知したりする。なお、管理サーバMは、物理マシンでもよいが、いずれかのノードにおいて仮想マシンとして機能させてもよい。
クライアントリスト102は、クライアントID、IPアドレスおよびポート番号項目を有している。それぞれの項目に情報が設定されることで、レコードとして記憶されている。クライアントID項目には、ネットワークNWを介してノードN1〜N4にアクセス可能なクライアントの識別情報が登録される。IPアドレス項目にはクライアントのIPアドレス、ポート番号項目にはポート番号が登録される。クライアントリスト102は、具体的には、たとえば、図4に示したROM402、RAM403、磁気ディスク405、光ディスク407などの記憶装置に記憶されている。
ノードリスト101は、ノードID、IPアドレスおよびポート番号項目を有している。それぞれの項目に情報が設定されることで、レコードとして記憶されている。ノードID項目には、各ノードの識別情報が登録される。図1では、ノードIDはノードに付した符号に対応している。IPアドレス項目にはノードのIPアドレス、ポート番号項目には各クライアントがネットワークNWを介してノードにアクセス可能なポート番号が登録される。ノードリスト101は、具体的には、たとえば、図4に示したROM402、RAM403、磁気ディスク405、光ディスク407などの記憶装置に記憶されている。
クライアントC1〜C3は、複数のノードN1〜N4を利用するコンピュータである。クライアントC1〜C3は、それぞれノードリスト101を有している。クライアントC1〜C3は、管理サーバMを介してノードN1〜N4へデータの登録通知処理、データの検索通知処理を実行してもよいし、管理サーバMを介さずにノードN1〜N4へデータの登録通知処理、データの検索通知処理を実行してもよい。また、ノードN1〜N4にクライアントリスト102を持たせ、管理サーバMを設けないこととしてもよい。
このような検索システム100では、検索対象データが与えられると、階層型転置ブルームフィルタtBFiを参照して、検索対象データが存在するであろうデータブロックdbi−#を特定することになる。検索対象データが存在するであろうデータブロックdbi−#が特定されなかった場合は、いずれの階層型転置ブルームフィルタtBFiのデータブロックdbi−#にも検索対象データは存在しない(陰性)。逆に、検索対象データが存在するであろうデータブロックdbi−#が特定された場合でも、特定されたデータブロックdbi−#には、必ずしも検索対象データが存在するとは限らない(擬陽性)。
なお、擬陽性が陽性になるか陰性になるかは、最終的に特定されたデータブロックdbi−#に対応するハッシュテーブルHTi−#での検索結果に依存する。たとえば、最終的に特定されたデータブロックdbi−#に対応するハッシュテーブルHTi−#において、検索対象データのハッシュ値がヒットすれば陽性、ヒットしなければ陰性となる。
<階層型ブルームフィルタ>
つぎに、図1に示した階層型転置ブルームフィルタtBFiの転置元となる階層型ブルームフィルタについて説明する。
図2は、階層型ブルームフィルタの一例を示す説明図である。階層型ブルームフィルタBFiは、hi(i=1〜4)段×siビット幅のメモリ領域で構成されている。siビット幅は、データブロック集合dbiのビット幅に対応する。また、各段のビット長siは最上段である第hi段の分割数di(i=1〜4)に基づいて分割される。分割された各々はブルームフィルタであり、各段においてブルームフィルタ列を構成する。分割数diは基本的には2以上の整数であるが、最上段である第hi段を単一のブルームフィルタとする場合は、di=1としてもよい。
任意の段をpとすると、第p段のブルームフィルタ列BFi(p)を構成するブルームフィルタbfi(p)のビット幅miは、mi=si/di[hi-(p-1)]となる。図2では、di=2としている。また、第p段のブルームフィルタ列BFi(p)のブルームフィルタbfi(p)の配列数niは、ni=di[hi-(p-1)]となる。
したがって、階層型ブルームフィルタBFiでは、段が下がる(hiが小さくなる)につれ、第p段のブルームフィルタ列BFi(p)のブルームフィルタbfi(p)の配列数が増加する。なお、最下段(第1段)のブルームフィルタ列BFi(1)のブルームフィルタbfi(1)の配列数は、データブロックdbi−#の個数と同一とする。
これにより、第1段までたどり着いたときにヒットしたブルームフィルタbfi(1)とデータブロックdbi−#とが一対一対応することになる。また、階層型ブルームフィルタBFiの段数hiは基本的には複数段であるが、1段(hi=1)としてもよい。ただし、この場合は、di≠1とする。
ここで、ブルームフィルタの擬陽性による影響について説明する。ブルームフィルタの擬陽性の発生確率FPRiは、ビット長がmiのブルームフィルタがhi段ある場合、データ登録数Ni(Ni<mi)、ハッシュ関数の個数をki個とすると、ブルームフィルタの性質より、次式(1)のように表すことができる。
FPRi={1−(1−1/mi)kiNiki≒{1−e(-kiNi/mi))}ki・・・(1)
この場合、ki,mi,Niを変更することにより、擬陽性の発生確率FPRiを非常に小さくすることができる。すなわち、ki,mi,Niの設定次第で、擬陽性の発生確率FPRiを1よりも非常に小さい値(ほぼ0)に設定することができるようになる。
また、データブロック数Ndbiをdihiとすると、高さ段数hiは、次式(2)にて表すことができる。
hi=log(Ndbi)/log(di)+1・・・(2)
上記式(2)は、log(Ndbi)/log(di)が割り切れる場合を前提にしたが、そうでない場合、段によりdiの値を他の段とは変えることで、hiを決定することができる。
また、検索処理ではハッシュ値の数(ki回(定数))だけ照合をおこなう必要があり、検索における1段あたりのフィルタリング対象の数は多くてもdi個である。したがって、検索によるメモリアクセス回数MAiは、最大でも次式(3)で表される程度である。
MAi=ki×di×log(Ndbi)/log(di)・・・(3)
<階層型転置ブルームフィルタtBFi>
つぎに、階層型転置ブルームフィルタtBFiについて説明する。図2に示した階層型ブルームフィルタBFiを転置させることで、階層型ブルームフィルタBFiよりも検索速度をさらに高速化させることができる。
図3は、階層型ブルームフィルタBFi内の第p段のブルームフィルタ列BFi(p)の転置例を示す説明図である。(A)は、ブルームフィルタ列BFi(p)を示している。ここでは、ブルームフィルタ列BFi(p)は、例として、4分割されたブルームフィルタbfi(p−1)〜bfi(p−4)を示している。すなわち、ブルームフィルタ列BFi(p)は、8ビット×4フィルタ数のビット列である。転置する場合は、4ビット×8フィルタ数のビット列となる。すなわち、転置により、配列数とビット幅が入れ替わる。
(B)は、ブルームフィルタ列BFi(p)の転置を示している。転置する場合、各ブルームフィルタbfi(p−1)〜bfi(p−4)の同一位置のビットを集めて、同一位置ごとに集められたビット列を、ビット位置順に配列させる。
具体的には、各ブルームフィルタbfi(p−1)〜bfi(p−4)の各先頭ビットを配列番号順にまとめてビット列{0110}とする。左から先頭ビット「0」がブルームフィルタbfi(p−1)の先頭ビット、2番目のビット「1」がブルームフィルタbfi(p−2)の先頭ビット、3番目のビット「1」がブルームフィルタbfi(p−3)の先頭ビット、末尾ビット「0」がブルームフィルタbfi(p−4)の先頭ビットである。
このビット列{0110}を、転置ブルームフィルタtbfi(p−1)と称す。2番目〜末尾のビット位置についても同様にまとめることで、転置ブルームフィルタtbfi(p−1)〜tbfi(p−8)を得る。転置ブルームフィルタtbfi(p−1)〜tbfi(p−8)がビット位置順に配列されたインデックス情報が、転置ブルームフィルタ列tBFi(p)である。転置ブルームフィルタ列tBFi(p)をすべての段で生成することで、階層型転置ブルームフィルタtBFiとなる。
(C)は、ブルームフィルタ列BFi(p)と転置ブルームフィルタ列tBFi(p)との検索比較例を示している。ここでは、2種類のハッシュ関数により対象データDのハッシュ値を2つ求め、ブルームフィルタ列BFi(p)を構成するブルームフィルタbfi(p)のビット幅10で割り算した余り値を、「4」および「8」とする。
ブルームフィルタ列BFi(p)で検索する場合、余り値「4」および「8」となるビット位置「4」および「8」がすべてONになっているブルームフィルタbfi(p)をブルームフィルタ列BFi(p)から探す。この場合、ブルームフィルタbfi(p−2)が該当する。
一方、転置ブルームフィルタ列tBFi(p)を用いる場合、ブルームフィルタ列BFi(p)のように、ビット位置「4」および「8」がすべてONになっているブルームフィルタbfi(p)を検索せず。代わりに、余り値「4」および「8」と同一配列番号の転置ブルームフィルタtbfi(p−4),tbfi(p−8)を抽出する。そして、抽出された転置ブルームフィルタtbfi(p−4),tbfi(p−8)をAND演算することで、ともにONになっているビット位置「2」を特定する。
ブルームフィルタ列BFi(p)の場合は、4個のブルームフィルタbfi(p−1)〜bfi(p−4)内の4ビット目と8ビット目を参照するため、8(=4×2)のメモリアクセスが必要となる。一方、転置ブルームフィルタ列tBFi(p)は、転置前のブルームフィルタbfi(p−1)〜bfi(p−4)のビット位置ごとに折りたたまれたインデックス情報である。したがって、転置ブルームフィルタtbfi(p−4),tbfi(p−8)を抽出するという2回のメモリアクセスとそのAND演算により判定することが可能となる。したがって、階層型ブルームフィルタBFiよりもメモリアクセス頻度が低減され、検索速度が高速化することとなる。
<コンピュータのハードウェア構成例>
図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と、キーボード410と、マウス411と、スキャナ412と、プリンタ413と、を有している。また、各構成部はバス400によってそれぞれ接続されている。
ここで、CPU401は、検索装置の全体の制御を司る。ROM402は、ブートプログラムなどのプログラムを記憶している。RAM403は、CPU401のワークエリアとして使用される。磁気ディスクドライブ404は、CPU401の制御にしたがって磁気ディスク405に対するデータのリード/ライトを制御する。磁気ディスク405は、磁気ディスクドライブ404の制御で書き込まれたデータを記憶する。
光ディスクドライブ406は、CPU401の制御にしたがって光ディスク407に対するデータのリード/ライトを制御する。光ディスク407は、光ディスクドライブ406の制御で書き込まれたデータを記憶したり、光ディスク407に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ408は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ408は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
I/F409は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークNWに接続され、このネットワーク414を介して他の装置に接続される。そして、I/F409は、ネットワークNWと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F409には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード410は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス411は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ412は、画像を光学的に読み取り、コンピュータ内に画像データを取り込む。なお、スキャナ412は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ413は、画像データや文書データを印刷する。プリンタ413には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
<検索通知処理例および検索処理例>
つぎに、検索通知処理例および検索処理例について説明する。検索通知処理では、検索の対象となるデータ(以下、検索対象データ)をノードN1〜N4に検索させる検索リクエストを通知する処理が実行される。検索処理では、検索リクエストを受け付けたノードにより、検索対象データを検索する処理が実行される。
検索通知処理を実行するコンピュータ(たとえば、管理サーバMまたはクライアント。以下、単に「送信元コンピュータ」。)は、対象データの検索リクエストをノードN1〜N4のいずれかのノードに送信する。各ノードの宛先については、ノードリスト101を参照することで特定することができる。
検索対象データを検索させるノード(検索ノード)を指定する。どのノードから検索するかは、たとえば、送信元コンピュータの利用者が任意に指定してもよい。また、たとえば、送信元コンピュータがノードIDの順に指定してもよい。また、たとえば、現検索通知処理の1つ前に検索通知処理が実行された際に検索が成功したノードを、検索対象データを検索させるノードに指定してもよい。また、たとえば、送信元コンピュータがすべてのノードに検索通知を行ってもよい。
図5は、送信元コンピュータによる検索通知処理例を示す説明図である。たとえば、検索成功ノードIDが1であるとする。送信元コンピュータ(図5では、クライアントC1)が、ノード群から検索成功ノードIDに基づきノードN1を選択する。送信元コンピュータが、(1)検索リクエスト601をノードN1に送信し、ノードN1からのリプライ602を待つ。送信元コンピュータが、(2)ノードN1からのリプライ602を受信すると、検索結果が「陽性」であるか否かを判断する。送信元コンピュータが、検索結果が「陽性」でないと判断した場合、(3)ノードID順に検索リクエスト701をノードN2に送信し、ノードN2からのリプライ702を待つ。
送信元コンピュータが、(4)ノードN2からのリプライ702を受信すると、検索結果が「陽性」であるか否かを判断する。送信元コンピュータが、検索結果が「陽性」であると判断した場合、検索結果を出力して検索通知処理を終了する。
図6および図7は、検索リクエストおよびリプライのデータ構造例を示す説明図である。図6,7において、(A)は検索リクエスト601,701、(B)はリプライ602,702を示す。(A)の検索リクエスト601,701のヘッダは、検索リクエスト601,701の送信元アドレスおよび送信元ポート番号と宛先アドレスおよび宛先ポート番号とを保持する。図6,7では、コンピュータに割り当てた符号C1,N1,N2をIPアドレスおよびポート番号の代わりに表記している。
また、(A)の検索リクエスト601,701のペイロードは、種類項目、検索対象データ項目に対しそれぞれの情報が保持されている。たとえば、種類項目には、「検索」、検索対象データ項目には、「Dx」が保持されている。
また、(B)のリプライ602,702のヘッダは、それぞれ検索リクエスト601,701の送信元アドレスおよび送信元ポート番号と宛先アドレスおよび宛先ポート番号とが入れ替わった送信元アドレスと宛先アドレスとを保持する。(B)のリプライ602,702のペイロードは、検索結果項目に対する情報が保持されている。(B)のリプライ602,702のペイロードには、図6の場合は、ノードN1での検索結果(Dxなし)、すなわち、陰性である旨が保持されており、図7の場合は、ノードN2での検索結果(Dxあり)が保持されている。つぎに、送信元コンピュータがノードN2に検索リクエストを送信した場合のノードN2による検索処理例を示す。
図8は、ノードN2による階層型転置ブルームフィルタtBF2の検索処理例を示す説明図である。図8では、説明上、全ビット幅s2=64ビット、段数h2=3段、第h2段での分割数d2=2とする。
最下段である第1段のブルームフィルタ列BF2(1)を構成するブルームフィルタのビット幅は、8(=s2/d2h2=64/23)ビットであるため、最下段である第1段の転置ブルームフィルタ列tBF2(1)は、8(=s2/d2h2=64/23)個の転置ブルームフィルタtbf2(1−1)〜tbf2(1−8)により構成される。
また、第2段の転置ブルームフィルタ列tBF2(2)を構成するブルームフィルタのビット幅は、16(=s2/d2h2=64/22)ビットであるため、第2段の転置ブルームフィルタ列tBF2(2)は、16(=s2/d2h2=64/22)個の転置ブルームフィルタtbf2(2−1)〜tbf2(2−16)により構成される。
また、最上段である第3段のブルームフィルタ列BF2(3)を構成するブルームフィルタのビット幅は、32(=s2/d2h2=64/21)ビットであるため、最上段である第3段の転置ブルームフィルタ列tBF2(3)は、32(=s2/d2h2=64/21)個の転置ブルームフィルタtbf2(3−1)〜tbf2(3−32)により構成される。
なお、図8では、説明上、比較のため、転置ブルームフィルタ列tBF2(1)〜tBF2(3)とともに、転置前のブルームフィルタ列BF2(1)〜BF2(3)を併記しておく。
まず、ノードN2は、検索対象データDxについてのハッシュ関数H1()〜H3()での3個のハッシュ値を、第3段の転置ブルームフィルタ数32で割り算したときの余り値「2」、「19」、「27」を求める。
つぎに、ノードN2は、フィルタリング対象となる転置ブルームフィルタを第3段の転置ブルームフィルタ列tBF2(3)から特定する。具体的には、ノードN2は、余り値と同一ビット位置(余り値が0の場合は末尾位置)となる転置ブルームフィルタtbf2(3−2),tbf2(3−19),tbf2(3−27)を特定する。そして、ノードN2は、特定された転置ブルームフィルタtbf2(3−2),tbf2(3−19),tbf2(3−27)の各ビット列{10},{11},{10}のAND演算をおこなう。そのAND結果は、{10}となる。
AND結果に「1」が含まれていない場合は、ノードN2はデータブロック集合db2には検索対象データDxが存在しないと判定する。一方、AND結果に「1」が含まれている場合、検索対象データDxを登録したかもしれないため、1つ下の段に移る。
第2段においても、まず、ノードN2は、検索対象データDxについての3個のハッシュ値を、第2段の転置ブルームフィルタ数16で割り算したときの余り値「8」、「11」、「13」を求める。
つぎに、ノードN2は、フィルタリング対象となる転置ブルームフィルタを第2段の転置ブルームフィルタ列tBF2(2)から特定する。具体的には、ノードN2は、余り値と同一ビット位置(余り値が0の場合は末尾位置)となる転置ブルームフィルタtbf2(2−8),tbf2(2−11),tbf2(2−13)を特定する。そして、ノードN2は、特定された転置ブルームフィルタtbf2(2−8),tbf2(2−11),tbf2(2−13)の各ビット列{0110},{0100},{0110}のAND演算をおこなう。そのAND結果は、{0100}となる。
ノードN2は、AND結果に「1」が含まれていない場合は、データブロック集合db2には検索対象データDxが存在しないと判定する。一方、AND結果に「1」が含まれている場合、検索対象データDxを登録したかもしれないため、1つ下の段に移る。
最下段である第1段においても、まず、ノードN2は、検索対象データDxについての3個のハッシュ値を、第1段の転置ブルームフィルタ数8で割り算したときの余り値「2」、「5」、「7」を求める。
つぎに、ノードN2は、フィルタリング対象となる転置ブルームフィルタを第1段の転置ブルームフィルタ列tBF2(1)から特定する。具体的には、ノードN2は、余り値と同一ビット位置(余り値が0の場合は末尾位置)となる転置ブルームフィルタtbf2(1−2),tbf2(1−5),tbf2(1−7)を特定する。そして、ノードN2は、特定された転置ブルームフィルタtbf2(1−2),tbf2(1−5),tbf2(1−7)の各ビット列{00110110},{10011010},{00110111}のAND演算をおこなう。そのAND結果は、{00010010}となる。
これ以上下の段は存在しないため、擬陽性により、AND結果{00010010}が「1」のビット位置4,7に対応するデータブロックdb2−4,db2−7に検索対象データDxが存在する可能性がある。
この場合、ハッシュテーブルHT2−4,HT2−7に対しハッシュ関数H1()でのハッシュ値をキーにして検索することで、データブロックdb2−4がヒットし、データブロックdb2−7はヒットしなかったものとする。これにより、検索対象データDxは、データブロックdb2−4に登録されていることが判明する。そして、ノードN2は、検索結果(陽性)のリプライ702を送信する。これにより、検索処理を終了する。
このような手順により、ノードNiは、階層型転置ブルームフィルタtBFiを利用することで、階層型ブルームフィルタBFiに比べてもより高速に対象データを検索することができる。
<送信元コンピュータによる検索通知処理手順>
図9は、送信元コンピュータによる検索通知処理手順の一例を示すフローチャートである。送信元コンピュータが、検索対象データを受け付けたか否かを判断する(ステップS901)。検索対象データがない場合(ステップS901:No)、送信元コンピュータが、ステップS901へ戻る。検索対象データがある場合(ステップS901:Yes)、送信元コンピュータが、j=直前の検索成功ノードIDとする(ステップS902)。これにより、ノード群のうち、現検索の1つ前の検索において検索が成功したノードから優先して検索をおこなうことができる。
そして、送信元コンピュータが、ノードNjに検索リクエストを未送信か否かを判断する(ステップS903)。ノードNjに検査リクエストを未送信であるか否かを判断することにより、ノード群から、未選択なノードを選択することができる。ノードNjに未送信の場合(ステップS903:Yes)、送信元コンピュータが、ノードNjに検索リクエストを送信し(ステップS904)、リプライを受信したか否かを判断する(ステップS905)。
リプライが受信されていない場合(ステップS905:No)、送信元コンピュータが、検索リクエストの送信から所定時間経過したか否かを判断する(ステップS906)。所定時間経過していない場合(ステップS906:No)、送信元コンピュータが、ステップS905に戻る。一方、所定時間経過した場合(ステップS906:Yes)、送信元コンピュータが、エラー出力をおこなう(ステップS907)。たとえば、ディスプレイ408に、ノードNjで検索できなかった旨の表示をおこなう。
送信元コンピュータが、j≧全ノード数であるか否かを判断する(ステップS908)。j≧全ノード数である場合(ステップS908:Yes)、送信元コンピュータが、j=1とし(ステップS909)、ステップS903へ戻る。j≧全ノード数でない場合(ステップS908:No)、送信元コンピュータが、j=j+1とし(ステップS910)、ステップS903へ戻る。
リプライが受信された場合(ステップS905:Yes)、送信元コンピュータが、検索結果が陽性か否かを判断する(ステップS911)。検索結果が陽性の場合(ステップS911:Yes)、送信元コンピュータが、ノードNjと検索結果(陽性)を関連付けて出力し(ステップS912)、検索成功ノードID=jとし(ステップS913)、一連の検索通知処理を終了する。たとえば、ディスプレイ408に、ノードNjとブロック番号を関連付けた結果の表示をおこなってもよい。たとえば、ノードNjを直前のデータが追加されたノードIDとして、ROM402、RAM403、磁気ディスク405、光ディスク407などの記憶装置に記憶させる。検索結果が陰性の場合(ステップS911:No)、送信元コンピュータが、ステップS908へ移行する。
ノードNjに未送信でない場合(ステップS903:No)、送信元コンピュータが、検索結果(陰性)を出力し(ステップS914)、一連の検索通知処理を終了する。たとえば、ディスプレイ408に、いずれのノードであっても検索できなかった旨の表示をおこなう。
直前の検索成功ノードIDに優先して検索リクエストを送信することにより、対象データの追加と同じ順番で読み込まれる場合が多いというヒューリスティックスを用いることができ、検索の高速化を図ることができる。
<ノードNiによる検索・エントリ処理手順>
図10は、ノードNiによる検索・エントリ処理手順を示すフローチャートである。図10の処理手順は、複数のノード(ノードN1〜N4)の各ノードで実行される処理手順である。
まず、ノードNiは、リクエストを受信したか否かを判断する(ステップS1001)。リクエストが受信されていない場合(ステップS1001:No)、ノードNiは、ステップS1001へ戻る。一方、リクエストが受信された場合(ステップS1001:Yes)、ノードNiは、リクエストの種類を判断する(ステップS1002)。
リクエストの種類がエントリの場合(ステップS1002:エントリ)、ノードNiは、エントリ処理を実行し(ステップS1003)、一連の処理を終了する。リクエストの種類が検索の場合(ステップS1002:検索)、ノードNiは、検索処理を実行し(ステップS1004)、一連の処理を終了する。
<ノードNiによる検索処理手順>
図11および図12は、図10で示した検索処理(ステップS1004)の詳細な説明を示すフローチャートである。なお、ノードNiにより利用されるブルームフィルタは、すでに一括転置済みの階層型転置ブルームフィルタtBFiでもよく、階層型ブルームフィルタBFiでもよい。階層型ブルームフィルタBFiを用いる場合は、未転置のブルームフィルタが特定される都度転置処理をおこなう。
すなわち、検索しながら階層型転置ブルームフィルタtBFiを構築していく。図11および図12では、検索しながら階層型転置ブルームフィルタtBFiを構築していく場合の処理手順について説明する。なお、一括転置済みの場合は、転置済みか否かの判断(ステップS1103)と転置処理(ステップS1104)を省略するだけでよい。
まず、図11において、ノードNiは、検索対象データDxをki種類のハッシュ関数に与えてki個のハッシュ値を算出する(ステップS1101)。そして、ノードNiは、p=hi、すなわち、段数pを最大段数hiに設定し(ステップS1102)、p段目のブルームフィルタ列BFi(p)が転置済みであるか否かを判断する(ステップS1103)。転置済みである場合(ステップS1103:Yes)、ステップS1105に移行する。一方、未転置である場合(ステップS1103:No)、ノードNiは、p段目のブルームフィルタ列BFi(p)を転置して(ステップS1104)、ステップS1105に移行する。
ステップS1105では、ノードNiは、ki個のハッシュ値を転置ブルームフィルタtbfi(p)の配列数で除算して、ki個の余り値を算出する(ステップS1105)。そして、ノードNiは、p段目の転置ブルームフィルタ列tBFi(p)から、ki個の余り値に対応するki個の転置ブルームフィルタtbfi(p)rを特定する(ステップS1106)。
そして、ノードNiは、ki個の転置ブルームフィルタtbfi(p)rをAND演算し(ステップS1107)、図12のステップS1201に移行する。
図12において、ノードNiは、AND結果の先頭ビットを対象ビットに設定し(ステップS1201)、対象ビットがONであるか否かを判断する(ステップS1202)。ONでない場合(ステップS1202:No)、ノードNiは、対象ビットがシフト可能か否かを判断する(ステップS1203)。具体的には、対象ビットが末尾ビットであるか否かを判断する。
シフト可能である場合(ステップS1203:Yes)、ノードNiは、対象ビットを1ビット末尾方向へシフトし(ステップS1204)、ステップS1202に戻る。一方、ステップS1203において、シフト可能でない場合(ステップS1203:No)、ノードNiは、検索結果(陰性)と判定し、検索結果(陰性)をリプライ送信する(ステップS1205)。これにより、検索結果が陰性である場合の処理手順を終了する。
一方、ステップS1202において、対象ビットがONであった場合(ステップS1202:Yes)、ノードNiは、現在の段数pがp=1であるか否かを判断する(ステップS1206)。p=1でない場合(ステップS1206:No)、ノードNiは、pをデクリメントして(ステップS1207)、ステップS1103に戻る。
一方、p=1である場合(ステップS1206:Yes)、ノードNiは、対象ビットのビット位置に対応するハッシュテーブルを検索する(ステップS1208)。そして、ノードNiは、検索対象データDxが存在するか否かを判断する(ステップS1209)。
検索対象データが存在しない場合(ステップS1209:No)、ノードNiは、ステップS1203に戻り、対象ビットがシフト可能か否かを判断することとなる。一方、検索対象データが存在する場合(ステップS1209:Yes)、ノードNiは、検索結果(陽性)をリプライ送信する(ステップS1210)。ノードNiは、必要に応じて関連するデータを抽出して検索結果として送信元コンピュータへリプライする。これにより、検索結果が陽性である場合の処理手順を終了する。
<エントリ通知処理例およびエントリ処理例>
つぎに、エントリ通知処理とエントリ処理について説明する。エントリ通知処理では、エントリの対象となるデータ(以下、対象データ)をノードN1〜N4のいずれかのノードに登録させるエントリリクエストを通知する処理が実行される。エントリ処理では、エントリリクエストを受け付けたノードにより、対象データを登録するエントリ処理と、該ノードが有する階層型転置ブルームフィルタtBFへのエントリ処理と、が実行される。
エントリ通知処理を実行するコンピュータ(たとえば、管理サーバMまたはクライアント。以下、単に「送信元コンピュータ」。)は、対象データのエントリリクエストをノードN1〜N4のいずれかのノードに送信する。各ノードの宛先については、ノードリスト101を参照することで特定することができる。エントリリクエストの例は後述する。対象データをエントリさせるノード(登録先ノード)を指定する。登録先ノードはノードN1〜N4のいずれのノードであってもよい。どのノードにエントリするかは、たとえば、送信元コンピュータの利用者が任意に指定することができる。また、あらかじめ各ノードの空き容量に応じて、エントリさせるノードを指定することとしてもよい。各ノードの空き容量は、各ノードが管理サーバMに対して定期的にまたは管理サーバMからの要求に応じて通知されるものとし、管理サーバMがクライアントに対してブロードキャストして通知されるものとする。
図13は、送信元コンピュータによるエントリ通知処理例を示す説明図である。送信元コンピュータ(図13では、クライアントC1)が、(1)ノードN2に対象データのエントリリクエスト1401を送信し、ノードN2からのリプライ1402を待つ。送信元コンピュータが、(2)ノードN2からのリプライ1402を受信すると、対象データのエントリが成功したか否かを判断する。送信元コンピュータが、対象データのエントリが成功したと判断した場合、エントリ通知処理を終了する。
図14は、エントリリクエストおよびリプライのデータ構造例を示す説明図である。図14において、(A)はエントリリクエスト1401、(B)はリプライ1402を示す。(A)のエントリリクエスト1401のヘッダは、エントリリクエスト1401の送信元アドレスおよび送信元ポート番号と宛先アドレスおよび宛先ポート番号とを保持する。図14では、コンピュータに割り当てた符号C1,N2をIPアドレスおよびポート番号の代わりに表記している。
また、(A)のエントリリクエスト1401のペイロードは、種類項目、登録データ項目に対しそれぞれの情報が保持されている。たとえば、種類項目には、「登録」、登録データ項目には、「Dx」が保持されている。
また、(B)のリプライ1402のヘッダは、エントリリクエスト1401の送信元アドレスおよび送信元ポート番号と宛先アドレスおよび宛先ポート番号とが入れ替わった送信元アドレスと宛先アドレスとを保持する。(B)のリプライ1402のペイロードは、ブロック番号項目に対する情報が保持されている。たとえば、ブロック番号項目には、「4」が保持されている。すなわち、階層型転置ブルームフィルタtBF2のデータブロックdb2−4に「Dx」が登録されたことを示している。つぎに、エントリリクエスト1401を受信したノードN2によるエントリ処理例について説明する。
図15は、ノードN2による階層型転置ブルームフィルタtBF2のエントリ処理例を示す説明図である。ノードN2が送信元コンピュータからエントリリクエストを受信する。階層型転置ブルームフィルタtBF2では、登録される対象データDが与えられるハッシュ関数の種類数k2をk2=3とする。ここでは、ハッシュ関数H1(),H2(),H3()を用いることとする。また、ハッシュテーブルの登録対象となるハッシュ関数をH1()とする。
まず、データブロック集合db2のうちデータブロックdb2−4に対象データDxが登録されたものとする。対象データDxを各ハッシュ関数H1(),H2(),H3()に与えたときのハッシュ値は、例として以下の値とする。
H1(Dx)=x1
H2(Dx)=x2
H3(Dx)=x3
また、階層型転置ブルームフィルタtBFのエントリ処理では、更新対象となる転置ブルームフィルタtbf2(p)内の特定のビットをONにするが、その特定のビットがすでにONになっている場合はそのままとする。
ここで、ノードN2は、登録先のデータブロックdb2−4のブロック番号4のハッシュテーブルHT2−4に対するハッシュテーブルエントリE2−4を作成する。そして、ノードN2は、作成されたハッシュテーブルエントリE2−4を、ハッシュテーブルHT2−4に追加登録する。
そして、第1段のエントリ処理に移る。ノードN2は、更新対象となる転置ブルームフィルタtbf2(1)を、第1段の転置ブルームフィルタ列tBF2(1)の中から特定する。具体的には、ノードN2は、各ハッシュ値x1〜x3を、第1段の転置ブルームフィルタ列tBF2(1)の配列個数である8で割り算し、余り値を算出する。ハッシュ値x1の余り値は「2」、ハッシュ値x2の余り値は「5」、ハッシュ値x3の余り値は「7」になったものとする。したがって、第1段での更新対象となる転置ブルームフィルタtbf2(1)は、転置ブルームフィルタtbf2(1−2),tbf2(1−5),tbf2(1−7)となる。
また、最下段では、登録先のデータブロックdb2−4のブロック番号4に対応するビット位置を更新対象ビットとする。したがってノードN2は、更新対象となる転置ブルームフィルタの先頭から4ビット目のビットをONにする。これにより、第1段の転置ブルームフィルタ列tBF2(1)のエントリ処理を終了する。
つぎに、第2段のエントリ処理に移る。ノードN2は、更新対象となる転置ブルームフィルタtbf2(2)を、第2段の転置ブルームフィルタ列tBF2(2)の中から特定する。具体的には、ノードN2は、各ハッシュ値x1〜x3を、第2段の転置ブルームフィルタ列tBF2(2)の配列個数である16で割り算し、余り値を算出する。ハッシュ値x1の余り値は「8」、ハッシュ値x2の余り値は「11」、ハッシュ値x3の余り値は「13」になったものとする。したがって、第2段での更新対象となる転置ブルームフィルタtbf2(2)は、転置ブルームフィルタtbf2(2−8),tbf2(2−11),tbf2(2−13)となる。
つぎに、転置ブルームフィルタtbf2(2−8),tbf2(2−11),tbf2(2−13)内のどのビット位置のビットをONにするかについて説明する。転置前の階層型ブルームフィルタBF2では、分割数をd2として、各ブルームフィルタ列BF2(p)をn2(=d2[h2-(p-1)])個に分割した。そして、これにより、各ブルームフィルタ列BF2(p)のビット幅は、m2(=s2/n2)ビットになった。
階層型転置ブルームフィルタtBF2では、配列個数n2とビット幅m2が入れ替わっている。そのため、階層型転置ブルームフィルタtBF2では、第(p−1)段の更新対象のブルームフィルタbf2((p−1)−#)の配列番号#ではなく、第(p−1)段での更新対象ビット位置を分割数d2で割り算し、端数を切り上げる。
第2段の場合、第1段での更新対象ビットは、先頭から4ビット目のビットであり、転置ブルームフィルタtbf2(1−2),tbf2(1−5),tbf2(1−7)の4ビット目がONにされた。したがって、第2段の更新対象ビットは、d2=2であるため、先頭から4/d2=2ビット目のビットを更新対象ビットとする。本例では、転置ブルームフィルタtbf2(2−8),tbf2(2−11),tbf2(2−13)の先頭から2ビット目のビットをONにすることになる。これにより、ノードN2による第2段の転置ブルームフィルタ列tBF2(2)のエントリ処理を終了する。
つぎに、第3段のエントリ処理に移る。ノードN2は、更新対象となる転置ブルームフィルタtbf2(3)を、第3段の転置ブルームフィルタ列tBF2(3)の中から特定する。具体的には、ノードN2は、各ハッシュ値x1〜x3を、第3段の転置ブルームフィルタ列tBF2(3)の配列個数である32で割り算し、余り値を算出する。ハッシュ値x1の余り値は「2」、ハッシュ値x2の余り値は「19」、ハッシュ値x3の余り値は「27」になったものとする。したがって、第3段での更新対象となる転置ブルームフィルタtbf2(3)は、転置ブルームフィルタtbf2(3−2),tbf2(3−19),tbf2(3−27)となる。
つぎに、転置ブルームフィルタtbf2(3−2),tbf2(3−19),tbf2(3−27)内の更新対象ビットを決める。第2段と同様、第(p−1)段の更新対象のブルームフィルタbf2((p−1)−#)の配列番号#ではなく、第(p−1)段での更新対象ビット位置を分割数d2で割り算し、端数を切り上げる。
第3段の場合、前段である第2段での更新対象ビットは、先頭から2ビット目のビットであり、転置ブルームフィルタtbf2(2−8),tbf2(2−11),tbf2(2−13)の2ビット目がONにされた。したがって、第3段の更新対象ビットは、d2=2であるため、先頭から2/d2=1ビット目のビットを更新対象ビットとする。本例では、転置ブルームフィルタtbf2(3−2),tbf2(3−19),tbf2(3−27)の先頭ビットをONにすることになる。これにより、第3段の転置ブルームフィルタ列tBF2(3)のエントリ処理を終了する。ノードN2は、送信元コンピュータへリプライを送信することにより、エントリ処理を終了する。
<送信元コンピュータによるエントリ通知処理手順>
図16は、送信元コンピュータによるエントリ通知処理手順の一例を示すフローチャートである。送信元コンピュータが、対象データDxがあるか否かを判断する(ステップS1601)。対象データDxがない場合(ステップS1601:No)、送信元コンピュータが、ステップS1601へ戻る。対象データDxがある場合(ステップS1601:Yes)、送信元コンピュータが、j=直前のデータが追加されたノードIDとし(ステップS1602)、ノードNjに未送信か否かを判断する(ステップS1603)。
ノードNjに未送信の場合(ステップS1603:Yes)、送信元コンピュータが、ノードNjにエントリリクエストを送信し(ステップS1604)、リプライを受信したか否かを判断する(ステップS1605)。
リプライが受信されていない場合(ステップS1605:No)、送信元コンピュータが、エントリリクエストの送信から所定時間経過したか否かを判断する(ステップS1606)。所定時間経過していない場合(ステップS1606:No)、ステップS1605に戻る。一方、所定時間経過した場合(ステップS1606:Yes)、送信元コンピュータが、エラー出力をおこなう(ステップS1607)。たとえば、ディスプレイ408に、ノードNjにデータエントリできなかった旨の表示をおこなう。
送信元コンピュータが、j≧全ノード数であるか否かを判断する(ステップS1608)。j≧全ノード数である場合(ステップS1608:Yes)、送信元コンピュータが、j=1とし(ステップS1609)、ステップS1603へ戻る。j≧全ノード数でない場合(ステップS1608:No)、送信元コンピュータが、j=j+1とし(ステップS1610)、ステップS1603へ戻る。
リプライが受信された場合(ステップS1605:Yes)、送信元コンピュータが、エントリが成功したか否かを判断する(ステップS1611)。ノードNjによるエントリが成功した場合(ステップS1611:Yes)、送信元コンピュータが、エントリ結果を出力し(ステップS1612)、一連の処理を終了する。たとえば、ノードNjを直前のデータが追加されたノードIDとして、ROM402、RAM403、磁気ディスク405、光ディスク407などの記憶装置に記憶させる。さらに、たとえば、ディスプレイ408に、ノードNjにエントリした旨の表示をおこなってもよい。エントリが成功していない場合(ステップS1611:No)、送信元コンピュータが、ステップS1608へ移行する。
ノードNjに未送信でない場合(ステップS1603:No)、送信元コンピュータが、エラー出力し(ステップS1613)、一連の処理を終了する。たとえば、ディスプレイ408に、いずれのノードにもエントリできなかった旨の表示をおこなう。
<ノードNiによるエントリ処理手順>
図17は、図10で示したエントリ処理(ステップS1003)の詳細な説明を示すフローチャートである。まず、ノードNiは、段数pをp=1に設定し(ステップS1701)、p>hi(hiは階層型転置ブルームフィルタtBFiの最上段)であるか否かを判断する(ステップS1702)。p>hiでない場合(ステップS1702:No)、ノードNiは、ki種類のハッシュ関数を用いて、対象データDxのki個のハッシュ値を算出する(ステップS1703)。
つぎに、ノードNiは、ki個のハッシュ値を第p段の転置ブルームフィルタtbfi(p)の配列個数で除算して、ki個の余り値を算出する(ステップS1704)。そして、ノードNiは、ki個の余り値と同一配列番号のki個の転置ブルームフィルタtbfi(p)rを特定する(ステップS1705)。
このあと、p=1であるか否かを判断し(ステップS1706)、p=1である場合(ステップS1706:Yes)、ノードNiは、特定されたki個の転置ブルームフィルタtbfi(p)rに、対象データDxの所属データブロックdbi−#のブロック番号#をエントリする(ステップS1707)。すなわち、対象データDxの所属データブロックdb#のブロック番号#を更新対象ビット位置#に設定し、特定されたki個の転置ブルームフィルタtbfi(p)rの更新対象ビット位置#のビットをONにする。そして、ステップS1709に移行する。
一方、ステップS1706において、p≠1である場合(ステップS1706:No)、ノードNiは、特定されたki個の転置ブルームフィルタtbfi(p)rに、対象データDxの第(p−1)段での更新対象ビット位置を分割数diで除算した商(端数切り上げ)をエントリする(ステップS1708)。すなわち、対象データDxの第(p−1)段での更新対象ビット位置を分割数diで除算した商(端数切り上げ)を更新対象ビット位置に設定し、特定されたki個の転置ブルームフィルタtbfi(p)rの更新対象ビット位置のビットをONにする。そして、ノードNiは、ステップS1709に移行する。
ステップS1709において、ノードNiは、段数pをインクリメントし(ステップS1709)、ステップS1702に戻る。これにより、最下段から最上段まで更新対象ビットをONにすることができる。
一方、ステップS1702において、p>hiである場合(ステップS1702:Yes)、ノードNiは、対象データDxのハッシュテーブルエントリを追加する(ステップS1710)。ノードNiは、送信元コンピュータへリプライ送信し(ステップS1711)、ノードNiによる階層型転置ブルームフィルタtBFiのエントリ処理を終了する。
このような手順により、ノードNiは、階層型転置ブルームフィルタtBFiに対象データをエントリさせることとなる。すなわち、転置後にデータが登録される場合も、階層型転置ブルームフィルタtBFiから階層型ブルームフィルタBFiに戻す必要がなく、転置後の階層型転置ブルームフィルタtBFiのままエントリさせることができる。したがって、転置前に戻すといった無駄な処理がなくなり、検索効率の向上も図ることができる。
<ノード追加例>
つぎに、検索システム100にあらたにノードが追加される例について図18を用いて説明する。
図18は、ノードの追加例を示す説明図である。ここでは、ノードN5が検索システム100に追加される例について説明する。ノードN5のハードウェア構成については、たとえば、図4で示したコンピュータのハードウェア構成と同一構成とする。
ノードN5が、(1)追加リクエストを管理サーバMへ送信する。管理サーバMのIPアドレスおよびポート番号はノードN5の登録者により指示されることとする。管理サーバMは、ノードN5から追加リクエストを受け付けると、ノードリスト101に新たにノードN5のノードIDとIPアドレスとポート番号に関する情報を設定することにより、ノードリスト101を更新する。管理サーバMは、(2)クライアントリスト102を参照し、ノードリスト101の更新をブロードキャストする。各クライアントは、管理サーバMからの更新通知を受信すると、ノードリスト101を更新する。
<管理サーバMによるノードの追加処理手順>
図19は、管理サーバMによるノードの追加処理手順の一例を示すフローチャートである。管理サーバMが、ノードリスト101に未登録なノードから接続があるか否かを判断する(ステップS1901)。ノードリスト101に未登録なノードから接続がない場合(ステップS1901:No)、管理サーバMが、ステップS1901へ戻る。
ノードリスト101に未登録なノードから接続がある場合(ステップS1901:Yes)、管理サーバMが、ノードリスト101に接続元のノードのノード番号、IPアドレス、ポート番号を登録する(ステップS1902)。管理サーバMが、クライアントリスト102を参照し、クライアントにノードリスト101の更新をブロードキャストし(ステップS1903)、接続元ノードにリプライ送信し(ステップS1904)、ノードの追加処理を終了する。
以上説明したように、本実施の形態によれば、ブルームフィルタ列BF(p)を転置して転置ブルームフィルタ列tBF(p)とすることで、メモリアクセスが低減され、検索速度が高速化するという効果を奏する。特に、階層型転置ブルームフィルタtBFとすることで、段ごとのメモリアクセスが低減されるため、より高速に検索をおこなうことができる。また、ノード群のそれぞれのノードが階層型転置ブルームフィルタtBFを保持することで、管理可能なデータ量の増大化を図ることができる。
また、検索対象データが存在することを示していると判断するまで、ノード群から未選択なノードを選択して、繰り返し検索をおこなう。これにより、複数のデータが複数のノードに分散して記憶されていることを利用者に意識させずに検索をおこなうことができる。
また、選択すべきノードが無くなるまで、ノード群から未選択なノードを選択して、繰り返し検索をおこなう。これにより、複数のデータが複数のノードに分散して記憶されていることを利用者に意識させずに検索をおこなうことができる。
また、ノード群から検索に成功済のノードを優先して選択することで、対象データの追加と同じ順番で読み込まれる場合が多いというヒューリスティックスを用いることができ、検索の高速化を図ることができる。
また、ノード群のうちの少なくとも2つのノード間において、段数、ビット幅、分割数のいずれか一つが異なる。各ノードが異なる階層型転置ブルームフィルタtBFを保持していても良いので、管理可能なデータ量の増大化を図ることができる。
また、上述した各フローチャートで示したステップは、具体的には、たとえば、図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段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持しており、前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での検索対象データの存否を判定し、前記検索対象データの送信元コンピュータへ前記検索対象データの存否を示す検索結果を送信する処理を実行するノード群にアクセス可能な前記送信元コンピュータに、
前記ノード群から未選択なノードを選択し、
選択されたノードに前記検索対象データを送信し、
前記選択されたノードから前記検索結果を受信し、
受信された前記検索結果が、前記検索対象データが存在することを示しているか否かを判断し、
判断結果を出力する、
処理を実行させることを特徴とする検索プログラム。
(付記2)前記未選択なノードの選択から判断までの処理を、前記検索対象データが存在することを示していると判断するまで繰り返して実行させることを特徴とする付記1に記載の検索プログラム。
(付記3)前記未選択なノードの選択から判断までの処理を、選択すべきノードが無くなるまで繰り返して実行させることを特徴とする付記1または2に記載の検索プログラム。
(付記4)前記ノード群から、検索に成功済のノードを優先して選択することを特徴とする付記1〜3のいずれか一つに記載の検索プログラム。
(付記5)前記ノード群のうちの少なくとも2つのノード間において、前記段数h、前記ビット幅s、前記分割数dのいずれか一つが異なることを特徴とする付記1〜4のいずれか一つに記載の検索プログラム。
(付記6)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードに、
検索対象データを受信し、
前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での受信された前記検索対象データの存否を判定し、
前記検索対象データの送信元へ前記検索対象データの存否を示す検索結果を送信する、
処理を実行させることを特徴とする検索プログラム。
(付記7)前記ノード群のうちの少なくとも2つのノード間において、前記段数h、前記ビット幅s、前記分割数dのいずれか一つが異なることを特徴とする付記6に記載の検索プログラム。
(付記8)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(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段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードに、
対象データを受信し、
前記階層型転置ブルームフィルタに応じて、前記データブロック集合内に前記対象データをエントリし、
前記対象データの送信元コンピュータへ前記対象データのエントリ先を示すエントリ結果を送信する、
処理を実行させることを特徴とする登録プログラム。
(付記10)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持しており、前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での検索対象データの存否を判定し、前記検索対象データの送信元コンピュータへ前記検索対象データの存否を示す検索結果を送信する処理を実行するノード群にアクセス可能な前記送信元コンピュータが、
前記ノード群から未選択なノードを選択し、
選択されたノードに前記検索対象データを送信し、
前記選択されたノードから前記検索結果を受信し、
受信された前記検索結果が、前記検索対象データが存在することを示しているか否かを判断し、
判断結果を出力する、
処理を実行することを特徴とする検索方法。
(付記11)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードが、
検索対象データを受信し、
前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での受信された前記検索対象データの存否を判定し、
前記検索対象データの送信元へ前記検索対象データの存否を示す検索結果を送信する、
処理を実行することを特徴とする検索方法。
(付記12)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持しており、前記階層型転置ブルームフィルタに応じて、前記データブロック集合内に対象データをエントリし、前記対象データの送信元コンピュータへ前記対象データのエントリ先を示すエントリ結果を送信する処理を実行するノード群にアクセス可能な前記送信元コンピュータが、
前記ノード群から、特定のノードを選択し、
選択された前記特定のノードに前記対象データを送信し、
前記特定のノードから、前記エントリ結果を受信し、
受信された前記エントリ結果を出力する、
処理を実行することを特徴とする登録方法。
(付記13)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードが、
対象データを受信し、
前記階層型転置ブルームフィルタに応じて、前記データブロック集合内に前記対象データをエントリし、
前記対象データの送信元コンピュータへ前記対象データのエントリ先を示すエントリ結果を送信する、
処理を実行することを特徴とする登録方法。
(付記14)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持しており、前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での検索対象データの存否を判定し、前記検索対象データの送信元である検索装置へ前記検索対象データの存否を示す検索結果を送信する処理を実行するノード群にアクセス可能な前記検索装置であって、
前記ノード群から未選択なノードを選択する処理部と、
選択されたノードに前記検索対象データを送信する処理部と、
前記選択されたノードから前記検索結果を受信する処理部と、
受信された前記検索結果が、前記検索対象データが存在することを示しているか否かを判断する処理部と、
判断結果を出力する処理部と、
を備えることを特徴とする検索装置。
(付記15)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードであって、
検索対象データを受信する処理部と、
前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での受信された前記検索対象データの存否を判定する処理部と、
前記検索対象データの送信元へ前記検索対象データの存否を示す検索結果を送信する処理部と、
を備えることを特徴とするノード。
(付記16)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持しており、前記階層型転置ブルームフィルタに応じて、前記データブロック集合内に対象データをエントリし、前記対象データの送信元である登録装置へ前記対象データのエントリ先を示すエントリ結果を送信する処理を実行するノード群にアクセス可能な前記登録装置であって、
前記ノード群から、特定のノードを選択する処理部と、
選択された前記特定のノードに前記対象データを送信する処理部と、
前記特定のノードから、前記エントリ結果を受信する処理部と、
受信された前記エントリ結果を出力する処理部と、
を備えることを特徴とする登録装置。
(付記17)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードであって、
対象データを受信する処理部と、
前記階層型転置ブルームフィルタに応じて、前記データブロック集合内に前記対象データをエントリする処理部と、
前記対象データの送信元コンピュータへ前記対象データのエントリ先を送信する処理部と、
を備えることを特徴とするノード。
(付記18)段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群で構成される検索システムであって、
前記ノード群のうちのいずれかのノードが、
検索対象データを受信する処理部と、
前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での受信された前記検索対象データの存否を判定する処理部と、
前記検索対象データの送信元へ前記検索対象データの存否を示す検索結果を送信する処理部と、
を備えることを特徴とする検索システム。
N1〜N5 ノード
C1〜C3 クライアント
M 管理サーバ
tBF1〜tBF4 階層型転置ブルームフィルタ
db1〜db4 データブロック集合

Claims (11)

  1. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、
    第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持しており、前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での検索対象データの存否を判定し、前記検索対象データの送信元コンピュータへ前記検索対象データの存否を示す検索結果を送信する処理を実行するノード群にアクセス可能な前記送信元コンピュータに、
    前記ノード群からいずれかのノードを選択し、
    選択されたノードに前記検索対象データを送信し、
    前記選択されたノードから前記検索結果を受信し、
    受信された前記検索結果が、前記検索対象データが存在することを示しているか否かを判断し、
    判断結果を出力する、
    処理を実行させることを特徴とする検索プログラム。
  2. 前記いずれかのノードの選択から判断までの処理を、前記検索対象データが存在することを示していると判断するまで繰り返して実行させ
    前記いずれかのノードの選択の処理では、前記ノード群から、前記いずれかのノードの選択の処理において未選択なノードを選択することを特徴とする請求項1に記載の検索プログラム。
  3. 前記いずれかのノードの選択から判断までの処理を、前記いずれかのノードの選択の処理において未選択なノードが無くなるまで繰り返して実行させ
    前記いずれかのノードの選択の処理では、前記ノード群から、前記いずれかのノードの選択の処理において未選択なノードを選択することを特徴とする請求項1または2に記載の検索プログラム。
  4. 前記ノード群から、検索に成功済のノードを優先して選択することを特徴とする請求項1〜3のいずれか一つに記載の検索プログラム。
  5. 前記ノード群のうちの少なくとも2つのノード間において、前記段数h、前記ビット幅s、前記分割数dのいずれか一つが異なることを特徴とする請求項1〜4のいずれか一つに記載の検索プログラム。
  6. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードに、
    検索対象データを受信し、
    前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での受信された前記検索対象データの存否を判定し、
    前記検索対象データの送信元へ前記検索対象データの存否を示す検索結果を送信する、
    処理を実行させることを特徴とする検索プログラム。
  7. 前記ノード群のうちの少なくとも2つのノード間において、前記段数h、前記ビット幅s、前記分割数dのいずれか一つが異なることを特徴とする請求項6に記載の検索プログラム。
  8. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(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段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードが、
    検索対象データを受信し、
    前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での受信された前記検索対象データの存否を判定し、
    前記検索対象データの送信元へ前記検索対象データの存否を示す検索結果を送信する、
    処理を実行することを特徴とする検索方法。
  10. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持しており、前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での検索対象データの存否を判定し、前記検索対象データの送信元である検索装置へ前記検索対象データの存否を示す検索結果を送信する処理を実行するノード群にアクセス可能な前記検索装置であって、
    前記ノード群からいずれかのノードを選択する処理部と、
    選択されたノードに前記検索対象データを送信する処理部と、
    前記選択されたノードから前記検索結果を受信する処理部と、
    受信された前記検索結果が、前記検索対象データが存在することを示しているか否かを
    判断する処理部と、
    判断結果を出力する処理部と、
    を備えることを特徴とする検索装置。
  11. 段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタと、前記階層型ブルームフィルタの第1段のブルームフィルタ列に対応するデータブロック集合と、を有するデータ構造を各々のノードが保持するノード群のいずれかのノードであって、
    検索対象データを受信する処理部と、
    前記階層型転置ブルームフィルタに応じて、前記データブロック集合内での受信された前記検索対象データの存否を判定する処理部と、
    前記検索対象データの送信元へ前記検索対象データの存否を示す検索結果を送信する処理部と、
    を備えることを特徴とするノード。
JP2011131220A 2011-06-13 2011-06-13 検索プログラム、検索方法、検索装置、およびノード Expired - Fee Related JP5664467B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011131220A JP5664467B2 (ja) 2011-06-13 2011-06-13 検索プログラム、検索方法、検索装置、およびノード
US13/458,666 US8819036B2 (en) 2011-06-13 2012-04-27 Computer product, search method, search apparatus, and node

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
JP2013003653A JP2013003653A (ja) 2013-01-07
JP5664467B2 true JP5664467B2 (ja) 2015-02-04

Family

ID=47294041

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011131220A Expired - Fee Related JP5664467B2 (ja) 2011-06-13 2011-06-13 検索プログラム、検索方法、検索装置、およびノード

Country Status (2)

Country Link
US (1) US8819036B2 (ja)
JP (1) JP5664467B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6089890B2 (ja) 2013-03-29 2017-03-08 富士通株式会社 ストレージ制御装置、ストレージ制御装置の制御方法およびストレージ制御装置の制御プログラム
CN103226608B (zh) * 2013-04-28 2016-04-27 北京航空航天大学 一种基于目录级可伸缩的Bloom Filter位图表的并行文件搜索方法
JP6916442B2 (ja) 2017-11-21 2021-08-11 富士通株式会社 データ処理装置およびデータ処理プログラム
CN117420953B (zh) * 2023-10-07 2024-03-26 国家电网有限公司华东分部 数据存储方法及装置、计算机设备和可读存储介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10009A (en) * 1853-09-13 Cutting boots and shoes
JPH0693230B2 (ja) 1987-06-19 1994-11-16 富士通株式会社 バッファストレージウェイ制御回路
JP3457405B2 (ja) 1994-03-09 2003-10-20 日本電信電話株式会社 情報検索装置、情報検索方法及び知識獲得システム
JP3318834B2 (ja) * 1999-07-30 2002-08-26 三菱電機株式会社 データファイルシステム及びデータ検索方法
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
JP2002171525A (ja) * 2000-11-29 2002-06-14 Canon Inc ビットプレーン演算命令を備えたsimd型演算装置
US7120666B2 (en) * 2002-10-30 2006-10-10 Riverbed Technology, Inc. Transaction accelerator for client-server communication systems
US7603464B2 (en) * 2003-06-04 2009-10-13 Sony Computer Entertainment Inc. Method and system for identifying available resources in a peer-to-peer network
US7409406B2 (en) * 2003-09-08 2008-08-05 International Business Machines Corporation Uniform search system and method for selectively sharing distributed access-controlled documents
US20050108368A1 (en) * 2003-10-30 2005-05-19 Aditya Mohan Method and apparatus for representing data available in a peer-to-peer network using bloom-filters
JP2005234759A (ja) 2004-02-18 2005-09-02 Kuniyoshi Tatsu 情報資源共有管理システム及びアプリケーションサーバ
JP2007088962A (ja) * 2005-09-26 2007-04-05 Nippon Telegr & Teleph Corp <Ntt> 順序データ圧縮方法、順序データ解凍方法、順序データ処理プログラム、順序データ圧縮装置、順序データ解凍装置、および、順序データ処理システム
US7925624B2 (en) * 2006-03-31 2011-04-12 Amazon Technologies, Inc. System and method for providing high availability data
US7725437B2 (en) * 2007-07-31 2010-05-25 Hewlett-Packard Development Company, L.P. Providing an index for a data store
US8732746B2 (en) * 2009-06-01 2014-05-20 Fourthwall Media, Inc. System for and method of targeting broadcast messages
US9179305B2 (en) * 2009-06-11 2015-11-03 Qualcomm Incorporated Bloom filter based device discovery
US20120221571A1 (en) * 2011-02-28 2012-08-30 Hilarie Orman Efficient presentation of comupter object names based on attribute clustering

Also Published As

Publication number Publication date
JP2013003653A (ja) 2013-01-07
US8819036B2 (en) 2014-08-26
US20120317130A1 (en) 2012-12-13

Similar Documents

Publication Publication Date Title
JP5716554B2 (ja) 検索プログラム、検索方法、検索装置、およびノード
US10387801B2 (en) Method of and system for generating a prediction model and determining an accuracy of a prediction model
CN102622450B (zh) 用户的浏览器历史的相关性排序
US20170161375A1 (en) Clustering documents based on textual content
US8924313B2 (en) Multi-label classification using a learned combination of base classifiers
CN102402605B (zh) 用于搜索引擎索引的混合分布模型
CN101416179B (zh) 用来向每个用户提供调整推荐字的系统和方法
JP5138046B2 (ja) 検索システム、検索方法およびプログラム
US20110264651A1 (en) Large scale entity-specific resource classification
JP5115741B2 (ja) 検索方法、類似度計算方法、類似度計算及び同一文書照合システムと、そのプログラム
US20080228718A1 (en) System and method for multi-dimensional aggregation over large text corpora
CN102339313A (zh) 用户查询结果的视觉提示细化
JP5664467B2 (ja) 検索プログラム、検索方法、検索装置、およびノード
CN115391495B (zh) 在中文语境中检索关键词的方法、装置及设备
JP2019057082A (ja) データ検索システム、データ検索方法、及びプログラム
JP2017097823A (ja) 分散ネットワークで使用するための検索サーバ、端末装置、及び検索方法
JP2013149061A (ja) 文書類似性評価システム、文書類似性評価方法およびコンピュータ・プログラム
JP5083367B2 (ja) 検索装置、検索方法、ならびに、コンピュータプログラム
CN103020095B (zh) 信息处理设备和信息处理方法
RU2433467C1 (ru) Способ формирования структуры агрегированных данных и способ поиска данных посредством структуры агрегированных данных в системе управления базами данных
Gentile et al. Early steps towards web scale information extraction with lodie
JP2007249421A (ja) 情報分類装置
Xu et al. Top-k string auto-completion with synonyms
JP5374881B2 (ja) 情報検索システム、情報検索方法およびプログラム
JP6780181B2 (ja) データベースおよび情報処理システム

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: 20140722

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140919

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: 20141111

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141124

R150 Certificate of patent or registration of utility model

Ref document number: 5664467

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees