• Mindscape ๐Ÿ”ฅ
    • Playlist ๐ŸŽง
  • Algorithm

    • 1018๋ฒˆ: ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ
    • 1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ
    • Python ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํŒ
    • C++ std::vector ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ
    • Vim ์‚ฌ์šฉ ๋งค๋‰ด์–ผ
  • Ubuntu

    • ๋ฆฌ๋ˆ…์Šค ์šฐ๋ถ„ํˆฌ GRUB ํฐํŠธ ๋ณ€๊ฒฝ
    • ์šฐ๋ถ„ํˆฌ ์ด๋ฏธ์ง€ ๋น„๋””์˜ค ์ธ๋„ค์ผ(๋ฏธ๋ฆฌ๋ณด๊ธฐ) ์•ˆ ๋ณด์ž„ ๋ฌธ์ œ ํ•ด๊ฒฐ
    • Wine ํ™˜๊ฒฝ์—์„œ ์นด์นด์˜คํ†ก ์‹คํ–‰ ์‹œ explorer.exe ๋œจ์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฒ•
    • ์šฐ๋ถ„ํˆฌ Wine ์นด์นด์˜คํ†ก ์‚ฌ์ง„ ์ด๋ฏธ์ง€ ์Šคํฌ๋ฆฐ์ƒท ๋ถ™์—ฌ๋„ฃ๊ธฐ
    • Wine ์นด์นด์˜คํ†ก ์ด๋ชจ์ง€ ๊นจ์ง ๋ฌธ์ œ ํ•ด๊ฒฐ
    • Ubuntu ์œˆ๋„์šฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„๊ธฐ
  • Wellness

    • ์ฐจ์ „์žํ”ผ (Psyllium Husk)
    • ์—‘์ŠคํŠธ๋ผ ๋ฒ„์ง„ ์˜ฌ๋ฆฌ๋ธŒ์œ  (Extra Virgin Olive Oil)
    • ์ž๊ฐ€๋น„๊ฐ•์„ธ์ฒ™ (Nasal Irrigation)
    • QCY HT08 (MeloBuds Pro Plus)
    • ์ฝ˜์„œํƒ€ (Concerta)
    • ์ธ๋ฐ๋†€ (Inderal)
    • ์„คํŠธ๋ž„๋ฆฐ (Sertraline)
    • ๋ฉœ๋ผํ† ๋‹Œ (Melatonin)
    • ์น˜๊ฒฝ๋ถ€ ๋งˆ๋ชจ์ฆ
    • ๋ฐ”๋ฒจ ์Šค์ฟผํŠธ (Barbell Squat)
  • Humanities

    • Nordvik, Russia
    • North Sentinel Island
    • ๋กฑ๊ณ ๋กฑ๊ณ (Rongorongo)
    • ๋ฐ”๋กœํฌ ์Œ์•… (Baroque Music)
  • Design

    • ๊ตฌ๊ธ€์˜ ์•„์ด์ฝ˜ ๋Œ€๊ฐœํŽธ โ€” 6๋…„ ๋งŒ์˜ ์‹ค์ˆ˜ ์ธ์ •
    • ์ œ๋Ÿด๋“œ ์  ํƒ€ โ€” ๋Ÿญ์…”๋ฆฌ ์Šคํฌ์ธ  ์›Œ์น˜์˜ ์ฐฝ์‹œ์ž
    • ๋ฐ”์šฐํ•˜์šฐ์Šค โ€” ํ˜„๋Œ€ ๋””์ž์ธ์˜ ์›์ 
  • Brands

    • NOMOS Glashรผtte
    • Frรฉdรฉrique Constant
    • KZ (Knowledge Zenith)
    • ์—์ŠคํŠธ๋ผ (AESTURA)
    • JINHAO (้‡‘่ฑช)
    • Herman Miller
    • ๋ฐ์Šค์ปค (DESKER)
    • ๋ฌด์‹ ์‚ฌ ์Šคํƒ ๋‹ค๋“œ (Musinsa Standard)
  • Finance

    • ํ˜„๋Œ€์นด๋“œ ZERO โ€” Edition2 vs Edition3 ๋น„๊ต
    • ์‹ ํ•œ์นด๋“œ ์ฒ˜์Œ
    • S&P 500 ETF ํˆฌ์ž ๊ฐ€์ด๋“œ
    • ํŒŒํ‚นํ†ต์žฅ vs CMA ํ†ต์žฅ
    • ๋ฒ„ํฌ์…” ํ•ด์„œ์›จ์ด (Berkshire Hathaway)
    • ๋น„ํŠธ์ฝ”์ธ(Bitcoin)
  • Products

    • ์˜ค๋””์˜ค ์ธํ„ฐํŽ˜์ด์Šค (Audio Interface)
    • ์ฟ ๋ฃจํ† ๊ฐ€ (KURUTOGA)
    • CX31993 DAC ๋™๊ธ€
    • ํด๋ Œ์ง• ๋ฐ€ํฌ (Cleansing Milk)
    • ํ”ผ์ ฏ ํ† ์ด (Fidget Toy)
    • ThinkPad
  • Programming Languages

    • 8.0. Statement Level Control Structures
    • 8. Subprogram
    • 9. Implementing Subprogram
    • 10.1. Abstract Data Types and Encapsulation Constructs
    • 10.2. Support for Object Oriented Programming
    • 11. Concurrency
    • 12. FPL (1)
    • 13. FPL (2)
    • 14. Exception Handling and Event Handling
    • Final Exam

