B ํธ๋ฆฌ
B ํธ๋ฆฌ๋ ๋ํ์ ์ธ ํ๋์จ์ด ์นํ์ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์์ ์ธ๋ฑ์ค ์์คํ
์ ๊ตฌํํ ๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ค. ๋๋ถ๋ถ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
๋ค์ ์ด๊ฑธ๋ก ์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๋ค.
์ฝ์ /์ญ์ /์กฐํ ๋ชจ๋ O(log N)์ ๋ณด์ฅํ๋ ์์ ์ ์ธ ํธ๋ฆฌ ๊ตฌ์กฐ๋ค.

1971๋
, Rudolf Bayer,ย Edward McCreight์ ์ํด ๊ณ ์๋์๋ค.
๊ทผ๋ฐ B์ ๋ป์ด ๋ญ์ง๋ ์๋ฌด๋ ๋ชจ๋ฅธ๋ค. ๋ณธ์ธ๋ค๋ ๋งํ์ง ์์๋ค.
B ํธ๋ฆฌ์ ๊ตฌ์กฐ์ ์๋ฆฌ
B ํธ๋ฆฌ๋ ํต์์ ์ธ ์ด์งํธ๋ฆฌ์ ๋ค๋ฅด๊ฒ ํ ๋ ธ๋๊ฐ 3๊ฐ ์ด์์ ์์์ ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ค.
์ด๋ก ์ธํด ์ป๋ ์ด์ ์ด ์๋นํ ํฐ๋ฐ, rebalancing์ด ์ด์ง ํธ๋ฆฌ์ ๋นํด ์ ๊ฒ ์ผ์ด๋๊ณ , ๋์ด๋ ๋ฎ์์ find ์์ ๊น์ด๊ฐ ์งง๋ค๋ ์ ๋ฑ์ด ์๋ค.
๊ทธ๋ฆฌ๊ณ balance๋ฅผ ์ ์งํ๊ธฐ ์ํ ๊ท์น์ด ๋ช๊ฐ์ง ์๋๋ฐ, ์ฝ๊ฐ์ ๋ณต์กํ ํธ์ด๋ค.
-
Bํธ๋ฆฌ์ ์ฐจ์๊ฐ M์ผ ๋, ๊ฐ ๋ ธ๋๋ M/2~M๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ค. (์: ์ฐจ์๊ฐ 3์ด๋ฉด ๊ฐ ๋ ธ๋๋ 1~3๊ฐ์ ์์์ ๊ฐ์ง๋ค.)
-
๊ฐ ๋ ธ๋์ ๋ฐ์ดํฐ๋ ํญ์ ์ ๋ ฌ๋์ด์์ด์ผ ํ๋ค. ์ด๋ ๊ฒ

- ํน์ ๋ ธ๋์ ๋ฐ์ดํฐ ๊ฐ์๊ฐ N๊ฐ๋ฉด, ๊ทธ ๋ ธ๋์ ์์์ N+1๊ฐ์ฌ์ผ ํ๋ค. ๊ฐ๊ฑฐ๋ ์ ์ ์๋ ์๋ค.

-
๋ ธ๋ ๋ด์ ๋ฐ์ดํฐ๋ floor(M/2)-1๊ฐ๋ถํฐย ์ต๋ M-1๊ฐ๊น์ง ํฌํจ๋ ์ ์๋ค
-
๋ชจ๋ leaf ๋ ธ๋๋ ๊ฐ์ ๋ ๋ฒจ์ด์ด์ผ ํ๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ์ฌ์กฐ์ ํ๋ค.

