[์ž๋ฃŒ๊ตฌ์กฐ] B-Tree ๐Ÿ†š B+Tree

Sangho Hanยท2025๋…„ 5์›” 20์ผ
2
post-thumbnail

๐ŸŽฌ ์„œ๋ก 

DB Index๋ฅผ ๊ณต๋ถ€ํ•˜๋˜ ์ค‘ B+Tree๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด๋Š” B-Tree์—์„œ ํ™•์žฅ๋œ ๊ฐœ๋…์ด๊ธฐ์—, ์ด๋ฒˆ ๊ธ€์„ ํ†ตํ•ด์„œ B-Tree, B+Tree์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ๊ทธ ์ฐจ์ด์ ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.


๐ŸŒฒ B-Tree

B-Tree๋Š” ๊ท ํ˜• ์žกํžŒ ๋‹ค์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ์ผ์ข…์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ๋น ๋ฅธ ๊ฒ€์ƒ‰ & ์‚ฝ์ž… & ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ตฌ์กฐ์ด๋‹ค.

Root & Branch & Leaf Nodes

์œ„ ์ด๋ฏธ์ง€์— ์žˆ๋Š” ์‚ฌ๊ฐํ˜•์€ ๊ฐ๊ฐ ๋…ธ๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋…ธ๋“œ๋Š” ์•„๋ž˜ 3๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.
1. ๊ฐ€์žฅ ์ƒ๋‹จ์— ์œ„์น˜ํ•œ Root ๋…ธ๋“œ
2. ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ Branch ๋…ธ๋“œ๋“ค
3. ๊ฐ€์žฅ ํ•˜๋‹จ์— ์œ„์น˜ํ•œ Leaf ๋…ธ๋“œ๋“ค

Root ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” ํŠธ๋ฆฌ์˜ ์ง„์ž…์ ์ด์ž ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ด๊ธฐ์— ๋ฌด์กฐ๊ฑด 1๊ฐœ๋งŒ ์กด์žฌํ•œ๋‹ค.

Binary Search Tree์™€์˜ ์ฐจ์ด์ 

Binary Search Tree

B-Tree

๋‘˜์˜ ํ•ต์‹ฌ์ ์ธ ๋™์ž‘ ์›๋ฆฌ๋Š” ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์กด์žฌํ•œ๋‹ค.

ํ•ญ๋ชฉBST (Binary Search Tree)B-Tree
๋…ธ๋“œ๋‹น ํ‚ค ์ˆ˜1๊ฐœ์—ฌ๋Ÿฌ ๊ฐœ
๋น„๊ต ๋ฐฉ์‹ํ˜„์žฌ ๋…ธ๋“œ์˜ ํ‚ค 1๊ฐœ์™€ ๋น„๊ตํ˜„์žฌ ๋…ธ๋“œ์˜ ๋ฐฐ์—ด ํ˜•ํƒœ ํ‚ค๋“ค ์ค‘ ํ•˜๋‚˜์™€ ๋น„๊ตํ•˜์—ฌ ๋ถ„๊ธฐ
์ž์‹ ์ˆ˜์ตœ๋Œ€ 2๊ฐœ์ตœ๋Œ€ M๊ฐœ (ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜์— ๋”ฐ๋ผ ๊ฒฐ์ •๋จ)
๋ถ„๊ธฐ ๊ธฐ์ค€์™ผ์ชฝ < key < ์˜ค๋ฅธ์ชฝํ‚ค ์‚ฌ์ด ๊ตฌ๊ฐ„์— ๋”ฐ๋ผ ์ž์‹ ํฌ์ธํ„ฐ ์„ ํƒ

B-Tree ๋™์ž‘ ์›๋ฆฌ

B-Tree ๋™์ž‘ ์›๋ฆฌ์˜ ํ•ต์‹ฌ์€ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ , ํ‚ค ๋ฒ”์œ„์— ๋”ฐ๋ผ์„œ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๋ฉฐ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋Š” ์ ์ด๋‹ค.

