JP5526985B2 - 検索プログラム、検索装置、および検索方法 - Google Patents

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

Info

Publication number
JP5526985B2
JP5526985B2 JP2010104013A JP2010104013A JP5526985B2 JP 5526985 B2 JP5526985 B2 JP 5526985B2 JP 2010104013 A JP2010104013 A JP 2010104013A JP 2010104013 A JP2010104013 A JP 2010104013A JP 5526985 B2 JP5526985 B2 JP 5526985B2
Authority
JP
Japan
Prior art keywords
bloom filter
transposed
search
data
bit
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
JP2010104013A
Other languages
English (en)
Other versions
JP2011233014A (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 JP2010104013A priority Critical patent/JP5526985B2/ja
Priority to US13/064,674 priority patent/US8560558B2/en
Publication of JP2011233014A publication Critical patent/JP2011233014A/ja
Application granted granted Critical
Publication of JP5526985B2 publication Critical patent/JP5526985B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、ブルームフィルタを用いてデータを検索する検索プログラム、検索装置、および検索方法に関する。
従来、大規模なデータを木構造で管理する場合、B木(Btree)と呼ばれるデータ構造での管理が比較的多く行われていた。B木は、単純な2分木に比べて、一つのブロックに複数のデータエントリを格納するので、データエントリの追加があっても木構造の形の変化が波及する範囲を狭くできるという利点がある。このため、B木はハードディスクなどのディスク向けのデータ管理方法として利用されることが多い。
しかしながら、ディスク上において木構造で管理されたデータを検索する場合、複数のデータブロックを実際に読み込む必要がある。また、一般に、ディスクに対するI/O(input/output)は、メモリアクセスに比べると遅いことから、ディスク上でのデータ検索には手間と時間を要するおそれがある。
このため、最近では、ディスクI/Oによる検索の遅延を避けるためには、メモリ中に木構造をもつなどの対応も考えられている。しかるに、B木では、データエントリ数が多くなると、それに応じて必要なメモリ量が増えてしまうおそれがある。このため、木構造のうち最も良く読みこまれる部分のみをメモリ中に格納する方法(キャッシュ)を利用する方法も考えられている。
これに対し、最近では、ブルームフィルタ(Bloom Filter)と呼ばれるデータ構造も知られてきている。ブルームフィルタは、あるエントリが既存の集合に属するかどうかを効率的に調べる方法である。また、電子交換機のダイヤルパルス処理で、ダイヤルパルスにパルス速度ビットと偶数/奇数ビットの2つを設けておき、そのビットを取り込む群処理も開示されている。
特開2007−52698号公報 特開平4−18895号公報
上述したように、B木は多量のデータを扱うことができるため、キャッシュを適切に実装すれば、ディスクI/Oを減らすことは可能である。しかしながら、その回数はある一定以上減らすことはできない。また、データエントリの追加により木構造が変化すると、木構造管理のためのI/Oが必要になることもある。また、ブルームフィルタは、データエントリの存在だけがわかるものであるため、そのままではデータ管理に使うことはできない。
本発明は、上述した従来技術による問題点を解消するため、ブルームフィルタを用いたときのデータ検索の高速化を図ることができる検索プログラム、検索装置、および検索方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがm個配列されたブルームフィルタが前記所定数のデータブロック単位でn個配列されたブルームフィルタ列と、にアクセス可能な場合に、前記ブルームフィルタ列の転置要求を受け付け、転置要求が受け付けられた場合、前記ブルームフィルタ列を、前記各ブルームフィルタ内のビット列を同一位置のビットどうしでまとめたnビットの転置ブルームフィルタがm個配列された転置ブルームフィルタ列に転置し、転置された転置ブルームフィルタ列を用いて、前記データブロック集合内でのデータの有無を判定することを要件とする。
本発明にかかる検索プログラム、検索装置、および検索方法によれば、ブルームフィルタを用いたときのデータ検索の高速化を図ることができることという効果を奏する。
実施の形態にかかる管理装置のハードウェア構成例を示すブロック図である。 本実施の形態にかかる管理装置の構成例を示すブロック図である。 ハッシュテーブル群の一例を示す説明図である。 階層型ブルームフィルタの一例を示す説明図である。 登録処理部による階層型ブルームフィルタの学習処理例を示す説明図である。 検索処理部による階層型ブルームフィルタの検索処理例を示す説明図である。 階層型ブルームフィルタ内の第p段のブルームフィルタ列の転置例を示す説明図である。 検索処理部による階層型転置ブルームフィルタの検索処理例を示す説明図である。 検索処理部の機能的構成例を示すブロック図である。 登録処理部による階層型ブルームフィルタの学習処理手順を示すフローチャートである。 検索処理部による検索処理手順を示すフローチャート(その1)である。 検索処理部による検索処理手順を示すフローチャート(その2)である。 登録処理部による階層型転置ブルームフィルタtBFの学習処理例を示す説明図である。 登録処理部による階層型ブルームフィルタBFの学習処理手順を示すフローチャートである。
以下に添付図面を参照して、本発明にかかる検索プログラム、検索装置、および検索方法の実施の形態を詳細に説明する。まず、本実施の形態にかかる管理装置の構成例について説明する。
<管理装置のハードウェア構成例>
図1は、実施の形態にかかる管理装置のハードウェア構成例を示すブロック図である。図1において、検索装置は、CPU(Central Processing Unit)101と、ROM(Read Only Memory)102と、RAM(Random Access Memory)103と、磁気ディスクドライブ104と、磁気ディスク105と、光ディスクドライブ106と、光ディスク107と、ディスプレイ108と、I/F(Interface)109と、キーボード110と、マウス111と、スキャナ112と、プリンタ113と、を備えている。また、各構成部はバス100によってそれぞれ接続されている。
ここで、CPU101は、管理装置の全体の制御を司る。ROM102は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPU101のワークエリアとして使用される。磁気ディスクドライブ104は、CPU101の制御にしたがって磁気ディスク105に対するデータのリード/ライトを制御する。磁気ディスク105は、磁気ディスクドライブ104の制御で書き込まれたデータを記憶する。
光ディスクドライブ106は、CPU101の制御にしたがって光ディスク107に対するデータのリード/ライトを制御する。光ディスク107は、光ディスクドライブ106の制御で書き込まれたデータを記憶したり、光ディスク107に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ108は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ108は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)109は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク114に接続され、このネットワーク114を介して他の装置に接続される。そして、I/F109は、ネットワーク114と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F109には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード110は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス111は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ112は、画像を光学的に読み取り、管理装置内に画像データを取り込む。なお、スキャナ112は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ113は、画像データや文書データを印刷する。プリンタ113には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
<管理装置の機能的構成例>
図2は、本実施の形態にかかる管理装置の構成例を示すブロック図である。管理装置200は、データブロック集合dbと、ハッシュテーブル群HTsと、階層型ブルームフィルタBFと、階層型転置ブルームフィルタtBFと、登録処理部201と、検索処理部202と、を備えている。
データブロック集合dbは、複数のデータブロックを有しており、各データブロックは、登録されたデータを保持している。なお、個々のデータブロックをdb#と表記する。#は数字であり、ブロック番号を示す。ブロック番号#は、そのデータブロックdb#のビット位置に対応する。
ハッシュテーブル群HTsは、データブロック集合db内の各データブロックdb#に対応するハッシュテーブルの集合である。なお、個々のハッシュテーブルをHT#と表記する。#は数字であり、データブロックdb#のブロック番号と一致する。ハッシュテーブルHT#は、データをある特定のハッシュ関数に与えたときのハッシュ値と、ハッシュ値の生成元となるデータ(データそのものでもデータへのポインタでもよい)を関連付けたテーブルである。
図3は、ハッシュテーブル群HTsの一例を示す説明図である。図3では、ハッシュ関数としてSHA−1を用いている。なお、どのハッシュ関数を用いるかはあらかじめ設定しておけばよい。
図2に戻って、階層型ブルームフィルタBFは、ブルームフィルタを階層構造にしたインデックス情報である。階層型ブルームフィルタBFについては後述する。ブルームフィルタとは、所定数のデータブロック内での擬陽性(疑陽性、偽陽性ともいう)/陰性を示すビットが複数配列されたインデックス情報である。ブルームフィルタのビットがONのときは擬陽性を示し、OFFのときは陰性を示す。なお、ビットの値が1をONとし、0をOFFとしてもよく、逆に、ビットの値が0をONとし、1をOFFとしてもよい。本実施の形態では、ビットの値が1をONとし、0をOFFとする。
階層型転置ブルームフィルタtBFは、階層型ブルームフィルタBFを転置したインデックス情報である。階層型転置ブルームフィルタtBFは、検索処理部202により生成される。階層型転置ブルーフィルタtBFの詳細は後述する。
データブロック集合db、ハッシュテーブル群HTs、および階層型ブルームフィルタBFは、図1に示したROM102、RAM103、磁気ディスク105などの記憶装置に記憶される。また、図2では、データブロック集合db、ハッシュテーブル群HTs、および階層型ブルームフィルタBFは、管理装置200内に記憶させているが、管理装置200外の外部装置に記憶させてもよい。この場合、管理装置200は、ネットワークを介して外部装置から読み出したり、外部装置に書き込んだりする。
登録処理部201は、データブロック集合dbに登録したいデータがエントリされると、データブロック集合dbの空き領域に登録する。データの登録の際には、ハッシュ関数によりハッシュ値を求め、登録先のデータブロックdb#に対応するハッシュテーブルHT#に、データ(またはそのポインタ)とハッシュ値とを追加する。また、登録先のデータブロックdb#にデータが新規に登録されたことを階層型ブルームフィルタBFに学習させるため、登録処理部201は、階層型ブルームフィルタBFを更新する。
検索処理部202は、検索対象データが入力されると、階層型ブルームフィルタBFを参照して、検索対象データが存在するであろうデータブロックdb#を特定する。検索対象データが存在するであろうデータブロックdb#が特定されなかった場合は、いずれのデータブロックdb#にも検索対象データは存在しない(陰性)。逆に、検索対象データが存在するであろうデータブロックdb#が特定された場合でも、特定されたデータブロックdb#には、必ずしも検索対象データが存在するとは限らない(擬陽性)。
なお、擬陽性が陽性になるか陰性になるかは、検索処理部202により最終的に特定されたデータブロックdb#に対応するハッシュテーブルHT#での検索結果に依存する。たとえば、検索処理部202により最終的に特定されたデータブロックdb#に対応するハッシュテーブルHT#において、検索対象データのハッシュ値がヒットすれば陽性、ヒットしなければ陰性となる。
なお、上述した登録処理部201および検索処理部202は、具体的には、たとえば、図1に示したROM102、RAM103、磁気ディスク105、光ディスク107などの記憶装置に記憶されたプログラムをCPU101に実行させることにより、その機能を実現する。
<階層型ブルームフィルタBF>
図4は、階層型ブルームフィルタBFの一例を示す説明図である。階層型ブルームフィルタ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)]となる。図4では、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とする。
<階層型ブルームフィルタBFの学習処理例>
図5は、登録処理部201による階層型ブルームフィルタBFの学習処理例を示す説明図である。図5では、説明上、全ビット幅s=4096ビット、段数h=3段、第h段での分割数d=2とする。
したがって、最下段である第1段のブルームフィルタ列BF(1)は、8(=d[h-(p-1)]=23)分割されてブルームフィルタbf(1−1)〜bf(1−8)により構成される。また、第2段のブルームフィルタ列BF(2)は、4(=d[h-(p-1)]=22)分割されてブルームフィルタbf(2−1)〜bf(2−4)により構成される。また、最上段である第3段のブルームフィルタ列BF(3)は、2(=d[h-(p-1)]=21)分割されてブルームフィルタbf(3−1)〜bf(3−2)により構成される。
また、登録される対象データDが与えられるハッシュ関数の種類数kをk=3とする。ここでは、ハッシュ関数H1(),H2(),H3()を用いることとする。また、ハッシュテーブルの登録対象となるハッシュ関数をH1()とする。
まず、データブロック集合dbのうちデータブロックdb3に対象データDが登録されたものとする。対象データDを各ハッシュ関数H1(),H2(),H3()に与えたときのハッシュ値は、例として以下の値とする。
H1(D)=1234567
H2(D)=3984012
H3(D)=9803323
また、階層型ブルームフィルタBFの学習処理では、更新対象となるブルームフィルタ内の特定のビットをONにするが、その特定のビットがすでにONになっている場合はそのままとする。
ここで、登録処理部201は、登録先のデータブロックdb3のブロック番号3のハッシュテーブルHT3に対するハッシュテーブルエントリE3を作成する。そして、登録処理部201は、作成されたハッシュテーブルエントリE3を、ハッシュテーブルHT3に追加登録する。
つぎに、登録処理部201は、更新対象となるブルームフィルタを、第1段のブルームフィルタ列BF(1)の中から特定する。最下段では、登録先のデータブロックdb3のブロック番号3と同一配列番号であるブルームフィルタbf(1−3)が対応する。したがって、ブルームフィルタbf(1−3)を更新対象とする。ブルームフィルタbf(1−3)は512ビットのビット列である。
また、登録処理部201は、各ハッシュ値を、第1段のブルームフィルタbf(1)のビット幅である512で割り算し、余り値を算出する。ハッシュ値H1(D)の余り値は「135」、ハッシュ値H2(D)の余り値は「140」、ハッシュ値H3(D)の余り値は「59」になったものとする。
つぎに、登録処理部201は、更新対象のブルームフィルタにおいて余り値に対応する位置のビットをONにする。なお、余り値が0の場合は、更新対象のブルームフィルタの末尾ビットをONにする。図5の例では、ブルームフィルタbf(1−3)は、512ビット有するため、余り値「135」については、先頭から135番目のビットをONにする。同様に、余り値「140」については、先頭から140番目のビットをONにする。余り値「59」については、先頭から59番目のビットをONにする。これにより、第1段での学習処理を終了する。
つぎに、第2段の学習処理に移る。登録処理部201は、更新対象となるブルームフィルタを、第2段のブルームフィルタ列BF(2)の中から特定する。具体的には、第1段での更新対象のブルームフィルタbf(1−3)のビット位置を包含するブルームフィルタを、第2段のブルームフィルタ列BF(2)の中から特定する。本例では、ブルームフィルタbf(2−2)となる。より具体的には、前段の第1段での更新対象のブルームフィルタbf(1−3)の配列番号3を、分割数d(=2)で割り算し、端数を切り上げることで、更新対象の配列番号は2となる。したがって、ブルームフィルタbf(2−2)が特定される。
そして、登録処理部201は、各ハッシュ値を、第2段のブルームフィルタbf(2)のビット幅である1024で割り算し、余り値を算出する。ハッシュ値H1(D)の余り値は「647」、ハッシュ値H2(D)の余り値は「652」、ハッシュ値H3(D)の余り値は「571」になったものとする。
つぎに、登録処理部201は、更新対象のブルームフィルタにおいて余り値に対応する位置のビットをONにする。なお、余り値が0の場合は、更新対象のブルームフィルタの末尾ビットをONにする。図5の例では、ブルームフィルタbf(2−2)は、1024ビット有するため、余り値「647」については、先頭から647番目のビットをONにする。同様に、余り値「652」については、先頭から652番目のビットをONにする。余り値「571」については、先頭から571番目のビットをONにする。これにより、第2段での学習処理を終了する。
つぎに、最上段である第3段の学習処理に移る。登録処理部201は、更新対象となるブルームフィルタを、第3段のブルームフィルタ列BF(3)の中から特定する。具体的には、第2段での更新対象のブルームフィルタbf(2−2)のビット位置を包含するブルームフィルタを、第3段のブルームフィルタ列BF(3)の中から特定する。本例では、ブルームフィルタbf(3−1)となる。より具体的には、前段の第2段での更新対象のブルームフィルタbf(2−2)の配列番号2を、分割数d(=2)で割り算することで、更新対象の配列番号は1となる。したがって、ブルームフィルタbf(3−1)が特定される。
そして、登録処理部201は、各ハッシュ値を、第3段のブルームフィルタbf(3)のビット幅である2048で割り算し、余り値を算出する。ハッシュ値H1(D)の余り値は「1671」、ハッシュ値H2(D)の余り値は「652」、ハッシュ値H3(D)の余り値は「1595」になったものとする。
つぎに、登録処理部201は、更新対象のブルームフィルタにおいて余り値に対応する位置のビットをONにする。なお、余り値が0の場合は、更新対象のブルームフィルタの末尾ビットをONにする。図5の例では、ブルームフィルタbf(3−1)は、2048ビット有するため、余り値「1671」については、先頭から1671番目のビットをONにする。同様に、余り値「652」については、先頭から652番目のビットをONにする。余り値「1595」については、先頭から1595番目のビットをONにする。これにより、第3段での学習処理を終了する。
このような手順により、登録処理部201は、階層型ブルームフィルタBFにデータエントリを学習させることとなる。
<階層型ブルームフィルタBFを用いた検索処理例>
図6は検索処理部202による階層型ブルームフィルタBFの検索処理例を示す説明図である。図6では、図5と同一の階層型ブルームフィルタBFを用いて説明する。なお、図6では、図5で登録された対象データDを検索対象データとして検索する例について説明する。
図5に示した学習処理では、最下段の第1段から処理したが、検索処理では最上段(図6の場合は第3段)から処理をおこなう。まず、検索処理部202は、対象データDについての3個のハッシュ値を、第3段の各ブルームフィルタbf(3)のビット幅2048で割り算したときの余り値「1671」、「652」、「1595」を求める。
つぎに、検索処理部202は、フィルタリング対象となるブルームフィルタを第3段のブルームフィルタ列BF(3)から特定する。第3段は最上段であるため、無条件で第3段のすべてのブルームフィルタbf(3−1),bf(3−2)が特定される。
そして、検索処理部202は、フィルタリング対象に特定されたブルームフィルタ群の中から、算出した余り値に対応する位置のビットがすべてONになっているブルームフィルタを特定する。第3段の場合、ブルームフィルタbf(3−1),bf(3−2)はいずれも、算出した余り値に対応する位置のビットがすべてONになっているものとする。これにより、第3段でのフィルタリング処理を終了する。
つぎに、第2段のフィルタリング処理に移る。検索処理部202は、対象データDについての3個のハッシュ値を、第2段の各ブルームフィルタbf(2)のビット幅1024で割り算したときの余り値「647」、「652」、「571」を求める。
つぎに、検索処理部202は、フィルタリング対象となるブルームフィルタを第2段のブルームフィルタ列BF(2)から特定する。最上段を除く残余の段の場合、1つ上の段において、算出した余り値に対応する位置のビットがすべてONになっているブルームフィルタbf(p+1)を探し、そのブルームフィルタbf(p+1)のビット位置に包含されるブルームフィルタbf(p)をフィルタリング対象とする。
第2段の場合、第3段で算出した余り値に対応する位置のビットがすべてONになっているブルームフィルタbf(3−1),bf(3−2)のビット位置に包含されるブルームフィルタbf(2−1)〜bf(2−4)をフィルタリング対象とする。
そして、検索処理部202は、フィルタリング対象に特定されたブルームフィルタ群の中から、算出した余り値に対応する位置のビットがすべてONになっているブルームフィルタを特定する。第2段の場合、ブルームフィルタbf(2−2),bf(2−3)は、算出した余り値に対応する位置のビットがすべてONになっているものとする。一方、ブルームフィルタbf(2−1),bf(2−4)については、算出した余り値に対応する位置のビットのいずれかがOFFであるものとする。
したがって、ブルームフィルタbf(2−1),bf(2−4)のビット位置に包含される下位の段のブルームフィルタbf(1−1),bf(1−2),bf(1−7),bf(1−8)は、フィルタリング対象外となり、対象データDの存在するデータブロックdb#は、ブルームフィルタbf(2−2),bf(2−3)のビット位置に包含されるデータブロックdb#に絞り込まれる。これにより、第2段でのフィルタリング処理を終了する。
つぎに、最下段である第1段のフィルタリング処理に移る。検索処理部202は、対象データDについての3個のハッシュ値を、第1段の各ブルームフィルタbf(1)のビット幅512で割り算したときの余り値「135」、「140」、「59」を求める。
つぎに、検索処理部202は、フィルタリング対象となるブルームフィルタを第1段のブルームフィルタ列BF(1)から特定する。第1段の場合、第2段で算出した余り値に対応する位置のビットがすべてONになっているブルームフィルタbf(2−2),bf(2−3)のビット位置に包含されるブルームフィルタbf(1−3)〜bf(1−6)をフィルタリング対象とする。
そして、検索処理部202は、フィルタリング対象に特定されたブルームフィルタ群の中から、算出した余り値に対応する位置のビットがすべてONになっているブルームフィルタを特定する。第1段の場合、ブルームフィルタbf(1−3),bf(1−6)は、算出した余り値に対応する位置のビットがすべてONになっているものとする。一方、ブルームフィルタbf(1−4),bf(1−5)については、算出した余り値に対応する位置のビットのいずれかがOFFであるものとする。
最下段では、これ以上、下位の段が存在しないため、ブルームフィルタbf(1−3),bf(1−6)に擬陽性がある。検索処理部202は、特定されたブルームフィルタbf(1−3)の配列番号「3」に対応するハッシュテーブルHT3に、ハッシュ値H1(D)が登録されているかを判定する。ハッシュテーブルHT3では、エントリE3が登録されているため、ハッシュテーブルHT3に対応するデータブロックdb3の中に対象データDが登録されていることが判明する。
一方、検索処理部202は、特定されたブルームフィルタbf(1−6)の配列番号「6」に対応するハッシュテーブルHT6に、ハッシュ値H1(D)が登録されているかも判定する。ハッシュテーブルHT6では、ハッシュ値H1(D)=1234567が登録されていないため、ハッシュテーブルHT6に対応するデータブロックdb6の中に対象データDが登録されていないことが判明する。これにより、検索処理を終了する。
このような手順により、検索処理部202は、階層型ブルームフィルタBFを利用して対象データDが存在するデータブロックを特定することができる。
次に、ブルームフィルタの擬陽性による影響について説明する。
ブルームフィルタの擬陽性の発生確率FPRは、ビット長がmのブルームフィルタがh段ある場合、データ登録数N(N<m)、ハッシュ関数の個数をk個とすると、ブルームフィルタの性質より、次式(2)のように表すことができる。
FPR={1−(1−1/m)kNk≒{1−e(-kN/m))}k …(1)
この場合、k,m,Nを変更することにより、擬陽性の発生確率FPRを非常に小さくすることができる。すなわち、本実施形態では、k,m,Nの設定次第で、擬陽性の発生確率FPRを1よりも非常に小さい値(ほぼ0)に設定することができるようになる。したがって、図5の例では、ブルームフィルタbf(1−6)が選ばれることはほとんどありえない。
また、本実施形態では、データブロック数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の増加とともに大きくなるというトレードオフの関係にある。したがって、この関係を考慮することで、適切なメモリの運用が可能となる。
<階層型転置ブルームフィルタ>
つぎに、階層型転置ブルームフィルタについて説明する。上述した説明では、階層型ブルームフィルタBFの登録処理や検索処理について説明したが、検索速度をより高速化させるため、階層型ブルームフィルタBFを転置させる。
図7は、階層型ブルームフィルタBF内の第p段のブルームフィルタ列bf(p)の転置例を示す説明図である。(A)は、ブルームフィルタ列BF(p)を示している。ここでは、ブルームフィルタ列BF(p)は、例として、4分割されたブルームフィルタbf(p−1)〜bf(p−4)を示している。すなわち、ブルームフィルタ列BF(p)は、10ビット×4フィルタ数のビット列である。転置する場合は、4ビット×10フィルタ数のビット列となる。
(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−10)を得る。転置ブルームフィルタtbf(p−1)〜tbf(p−10)がビット位置順に配列されたインデックス情報を、転置ブルームフィルタ列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演算により判定することが可能となる。したがって、メモリアクセス頻度が低減され、検索速度が高速化することとなる。
<階層型転置ブルームフィルタを用いた検索処理例>
図8は検索処理部202による階層型転置ブルームフィルタの検索処理例を示す説明図である。図8では、説明上、全ビット幅s=64ビット、段数h=3段、第h段での分割数d=2とする。
最下段である第1段のブルームフィルタ列BF(1)を構成するブルームフィルタのビット幅は、8(=s/dh=64/23)ビットであるため、最下段である第1段の転置ブルームフィルタ列tBF(1)は、8(=s/dh=64/23)個の転置ブルームフィルタtbf(1−1)〜tbf(1−8)により構成される。
また、第2段の転置ブルームフィルタ列tBF(2)を構成するブルームフィルタのビット幅は、16(=s/dh=64/22)ビットであるため、第2段の転置ブルームフィルタ列tBF(2)は、16(=s/dh=64/22)個の転置ブルームフィルタtbf(2−1)〜tbf(2−16)により構成される。
また、最上段である第3段のブルームフィルタ列BF(3)を構成するブルームフィルタのビット幅は、32(=s/dh=64/21)ビットであるため、最上段である第3段の転置ブルームフィルタ列tBF(3)は、32(=s/dh=64/21)個の転置ブルームフィルタtbf(3−1)〜tbf(3−32)により構成される。
なお、図8では、説明上、比較のため、転置ブルームフィルタ列tBF(1)〜tBF(3)とともに、転置前のブルームフィルタ列BF(1)〜BF(3)を併記しておく。
まず、検索処理部202は、検索対象データDxについてのハッシュ関数H1()〜H3()での3個のハッシュ値を、第3段の転置ブルームフィルタ数32で割り算したときの余り値「2」、「19」、「27」を求める。
つぎに、検索処理部202は、フィルタリング対象となる転置ブルームフィルタを第3段の転置ブルームフィルタ列tBF(3)から特定する。具体的には、余り値と同一ビット位置(余り値が0の場合は末尾位置)となる転置ブルームフィルタtbf(3−2),tbf(3−19),tbf(3−27)を特定する。そして、特定された転置ブルームフィルタtbf(3−2),tbf(3−19),tbf(3−27)の各ビット列{10},{11},{10}のAND演算をおこなう。そのAND結果は、{10}となる。
検索処理部202は、AND結果に「1」が含まれていない場合は、データブロック集合dbには検索対象データDxが存在しないと判定する。一方、AND結果に「1」が含まれている場合、検索対象データDxを登録したかもしれないため、1つ下の段に移る。
第2段においても、まず、検索処理部202は、検索対象データDxについての3個のハッシュ値を、第2段の転置ブルームフィルタ数16で割り算したときの余り値「8」、「11」、「13」を求める。
つぎに、検索処理部202は、フィルタリング対象となる転置ブルームフィルタを第2段の転置ブルームフィルタ列tBF(2)から特定する。具体的には、余り値と同一ビット位置(余り値が0の場合は末尾位置)となる転置ブルームフィルタtbf(2−8),tbf(2−11),tbf(2−13)を特定する。そして、特定された転置ブルームフィルタtbf(2−8),tbf(2−11),tbf(2−13)の各ビット列{0110},{0100},{0110}のAND演算をおこなう。そのAND結果は、{0100}となる。
検索処理部202は、AND結果に「1」が含まれていない場合は、データブロック集合dbには検索対象データDxが存在しないと判定する。一方、AND結果に「1」が含まれている場合、検索対象データDxを登録したかもしれないため、1つ下の段に移る。
最下段である第1段においても、まず、検索処理部202は、検索対象データDxについての3個のハッシュ値を、第1段の転置ブルームフィルタ数8で割り算したときの余り値「2」、「5」、「7」を求める。
つぎに、検索処理部202は、フィルタリング対象となる転置ブルームフィルタを第1段の転置ブルームフィルタ列tBF(1)から特定する。具体的には、余り値と同一ビット位置(余り値が0の場合は末尾位置)となる転置ブルームフィルタtbf(1−2),tbf(1−5),tbf(1−7)を特定する。そして、特定された転置ブルームフィルタtbf(1−2),tbf(1−5),tbf(1−7)の各ビット列{00110110},{10011010},{00110111}のAND演算をおこなう。そのAND結果は、{00010010}となる。
これ以上下の段は存在しないため、擬陽性により、AND結果{00010010}が「1」のビット位置4,7に対応するデータブロックdb4,db7に検索対象データDxが存在する可能性がある。
この場合、ハッシュテーブルHT4,HT7に対しハッシュ関数H1()でのハッシュ値をキーにして検索することで、データブロックdb4がヒットし、データブロックdb7はヒットしなかったものとする。これにより、検索対象データDxは、データブロックdb4に登録されていることが判明する。これにより、検索処理を終了する。
このような手順により、検索処理部202は、階層型転置ブルームフィルタを利用することで、階層型ブルームフィルタBFに比べてもより高速に対象データを検索することができる。
<検索処理部202の詳細な機能的構成>
つぎに、検索処理部202の詳細な機能的構成例について説明する。
図9は、検索処理部202の機能的構成例を示すブロック図である。検索処理部202は、受付部901と、転置部902と、変換部903と、第1の特定部904と、第2の特定部905と、判断部906と、判定部907と、抽出部908と、出力部909とを備えている。
受付部901は、ブルームフィルタ列BF(p)の転置要求を受け付ける機能を有する。たとえば、階層型ブルームフィルタBFから階層型転置ブルームフィルタtBFへの転置要求を受け付ける。
ここで、転置要求とは、ブルームフィルタ列BF(p)を転置ブルームフィルタ列tBF(p)に転置させるリクエストである。たとえば、管理装置200が起動して起動が完了した旨の起動完了通知を転置要求とする。これにより、管理装置200が起動することで、階層型ブルームフィルタBFが階層型転置ブルームフィルタtBFに転置される。このように起動時に一括して、階層型転置ブルームフィルタtBFに転置しておけば、シャットダウンするまでは常時転置ブルームフィルタtBFを利用することができる。
また、データブロック集合dbに対する検索要求を転置要求としてもよい。これにより、検索処理部202は、検索要求があるまでは待機しておき、検索要求があると、階層型ブルームフィルタBFのうち検索処理部202で用いられるブルームフィルタ列BF(p)を転置させることとなる。これにより、検索頻度が高くなるにつれ、転置ブルームフィルタ列tBF(p)が増加する。したがって、検索に必要なブルームフィルタ列BF(p)から徐々に転置させるため、シャットダウンまでに利用されなかったブルームフィルタ列の無駄な転置処理を低減することができる。
転置部902は、受付部901によって転置要求が受け付けられた場合、ブルームフィルタ列BF(p)を、転置ブルームフィルタ列tBF(p)に転置する機能を有する。具体的には、転置部902では、ブルームフィルタ列BF(p)を、図7に示したような手法により、転置ブルームフィルタ列tBF(p)に転置する。
たとえば、ブルームフィルタ列BF(p)は、n(=d[h-(p-1)])個のブルームフィルタbf(p−1)〜bf(p−n)が配列されたインデックス情報である。また、各ブルームフィルタbf(p−1)〜bf(p−n)のビット幅は、m(=s/n)ビットである。
ブルームフィルタ列BF(p)を図7にしたがって転置すると、転置ブルームフィルタ列tBF(p)は、m(=s/n)個の転置ブルームフィルタtbf(p−1)〜tbf(p−m)が配列されたインデックス情報となる。各転置ブルームフィルタtbf(p−1)〜tbf(p−m)のビット幅は、n(=d[h-(p-1)])ビットとなる。このように転置により、配列数とビット幅が入れ替わる。
変換部903は、複数種類(種類数k)のハッシュ関数に基づいて、ハッシュ関数ごとに、検索対象データを、転置ブルームフィルタの配列位置をあらわす位置情報に変換する機能を有する。具体的には、たとえば、k個の異なるハッシュ関数H1()〜Hk()に検索対象データを与えることで、k個のハッシュ値が得られる。
図5に示したブルームフィルタ列BF(p)へのエントリでは、ブルームフィルタ列BF(p)を構成するブルームフィルタのビット幅m(=s/n)でハッシュ値を除算し、その余り値に対応するビット位置をONにしていた。
このため、変換部903では、k個のハッシュ値が得られると、転置ブルームフィルタ列tBF(p)を構成する転置ブルームフィルタの配列数m(=s/n)でハッシュ値を除算し、その余り値を算出する。このk個の余り値が、転置ブルームフィルタの配列位置をあらわす位置情報である。なお、算出された余り値が0の場合の位置情報は、mとする。
第1の特定部904は、転置ブルームフィルタ列tBF(p)の中から、変換部903によって変換された位置情報に対応する転置ブルームフィルタを位置情報ごとに特定する機能を有する。具体的には、変換部903から得られた位置情報と配列番号が一致する転置ブルームフィルタを転置ブルームフィルタ列tBF(p)の中から特定する。
図8に示した例では、第3段の転置ブルームフィルタ列tBF(3)では、余り値(位置情報)が「2」、「19」、「27」であるため、配列番号が「2」、「19」、「27」である転置ブルームフィルタtbf(3−2),tbf(3−19),tbf(3−27)を特定する。
第2の特定部905は、第1の特定部904によって特定された複数の転置ブルームフィルタtbf(p)に共通する位置情報に対応するブルームフィルタbf(p)を、ブルームフィルタ列BF(p)の中から特定する機能を有する。具体的には、第1の特定部904によって特定された複数の転置ブルームフィルタtbf(p)のビット列をAND演算する。このAND演算によって「1」が出現したビットの位置が、転置前のブルームフィルタ列BF(p)でエントリ時にONになったであろうビットを有するブルームフィルタである。
図8に示した例では、第3段において転置ブルームフィルタtbf(3−2),tbf(3−19),tbf(3−27)をAND演算すると、AND結果では先頭のビット位置が「1」となる。したがって、転置前のブルームフィルタ列BF(3)のうちブルームフィルタbf(3−1)のいずれかのビットが、検索対象データのエントリ時にONになった可能性があることがわかる。
このように、第1の特定部904および第2の特定部905により、転置ブルームフィルタ列tBF(p)へのアクセス回数が転置前のブルームフィルタ列BF(p)よりも減少する。したがって、転置ブルームフィルタtbf(p)の段数pが増加すればするほど、転置前のブルームフィルタ列BF(p)よりもアクセス回数が格段に抑えられ、検索速度の高速化を実現することができる。
判断部906は、第2の特定部905によって特定されたブルームフィルタを配列要素とするブルームフィルタ列が存在するか否かを判断する機能を有する。具体的には、転置ブルームフィルタ列tBF(p)の1つ下の段の転置ブルームフィルタ列が存在するか否かを判断するだけでよい。より具体的には、p=1であるか否かをみるだけでよい。
1つ下の段の転置ブルームフィルタ列が存在する場合(p≠1)は、第1の特定部904により、1つ下の段の転置ブルームフィルタ列をあらたに転置ブルームフィルタ列tBF(p)とする。一方、1つ下の段の転置ブルームフィルタ列が存在しない場合(p=1)、転置ブルームフィルタ列tBF(p)は、最下段である第1段の転置ブルームフィルタ列tBF(1)となる。
判定部907は、判断部906によって存在しないと判断された場合、データブロック集合dbのうち、第2の特定部905によって特定されたブルームフィルタbf(p)に対応するデータブロックdb#内での検索対象データの有無を判定する機能を有する。p=1の場合、第2の特定部905によって特定されたブルームフィルタbf(1)はデータブロックと一対一対応するため、第2の特定部905でのAND結果で「1」になったビットの位置をブロック番号#とするデータブロックdb#を判定対象とする。判定部907では、判定対象のデータブロックdb#は擬陽性であるため、陽性であるか陰性であるかを判定することとなる。
そして、判定対象のデータブロックdb#のハッシュテーブルHT#を参照して、検索対象データの擬陽性/陰性を判定する。この場合、階層型ブルームフィルタBFを用いた検索処理と同様、特定のハッシュ関数(たとえば、H1())による検索対象データのハッシュ値をキーにして、ハッシュテーブルHT#からデータ(またはそのポインタ)の有無を判定する。存在しない場合は、擬陽性によりヒットミスしたこととなる。
抽出部908は、判定部907によって陽性であると判定された場合、判定対象のデータブロックdb#から検索対象データを抽出する機能を有する。具体的には、たとえば、判定対象のデータブロックに対応するハッシュテーブルHT#によりデータの格納位置が判明するため、抽出部908は、その格納位置から検索対象データや検索対象データに関連するデータを抽出する。
たとえば、検索対象データそのものを判定対象のデータブロックdb#から抽出する。抽出できた場合は、検索対象データが登録されていることが判明する。また、検索対象データがファイル番号である場合は、ファイル番号に関連するファイルデータを抽出する。また、検索対象データが辞書や用語の見出し語である場合は、見出し語の用語解説データを抽出する。
出力部909は、判定部907による判定結果や抽出部908によって抽出されたデータを出力する。たとえば、検索対象データの陽性または陰性といった判定結果や、陽性である場合の抽出データを出力する。出力形式としては、ディスプレイ108への表示、音声出力、印刷出力、他の装置への送信などがある。
<登録処理部201による階層型ブルームフィルタBFの学習処理手順>
図10は、登録処理部201による階層型ブルームフィルタBFの学習処理手順を示すフローチャートである。まず、登録処理部201は、登録したいデータ(対象データD)があるか否かを判断する(ステップS1001)。対象データDがある場合(ステップS1001:Yes)、登録処理部201は、段数pをp=1に設定し(ステップS1002)、p>h(hは階層型ブルームフィルタBFの最上段)であるか否かを判断する(ステップS1003)。p>hでない場合(ステップS1003:No)、登録処理部201は、k種類のハッシュ関数を用いて、対象データのk個のハッシュ値を算出する(ステップS1004)。そして、k個のハッシュ値をブルームフィルタ列BF(p)のビット幅で除算して、k個の余り値を算出する(ステップS1005)。
つぎに、登録処理部201は、p段目のブルームフィルタ列BF(p)の中から登録先のブルームフィルタbf(p)rを特定する(ステップS1006)。p=1の場合は、保存先のデータブロックdb#のブロック番号#に対応するブルームフィルタbf(1−#)を登録先のブルームフィルタbf(p)rとする。
具体的には、図5に示したように、対象データDをデータブロックdb3に登録する場合は、データブロックdb3のブロック番号3と同一配列番号である第1段のブルームフィルタbf(1−3)を登録先のブルームフィルタbf(1)rとする。
p≠1の場合は、p段目のブルームフィルタ列BF(p)の中から、(p−1)段目の登録先のブルームフィルタbf(p−1)rのビット位置に対応するブルームフィルタbf(p)をあらたな登録先のブルームフィルタbf(p)rとする。
具体的には、図5に示したように、P=2とすると、2段目のブルームフィルタ列BF(2)の中から、1段目の登録先のブルームフィルタbf(1)rであるブルームフィルタbf(1−3)のビット位置を包含するブルームフィルタbf(2−2)をあらたな登録先のブルームフィルタbf(2)rとする。
そして、登録先のブルームフィルタbf(p)rに、ステップS1005で算出されたk個の余り値をエントリする(ステップS1007)。すなわち、余り値と同一ビット位置のビットをONにする。余り値が0の場合は、末尾ビットをONにする。そして、段数pをインクリメントして(ステップS1008)、ステップS1003に戻る。
ステップS1003において、p>hである場合(ステップS1003:Yes)、対象データのハッシュテーブルエントリを追加する(ステップS1009)。具体的には、たとえば、図4に示したように、ハッシュテーブルエントリE3をハッシュテーブルHT3に追加登録する。
そして、ステップS1001に戻る。ステップS1001において、対象データDがない場合(ステップS1001:No)、登録処理部201による階層型ブルームフィルタBFの学習処理を終了する。このような処理手順により、階層型ブルームフィルタBFが構築されることとなる。
<検索処理部202による検索処理手順>
図11および図12は、検索処理部202による検索処理手順を示すフローチャートである。なお、検索処理部202により利用されるブルームフィルタは、すでに一括転置済みの階層型転置ブルームフィルタtBFでもよく、階層型ブルームフィルタBFでもよい。階層型ブルームフィルタBFを用いる場合は、未転置のブルームフィルタが特定される都度転置処理をおこなう。
すなわち、検索しながら階層型転置ブルームフィルタtBFを構築していく。図11および図12では、検索しながら階層型転置ブルームフィルタtBFを構築していく場合の修理手順について説明する。なお、一括転置済みの場合は、転置済みか否かの判断(ステップS1104)と転置処理(ステップS1105)を省略するだけでよい。
まず、図11において、検索処理部202は、受付部901により、検索対象データDxを待ち受け(ステップS1101:No)、検索対象データDxが受け付けられた場合(ステップS1101:Yes)、検索処理部202は、変換部903により、検索対象データDxをk種類のハッシュ関数に与えてk個のハッシュ値を算出する(ステップS1102)。
そして、検索処理部202は、p=h、すなわち、段数pを最大段数hに設定し(ステップS1103)、p段目のブルームフィルタ列BF(p)が転置済みであるか否かを判断する(ステップS1104)。転置済みである場合(ステップS1104:Yes)、ステップS1106に移行する。一方、未転置である場合(ステップS1104:No)、検索処理部202は、転置部902により、p段目のブルームフィルタ列BF(p)を転置して(ステップS1105)、ステップS1106に移行する。
ステップS1106では、検索処理部202は、変換部903により、k個のハッシュ値を転置ブルームフィルタの配列数で除算して、k個の余り値を算出する(ステップS1106)。そして、検索処理部202は、第1の特定部904により、p段目の転置ブルームフィルタ列tBF(p)から、k個の余り値に対応するk個の転置ブルームフィルタtbf(p)rを特定する(ステップS1107)。
そして、検索処理部202は、第2の特定部905により、k個の転置ブルームフィルタtbf(p)rをAND演算し(ステップS1108)、図12のステップS1201に移行する。
図12において、検索処理部202は、第2の特定部905により、AND結果の先頭ビットを対象ビットに設定し(ステップS1201)、対象ビットがONであるか否かを判断する(ステップS1202)。ONでない場合、検索処理部202は、判定部907により、対象ビットがシフト可能か否かを判断する(ステップS1203)。具体的には、対象ビットが末尾ビットであるか否かを判断する。
シフト可能である場合(ステップS1203:Yes)、検索処理部202は、対象ビットを1ビット末尾方向へシフトし(ステップS1204)、ステップS1202に戻る。一方、ステップS1203においてシフト可能でない場合(ステップS1203:No)、検索処理部202は、判定部907により、検索結果(陰性)と判定し、出力部909から出力する(ステップS1205)。これにより、検索結果が陰性である場合の処理手順を終了する。
一方、ステップS1202において、対象ビットがONであった場合(ステップS1202:Yes)、検索処理部202は、判断部906により、現在の段数pがp=1であるか否かを判断する(ステップS1206)。p=1でない場合(ステップS1206:No)、pをデクリメントして(ステップS1207)、ステップS1104に戻る。
一方、p=1である場合(ステップS1206:Yes)、検索処理部202は、判定部907により、対象ビットのビット位置に対応するハッシュテーブルを検索する(ステップS1208)。そして、検索対象データDxが存在するか否かを判断する(ステップS1209)。
検索対象データが存在しない場合(ステップS1209:No)、ステップS1203に戻り、対象ビットがシフト可能か否かを判断することとなる。一方、検索対象データが存在する場合(ステップS1209:Yes)、検索処理部202は、検索結果(陽性)を出力する(ステップS1210)。検索処理部202は、必要に応じて抽出部908により関連するデータを抽出して検索結果として出力する。これにより、検索結果が陰性である場合の処理手順を終了する。
以上説明したように、本実施の形態によれば、ブルームフィルタ列BF(p)を転置して転置ブルームフィルタ列tBF(p)とすることで、メモリアクセスが低減され、検索速度が高速化するという効果を奏する。特に、階層型転置ブルームフィルタtBFとすることで、段ごとのメモリアクセスが低減されるため、より高速に検索をおこなうことができる。
また、起動完了通知を転置要求とすることで、管理装置200が起動すると、階層型ブルームフィルタBFが階層型転置ブルームフィルタtBFに転置される。このように起動時に一括して、階層型転置ブルームフィルタtBFに転置しておけば、シャットダウンするまでは常時階層型転置ブルームフィルタtBFを利用することができる。
また、データブロック集合dbに対する検索要求を転置要求とすることで、検索要求があると、階層型ブルームフィルタBFのうち検索処理部202で用いられるブルームフィルタ列BF(p)を転置させることとなる。これにより、検索頻度が高くなるにつれ、転置ブルームフィルタ列tBF(p)が増加する。したがって、検索に必要なブルームフィルタ列BF(p)から徐々に転置させるため、シャットダウンまでに利用されなかったブルームフィルタ列の無駄な転置処理を低減することができる。
また、階層型ブルームフィルタBFから転置された階層型転置ブルームフィルタtBFの場合、最下段になるまでは、AND結果のONの有無だけで擬陽性であるか陰性であるかを判断し、AND結果に1つでもONのビットがあれば、擬陽性と判断して、1つ下の段に移行する。このように、AND結果を利用することで、陰性か否かを容易に判断でき、検索対象データが存在しないことを早期に特定することができる。
また、階層型転置ブルームフィルタtBFだけをメモリに保持しておけば検索が可能であるため、階層型ブルームフィルタBFを保持しておく必要なない。これにより、省メモリ化を図ることができる。
<階層型転置ブルームフィルタtBFの学習処理例>
図13は、登録処理部201による階層型転置ブルームフィルタtBFの学習処理例を示す説明図である。ここでは、図8に示した階層型転置ブルームフィルタtBFを例にあげて説明する。また、図8では、検索対象データDxを検索してヒットさせた例について説明したが、図13では、検索対象データDx(図13では、対象データDxとする)がデータブロック集合dbにまだ登録されていないものとして説明する。
また、登録される対象データDが与えられるハッシュ関数の種類数kをk=3とする。ここでは、ハッシュ関数H1(),H2(),H3()を用いることとする。また、ハッシュテーブルの登録対象となるハッシュ関数をH1()とする。
まず、データブロック集合dbのうちデータブロックdb4に対象データDxが登録されたものとする。対象データDxを各ハッシュ関数H1(),H2(),H3()に与えたときのハッシュ値は、例として以下の値とする。
H1(Dx)=x1
H2(Dx)=x2
H3(Dx)=x3
また、階層型転置ブルームフィルタtBFの学習処理では、更新対象となる転置ブルームフィルタtbf(p)内の特定のビットをONにするが、その特定のビットがすでにONになっている場合はそのままとする。
ここで、登録処理部201は、登録先のデータブロックdb4のブロック番号4のハッシュテーブルHT4に対するハッシュテーブルエントリE4を作成する。そして、登録処理部201は、作成されたハッシュテーブルエントリE4を、ハッシュテーブルHT4に追加登録する。
そして、第1段の学習処理に移る。登録処理部201は、更新対象となる転置ブルームフィルタtbf(1)を、第1段の転置ブルームフィルタ列tBF(1)の中から特定する。具体的には、登録処理部201は、各ハッシュ値x1〜x3を、第1段の転置ブルームフィルタ列tBF(1)の配列個数である8で割り算し、余り値を算出する。ハッシュ値x1の余り値は「2」、ハッシュ値x2の余り値は「5」、ハッシュ値x3の余り値は「7」になったものとする。したがって、第1段での更新対象となる転置ブルームフィルタtbf(1)は、転置ブルームフィルタtbf(1−2),tbf(1−5),tbf(1−7)となる。
また、最下段では、登録先のデータブロックdb4のブロック番号4に対応するビット位置を更新対象ビットとする。したがって、更新対象となる転置ブルームフィルタの先頭から4ビット目のビットをONにする。これにより、第1段の転置ブルームフィルタ列tBF(1)の学習処理を終了する。
つぎに、第2段の学習処理に移る。登録処理部201は、更新対象となる転置ブルームフィルタtbf(2)を、第2段の転置ブルームフィルタ列tBF(2)の中から特定する。具体的には、登録処理部201は、各ハッシュ値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)の中から特定していた。
たとえば、図5の例では、第2段において、前段の第1段での更新対象のブルームフィルタbf(1−3)の配列番号3を、分割数d(=2)で割り算し、端数を切り上げることで、更新対象の配列番号は2となる。したがって、ブルームフィルタbf(2−2)が特定される。
これに対し、階層型転置ブルームフィルタtBFでは、配列個数nとビット幅mが入れ替わっているため、第(p−1)段の更新対象のブルームフィルタbf((p−1)−#)の配列番号#ではなく、第(p−1)段での更新対象ビット位置を分割数dで割り算し、端数を切り上げる。
第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ビット目のビットをONにすることになる。これにより、第2段の転置ブルームフィルタ列tBF(2)の学習処理を終了する。
つぎに、第3段の学習処理に移る。登録処理部201は、更新対象となる転置ブルームフィルタtbf(3)を、第3段の転置ブルームフィルタ列tBF(3)の中から特定する。具体的には、登録処理部201は、各ハッシュ値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)の先頭ビットをONにすることになる。これにより、第3段の転置ブルームフィルタ列tBF(3)の学習処理を終了する。
<登録処理部201による階層型転置ブルームフィルタtBFの学習処理手順>
図14は、登録処理部201による階層型ブルームフィルタBFの学習処理手順を示すフローチャートである。まず、登録処理部201は、登録したいデータ(対象データDx)があるか否かを判断する(ステップS1401)。対象データDxがある場合(ステップS1401:Yes)、登録処理部201は、段数pをp=1に設定し(ステップS1402)、p>h(hは階層型転置ブルームフィルタtBFの最上段)であるか否かを判断する(ステップS1403)。p>hでない場合(ステップS1403:No)、登録処理部201は、k種類のハッシュ関数を用いて、対象データDxのk個のハッシュ値を算出する(ステップS1404)。
つぎに、登録処理部201は、k個のハッシュ値を第p段の転置ブルームフィルタtBF(p)の配列個数で除算して、k個の余り値を算出する(ステップS1405)。そして、登録処理部201は、k個の余り値と同一配列番号のk個の転置ブルームフィルタtbf(p)rを特定する(ステップS1406)。
このあと、p=1であるか否かを判断し(ステップS1407)、p=1である場合(ステップS1407:Yes)、登録処理部201は、特定されたk個の転置ブルームフィルタtbf(p)rに、対象データDxの所属データブロックdb#のブロック番号#をエントリする(ステップS1408)。すなわち、対象データDxの所属データブロックdb#のブロック番号#を更新対象ビット位置#に設定し、特定されたk個の転置ブルームフィルタtbf(p)rの更新対象ビット位置#のビットをONにする。そして、ステップS1410に移行する。
一方、ステップS1407において、p≠1である場合(ステップS1407:No)、特定されたk個の転置ブルームフィルタtbf(p)rに、対象データDxの第(p−1)段での更新対象ビット位置を分割数dで除算した商(端数切り上げ)をエントリする(ステップS1409)。すなわち、対象データDxの第(p−1)段での更新対象ビット位置を分割数dで除算した商(端数切り上げ)を更新対象ビット位置に設定し、特定されたk個の転置ブルームフィルタtbf(p)rの更新対象ビット位置のビットをONにする。そして、ステップS1410に移行する。
ステップS1410において、登録処理部201は、段数pをインクリメントし(ステップS1410)、ステップS1403に戻る。これにより、最下段から最上段まで更新対象ビットをONにすることができる。
一方、ステップS1403において、p>hである場合(ステップS1403:Yes)、登録処理部201は、対象データのハッシュテーブルエントリを追加して(ステップS1411)、ステップS1401に戻る。対象データDxがない場合(ステップS1401:No)、登録処理部201による階層型転置ブルームフィルタtBFの学習処理を終了する。
このような手順により、登録処理部201は、階層型転置ブルームフィルタtBFにデータエントリを学習させることとなる。すなわち、転置後にデータが登録される場合も、階層型転置ブルームフィルタtBFから階層型ブルームフィルタBFに戻す必要がなく、転置後の階層型転置ブルームフィルタtBFのまま学習させることができる。したがって、転置前に戻すといった無駄な処理がなくなり、検索効率の向上も図ることができる。
なお、本実施の形態で説明した検索方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検索プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検索プログラムは、インターネット等のネットワークを介して配布してもよい。
200 管理装置
201 登録処理部
202 検索処理部
901 受付部
902 転置部
903 変換部
904 第1の特定部
905 第2の特定部
906 判断部
907 判定部
908 抽出部
909 出力部
BF 階層型ブルームフィルタ
db データブロック集合
HTs ハッシュテーブル群
tBF 階層型転置ブルームフィルタ

