B ํŠธ๋ฆฌ

B ํŠธ๋ฆฌ๋Š” ๋Œ€ํ‘œ์ ์ธ ํ•˜๋“œ์›จ์–ด ์นœํ™”์  ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์—์„œ ์ธ๋ฑ์Šค ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ• ๋•Œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ๋“ค์€ ์ด๊ฑธ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

์‚ฝ์ž…/์‚ญ์ œ/์กฐํšŒ ๋ชจ๋‘ O(log N)์„ ๋ณด์žฅํ•˜๋Š” ์•ˆ์ •์ ์ธ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋‹ค.

1971๋…„, Rudolf Bayer,ย Edward McCreight์— ์˜ํ•ด ๊ณ ์•ˆ๋˜์—ˆ๋‹ค.
๊ทผ๋ฐ B์˜ ๋œป์ด ๋ญ”์ง€๋Š” ์•„๋ฌด๋„ ๋ชจ๋ฅธ๋‹ค. ๋ณธ์ธ๋“ค๋„ ๋งํ•˜์ง€ ์•Š์•˜๋‹ค.




B ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ์™€ ์›๋ฆฌ

B ํŠธ๋ฆฌ๋Š” ํ†ต์ƒ์ ์ธ ์ด์ง„ํŠธ๋ฆฌ์™€ ๋‹ค๋ฅด๊ฒŒ ํ•œ ๋…ธ๋“œ๊ฐ€ 3๊ฐœ ์ด์ƒ์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋‹ค.

์ด๋กœ ์ธํ•ด ์–ป๋Š” ์ด์ ์ด ์ƒ๋‹นํžˆ ํฐ๋ฐ, rebalancing์ด ์ด์ง„ ํŠธ๋ฆฌ์— ๋น„ํ•ด ์ ๊ฒŒ ์ผ์–ด๋‚˜๊ณ , ๋†’์ด๋„ ๋‚ฎ์•„์„œ find ์‹œ์˜ ๊นŠ์ด๊ฐ€ ์งง๋‹ค๋Š” ์  ๋“ฑ์ด ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  balance๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™์ด ๋ช‡๊ฐ€์ง€ ์žˆ๋Š”๋ฐ, ์•ฝ๊ฐ„์€ ๋ณต์žกํ•œ ํŽธ์ด๋‹ค.

  1. BํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜๊ฐ€ M์ผ ๋•Œ, ๊ฐ ๋…ธ๋“œ๋Š” M/2~M๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. (์˜ˆ: ์ฐจ์ˆ˜๊ฐ€ 3์ด๋ฉด ๊ฐ ๋…ธ๋“œ๋Š” 1~3๊ฐœ์˜ ์ž์‹์„ ๊ฐ€์ง„๋‹ค.)

  2. ๊ฐ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ์ •๋ ฌ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ

  1. ํŠน์ • ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ N๊ฐœ๋ฉด, ๊ทธ ๋…ธ๋“œ์˜ ์ž์‹์€ N+1๊ฐœ์—ฌ์•ผ ํ•œ๋‹ค. ๊ฐ™๊ฑฐ๋‚˜ ์ ์„ ์ˆ˜๋Š” ์—†๋‹ค.

  1. ๋…ธ๋“œ ๋‚ด์— ๋ฐ์ดํ„ฐ๋Š” floor(M/2)-1๊ฐœ๋ถ€ํ„ฐย ์ตœ๋Œ€ M-1๊ฐœ๊นŒ์ง€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค

  2. ๋ชจ๋“  leaf ๋…ธ๋“œ๋Š” ๊ฐ™์€ ๋ ˆ๋ฒจ์ด์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์žฌ์กฐ์ •ํ•œ๋‹ค.

์ด ๋ณต์žกํ•œ ์กฐ๊ฑด๋“ค์„ ๋”ฐ๋ผ์„œ ์‚ฝ์ž…/์‚ญ์ œ/์ˆ˜์ •์ด ๋˜๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.




์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ

  1. ํŠธ๋ฆฌ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ์‚ฝ์ž…ํ•  ๋ฆฌํ”„๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.
  2. ์ •๋ ฌ ์ƒ์œผ๋กœ ์ ์ ˆํ•œ ๋ฆฌํ”„๋…ธ๋“œ ์œ„์น˜๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด, ์šฐ์„  ์‚ฝ์ž…ํ•œ๋‹ค.
  3. ์‚ฝ์ž…ํ•œ ๋ฆฌํ”„๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์„œ, B-Tree์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ƒํƒœ๋ผ๋ฉด ์ข…๋ฃŒ. ์•„๋‹ˆ๋ผ๋ฉด ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.


์‚ฝ์ž… ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ๋ณต์žกํ•˜๋‹ค.

๋งŒ์•ฝ 3์ฐจ B-Tree์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ’ 16์ด ์ƒˆ๋กœ ์‚ฝ์ž…๋œ๋‹ค๋ฉด

ํ•ด๋‹น ๋ฆฌํ”„๋…ธ๋“œ๋Š” ๊ฐ ๋…ธ๋“œ์˜ ํ‚ค๊ฐ€ 0-2๊ฐœ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ์œ„๋ฐ˜ํ•œ๋‹ค.

์ด๋Ÿด ๊ฒฝ์šฐ์—” ๋จผ์ € ํ•ด๋‹น ๊ฐ’์„ ๋ฃจํŠธ๋กœ ์˜ฌ๋ฆฐ๋‹ค.

ํ•˜์ง€๋งŒ ๋˜ ๊ฐ€๋“์ฐผ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๊ฐ€๋“์ฐจ์ง€ ์•Š์„๋•Œ๊นŒ์ง€ ์˜ฌ๋ฆฐ๋‹ค.

๋งŒ์•ฝ ๋ฃจํŠธ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€์„œ๋„ ๊ฐ€๋“์ฐฌ๋‹ค๋ฉด

๋ถ„ํ• ํ•œ๋‹ค.

์ด๋Ÿฐ ๋А๋‚Œ์ด๋‹ค.




๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๊ฒฝ์šฐ

์‚ญ์ œ๋Š” ๊ณ ๋ คํ• ๊ฒŒ ๋งŽ์•„์„œ ๋” ๋ณต์žกํ•œ ํŽธ์ด๋‹ค.

  1. ์ผ๋‹จ ๊ฐ’์„ ์‚ญ์ œํ•œ๋‹ค.
  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