์—ฌ๋Ÿฌ ํ‚ค๋“ค์€ ๋ฐฐ์—ด๋กœ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ex) [30, 70, 95]

์œ„ ์ด๋ฏธ์ง€์—์„œ 21์ด๋ผ๋Š” ํ‚ค๋ฅผ ์ฐพ๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž.
๋ฃจํŠธ ๋…ธ๋“œ๋Š” [30, 70]์ด๊ธฐ์—, ์ž์‹ ํฌ์ธํ„ฐ๋Š” 3๊ฐœ๋ฅผ ๊ฐ€์ง„๋‹ค.

          [30 | 70]
        /     |     \
      P0     P1     P2

์ฐพ๊ณ ์ž ํ•˜๋Š” ํ‚ค๊ฐ€ 30๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ, P0 ์ฆ‰ ์ฒซ ๋ฒˆ์งธ ์ž์‹์œผ๋กœ ์ด๋™ํ•œ๋‹ค. (= [8, 25])

          [8  | 25]
        /     |     \
      P0     P1     P2

8, 25 ์ค‘์— ์ฐพ๋Š” ๊ฐ’์ธ 21์ด ์—†์œผ๋ฏ€๋กœ ๋‹ค์‹œ ์ž์‹ ๋…ธ๋“œ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์œ„์™€ ๋™์ผํ•˜๊ฒŒ ๋ช‡ ๋ฒˆ์งธ ์ž์‹์œผ๋กœ ์ด๋™ํ• ์ง€ ํŒ๋‹จํ•œ๋‹ค.

์ด๋ฒˆ์—๋Š” 8 < 21 < 25 ์ด๋ฏ€๋กœ, ๋‘ ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ๋กœ ์ด๋™ํ•œ๋‹ค. (= [15, 21, 23])

ํ•ด๋‹น ๋…ธ๋“œ์˜ ํ‚ค๋“ค ์ค‘์—์„œ 21์ด ์กด์žฌํ•˜๋ฏ€๋กœ ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ๋‹ค.

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ์ด๋ ‡๋“ฏ 3๋ฒˆ์˜ ๊ณผ์ •๋งŒ์œผ๋กœ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋ฅผ ์„ ํ˜•์ ์œผ๋กœ ํƒ์ƒ‰ํ–ˆ๋‹ค๋ฉด ์ด๋ฏธ์ง€ ์ƒ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” 29๋ฒˆ ํƒ์ƒ‰์ด ์ด๋ฃจ์–ด์กŒ์„ ๊ฒƒ์ด๋‹ค.

B-Tree๋Š” ์„ ํ˜• ํƒ์ƒ‰์— ๋น„ํ•ด ์–ผ๋งˆ๋‚˜ ๋น ๋ฅผ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์˜ ๊ฒฝ์šฐ์—์„œ๋Š” B-Tree๊ฐ€ ์„ ํ˜• ํƒ์ƒ‰๋ณด๋‹ค ์•ฝ 10๋ฐฐ ๋น ๋ฅด๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๊ทธ๋ ‡๊ฒŒ ๋‹จ์ˆœํ•˜๊ฒŒ ๊ณ„์‚ฐํ•  ์ˆ˜๋Š” ์—†๋‹ค.

์šฐ์„  ์„ ํ˜• ํƒ์ƒ‰์˜ ๊ฒฝ์šฐ์—๋Š” ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ ์—†์ด ๋‹จ์ˆœํžˆ ๋น„๊ต๋งŒ ๊ณ„์†ํ•ด์„œ ์ง„ํ–‰ํ•œ๋‹ค. ๋น„๊ตํ•˜๋ฉฐ ๊ฐ™์€ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ๋‹ค์Œ row๋กœ ๋„˜์–ด๊ฐ€๊ณ , ๊ฐ™๋‹ค๋ฉด ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•˜๋Š” ์‹์ด๋‹ค.

