# B+Tree ๊ฒ์
๋ฃจํธ ๋ ธ๋๋ถํฐ ๊ฒ์ํ๋ key๊ฐ์ธ v๋ณด๋ค ํฐ key๊ฐ์ด ๋์ฌ ๋๊น์ง ๊ฒ์ํ๋ค ๊ฐ์ key๊ฐ์ ๊ฐ์ง๋ฉด, P(i+1)๋ก ์๋๋ฉด P(i)๋ก ๊ฐ์ ๋ฆฌํ ๋ ธ๋๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
- ํ๋์ ๋ ธ๋๋ ๋ณดํต ํ๋์ ๋์คํฌ ๋ธ๋ก ์ฌ์ด์ฆ์ธ 4kb๋ก ํ๋ค. ๋ฐ๋ผ์ ๋ณดํต ํ๋์ index๋น ํฌ๊ธฐ๋ 40byte๋ก ์ ํ๊ณ Fanout n์ 100์ ๋๋ก ํ๋ ๊ฒ ๋ณดํต์ด๋ค.
- ๊ทธ๋ผ key๊ฐ ๋ฐฑ๋ง๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ ๋, log50(1,000,000) = 4 ์ด๋ฏ๋ก ๊ฒ์ํ ๋๋ง๋ค 4๊ฐ์ ๋ ธ๋๋ฅผ ์ง๋๋ค.
Composite key(๋ณตํฉํค)
- ๋ง์ฝ key๊ฐ primary key๊ฐ ์๋ ๊ฒฝ์ฐ, ์ ์ผ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ด๋ ต๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, (ai , Ap)์์ผ๋ก ๋ณตํฉํค๋ฅผ ๋ง๋ค์ด ์ ์ผ์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
- ํ์ง๋ง, ์ด๋ฌ๋ฉด ๋ ๋ง์ I/O๊ฐ ํ์ํ๋ค. ํนํ non clustering ๋ ๊ฒฝ์ฐ์๋ ๋งค๋ฒ I/O๊ฐ ํ์ํ๋ค.
# B+Tree ์ฝ์
B+Tree ์ฝ์ ๊ณผ์ ๊ฐ์
- ๊ฒ์ ๊ณผ์ ์ ํตํด ์ฝ์ ํด์ผ ํ ๋ฆฌํ ๋ ธ๋๋ฅผ ์ฐพ๋๋ค.
- ๋ฆฌํ ๋ ธ๋ ์๋ฆฌ๊ฐ ๋จ์ ์์ผ๋ฉด, ๊ทธ๋ฅ ์ฝ์ ํ๋ฉด ๋์ง๋ง ์๋ฆฌ๊ฐ ๋จ์ ์์ง ์๋ค๋ฉด Split๊ณผ์ ์ ๊ฑฐ์ณ์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๋ถ๋ชจ ๋ ธ๋๋ค์๋ ๋ฐ์์์ผ์ผ ํ๋ค.
Leaf Node Split ๊ณผ์
- ์ผ๋จ, ์๋ก ๋ฃ์ ํค ๊ฐ์ ํฌํจํ์ฌ ์ ๋ ฌํ๊ณ , ⌈n/2⌉ ๊ฐ๋ ๋๊ณ ๋๋จธ์ง๋ฅผ ์๋ก์ด ๋ ธ๋๋ก ๋ง๋ ๋ค.
- ์๋ก ๋ง๋ค์ด์ง ๋ ธ๋์ ์ฒซ ๋ฒ์งธ ํค ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋์ ๋ณต์ฌํ๋ค. ์ต์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ถ๋ชจ๊ฐ ๋ค ์ฐจ ์์ผ๋ฉด ๋ฃจํธ ๋ ธ๋๊ฐ Splitํด์ผํ๊ณ , ๊ทธ๋ผ ๋์ด๊ฐ 1 ๋์์ง๋ค.
Non Leaf Node Split ๊ณผ์
- ๋ฆฌํ ๋ ธ๋ Split ๊ณผ์ ๊ณผ ๋์ผํ์ง๋ง, ์๋ก ๋ง๋ค์ด์ง ๋ ธ๋์ ์ฒซ ๋ฒ์งธ ํค ๊ฐ์ ๋ณต์ฌ๊ฐ ์๋ ์๋ผ์ ๋ถ๋ชจ ๋ ธ๋์ ์ฝ์ ํ๋ค.
# B+Tree ์ญ์
B+Tree ์ญ์ ๊ณผ์ ๊ฐ์
- ๊ฒ์์ ํตํด ์ญ์ ํ ํค์ ํฌ์ธํฐ๋ฅผ ์ฐพ๊ณ , ์ญ์ ํ๋ค.
- ๋ง์ฝ ํด๋น ๋
ธ๋์ ์๊ฐ ์ต์ ํค ๊ฐ์๋ณด๋ค ์์์ง ๊ฒฝ์ฐ ๊ฐ์ ๋ ๋ฒจ์ ๋
ธ๋๋ค๊ณผ Merge ํด์ผํ๋ค.
- ํ์ง๋ง, ๋ง์ฝ ๋ค๋ฅธ ๋ ธ๋๋ค๊ณผ Mergeํ๊ธฐ์๋ ๋ค๋ฅธ ๋ ธ๋๋ค์ด ์ด๋์ ๋ ์ฐจ์์ด์ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ์๋ Redistribution๋ฅผ ํตํด ์กฐ๊ฑด์ ๋ง์กฑ์์ผ์ผํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ถ๋ชจ ๋ ธ๋์์ ํด๋น ๋ ธ๋๋ฅผ ๊ฐ๋ฅดํค๋ ํค ๊ฐ๊ณผ ํฌ์ธํฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ๊ฐฑ์ ํ๋ค.
- ๋ง์ฝ ์ญ์ ์ด ํ, ๋ฃจํธ ๋ ธ๋์ ํฌ์ธํฐ ํ๋๋ง ๋จ๊ฒ ๋๋ค๋ฉด, ๊ทธ ์์์ ๋ฃจํธ๋ก ํ๊ณ ์ญ์ ํ๋ค.
Non Leaf Node Redistribution ๊ณผ์
- ๋ฆฌํ ๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ํค ๊ฐ์ด ๋ถ์กฑํ๋ค๊ณ ๋ ธ๋๋ฅผ ์ญ์ ํ๊ฑฐ๋ ๋ฐ๋ก Mergeํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ ์ฌ๋ถ๋ฐฐํ๋ค.
- ์๋์ ๊ฒฝ์ฐ๋ ๋งจ ์์ ๋
ธ๋๋ ํ๋๋ก Merge๋์์ง๋ง ๋ถ๋ชจ๊ฐ ์ญ์ ๋์๊ณ ๋์์ ๋ค๋ฅธ ๋ถ๋ชจ๊ฐ Mergeํ ์ ์๋ ๊ฒฝ์ฐ๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ ์ผ์ชฝ ๋ถ๋ชจ ๋ ธ๋๋ฅผ Splitํ์ฌ ์ค๋ฅธ์ชฝ ํธ๋ฆฌ๋ฅผ ํ์ฑ ํ๋๋ก ํ๋ ๋ฐฉ์์ด๋ค.
- ์๋์ ๊ฒฝ์ฐ๋ ๋ถ๋ชจ๋
ธ๋๊ฐ ์ญ์ ๋์์ง๋ง, ์์๋
ธ๋์ด ๋จ์์๊ณ ๋์์ ๋ค๋ฅธ ๋ถ๋ชจ๊ฐ Mergeํ ์ ์๋ ๊ฒฝ์ฐ๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ, ์กฐ๋ถ๋ชจ ๋ ธ๋(?)์์ ์ ์ผ ์์ ํค ๊ฐ์ ๊ฐ์ ธ์์ ๋จ์์๋ ์์ ๋ ธ๋๋ฅผ ์ ์ํ๋ค.
# ์ด์
Update ๋ณต์ก๋
- O(log⌈n/2⌉(K))
- ์ค์ ๋ก๋ ๋ฆฌํ ๋ ธ๋๋ค์ ์ ์ธํ ์ธ๋ฑ์ค ๋ ธ๋๋ค์ ๋ฒํผ์ ์ ์ฅ๋์ด ์์ด, I/O์์ ์ด ํจ์ฌ ์์ํ๋ค.
- ๋๋ถ๋ถ์ ์์ ์ ๋ฆฌํ ๋ ธ๋์์ ์ผ์ด๋๊ณ , Split์ด๋ Merge๊ฐ ์ผ์ด๋๋ ํ์๊ฐ ์ ๋ค.
- ๋ฆฌํ ๋
ธ๋์ ์ ์ ์จ์ ํ๊ท ์ ์ผ๋ก ์ฝ์
์์์ ๋ฐ๋ผ ๋ค๋ฅธ๋ฐ
- ๋๋ค์ธ ๊ฒฝ์ฐ 2/3
- ์์ฐจ์ ์ผ๋ก ์ฝ์ ๋ ๊ฒฝ์ฐ 1/2
Non unique search key
- ๋ฆฌํ ๋
ธ๋์ Bucketํํ๋ก ๊ฐ์ Search key๋ฅผ ๊ฐ์ง๋ ๋ชจ๋ ๋ ์ฝ๋๋ค์ ํฌ์ธํฐ๋ฅผ ์ ์ฅํ๊ฒ ํ ๊ฒฝ์ฐ
- ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ์ ํด์ง์ง ์์ Bucket์ฌ์ด์ฆ์ ๋ํ ์ด์๊ฐ ์๋ค.
- ๋ ์ฝ๋๋ง๋ค Search key๋ฅผ ์ ์ฅํ ๊ฒฝ์ฐ
- Split์ ํ๊ธฐ ๋๋ฌด ๋ณต์กํ๊ฒ ๋๋ฒ๋ ค ๊ฐ์ Search key๋ฅผ ๊ฐ์ง๋ ๋ฆฌํ๋ ธ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ์ ์๋ค.
- ๊ณต๊ฐ ์ฌ์ฉ์ด ๋นํจ์จ์ ์ด๋ค.
- ์ค๋ณต ํค์ ๋ํ ๋ฌธ์ ๋ ์๋นํ ๋ณต์กํ๋ฏ๋ก, ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์๋ ๊ฒน์น๋ Search key์ ๊ฒฝ์ฐ ๋ค๋ฅธ ๊ฑธ ์ถ๊ฐํด์๋ผ๋ Uniqueํ๊ฒ ๋ง๋ ๋ค.
'๐ฅ๏ธSW Engineer > Distributed System' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ADV_db]Chap 3. Hash index (0) | 2023.04.20 |
---|---|
[ADV_db]Chap 3. Indexing - B+Tree ์ถ๊ฐ๋ด์ฉ๋ค (0) | 2023.04.19 |
[ADV_db]Chap 3. Indexing - B+Tree ์๊ฐ (0) | 2023.04.17 |
[ADV_db]Chap 3. Indexing (1) | 2023.04.14 |
[ADV_db]Chap 2. ๋ฐ์ดํฐ ์ ์ฅ ์ฅ์น ๊ตฌ์กฐ-2 (0) | 2023.04.05 |