Assignment 3. Implementing Augmented B+tree - wiki

์ž‘์„ฑ 2026. 6. 12.ยท์ˆ˜์ • 2026. 6. 12.

2021024057 ๊น€๋ณ‘์ค€

1. Design

1.1. Overall Architecture

ํ•ด๋‹น ๊ณผ์ œ์—์„œ๋Š” Disk-based B+tree๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๋Š” 4KB ํฌ๊ธฐ์˜ page ๋‹จ์œ„๋กœ ๋””์Šคํฌ์— ์ €์žฅ๋˜๋ฉฐ, Header Page, Free Page, Internal Page, Leaf Page์˜ ๋„ค ๊ฐ€์ง€ ํƒ€์ž…์„ ๊ฐ€์ง„๋‹ค.

  • In-Memory Logic vs On-Disk Structure: ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ํฌ์ธํ„ฐ ๋Œ€์‹  ํŒŒ์ผ ๋‚ด์˜ offset์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ๊ฐ„์˜ ์—ฐ๊ฒฐ(Link)์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. open_table ํ˜ธ์ถœ ์‹œ fd(File Descriptor)๋ฅผ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, pread/pwrite system call์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ๋‹จ์œ„์˜ I/O๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

1.2. Data Structures

  • Page Structure: 4096 Bytes ๊ณ ์ • ํฌ๊ธฐ. Header(128B)์™€ Body(Record/Internal Entry)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • Leaf Page: Key์™€ 120B ํฌ๊ธฐ์˜ Value๋ฅผ ์ €์žฅํ•˜๋Š” record ๋ฐฐ์—ด์„ ๊ฐ€์ง„๋‹ค. Order(Branching Factor)๋Š” 32์ด๋‹ค.
  • Internal Page: Key์™€ ์ž์‹ ํŽ˜์ด์ง€์˜ Offset์„ ์ €์žฅํ•˜๋Š” inter_record ๋ฐฐ์—ด์„ ๊ฐ€์ง„๋‹ค. Order๋Š” 249์ด๋‹ค.
  • Bitmap for Logical Deletion (bptree2): bptree2์—์„œ๋Š” ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด, page ๊ตฌ์กฐ์ฒด์˜ reserved[104] ์˜์—ญ์„ Bitmap์œผ๋กœ ํ™œ์šฉํ•˜์˜€๋‹ค. reserved[i] == 1์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ๋ ˆ์ฝ”๋“œ๋Š” ์‚ญ์ œ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

2. Implement

2.1. Normal B+ tree (bptree1)