๋ฐ˜๋ฉด B-Tree ํƒ์ƒ‰์˜ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ ๋‚ด์—์„œ ํ‚ค๋ฅผ ๋น„๊ตํ•œ ๋’ค, ํ•ด๋‹น ํ‚ค ๋ฒ”์œ„์— ๋งž๋Š” ์ž์‹ ๋…ธ๋“œ๋กœ ๋‚ด๋ ค๊ฐ€๋ฉฐ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.

์‹ค์งˆ์ ์ธ ์„ฑ๋Šฅ ์ฐจ์ด๋Š” ์ด๋Ÿฐ ์—ฐ์‚ฐ ์ž์ฒด๋ณด๋‹ค๋Š”, ๋””์Šคํฌ ์ ‘๊ทผ ํšŸ์ˆ˜์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.

RDBMS์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ํŽ˜์ด์ง€(๋ธ”๋ก) ๋‹จ์œ„๋กœ ์ €์žฅํ•˜๋Š”๋ฐ, ์ธ๋ฑ์Šค๋Š” ์ด๋ฅผ ๊ณ ๋ คํ•ด "ํ•˜๋‚˜์˜ ๋…ธ๋“œ == ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€" ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋œ๋‹ค.
๋”ฐ๋ผ์„œ B-Tree๋Š” ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋งŒํผ๋งŒ ๋””์Šคํฌ I/O๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

๋ฐ˜๋ฉด ํ…Œ์ด๋ธ”์—์„œ ๋‹จ์ˆœํžˆ ์„ ํ˜• ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, row๋“ค์ด ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์— ๋‚˜๋‰˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์•…์˜ ๊ฒฝ์šฐ row ์ˆ˜๋งŒํผ ๋””์Šคํฌ I/O๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
(๋‹จ, ์‹ค์ œ๋กœ๋Š” ํ•œ ํŽ˜์ด์ง€๊ฐ€ 16KB์ด๋ฏ€๋กœ ์—ฌ๋Ÿฌ row๊ฐ€ ๋‹ด๊ธธ ์ˆ˜ ์žˆ์–ด ํ•ญ์ƒ ๊ทธ๋ ‡๊ฒŒ ๋˜์ง„ ์•Š๋Š”๋‹ค.)

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ์ •๋ฆฌํ•˜์ž๋ฉด ๋””์Šคํฌ I/O ๋ฐœ์ƒ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด DB ์„ฑ๋Šฅ์— ๋งค์šฐ ์ค‘์š”ํ•˜๋ฉฐ,
B-Tree๋Š” ์ด๋Ÿฌํ•œ I/O ๋น„์šฉ์„ ํŠธ๋ฆฌ ๊นŠ์ด ์ˆ˜์ค€์œผ๋กœ ์ œํ•œํ•จ์œผ๋กœ์จ ํฐ ์„ฑ๋Šฅ์ƒ์˜ ์ด์ ์„ ์ œ๊ณตํ•œ๋‹ค.

B-Tree๋Š” ํ•ญ์ƒ ๊ท ์ผํ•œ๊ฐ€?

B-Tree๋Š” ๊ท ํ˜• ํŠธ๋ฆฌ๋กœ, ํ•ญ์ƒ ๋ฃจํŠธ -> ๋ฆฌํ”„ ๋…ธ๋“œ๋กœ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋™์ผํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์‚ฝ์ž… & ์‚ญ์ œ ์—ฐ์‚ฐ์ด ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๊ท ํ˜•์€ ๊นจ์งˆ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๋•Œ๋ฌธ์— B-Tree๋Š” ์ž์ฒด์ ์œผ๋กœ ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

B-Tree์˜ ๊ตฌ์กฐ ์กฐ์ • ๊ณผ์ •

B-Tree๋Š” ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด์„œ ์‚ฝ์ž… & ์‚ญ์ œ ์‹œ ์•„๋ž˜์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

1. ์‚ฝ์ž… : ๋…ธ๋“œ ๋ถ„ํ•  (Split)