์ด ๋ณต์กํ ์กฐ๊ฑด๋ค์ ๋ฐ๋ผ์ ์ฝ์ /์ญ์ /์์ ์ด ๋๋๋ก ๊ตฌํํ๋ฉด ๋๋ค.
์ฝ์ ํ ๊ฒฝ์ฐ
- ํธ๋ฆฌ๊ฐ ๋น์ด์์ง ์๋ค๋ฉด ์ฝ์ ํ ๋ฆฌํ๋ ธ๋๋ฅผ ํ์ํ๋ค.
- ์ ๋ ฌ ์์ผ๋ก ์ ์ ํ ๋ฆฌํ๋ ธ๋ ์์น๋ฅผ ์ฐพ์๋ค๋ฉด, ์ฐ์ ์ฝ์ ํ๋ค.
- ์ฝ์ ํ ๋ฆฌํ๋ ธ๋์ ์ํ๋ฅผ ํ์ธํด์, B-Tree์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ํ๋ผ๋ฉด ์ข ๋ฃ. ์๋๋ผ๋ฉด ๋ฆฌ๋ฐธ๋ฐ์ฑ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
์ฝ์ ๋ฆฌ๋ฐธ๋ฐ์ฑ
์ฌ๊ธฐ์๋ถํฐ ๋ณต์กํ๋ค.
๋ง์ฝ 3์ฐจ B-Tree์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ 16์ด ์๋ก ์ฝ์ ๋๋ค๋ฉด
ํด๋น ๋ฆฌํ๋
ธ๋๋ ๊ฐ ๋
ธ๋์ ํค๊ฐ 0-2๊ฐ์ฌ์ผ ํ๋ค๋ ์กฐ๊ฑด์ ์๋ฐํ๋ค.
์ด๋ด ๊ฒฝ์ฐ์ ๋จผ์ ํด๋น ๊ฐ์ ๋ฃจํธ๋ก ์ฌ๋ฆฐ๋ค.
ํ์ง๋ง ๋ ๊ฐ๋์ฐผ๋ค.
๊ทธ๋ฌ๋ฉด ๊ฐ๋์ฐจ์ง ์์๋๊น์ง ์ฌ๋ฆฐ๋ค.
๋ง์ฝ ๋ฃจํธ๊น์ง ์ฌ๋ผ๊ฐ์๋ ๊ฐ๋์ฐฌ๋ค๋ฉด

๋ถํ ํ๋ค.

์ด๋ฐ ๋๋์ด๋ค.
๋ฆฌํ ๋ ธ๋๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ
์ญ์ ๋ ๊ณ ๋ คํ ๊ฒ ๋ง์์ ๋ ๋ณต์กํ ํธ์ด๋ค.
- ์ผ๋จ ๊ฐ์ ์ญ์ ํ๋ค.
- ์ญ์ ํด๋ ํด๋น ๋ ธ๋๊ฐ B-Tree์ ์กฐ๊ฑด์ ์ ์งํ๋ค๋ฉด ๊ด์ฐฎ์ง๋ง ์๋๋ผ๋ฉด ์ด๋ฐ์ ๋ฐ ์ฒ๋ฆฌ๋ฅผ ๋ง์ด ํด์ค์ผ ํ๋ค.
A.์์ ํ์ ๋ ธ๋์์ ๋น๋ ค์ฌ ์ ์๋ ๊ฒฝ์ฐ
๋ง์ฝ ์์ฒ๋ผ 19์ ์ญ์ ํ๋ฉด, ํด๋น ๋ถ๋ชจ๊ฐ 2๊ฐ๋ผ์ ์์์ด 3๊ฐ์ฌ์ผ ํ๋ค๋ ์กฐ๊ฑด์ ์๋ฐํ๊ฒ ๋๋ค.
์ด ๊ฒฝ์ฐ๋ ์์ 15/16 ๋ ธ๋์์ ๊ฐ์ ธ์ฌ๊ฒ ์์ด์