๊ธฐ๋ณธ์ ์ธ B+ tree์˜ ์‚ฝ์ž…, ์‚ญ์ œ, ํƒ์ƒ‰ ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

  • Insertion & Splitting: Leaf Page๊ฐ€ ๊ฐ€๋“ ์ฐฌ ์ƒํƒœ(LEAF_MAX = 31)์—์„œ ์‚ฝ์ž… ์‹œ insert_into_leaf_after_splitting์ด ํ˜ธ์ถœ๋œ๋‹ค. ์ž„์‹œ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ๊ธฐ์กด ๋ ˆ์ฝ”๋“œ์™€ ์ƒˆ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ •๋ ฌํ•œ ํ›„, ์ค‘๊ฐ„ ์ง€์ (cut)์„ ๊ธฐ์ค€์œผ๋กœ ๋‘ ๊ฐœ์˜ ํŽ˜์ด์ง€๋กœ ๋ถ„ํ• ํ•œ๋‹ค. ์ดํ›„ ์ƒˆ ํŽ˜์ด์ง€์˜ ์ฒซ ๋ฒˆ์งธ Key๋ฅผ ๋ถ€๋ชจ๋กœ ์˜ฌ๋ฆฌ๋Š”(insert_into_parent) ์žฌ๊ท€์  logic์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

  • Deletion & Merging/Redistribution: db_delete๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ œ๊ฑฐ(memmove)ํ•œ๋‹ค. ์‚ญ์ œ ํ›„ Key์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ์†Œ ์กฐ๊ฑด ๋ฏธ๋งŒ(Underflow)์ด ๋˜๋ฉด get_neighbor_index๋ฅผ ํ†ตํ•ด ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

    • Redistribution: ํ˜•์ œ ๋…ธ๋“œ์— ์—ฌ์œ ๊ฐ€ ์žˆ๋‹ค๋ฉด Key๋ฅผ ํ•˜๋‚˜ ๋นŒ๋ ค์™€ ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค.
    • Coalesce (Merge): ํ˜•์ œ ๋…ธ๋“œ๋„ ์—ฌ์œ ๊ฐ€ ์—†๋‹ค๋ฉด ๋‘ ๋…ธ๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ณ , ๋ถ€๋ชจ ๋…ธ๋“œ์—์„œ ํ•ด๋‹น ํฌ์ธํ„ฐ๋ฅผ ์ œ๊ฑฐ(delete_entry)ํ•˜๋Š” ๊ณผ์ •์„ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

2.2. Logical Deletion Applied B+ tree (bptree2)

bptree1์˜ code๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋˜, ์‚ญ์ œ ์ •์ฑ…๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์˜€๋‹ค.

  • Logical Deletion (db_delete)

    • ๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ ์ด๋™์ด๋‚˜ ๋ณ‘ํ•ฉ(Merge) ๊ณผ์ •์„ ์ œ๊ฑฐํ•˜์˜€๋‹ค.
    • ๋Œ€์‹  ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ์˜ ์ธ๋ฑ์Šค i์— ๋Œ€ํ•ด page->reserved[i] = 1๋กœ ๋งˆํ‚นํ•˜๊ณ  ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•œ๋‹ค.
    • ์ด๋กœ ์ธํ•ด ์‚ญ์ œ ์—ฐ์‚ฐ์˜ ๋น„์šฉ์ด O(logโกN)+O(1)O(\log N) + O(1)O(logN)+O(1)๋กœ ํฌ๊ฒŒ ๊ฐ์†Œํ•˜์˜€๋‹ค.
  • Revival on Insertion (db_insert)

    • ์ด๋ฏธ ์กด์žฌํ•˜๋Š” Key์— ๋Œ€ํ•œ ์‚ฝ์ž… ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ, ํ•ด๋‹น Key๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์‚ญ์ œ๋œ ์ƒํƒœ(reserved == 1)๋ผ๋ฉด ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ๊ธฐ์กด ์œ„์น˜์˜ Value๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ  reserved = 0์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ '๋ถ€ํ™œ'์‹œํ‚จ๋‹ค.
  • Visibility Check (db_find)

    • ํƒ์ƒ‰ ์‹œ Key๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ reserved == 1์ด๋ผ๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์‚ญ์ œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

3. Result

3.1. Test Environment

  • OS: Ubuntu 24.04 LTS
  • Compiler: gcc
  • Tools: Make

3.2. bptree1 Execution

  1. Insert & Find: Key 100, 50, 150์„ ์ˆœ์„œ๋Œ€๋กœ ์‚ฝ์ž… ํ›„ ์กฐํšŒ ์‹œ ์ •๋ ฌ๋˜์–ด ์ถœ๋ ฅ๋จ์„ ํ™•์ธํ•˜์˜€๋‹ค.
  2. Split: 32๊ฐœ ์ด์ƒ์˜ ๋ ˆ์ฝ”๋“œ ์‚ฝ์ž… ์‹œ Leaf Page๊ฐ€ ๋ถ„ํ• ๋˜๊ณ , ์ƒˆ๋กœ์šด Root๊ฐ€ ์ƒ์„ฑ๋˜์–ด ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ์ฆ๊ฐ€ํ•จ์„ ํ™•์ธํ•˜์˜€๋‹ค.
  3. Delete (Merge): ๋Œ€๋Ÿ‰ ์‚ญ์ œ ์ˆ˜ํ–‰ ์‹œ Page Merge๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , Root๊ฐ€ ๋‹ค์‹œ Leaf๋กœ ๋‚ด๋ ค์˜ค๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜๋Š” ๊ณผ์ •์„ ํ™•์ธํ•˜์˜€๋‹ค.