<25 ์‚ฝ์ž…>
[10, 20, 30] + 25
โ†’ [10, 20, 25, 30]
โ†’ ์ค‘๊ฐ„๊ฐ’ 20์„ ๋ถ€๋ชจ๋กœ ์˜ฌ๋ฆฌ๊ณ  [10], [25, 30]์œผ๋กœ ๋ถ„ํ• 

  1. ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋“ ์ฐฌ ์ƒํƒœ์—์„œ ํ‚ค๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋‘ ๊ฐœ๋กœ ๋ถ„ํ• ํ•œ๋‹ค.
  2. ์ค‘๊ฐ„ ํ‚ค๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์˜ฌ๋ฆฌ๊ณ , ๋‚˜๋จธ์ง€ ํ‚ค๋Š” ์ขŒ์šฐ ๋…ธ๋“œ์— ๋ถ„๋ฐฐํ•œ๋‹ค.
  3. ๋งŒ์•ฝ ๋ถ€๋ชจ ๋…ธ๋“œ๋„ ๊ฐ€๋“ ์ฐจ ์žˆ๋‹ค๋ฉด, ๋ถ„ํ• ์€ ์ƒ์œ„ ๋…ธ๋“œ๋กœ ์ „ํŒŒ๋œ๋‹ค.

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ์ด ์ž‘์—…์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฃจํŠธ๊นŒ์ง€ ์ „ํŒŒ๋˜๋ฉฐ, ๋งŒ์•ฝ ๋ฃจํŠธ๊นŒ์ง€ ๋ถ„ํ• ๋˜๋ฉด ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ 1 ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿ“Œ ๋น„์šฉ: O(log N) (ํŠธ๋ฆฌ ๊นŠ์ด๋งŒํผ ๋ถ„ํ•  ์ „ํŒŒ)

2. ์‚ญ์ œ : ๋ณ‘ํ•ฉ(Merge) or ํ‚ค ์žฌ๋ถ„๋ฐฐ(Redistribute)

<10 ์‚ญ์ œ>
[10, 15] - 10
โ†’ [15] โ†’ ์ตœ์†Œ ํ‚ค ๊ฐœ์ˆ˜ ๋ฏธ๋‹ฌ (์–ธ๋”ํ”Œ๋กœ์šฐ)
โ†’ ํ˜•์ œ ๋…ธ๋“œ์—์„œ ํ‚ค๋ฅผ ๋นŒ๋ฆฌ๊ฑฐ๋‚˜, ๋ณ‘ํ•ฉํ•˜์—ฌ ๊ท ํ˜• ์œ ์ง€

  1. ์‚ญ์ œ ํ›„ ๋…ธ๋“œ์— ๋‚จ์€ ํ‚ค ๊ฐœ์ˆ˜๊ฐ€ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ณด๋‹ค ์ ๋‹ค๋ฉด(์–ธ๋”ํ”Œ๋กœ์šฐ), ๊ตฌ์กฐ ์กฐ์ •์ด ํ•„์š”ํ•˜๋‹ค.
  2. ํ˜•์ œ ๋…ธ๋“œ์— ์—ฌ์œ  ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด, ๋ถ€๋ชจ ํ‚ค์™€ ๊ตํ™˜ํ•˜๋ฉฐ ์žฌ๋ถ„๋ฐฐ(Redistribute)๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  3. ํ˜•์ œ๋„ ์—ฌ์œ ๊ฐ€ ์—†์œผ๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ณ‘ํ•ฉ(Merge)ํ•˜๊ณ  ๋ถ€๋ชจ ํ‚ค๋ฅผ ๋‚ด๋ ค๋ณด๋‚ธ๋‹ค.
  4. ์ด ์กฐ์ • ๊ณผ์ •์€ ์ƒ์œ„ ๋…ธ๋“œ๋กœ ์ „ํŒŒ๋  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ์ด ์ž‘์—…์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฃจํŠธ๊นŒ์ง€ ์ „ํŒŒ๋˜๋ฉฐ,
๋งŒ์•ฝ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋น„๊ฒŒ ๋˜๋ฉด ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ 1 ๊ฐ์†Œํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿ“Œ ๋น„์šฉ: O(log N) (์žฌ๊ท€์ ์œผ๋กœ ๋ณ‘ํ•ฉ/์žฌ๋ถ„๋ฐฐ ์ „ํŒŒ)