์ค์์นญํด์ ๋น๊ณต๊ฐ์ ๋งค์ฐ๋ฉด ๋๋ค.
์ฌ์ด ๊ฒฝ์ฐ๋ค.
B. ํ์ ๋ ธ๋๋ค์๊ฒ ๊ฐ์ ๋น๋ ค์ฌ ์ ์์ง๋ง, ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๋ถํ ํ ์ ์์ ๋
๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ด 22๋ฅผ ์ญ์ ํ๋ฉด
์์์๋ ๋น๋ ค์ฌ ์ ์์ง๋ง
๋ถ๋ชจํํ
์ ๊ฟ์ณ์ฌ ์๋ ์๋ค.
์ ๋นํ ๋๋ ค์ฃผ๋ฉด ๋๋ค.
C. ํ์ ๋
ธ๋๋ค์๊ฒ ๊ฐ์ ๋น๋ ค์ฌ ์ ์๊ณ ๋ถ๋ชจ ๋
ธ๋๋ ๋ถํ ํ ์ ์์ ๋
์ด๊ฑด ์ฌ์ค์ ๋ด๋ถ๋
ธ๋๋ฅผ ์ฒ๋ฆฌํ ๋์ ํด๊ฒฐ๋ฒ์ด ๊ฐ๋ค. ์๋ ๋ด๋ถ๋
ธ๋ ์น์
์ B๋ฅผ ์ฐธ์กฐํ๋ค.
๋ด๋ถ ๋ ธ๋๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ
A. ํ์ฌ ๋
ธ๋ ํน์ ์์ ๋
ธ๋์ ํค ๊ฐ์๊ฐ ์ต์ ์ ์ง ๊ฐ์๋ณด๋ค ํฐ ๊ฒฝ์ฐ
๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ด ๋ด๋ถ๋
ธ๋๋ฅผ ์ญ์ ํ๋ค๋ฉด
๋
ธ๋ ํฌ๊ธฐ๊ฐ 1์ด ๋ผ์ ์ ์ฝ์กฐ๊ฑด์ ์๋ฐํ๊ฒ ๋๋ค.
์ด ๊ฒฝ์ฐ์๋ Left max๋ Right min์ ๊ฐ๊ณผ ์์น๋ฅผ ๋ฐ๊พผ ๋ค์ leaf ๋
ธ๋๋ฅผ ์ญ์ ํ ๋์ฒ๋ผ ํ๋ฉด ๋๋ค.
B. ํ์ฌ ๋
ธ๋์ ์์ ๋
ธ๋ ๋ชจ๋ key ๊ฐ์๊ฐ ์ต์์ธ ๊ฒฝ์ฐ
๊ฐ์ฅ ๋ณต์กํ ์ผ์ด์ค๋ค.
4๋ ๊ทธ ์์ ๋
ธ๋๋ ๋ค ์ต์๊ฐ์๋ผ์ ๋ญ ๋ ์ค์ผ ์๊ฐ ์๋ค.
์ด๋ด๋ ๋จผ์ ์ผ๋จ ์ญ์ ํ ํค๋ฅผ ์ญ์ ํ๊ณ , ์์์ ๋ณํฉํ๋ค.
์ญ์ ํ ํค์ ๋ถ๋ชจ ํค๋ฅผ ์ญ์ ํ ํค์ ํ์ ํค์ ํฉ์น๋ค.
๊ทธ๋ฆฌ๊ณ ์ญ์ ํ ํค์ ์์ ๋
ธ๋๋ฅผ ์ญ์ ํ ํค์ ๋ถ๋ชจ ํค์ ์๋๋ค.
๊ทธ๋ฌ๊ณ ๋์ ๋ถํ ์ด ํ์ํ๋ค๋ฉด ๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ํ๋ฉด ๋๋ค. ์์ ๊ฒฝ์ฐ๋ 3์ฐจ ํธ๋ฆฌ์ธ๋ฐ๋ 3๊ฐ๋๊น ์ชผ๊ฐ์ผ ํ๋ค.
์ด๊ฑด ์ฝ์
ํ ๋ ํ๋๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
์ฌ์ฉ์ฒ
MySQL, OracleDB, PostgreSQL, MSSQL ๋ฑ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ด ์ ๋ถ ์ด ์๋ฃ๊ตฌ์กฐ๋ก ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๋ค.
์์ฉ ์์ค์์๋ ๊ทธ๋ฆฌ ๋ง์ด ์ฐ์ด์ง ์์ง๋ง, ํน์ดํ ์๋ก Rust๋ ํ์ค ์ปฌ๋ ์
์์ ์ ์ผํ Tree ๊ตฌํ์ฒด๋ก์ BTree๋ฅผ ์ ๊ณตํ๋ค.
trade-off๊ฐ ์์ง๋ง, ์บ์ ํจ์จ์ฑ์ด๋ ํ ๋น์ ์ค์ผ ์ ์๋ค๋ ์ ์์ redblack๋ณด๋ค ๋ซ๋ค๊ณ ํ๋จํ ๊ฒ ๊ฐ๋ค.
vs LSM Tree
ํ์ฌ Bํธ๋ฆฌ์ ๋์ฒ์ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ LSM ํธ๋ฆฌ๋ค.
์ ํต์ด Bํธ๋ฆฌ๋ผ๋ฉด, LSM์ ์ข ์ ์ธ๋๋ค.
์์ธํ ๋ด์ฉ์ ํฌ์คํธ๋ฅผ ์ฐธ์กฐํ๊ธธ ๋ฐ๋๋ค.
https://m.blog.naver.com/sssang97/223232181952
์ฐธ์กฐ
https://ko.m.wikipedia.org/wiki/B_%ED%8A%B8%EB%A6%AC
https://code-lab1.tistory.com/217
https://doc.rust-lang.org/std/collections/struct.BTreeMap.html