Claims (8)

  1. データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがm個配列されたブルームフィルタが前記所定数のデータブロック単位でn個配列されたブルームフィルタ列と、にアクセス可能なコンピュータに、
    前記ブルームフィルタ列の転置要求を受け付ける受付工程と、
    前記受付工程によって転置要求が受け付けられた場合、前記ブルームフィルタ列を、前記各ブルームフィルタ内のビット列を同一位置のビットどうしでまとめたnビットの転置ブルームフィルタがm個配列された転置ブルームフィルタ列に転置して記憶装置に保存する転置工程と、
    複数種類のハッシュ関数に基づいて、前記ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する変換工程と、
    前記転置ブルームフィルタ列の中から、前記変換工程によって変換された位置情報に対応する転置ブルームフィルタを前記位置情報ごとに特定する第1の特定工程と、
    前記第1の特定工程によって特定された複数の転置ブルームフィルタに共通する位置情報に基づいて、前記データブロック集合内での前記検索対象データの有無を判定する判定工程と、
    を実行させることを特徴とする検索プログラム。
  2. 前記受付工程は、
    前記コンピュータの起動完了通知を、前記ブルームフィルタ列の転置要求として受け付けることを特徴とする請求項1に記載の検索プログラム。
  3. 前記受付工程は、
    前記データブロック集合に対する検索要求を、前記ブルームフィルタ列の転置要求として受け付けることを特徴とする請求項1に記載の検索プログラム。
  4. 記第1の特定工程によって特定された複数の転置ブルームフィルタに共通する位置情報に対応するブルームフィルタを、前記ブルームフィルタ列の中から特定する第2の特定工程と、
    前記第2の特定工程によって特定されたブルームフィルタを配列要素とするブルームフィルタ列が存在するか否かを判断する判断工程と、を前記コンピュータに実行させ、
    前記判定工程は、
    前記判断工程によって存在しないと判断された場合、前記データブロック集合のうち、前記第2の特定工程によって特定されたブルームフィルタに対応するデータブロック内での前記検索対象データの有無を判定することを特徴とする請求項1〜3のいずれか一つに記載の検索プログラム。
  5. データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがm個配列されたn個のブルームフィルタ内のビット列を同一位置のビットどうしでまとめたnビットの転置ブルームフィルタをm個配列した転置ブルームフィルタ列と、にアクセス可能なコンピュータに、
    複数種類のハッシュ関数に基づいて、前記ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する変換工程と、
    前記転置ブルームフィルタ列の中から、前記変換工程によって変換された位置情報に対応する転置ブルームフィルタを前記位置情報ごとに特定する第1の特定工程と、
    前記第1の特定工程によって特定された複数の転置ブルームフィルタに共通する位置情報に対応するブルームフィルタを、前記ブルームフィルタ列の中から特定する第2の特定工程と、
    前記第2の特定工程によって特定されたブルームフィルタを配列要素とするブルームフィルタ列が存在するか否かを判断する判断工程と、
    前記判断工程によって存在しないと判断された場合、前記データブロック集合のうち、前記第2の特定工程によって特定されたブルームフィルタに対応するデータブロック内での前記検索対象データの有無を判定する判定工程と、
    をコンピュータに実行させることを特徴とする検索プログラム。
  6. 前記第1の特定工程は、
    前記判断工程によって存在すると判断された場合、前記第2の特定工程によって特定されたブルームフィルタを配列要素とするブルームフィルタ列を特定対象ブルームフィルタ列とし、前記特定対象ブルームフィルタ列から転置された転置ブルームフィルタ列を特定対象転置ブルームフィルタ列とすることにより、前記特定対象転置ブルームフィルタ列の中から、前記変換工程によって変換された位置情報に対応する特定対象転置ブルームフィルタを前記位置情報ごとに特定し、
    前記第2の特定工程は、
    前記第1の特定工程によって特定された複数の特定対象転置ブルームフィルタに共通する位置情報に対応するブルームフィルタを、前記特定対象ブルームフィルタ列の中から特定することを特徴とする請求項4または5に記載の検索プログラム。
  7. データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがm個配列されたブルームフィルタが前記所定数のデータブロック単位でn個配列されたブルームフィルタ列と、にアクセス可能な検索装置であって、
    前記ブルームフィルタ列の転置要求を受け付ける受付手段と、
    前記受付手段によって転置要求が受け付けられた場合、前記ブルームフィルタ列を、前記各ブルームフィルタ内のビット列を同一位置のビットどうしでまとめたnビットの転置ブルームフィルタがm個配列された転置ブルームフィルタ列に転置して記憶装置に保存する転置手段と、
    複数種類のハッシュ関数に基づいて、前記ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する変換手段と、
    前記転置ブルームフィルタ列の中から、前記変換手段によって変換された位置情報に対応する転置ブルームフィルタを前記位置情報ごとに特定する第1の特定手段と、
    前記第1の特定手段によって特定された複数の転置ブルームフィルタに共通する位置情報に基づいて、前記データブロック集合内での前記検索対象データの有無を判定する判定手段と、
    を備えることを特徴とする検索装置。
  8. データブロックごとに登録済のデータ群を含むデータブロック集合と、所定数のデータブロック内での陰性を示すビットがm個配列されたブルームフィルタが前記所定数のデータブロック単位でn個配列されたブルームフィルタ列と、にアクセス可能なコンピュータが、
    前記ブルームフィルタ列の転置要求を受け付ける受付工程と、
    前記受付工程によって転置要求が受け付けられた場合、前記ブルームフィルタ列を、前記各ブルームフィルタ内のビット列を同一位置のビットどうしでまとめたnビットの転置ブルームフィルタがm個配列された転置ブルームフィルタ列に転置して記憶装置に保存する転置工程と、
    複数種類のハッシュ関数に基づいて、前記ハッシュ関数ごとに、検索対象データを、前記転置ブルームフィルタの配列位置をあらわす位置情報に変換する変換工程と、
    前記転置ブルームフィルタ列の中から、前記変換工程によって変換された位置情報に対応する転置ブルームフィルタを前記位置情報ごとに特定する第1の特定工程と、
    前記第1の特定工程によって特定された複数の転置ブルームフィルタに共通する位置情報に基づいて、前記データブロック集合内での前記検索対象データの有無を判定する判定工程と、
    を実行することを特徴とする検索方法。