kmbzn@p31:~/workspace/Assignment3_2021024057/bptree1$ rm -f *.db
kmbzn@p31:~/workspace/Assignment3_2021024057/bptree1$ ./main
i 1 A
i 2 B
i 3 C
i 4 D
i 5 E
i 6 F
i 7 G
i 8 H
i 9 I
i 10 J
i 11 K
i 12 L
i 13 M
i 14 N
i 15 O
i 16 P
i 17 Q
i 18 R
i 19 S
i 20 T
i 21 U
i 22 V
i 23 W
i 24 X
i 25 Y
i 26 Z
i 27 AA
i 28 BB
i 29 CC
i 30 DD
i 31 EE
i 32 FF
f 1
Key: 1, Value: A
f 32
Key: 32, Value: FF
d 1
d 2
d 3
d 4
d 5
d 6
d 7
d 8
d 9
d 10
d 11
d 12
d 13
d 14
d 15
d 16
d 17
f 17
Not Exists
f 18
Key: 18, Value: R
q

3.3. bptree2 Execution (Logical Deletion)

  1. Logical Delete: d 100 ์ˆ˜ํ–‰ ํ›„ f 100 ์‹œ "Not Exists" ์ถœ๋ ฅ ํ™•์ธํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ๋ฌผ๋ฆฌ์  file ํฌ๊ธฐ๋Š” ์ค„์–ด๋“ค์ง€ ์•Š๋Š”๋‹ค.
  2. Revival: ์‚ญ์ œ๋œ Key 100์— ๋Œ€ํ•ด i 100 world ์ˆ˜ํ–‰ ์‹œ, ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ์Šฌ๋กฏ์„ ์žฌํ™œ์šฉํ•˜์—ฌ ๊ฐ’์ด ๊ฐฑ์‹ ๋จ์„ ํ™•์ธํ•˜์˜€๋‹ค.
  3. Reorganization: q๋ฅผ ๋ˆŒ๋Ÿฌ ์ข…๋ฃŒ ์‹œ db_reorganize๊ฐ€ ํ˜ธ์ถœ๋˜์–ด, ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ฆฌ๋œ ์ƒํƒœ๋กœ DB ํŒŒ์ผ์ด ๊ฐฑ์‹ ๋จ์„ ํ™•์ธํ•˜์˜€๋‹ค.
kmbzn@p31:~/workspace/Assignment3_2021024057/bptree2$ rm -f *.db
kmbzn@p31:~/workspace/Assignment3_2021024057/bptree2$ ./main
i 100 hello
d 100
f 100
Not Exists
i 100 world
f 100
Key: 100, Value: world
q

4. TroubleShooting

4.1. get_neighbor_index Segmentation Fault

  • ๋ฌธ์ œ: bptree1์˜ ์‚ญ์ œ ์—ฐ์‚ฐ ์ค‘, Internal Page๊ฐ€ ๋ณ‘ํ•ฉ๋˜์–ด ๋นˆ ํŽ˜์ด์ง€(num_of_keys == 0)๊ฐ€ ๋œ ์ƒํƒœ์—์„œ ๋ถ€๋ชจ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ parent->b_f[0]์— ์ ‘๊ทผํ•˜์—ฌ Segmentation Fault๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.
  • ์›์ธ: num_of_keys๊ฐ€ 0์ธ ๊ฒฝ์šฐ b_f ๋ฐฐ์—ด์ด ์œ ํšจํ•˜์ง€ ์•Š์Œ์—๋„ ์ ‘๊ทผ์„ ์‹œ๋„ํ•˜์˜€๋‹ค.
  • ํ•ด๊ฒฐ: parent->num_of_keys > 0 ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜์—ฌ, ํ‚ค๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ b_f[0]๋ฅผ ํ™•์ธํ•˜๋„๋ก ๋กœ์ง์„ ์ˆ˜์ •ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