์ตœ์†Œ ํ‚ค ๊ฐœ์ˆ˜์˜ ๊ธฐ์ค€์€?

์‚ญ์ œ ์—ฐ์‚ฐ ๊ณผ์ •์—์„œ, ์ตœ์†Œ ํ‚ค ๊ฐœ์ˆ˜ ๋ฏธ๋‹ฌ(์–ธ๋”ํ”Œ๋กœ์šฐ)์ผ ๊ฒฝ์šฐ์—๋Š” ์žฌ๋ถ„๋ฐฐ๋‚˜ ๋ณ‘ํ•ฉ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•˜์˜€๋‹ค.

์—ฌ๊ธฐ์„œ ์ตœ์†Œ ํ‚ค ๊ฐœ์ˆ˜๋Š” ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์ •ํ•ด์ง€๋Š” ๊ฒƒ์ผ๊นŒ?

B-Tree๋Š” "๋ฃจํŠธ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ž์‹์ด ์ตœ์†Œ โŒˆM / 2โŒ‰๊ฐœ ์ด์ƒ์ด์–ด์•ผ ํ•œ๋‹ค" ๋Š” ํ•ต์‹ฌ ์ œ์•ฝ์ด ์กด์žฌํ•œ๋‹ค.
์ด๋Š” ๋…ธ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋น„์–ด ์žˆ์œผ๋ฉด ํŠธ๋ฆฌ ๋†’์ด๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•˜๋ฉฐ, ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด B-Tree์—์„œ ๋ฃจํŠธ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ž์‹ ์ˆ˜๊ฐ€ ์ตœ์†Œ โŒˆM / 2โŒ‰๊ฐœ ์ด์ƒ์ด์–ด์•ผ ํ•˜๋ฉฐ,
์ด์— ๋”ฐ๋ผ ํ‚ค ๊ฐœ์ˆ˜๋Š” โŒˆM / 2โŒ‰ - 1๊ฐœ ์ด์ƒ์ด์–ด์•ผ ํ•œ๋‹ค.

B-Tree ์—ฐ์‚ฐ๋ณ„ ์‹œ๊ฐ„ ๋ณต์žก๋„ ์š”์•ฝ

์—ฐ์‚ฐ์‹œ๊ฐ„ ๋ณต์žก๋„์„ค๋ช…
๊ฒ€์ƒ‰ (Search)O(log N)ํŠธ๋ฆฌ ๋†’์ด๋งŒํผ ํƒ์ƒ‰ (๊ท ํ˜• ์œ ์ง€๋จ)
์‚ฝ์ž… (Insert)O(log N)๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ๋‚ด๋ ค๊ฐ„ ํ›„, ํ•„์š” ์‹œ ๋ถ„ํ• 
์‚ญ์ œ (Delete)O(log N)์–ธ๋”ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ ์‹œ ๋ณ‘ํ•ฉ/์žฌ๋ถ„๋ฐฐ ์ˆ˜ํ–‰

B-Tree๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์— ๋Œ€ํ•ด์„œ O(log N)์ด๋ผ๋Š” ๊ท ์ผํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ณด์žฅํ•œ๋‹ค.


๐ŸŒฒ B+Tree

B+Tree์™€ B-Tree์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€, ์‹ค์งˆ์ ์ธ ๊ฐ’ ์ฆ‰ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋“ค์€ Linked List์ฒ˜๋Ÿผ ์ˆœ์ฐจ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

B+Tree์˜ ์žฅ์ 

  1. ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋‘์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๋“ค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํ™•๋ณดํ•จ์œผ๋กœ์จ ๋” ๋งŽ์€ ํ‚ค๋“ค์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ์ˆ˜์‹ญ ~ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํ‚ค๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ๊ธฐ์— ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ๋”์šฑ ๋‚ฎ๊ฒŒ ์œ ์ง€๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

  1. ํ’€ ์Šค์บ” ์‹œ, B+Tree๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์˜ ์„ ํ˜•ํƒ์ƒ‰๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ B-Tree์˜ ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ฐ„ ๋…ธ๋“œ๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ์ „์ฒด ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ƒ ํ›จ์”ฌ ๋А๋ฆฌ๋‹ค.

