๋ธ”๋ฃธ ํ•„ํ„ฐ (Bloom Filter)

๋ธ”๋ฃธํ•„ํ„ฐ๋Š” ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ํŠน์ดํ•œ ๋ณ€์ข…์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.
1970๋…„์— Burton Howard Bloom์— ์˜ํ•ด ์ฒ˜์Œ ๊ณ ์•ˆ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ธ”๋ฃธ ํ•„ํ„ฐ๋‹ค.

์ด๊ฑด ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ฃผ ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ๋งŒ์„ ๊ฐ€์ง„๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ ๊ทธ ํ™•์ธ๋„ ๋ถ€๋ถ„์ ์œผ๋กœ ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.




๊ตฌ์กฐ์™€ ์›๋ฆฌ


๋ธ”๋ฃธํ•„ํ„ฐ๋„ ์ผ๋ฐ˜์ ์ธ ํ•ด์‹œํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์ด ํ…Œ์ด๋ธ”์˜ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„์ด ๋œ๋‹ค.
๋‹ค๋งŒ ๊ฐ’์€ 0 or 1, boolean์ด๋‹ค.

ํŠน์ดํ•œ ์ ์€, ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์“ด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์—ฌ๊ธฐ์„œ๋Š” ํ•ด์‹œํ•จ์ˆ˜๋ฅผ 3๊ฐœ ์“ด๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ๋‹ค.

๋งŒ์•ฝ ๊ฐ’์„ ํ•˜๋‚˜ ํ•„ํ„ฐ์— ๋„ฃ๋Š”๋‹ค๋ฉด, ํ•ด์‹œํ•จ์ˆ˜ 3๊ฐœ๋ฅผ ๋Œ๋ ค์„œ ํ•ด์‹œ๊ฐ’ 3๊ฐœ์— ํ•ด๋‹นํ•˜๋Š” ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค์— ๊ฐ’ 1์„ ํ• ๋‹นํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ํ•ด์‹œ ์ถฉ๋Œ์€ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค๋ฅธ ๊ฐ’์ด ์ƒˆ๋กœ ๋“ค์–ด์™€์„œ ๊ธฐ์กด์— 1๋กœ ํ• ๋‹น๋˜์–ด์žˆ๋Š” ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค์— ๋˜ 1์„ ์“ฐ๋”๋ผ๋„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

red์™€ blue๊ฐ€ ๊ฐ™์€ ์ธ๋ฑ์Šค๋ฅผ ์ ์œ ํ•ด๋„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์Œ

ํŠน์ • ๊ฐ’์˜ ์กด์žฌ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ๋•Œ๋Š”, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•ด์‹œํ•จ์ˆ˜ 3๊ฐœ๋ฅผ ๋Œ๋ ค์„œ ๊ทธ ํ•ด์‹œ๊ฐ’ 3๊ฐœ๊ฐ€ ํ…Œ์ด๋ธ”์— ๋‹ค ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
3๊ฐœ๊ฐ€ ์ „๋ถ€ ์žˆ๋‹ค๋ฉด ์กด์žฌํ•œ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ , 0-2๊ฐœ๋ผ๋ฉด ์—†๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์œ ์˜ํ•  ์ ์€, "์กด์žฌํ•œ๋‹ค"๊ณ  ๋‚˜์˜จ ๊ฒƒ์€ ํ‹€๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค๋ฅธ ๊ฐ’์—์„œ ํ•ด์‹œ ์ถฉ๋Œ์ด ์ž”๋œฉ ๋ฐœ์ƒํ•ด์„œ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ!
์ด๋ฅผ false positive๋ผ๊ณ  ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์‹คํŒจ ํ™•๋ฅ ์€ ๋–จ์–ด์ง„๋‹ค.

๋ฐ˜๋Œ€๋กœ "์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค"๊ณ  ๋‚˜์˜จ ๊ฒƒ์€ ์ •ํ™•ํ•˜๋‹ค. ํ•ด์‹œ ์ถฉ๋Œ์ด๊ณ  ์ž์‹œ๊ณ  ์—†์œผ๋ฉด ์ง„์งœ ์—†๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ’์„ ๋„ฃ๋Š”๊ฑด ๋˜๋Š”๋ฐ ๋นผ๋Š”๊ฒŒ ์•ˆ๋œ๋‹ค. ํ•ด์‹œ์ถฉ๋Œ์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ง‰ ๋นผ๋ฒ„๋ ธ๋‹ค๊ฐ„ ๋‹ค๋ฅธ ๊ฐ’๊นŒ์ง€ ๋นผ๋ฒ„๋ฆฌ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.




์žฅ๋‹จ์ 

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๋งค์šฐ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ด์‹œํ…Œ์ด๋ธ”์€ ๊ทธ ํŠน์„ฑ์ƒ ํ•ด์‹œ ์ถฉ๋Œ๋กœ ์ธํ•ด ์ตœ์•… O(N)์˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด์—, ๋ธ”๋ฃธํ•„ํ„ฐ๋Š” O(k)๊ฐ€ ๋ณด์žฅ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ k๋Š” ํ•ด์‹œํ•จ์ˆ˜์˜ ๊ฐœ์ˆ˜๋‹ค. ๊ฑฐ์˜ ์ƒ์ˆ˜์‹œ๊ฐ„์ธ ์…ˆ์ด๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ๋‹จํŽธ์ ์ธ boolean list๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ๋„ ์ ๊ฒŒ ๋จน๊ณ  ๊ตฌํ˜„๋„ ๊ฐ„๋‹จํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๋ชจ๋กœ ๋ฒ”์šฉ์„ฑ์ด ๋–จ์–ด์ง€๋Š”๊ฒŒ ๋‹จ์ ์ด๋‹ค. ์ถ”๊ฐ€๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ  ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ์ •ํ™•ํ•˜์ง€๋„ ์•Š๋‹ค.

๊ทธ๋ž˜์„œ ๋ญ”๊ฐ€ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์…‹์—์„œ ๋น ๋ฅด๊ฒŒ ๋น„์กด์žฌ๋ฅผ ํ™•์ธํ•  ๋•Œ, ํ˜น์€ ์กด์žฌ๋ฅผ ํ™•์ธํ•˜๋˜ ๊ฐ€๋” ํ‹€๋ ค๋„ ๊ดœ์ฐฎ์„ ๋•Œ ์‚ฌ์šฉํ•˜๊ณค ํ•œ๋‹ค.




์‚ฌ์šฉ์ฒ˜

์‚ฌ์šฉ๋ก€๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๋‹ค์–‘ํ•˜๋‹ค.

URL ํ•„ํ„ฐ๋ง ๋“ฑ์—๋„ ๊ณง์ž˜ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•…์„ฑ URL์„ ํŒ๋‹จํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋น…๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋„ ์‘์šฉ๋œ๋‹ค.
๋น…๋ฐ์ดํ„ฐ DB ์‹œ์Šคํ…œ์ธ GCP BigTable์ด๋‚˜ Apache Hbase, Cassandra, ๊ทธ๋ฆฌ๊ณ  PostgreSQL์—์„œ๋Š” ๋ธ”๋ฃธํ•„ํ„ฐ ๋งค์ปค๋‹ˆ์ฆ˜์„ ํ™œ์šฉํ•ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” row๋‚˜ column ๋“ฑ์„ ๋น ๋ฅด๊ฒŒ ์‹๋ณ„, ๋ฌด์‹œํ•ด์„œ disk I/O๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

low level๋กœ ๋‚ด๋ ค๊ฐ€์„œ ๋„คํŠธ์›Œํฌ ์ˆ˜์ค€์—์„œ๋„ ๋ธ”๋ฃธํ•„ํ„ฐ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.
ํŒจํ‚ท์„ ์ „๋‹ฌํ• ๋•Œ, ๋ฌด๊ฑฐ์šด ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ์ผ์ผํžˆ ํ™•์ธํ•˜๋Š” ๋Œ€์‹ ์— ๋ธ”๋ฃธํ•„ํ„ฐ๋ฅผ ๋„์›Œ์„œ ๋น ๋ฅด๊ฒŒ ์กด์žฌ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์„œ ์ „๋‹ฌํ•˜๋Š” ์‹์ด๋‹ค.

๋ธ”๋ก์ฒด์ธ์—์„œ๋„ ๊ฝค ๋งŽ์ด ์“ฐ๋”๋ผ.
์ด๋”๋ฆฌ์›€์—์„œ ๋กœ๊ทธ๋ฅผ ๋นจ๋ฆฌ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ๋ธ”๋ฃธํ•„ํ„ฐ๋ฅผ ์“ฐ๊ณ , ๋น„ํŠธ์ฝ”์ธ๋„ ์ง€๊ฐ‘ ๋™๊ธฐํ™” ์†๋„๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ๋ธ”๋ฃธํ•„ํ„ฐ๋ฅผ ์ผ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๊ฒŒ ์ทจ์•ฝ์ ์ด ๋˜๊ธด ํ–ˆ์ง€๋งŒ.

์ด์™ธ์—๋„ ์‚ฌ์šฉ์‚ฌ๋ก€๋Š” ๊ฝค ๋งŽ์€ ํŽธ์ด๋‹ค.



์ฐธ์กฐ
https://ko.m.wikipedia.org/wiki/%EB%B8%94%EB%A3%B8_%ED%95%84%ED%84%B0
https://velog.io/@chlvlftn22/%EB%B8%94%EB%A3%B8%ED%95%84%ED%84%B0
https://stackoverflow.com/questions/54280508/can-bloom-filters-in-bigtable-be-used-to-filter-based-only-on-row-id
https://stackoverflow.com/questions/4282375/what-is-the-advantage-to-using-bloom-filters
https://en.m.wikipedia.org/wiki/Bloom_filter
https://systemdesign.one/bloom-filters-explained/