B+ ํŠธ๋ฆฌ ๊ตฌํ˜„

1. ๊ธฐ๋ณธ ๊ตฌ์กฐ ๊ตฌํ˜„

  • ๋…ธ๋“œ(Node)์™€ ํŠธ๋ฆฌ(BPlusTree) ๊ตฌ์กฐ์ฒด ์ •์˜
  • ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ (K: Ord, V)
  • Box, Rc, RefCell์„ ์‚ฌ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
  • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž (new) ๊ตฌํ˜„
  • ํŠธ๋ฆฌ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ (is_empty)

2. ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • ๋‹จ์ผ ํ‚ค ๊ฒ€์ƒ‰ ๋ฉ”์„œ๋“œ (search)
  • ์ด์ง„ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•œ ํ‚ค ์ฐพ๊ธฐ
  • ๋‚ด๋ถ€ ๋…ธ๋“œ ํƒ์ƒ‰
  • ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ ๊ฐ’ ์ฐพ๊ธฐ
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

3. ์‚ฝ์ž… ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • insert ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
  • ์ฒซ ๋…ธ๋“œ ์ƒ์„ฑ ์ฒ˜๋ฆฌ
  • ๋ฆฌํ”„ ๋…ธ๋“œ ์ฐพ๊ธฐ
  • ๋ฆฌํ”„ ๋…ธ๋“œ์— ํ‚ค-๊ฐ’ ์Œ ์‚ฝ์ž…
  • ๋…ธ๋“œ ๋ถ„ํ•  (split) ๊ตฌํ˜„
    • ๋ถ„ํ•  ์‹œ์  ๊ฒฐ์ • (order ๊ธฐ๋ฐ˜)
    • ๋ฆฌํ”„ ๋…ธ๋“œ ๋ถ„ํ• 
    • ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ถ„ํ• 
    • ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ํ‚ค ์ „ํŒŒ
    • ๋ฃจํŠธ ๋…ธ๋“œ ๋ถ„ํ•  ์ฒ˜๋ฆฌ
  • ๋ฆฌํ”„ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

4. ์ˆœํšŒ ๋ฐ ๋ฒ”์œ„ ๊ฒ€์ƒ‰

  • ๋ฒ”์œ„ ๊ฒ€์ƒ‰ ๋ฉ”์„œ๋“œ (range_search) ๊ตฌํ˜„
  • ์‹œ์ž‘ ํ‚ค์˜ ๋ฆฌํ”„ ๋…ธ๋“œ ์ฐพ๊ธฐ
  • ๋ฆฌํ”„ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ˆœํšŒ
  • ๋ฒ”์œ„ ๋‚ด์˜ ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ ์ˆ˜์ง‘
  • ๋ฐ˜๋ณต์ž ๊ตฌํ˜„
    • IntoIterator ํŠธ๋ ˆ์ดํŠธ ๊ตฌํ˜„
    • ์ˆœ์ฐจ ์ ‘๊ทผ ๋ฐ˜๋ณต์ž
    • ๋ฒ”์œ„ ์ ‘๊ทผ ๋ฐ˜๋ณต์ž
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

5. ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • delete ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
  • ์‚ญ์ œํ•  ํ‚ค์˜ ๋ฆฌํ”„ ๋…ธ๋“œ ์ฐพ๊ธฐ
  • ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ ํ‚ค-๊ฐ’ ์Œ ์ œ๊ฑฐ
  • ์–ธ๋”ํ”Œ๋กœ์šฐ ์ฒ˜๋ฆฌ
    • ์ตœ์†Œ ํ‚ค ๊ฐœ์ˆ˜ ํ™•์ธ
    • ํ˜•์ œ ๋…ธ๋“œ์™€ ์žฌ๋ถ„๋ฐฐ
    • ํ˜•์ œ ๋…ธ๋“œ์™€ ๋ณ‘ํ•ฉ
  • ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ์—…๋ฐ์ดํŠธ
  • ๋ฃจํŠธ ๋…ธ๋“œ ์ฒ˜๋ฆฌ
  • ๋ฆฌํ”„ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์—…๋ฐ์ดํŠธ
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