JP2010104013A 2010-04-28 2010-04-28 検索プログラム、検索装置、および検索方法 Expired - Fee Related JP5526985B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010104013A JP5526985B2 (ja) 2010-04-28 2010-04-28 検索プログラム、検索装置、および検索方法
US13/064,674 US8560558B2 (en) 2010-04-28 2011-04-07 Computer product, search apparatus, management apparatus, search method, and management method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010104013A JP5526985B2 (ja) 2010-04-28 2010-04-28 検索プログラム、検索装置、および検索方法

Publications (2)

Publication Number Publication Date
JP2011233014A JP2011233014A (ja) 2011-11-17
JP5526985B2 true JP5526985B2 (ja) 2014-06-18

Family

ID=45322263

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010104013A Expired - Fee Related JP5526985B2 (ja) 2010-04-28 2010-04-28 検索プログラム、検索装置、および検索方法

Country Status (1)

Country Link
JP (1) JP5526985B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6028567B2 (ja) * 2012-12-28 2016-11-16 富士通株式会社 データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3318834B2 (ja) * 1999-07-30 2002-08-26 三菱電機株式会社 データファイルシステム及びデータ検索方法
JP2002171525A (ja) * 2000-11-29 2002-06-14 Canon Inc ビットプレーン演算命令を備えたsimd型演算装置
JP2003271649A (ja) * 2002-03-13 2003-09-26 Ricoh Co Ltd リレーショナルデータベース問い合わせ処理方式及びリレーショナルデータベース問い合わせ処理システム