4.2. db_reorganize Trace Trap Error

  • ๋ฌธ์ œ: bptree2์—์„œ ์žฌ๊ตฌ์„ฑ(Reorganize) ์‹คํ–‰ ์‹œ ํ”„๋กœ๊ทธ๋žจ์ด ๋น„์ •์ƒ ์ข…๋ฃŒ(Trace Trap)๋˜์—ˆ๋‹ค.
  • ์›์ธ: open_table ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ „์—ญ ๋ณ€์ˆ˜ DB_PATH๋ฅผ memset์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š”๋ฐ db_reorganize์—์„œ open_table(DB_PATH) ํ˜•ํƒœ๋กœ ์ž๊ธฐ ์ž์‹ ์„ argument๋กœ ๋„˜๊ธฐ๋ฉด์„œ ํฌ์ธํ„ฐ ์ฐธ์กฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.
  • ํ•ด๊ฒฐ: db_reorganize ํ•จ์ˆ˜ ์ดˆ์ž…์—์„œ DB_PATH๋ฅผ ๋กœ์ปฌ ๋ณ€์ˆ˜ original_path์— strncpy๋กœ ๋ณต์‚ฌํ•ด๋‘” ๋’ค ์ด ๋ณต์‚ฌ๋ณธ์„ ์‚ฌ์šฉํ•˜์—ฌ open_table์„ ํ˜ธ์ถœํ•˜๋„๋ก ์ˆ˜์ •ํ•˜์˜€๋‹ค.

5. Consideration on db_reorganize

5.1. ๊ตฌํ˜„ ๋ชฉํ‘œ

db_reorganize๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ์‚ญ์ œ๋œ ๋ ˆ์ฝ”๋“œ(Fragmentation)๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , B+ tree๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ๊ณผ ๊ณต๊ฐ„ ํšจ์œจ์„ฑ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

5.2. ์ฑ„ํƒํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ธฐ์กด ํŒŒ์ผ ๋‚ด์—์„œ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ์•„ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹(In-place compaction) ๋Œ€์‹ , ์ƒˆ๋กœ์šด DB ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋งŒ migrate์‹œํ‚ค๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€๋‹ค.

  1. Rename: ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ DB ํŒŒ์ผ์„ backup.db๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
  2. Create New: ์›๋ž˜ ์ด๋ฆ„์œผ๋กœ ์ƒˆ๋กœ์šด ๋นˆ DB ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค (open_table).
  3. Migrate:
    • backup.db๋ฅผ Read-only๋กœ ์—ด๊ณ , Root๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋“  Leaf Page๋ฅผ ์ˆœํšŒํ•œ๋‹ค.
    • Leaf Page ๋‚ด์—์„œ reserved == 0์ธ(์‚ญ์ œ๋˜์ง€ ์•Š์€) ์œ ํšจํ•œ ๋ ˆ์ฝ”๋“œ๋งŒ ์ถ”์ถœํ•œ๋‹ค.
    • ์ถ”์ถœ๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ƒˆ DB์— db_insert ํ•œ๋‹ค.
  4. Cleanup: ์ž‘์—… ์™„๋ฃŒ ํ›„ backup.db๋ฅผ ์‚ญ์ œ(unlink)ํ•œ๋‹ค.

5.3. ์„ฑ๋Šฅ์ƒ์˜ ์ด์ 

  • ์ด ๋ฐฉ์‹์ด ๊ฐ–๋Š” ์žฅ์ ๋“ค
    • Sequential I/O: ๊ธฐ์กด ํŠธ๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ๊ณ (Sequential Read), ์ƒˆ ํŠธ๋ฆฌ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์”€(Append-only Write)์œผ๋กœ์จ ๋””์Šคํฌ ํ—ค๋“œ ์ด๋™์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Fragmentation ์ œ๊ฑฐ: ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํŠธ๋ฆฌ๋Š” ์ค‘๊ฐ„์— ๋นˆ ๊ณต๊ฐ„ ์—†์ด ๊ฝ‰ ์ฑ„์›Œ์ง€๋ฏ€๋กœ(Compacted), ๋””์Šคํฌ ๊ณต๊ฐ„ ๋‚ญ๋น„๊ฐ€ 0์— ์ˆ˜๋ ดํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    • ์•ˆ์ „์„ฑ: ์ž‘์—… ๋„์ค‘ ์‹คํŒจํ•˜๋”๋ผ๋„ ์›๋ณธ(backup.db)์ด ๋ณด์กด๋œ ์ƒํƒœ์ด๋ฏ€๋กœ ๋ณต๊ตฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
์ตœ๊ทผ ์ˆ˜์ •: 26. 6. 12. ์˜คํ›„ 3:28
Contributors: kmbzn, Claude Sonnet 4.6

BUILT WITH

CloudflareNode.jsGitHubGitVue.jsJavaScriptVSCodenpm

All trademarks and logos are property of their respective owners.
ยฉ 2026 kmbzn ยท MIT License