MySQL InnoDB B+Tree ์ธ๋ฑ์Šค ๊ตฌ์กฐ

์ด๋ฏธ์ง€ ์ถœ์ฒ˜

InnoDB์—์„œ์˜ B+Tree๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋ณต์žกํ•œ ๋ชจ์Šต์„ ๋ณด์ธ๋‹ค. (์ด ๋˜ํ•œ ๋งค์šฐ ๋‹จ์ˆœํ™”๋œ ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค)

์ด์— ๋Œ€ํ•ด์„œ๋Š” ์ง€์‹์ด ์งง์•„ ์ถ”ํ›„ ํ•™์Šต ํ›„์— ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ํ•ด๋‹น ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค!


๐Ÿงน ์ฐจ์ด์  ์ •๋ฆฌ

์ตœ์ข…์ ์œผ๋กœ B-Tree์™€ B+Tree์˜ ์ฐจ์ด์ ์„ ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ํ•ญ๋ชฉB-TreeB+Tree
๋ฐ์ดํ„ฐ ์ €์žฅ ์œ„์น˜๋‚ด๋ถ€ ๋…ธ๋“œ์™€ ๋ฆฌํ”„ ๋…ธ๋“œ ๋ชจ๋‘์— ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ฐ€๋Šฅ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ๋ฐ์ดํ„ฐ ์ €์žฅ
๋‚ด๋ถ€ ๋…ธ๋“œ ์—ญํ• ๋ฐ์ดํ„ฐ๋„ ์ €์žฅํ•˜๋ฉฐ ํƒ์ƒ‰ ์—ญํ• ๋„ ์ˆ˜ํ–‰ํƒ์ƒ‰(์ธ๋ฑ์Šค) ์—ญํ• ๋งŒ ์ˆ˜ํ–‰
๋ฆฌํ”„ ๋…ธ๋“œ ์—ฐ๊ฒฐโŒ ์—†์Œโœ… ๋ฆฌํ”„ ๋…ธ๋“œ๋ผ๋ฆฌ ์—ฐ๊ฒฐ (Linked List ๊ตฌ์กฐ)
์ „์ฒด ์ˆœํšŒ ์„ฑ๋Šฅ๋น„ํšจ์œจ์  (๋ชจ๋“  ๋…ธ๋“œ ์ˆœํšŒ ํ•„์š”)ํšจ์œจ์  (๋ฆฌํ”„๋งŒ ์ˆœ์ฐจ ํƒ์ƒ‰)
๋ฒ”์œ„ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ๋А๋ฆผ๋น ๋ฆ„ (๋ฆฌํ”„ ๋…ธ๋“œ ์—ฐ์† ์ ‘๊ทผ ๊ฐ€๋Šฅ)
์ธ๋ฑ์Šค ํฌ๊ธฐ์ƒ๋Œ€์ ์œผ๋กœ ํฌ๊ณ  ๊นŠ์ด๊ฐ€ ๋” ํด ์ˆ˜ ์žˆ์Œ๋‚ด๋ถ€ ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋ฒผ์›Œ์ ธ ๋” ๋‚ฎ์€ ํŠธ๋ฆฌ ๋†’์ด ์œ ์ง€ ๊ฐ€๋Šฅ
์‚ฌ์šฉ ์‚ฌ๋ก€์ด๋ก  ๊ตฌ์กฐ / ์ผ๋ถ€ ํƒ์ƒ‰ ์ค‘์‹ฌ ์‹œ์Šคํ…œโœ… MySQL InnoDB ์ธ๋ฑ์Šค, ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ ์‹ค๋ฌด์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋จ

์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ

profile
์•ˆ๋…•ํ•˜์„ธ์š”. ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž, ํ•œ์ƒํ˜ธ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€