Bloom filter

20
よよよよよ BloomFilter

description

A description of Bloom filter

Transcript of Bloom filter

Page 1: Bloom filter

よく分かる BloomFilter

Page 2: Bloom filter

BloomFilter って?

Bloomさんが 1970年に発明したデータ構造

データの集合を保持し、登録および既登録チェックが行える

登録にかかる時間・メモリ効率が共に O(1)

Page 3: Bloom filter

すごいじゃん!

でも代償は大きい・・・

今そこを詳しく話してもピンと来ないと思うので図を使って説明します

Page 4: Bloom filter

まず集合って?

ダブったデータを保持しないデータ構造

登録するときにダブるかどうか判定して、ダブるなら登録しない

普通のデータ構造 (配列・線形リスト・木 )でも簡単に実現可能

Page 5: Bloom filter

で、 Bloom Filterは?

いきなりハッシュ関数やビット列を持ち出すとやる気が削がれるのでイメージ先行で話します

Page 6: Bloom filter

Bloom Filterは?これらの集合を保持したい

ぶ る う む ふ い る た

Page 7: Bloom filter

Bloom Filterは?これらの集合を保持したい

る う む ふ い る た

Page 8: Bloom filter

Bloom Filterは?これらの集合を保持したい

ぶる

う む ふ い る た

ガンガン重ね書き!

Page 9: Bloom filter

Bloom Filterは?これらの集合を保持したい

ぶるう

む ふ い る た

ガンガン重ね書き!

Page 10: Bloom filter

Bloom Filterは?これらの集合を保持したい

ぶるうむ

ふ い る た

ガンガン重ね書き!

Page 11: Bloom filter

Bloom Filterは?これらの集合を保持したい

ぶるうむふ

い る た

ガンガン重ね書き!

Page 12: Bloom filter

Bloom Filterは?これらの集合を保持したい

ぶるうむふい

る た

ガンガン重ね書き!

Page 13: Bloom filter

Bloom Filterは?これらの集合を保持したい

ぶるうむふいる

ガンガン重ね書き!

Page 14: Bloom filter

Bloom Filterは?これらの集合を保持したい

ぶるうむふいるた完成!

Page 15: Bloom filter

どうやって使うの?

ぶるうむふいるた

検証対象の上に重ねて使います

Page 16: Bloom filter

どうやって使うの?

ぶるうむふいるた

検証対象の上に重ねて使います

検証対象の文字

う る と ら せ ぶ ん

Page 17: Bloom filter

どうやって使うの?検証対象の文字

う る と ら せ ぶ んぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた

•フィルタにすっぽり覆われてしまった文字は登録済み

(の疑いあり•下の赤い文字が 1ピクセルでも見えるなら絶対に未登録

済 済 済 未 済未 未

Page 18: Bloom filter

どうやって使うの?検証対象の文字

う る と ら せ ぶ んぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた

•このように既登録・未登録のデータを判定する•ブルームフィルタが真っ黒なほど誤判定の確率が上がる•つまり、大量に登録したブルームフィルタほど精度が悪い•でも、登録済みの物を誤って未登録と見なす事だけはない

済 済 済 未 済未 未

Page 19: Bloom filter

その他

•ブルームフィルタに割くビット数を増やせば精度が向上•使用メモリ量と精度がトレードオフ

•登録済みデータは消せません

•何故ならどこまでがその文字だったのか切り分け出来ないから

•どうしても消したいならフィルタ丸ごと消して再登録

•全部のピクセルについて登録時に書き込まれた回数をカウントすればデータ削除可能な BloomFilterに

•もちろんメモリ効率は悪くなる

Page 20: Bloom filter

世の中では…•遠い所にデータを保存する場合、データを保存しているかどうか判断する手がかりに使える•存在しない場合にアクセスしなくなるので HDDやネットワークの負荷を低減させる•偽陽性が出てもアクセスした時に見つからないだけ

•検証が高速・高メモリ効率なので応用範囲は夢いっぱい•今回は説明のため文字の情報を例に挙げましたが、実態はハッシュ関数の結果をビットフィールドに論理和で上書きしていくアルゴリズムです

•詳しい実装は世の中にあるソースコードを読んで下さい