Also Published As

Publication number Publication date
JP2011233014A (ja) 2011-11-17

Similar Documents

Publication Publication Date Title
JP5716554B2 (ja) 検索プログラム、検索方法、検索装置、およびノード
US8560558B2 (en) Computer product, search apparatus, management apparatus, search method, and management method
US20140250046A1 (en) Probabilistic parsing
JP2007004633A (ja) 言語モデル作成装置およびそれにより作成された言語モデルを使用する言語処理装置
CN101099129A (zh) 组织指向对象的指针
JP5141560B2 (ja) 情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法
KR20090048624A (ko) 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체
CN107305586A (zh) 索引生成方法、索引生成装置及搜索方法
JP2011186954A (ja) データ管理装置及びデータ管理方法
JP6428615B2 (ja) 多次元範囲検索装置及び多次元範囲検索方法
JP5083367B2 (ja) 検索装置、検索方法、ならびに、コンピュータプログラム
KR20150083961A (ko) 다국어 통합 자음 패턴 검색 방법, 자음 문자 입력을 위한 문자 입력부를 생성하는 방법 및 그 장치
US10387543B2 (en) Phoneme-to-grapheme mapping systems and methods
JP5664467B2 (ja) 検索プログラム、検索方法、検索装置、およびノード
JP5526985B2 (ja) 検索プログラム、検索装置、および検索方法
US20060248037A1 (en) Annotation of inverted list text indexes using search queries
KR101694179B1 (ko) 모음 제거 기반 인덱스 생성 방법 및 장치
JP5526986B2 (ja) 管理プログラム、管理装置、および管理方法
JP5526987B2 (ja) 管理プログラム、管理装置、および管理方法
WO2012061983A1 (en) Seed set expansion
JP2008243074A (ja) 文書検索装置、方法及びプログラム
KR20110046098A (ko) 텍스트 색인 장치 및 방법
JP5601123B2 (ja) Nグラム検索のための転置インデックスの生成方法および生成装置、当該転置インデックスを用いた検索方法および検索装置、ならびに、コンピュータプログラム
JP2014120178A (ja) 中国語の繁体字と簡体字との変換システム及び中国語の繁体字と簡体字との変換方法
JP5472929B2 (ja) 文書検索装置、文書検索方法及び文書検索プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131024

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140114

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140331

R150 Certificate of patent or registration of utility model

Ref document number: 5526985

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees