๋ธ๋ฃธ ํํฐ (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/