[PostgreSQL] bloom index
Bloom Index๋ Bloom Filter ๊ธฐ๋ฐ์ ์ธ๋ฑ์ค ํ์
์ด๋ค.
๊ธฐ๋ณธ ํ์ฅ์ผ๋ก ์ ๊ณต๋๋ฉฐ, ํน์ํ ์ฌ์ฉ์ฌ๋ก๋ฅผ ์์ ํ๊ณ ์ ๊ณต๋๋ค.
๋ธ๋ฃธ ํํฐ์ ๋ํ ์๋ฆฌ๋ ๋ณ๋ ํฌ์คํธ๋ฅผ ์ฐธ์กฐํ๋ค.
https://blog.naver.com/sssang97/223231946274
์ฌ์ฉ๋ฒ
๋จผ์ bloom ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํด์ผ ํ๋ค.
๊ธฐ๋ณธ ํ์ฅ์ผ๋ก ํฌํจ๋์ด์๊ธด ํ์ง๋ง, ์ผ์ ธ์์ง๋ ์๋ค.
CREATE EXTENSION bloom;

๊ทธ๋ฆฌ๊ณ ๋ง๋ค๋๋ ์ผ๋ฐ ์ธ๋ฑ์ค ๋ง๋ค๋ฏ์ด ํ ์ ์๋ค.
create index ์ธ๋ฑ์ค๋ช
on ํ
์ด๋ธ๋ช
USING bloom (ํ๋, ...);์ ํ์ฌํญ
์ด๊ฑด ์ ํ์ฌํญ์ด ๋งค์ฐ ๋ง์ ํธ์ ์ํ๋ค.
์ผ๋จ ๋ฑ์(=) ๊ธฐ๋ฐ์ ์กฐ๊ฑด์๋ง ์ธ๋ฑ์ค๊ฐ ๋์ํ๋ค. ๋ฒ์ ์กฐ๊ฑด ๋ฑ์๋ ๋์ํ์ง ์๋๋ค. ํด์ ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
UNIQUE ์ ์ฝ์ ํ์ฉํ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ BTree๋ณด๋ค ๋๋ฆฌ๋ค.
์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ๊ฒฝ์ฐ์๋ง ์ ๋์ํ๋ค. ๊ฐ์ ์ค๋ณต์ด ๋ง๋ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ์์ ํ์ง ์์ ์๋ ์๋ค.
vs BTree
๊ทธ๋ฌ๋ฉด ์ด๊ฑธ ์ธ์ ์จ์ผํ ๊น? ์ฌ์ค ๋๋ถ๋ถ์ ์ฌ์ฉ์ฌ๋ก์์๋ Btree์ ๋ฐ๋ฆฌ๋๊ฒ ์ฌ์ค์ด๊ณ , ์ฐ์ ์ ์ผ๋ก ์ ํํ์ง๋ ์์์ผ ํ๋ค.
Bloom ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ฑ์ค์ ํฌ๊ธฐ๊ฐ ์๋นํ ์๋ค.
๊ฒ๋ค๊ฐ ๋ณตํฉ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ ๋๋ ์ธ๋ฑ์ค์ "์ปฌ๋ผ ์์"์ ์ํฅ์ ๋ฐ์ง ์๋๋ค๋ ์ฅ์ ์ด ์๋ค. ๋์ถฉ (a, b, c, d, e)๋ก ๊ฑธ์ด๋๊ณ e๋ c๋ง์ผ๋ก ํํฐ๋ฅผ ๊ฑธ์ด๋ ์ธ๋ฑ์ค๋ฅผ ํ๋ค.
์ฌ์ฉํด๋ณด๊ธฐ
๋ฐ์ดํฐ๋ฅผ ๋์ถฉ ์ธํ ํด๋ณด๊ณ , ์ ๋๋์ง ํ์ธํด๋ณด์.
CREATE TABLE benchmark (
id BIGSERIAL PRIMARY KEY,
a INT NOT NULL,
b INT NOT NULL,
c INT NOT NULL
);
INSERT INTO benchmark (a, b, c)
SELECT
(random() * 1000000)::INTEGER as a,
(random() * 5000000)::INTEGER as b,
(random() * 10000000)::INTEGER as c
FROM
generate_series(1, 10000000) AS t;
์ ๋นํ 1000๋ง๊ฐ ์ ๋์ ๊ฐ๋ง ๋๋ค์ผ๋ก ๊น์๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ๋ฑ์ค๋ฅผ ์ ๋นํ ๋ง๋ค์๋ค.
create index bloom_test on benchmark USING bloom (a, b, c);
์ด๋ฌ๋ฉด a, b, c ์ปฌ๋ผ์ ์ ๋ถ ์ปค๋ฒํ ์ ์๋ ์ธ๋ฑ์ค๊ฐ ๋๋ค.
์์๋ ์๊ด์์ด์ a ์กฐ๊ฑด ์์ด b๋ง ๊ฑธ์ด๋ ์ธ๋ฑ์ค๋ฅผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์นด๋๋๋ฆฌํฐ๊ฐ ๊ฐ์ฅ ๋์ c๋ก ์กฐ๊ฑด์ ๊ฑธ๋ฉด, ์ธ๋ฑ์ค๋ฅผ ํ๋ค. ๋น ๋ฅด์ง ์์ง๋ง.

BTree๋ก ๊ฑธ๋ฉด bloom๋ณด๋ค๋ ํจ์ฌ ๋น ๋ฅด๋ค.

๊ทธ๋ฆฌ๊ณ ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ๊ณ ๋ฐ์ดํฐ์ ์ค๋ณต์ด ๋ง์ a, b ์ปฌ๋ผ์ ๋ํ ์กฐ๊ฑด์, ์ธ๋ฑ์ค๋ฅผ ์ ํ์ง ์๋๋ค.
ํต๊ณ๋ฅผ ๋ณด๊ณ ํ๋จํ๋ ๊ฒ ๊ฐ๋ค.
์ฑ๋ฅ๋ง ๋ณด๋ฉด ์ข ์ ๋งคํ๊ธด ํ๋ฐ, ๊ทธ๋๋ ํฌ๊ธฐ ์์ฒด๋ ์์ ํธ์ด๋ค.
์ ๊ฒ๊ณผ ๋น์ทํ ํจ๊ณผ๋ฅผ ๋ด๋ ค๋ฉด Btree์์๋ ์ปฌ๋ผ๋ง๋ค ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ, ๊ทธ๋ฌ๋ฉด ์ด ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค๋ง 700M์ฏค ๋จน๋๋ค.
๋ฐ๋ฉด bloom ์ธ๋ฑ์ค๋ ๊ทธ ์ ๋ฐ๋ ์๋๋ 300M๋ฅผ ๋จน๋ ๊ฒ์ ๋ณผ ์ ์๋ค.