DB ์ธ๋ฑ์ค์์๋ ์ HashTable์ ์ฌ์ฉํ์ง ์์๊น?
by JiwonDev๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค๋ ๋ณดํต ๋ฐธ๋ฐ์ค ํธ๋ฆฌ(B-Tree)๋ฅผ ์ฌ์ฉํ๋ค.
# ๋ฐธ๋ฐ์ค ํธ๋ฆฌ(Balanced Tree)๋?
- ํธ๋ฆฌ์ ๋ ธ๋๊ฐ ํ ๋ฐฉํฅ์ผ๋ก ์ ๋ฆฌ์ง ์๋๋ก, ๋ ธ๋ ์ฝ์ ๋ฐ ์ญ์ ์ ํน์ ๊ท์น์ ๋ง๊ฒ ์ฌ ์ ๋ ฌ๋์ด ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์์ ์์ชฝ ์์ ๋ฐธ๋ฐ์ค๋ฅผ ์ ์งํ๋ ํธ๋ฆฌ์ด๋ค. ํญ์ ์์ชฝ ์์์ ๋ฐธ๋ฐ์ค๋ฅผ ์ ์งํ๋ฏ๋ก, ํธ๋ฆฌ์ ํ๊ท ์๊ฐ๋ณต์ก๋ O(logN)์ ํญ์ ๋ณด์ฅํ๋ค.
- ๋ค๋ง ์ฌ์ ๋ ฌ๋๋ ์์
์ผ๋ก ์ธํด ๋
ธ๋ ์ฝ์
๋ฐ ์ญ์ ์ ์ผ๋ฐ์ ์ธ ํธ๋ฆฌ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฐธ๋ฐ์ค ํธ๋ฆฌ๋ ์ฝ์
/์ญ์ ์ ์ฑ๋ฅ์ ํฌ์ํ๊ณ ํ์์ ๋ํ ์ฑ๋ฅ์ ๋์๋ค๊ณ ๋ณผ ์ ์๋ค. ๋ฐธ๋ฐ์ค ํธ๋ฆฌ๋ ๋ํ์ ์ผ๋ก RedBlack-Tree, B-Tree๊ฐ ์๋ค
# ์ ํ์์ด ๊ฐ์ฅ ๋น ๋ฅธ ํด์ํ
์ด๋ธ์ ์ธ๋ฑ์ค์ ์ฌ์ฉํ์ง ์๋์?
ํด์ํ
์ด๋ธ์ด ํ์์ ์์ด ์์์๊ฐ O(1)์ ๋ณด์ฅํ๋ ๊ฑด ๋ง๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ ํจ์ ์ด ์๋๋ฐ, '๋จ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋' ํด๋น๋๋ ์ด์ผ๊ธฐ์ด๋ค. ๋ฐ์ด๋ฒํ
์ด์ค์์ ๊ฒ์์ ๋ฑํธ(=) ๋ฟ ์๋๋ผ ๋ถ๋ฑํธ(<, >)๋ ์ฌ์ฉ ํ ์ ์๋ค.
์ฆ, ๋ชจ๋ ๊ฐ์ด ์ ๋ ฌ๋์ด ์์ง ์์ ํด์ํ
์ด๋ธ์ ํน์ ๊ธฐ์ค๋ณด๋ค ํฌ๊ฑฐ๋ ์์ ๊ฐ์ ์ฐพ์ ์ ์๋ค. ์ฆ DB์ ์ธ๋ฑ์ค๋ก๋ ์ฌ์ฉํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ธ ๊ฒ์ด๋ค.
# ์ RedBlack-Tree๊ฐ ์๋ B-Tree๋ฅผ ์ฌ์ฉํ๋๊ฑฐ์ฃ ?
- RedBlack-Tree ์ B-Tree๋ ๊ฐ๊ฐ ๋ค๋ฅธ ํน์ง์ ๊ฐ์ง๋ค. ๋จผ์ RedBlack-Tree๋ฅผ ์ดํด๋ณด์
@ RedBlack-Tree
๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ์ด์ง ํธ๋ฆฌ์ ํน์ํ ํํ๋ก ์ฝ์
, ์ญ์ , ๊ฒ์์์ ํญ์ ์ผ์ ํ ์คํ์๊ฐ์ ๋ณด์ฅํ๋ ๋ฐธ๋ฐ์ค ํธ๋ฆฌ์ ์ผ์ข
์ด๋ค. ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ 2๊ฐ์ง ๋
ธ๋(๋ ๋,๋ธ๋)๋ฅผ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ผ๋ก ์ด์งํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค
1. ๋ฃจํธ์ ๋ชจ๋ ๋ง์ง๋ง ๋
ธ๋(null leaf, NIL)๋ ๋ธ๋์ด๋ค.
2. ๋ ๋ ๋
ธ๋์ ์์ชฝ ์์์ ์ธ์ ๋ ๋ธ๋์ด๋ค. (= ๋ ๋๋ ์ฐ๋ฌ์ ๋์ฌ์ ์๊ณ , ํญ์ ๋ธ๋์ด ๋ถ๋ชจ์ด๋ค)
3. ์ด๋ค ๋
ธ๋์์ ์์ํ์ฌ ๊ทธ์ ์ํ ํ์ ๋ฆฌํ ๋
ธ๋์ ๋๋ฌํ๋ ๋ชจ๋ ๊ฒฝ๋ก์๋ ๊ฐ์ ๊ฐ์์ ๋ธ๋๋
ธ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค. (* ๋ฆฌํ ๋
ธ๋ ์์ ์ ์ ์ธ)
=> ์ด๋ฌํ ๊ท์น์ ์ด์ฉํ์ฌ [๋ฃจํธ~๊ฐ์ฅ ๋จผ ๊ณณ]์ ๊ฑฐ๋ฆฌ๊ฐ [๋ฃจํธ~ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณณ]์ ๋ ๋ฐฐ๋ณด๋ค ์๊ฒ ์ด์งํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค. ์ฆ ์๊ฐ๋ณต์ก๋๊ฐ ํธ๋ฆฌ์ ๊น์ด์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ฏ๋ก ํธ๋ฆฌ์ ์ฝ์
, ์ญ์ , ๊ฒ์ ์ฑ๋ฅ์ ์ผ์ ํ๊ฒ ์ ์ง์ํจ๋ค.
@ B-Tree
B-Tree๋ ๋
ธ๋ํ๋์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค. ๊ฐ ๋
ธ๋ ๋ด๋ถ๋ ํญ์ ์ ๋ ฌ๋ ์ํ์ด๋ฉฐ ํ์ฌ ๋
ธ๋์์ ์๋ ๋ฐ์ดํฐ์ ๋ฒ์๋ฅผ ์ด์ฉํ์ฌ ์์๋
ธ๋๋ฅผ ๋ง๋ ๋ค. ์ฆ ๊ฐ ๋
ธ๋๋ ์ต๋ (n+1)๊ฐ์ ์์๋
ธ๋๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. ๋ณดํต B-Tree๋ O(log N)์ ์ฐธ์กฐ ์๊ฐ์ ๊ฐ๊ธฐ ์ํด ํ ๋
ธ๋์ ๋ฐ์ดํฐ ๊ฐ์๋ฅผ 3~5๊ฐ์ ๋๋ก ์ ํํ์ฌ ์ฌ์ฉํ๋ค.
์๋ ๊ทธ๋ฆผ์ ํตํด ์์๋ณด์. ๋ฃจํธ ๋
ธ๋์์ 3๊ฐ์ ๊ฐ์ด ์๋ค. ๊ฐ ๊ฐ์ ๋ฒ์ (0~100, 100~155, 155~266, 266~)๋ฅผ ์ด์ฉํ์ฌ ์ต๋ 4๊ฐ (3+1)์ ์์๋
ธ๋๋ฅผ ์์ฑํ๋ค. ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ฉด ํธ๋ฆฌ๋ฅผ ํ์ ํ ๋ ๋ง์น ๋ฐฐ์ด์ฒ๋ผ ์์๋๋ก ์ ๊ทผํ ์๋ ์๊ณ ํน์ ๊ฐ์ ํ์ํ ๋ ๋ฐธ๋ฐ์ค ํธ๋ฆฌ์ฒ๋ผ O(log N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
@ RedBalck-Tree ์ B-Tree์ ํฐ ์ฐจ์ด
์ฌ์ค ๋
ผ๋ฆฌ์ ์ธ ์๊ฐ๋ณต์ก๋๋ก ์๊ฐํ๋ฉด ๋ ๋ค O(log N)์ ์ฑ๋ฅ์ ๋ธ๋ค.
ํ์ง๋ง ํ๋์จ์ด์ ์ธ ์ธก๋ฉด์์ ๋ดค์ ๋ ์ฑ๋ฅ์ ํฌ๊ฒ ์ฐจ์ด๋๋ค. ๊ทธ ์ด์ ๋ ๋ฐ๋ก ์ฐธ์กฐ ํฌ์ธํฐ์ ์ฌ์ฉ.
์ฐธ์กฐ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ Linked-List์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ Array์ ์ฐจ์ด๋ฅผ ๋ ์ฌ๋ ค๋ณด์.
๋ฐฐ์ด ๊ฐ์ด ์์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๋ ๊ฒฝ์ฐ, ์ ๋ง๋ก ์ ๋ ฌ๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ์์ ๋จ์ ๋ง์
์ผ๋ก ํ๋ฒ์ ์ ๊ทผํ๋๊ฑฐ๋ผ ํ์ ์๋๊ฐ ๊ต์ฅํ ๋น ๋ฅด๋ค. ํ์ง๋ง ์ฐธ์กฐ ํฌ์ธํฐ์ ๊ฒฝ์ฐ ๊ณ์ํด์ ํด๋น ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ๊ณ ๋ค์ด๊ฐ์ ์ํ๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ์ ํ์ ์๋๊ฐ ๋๋ฆฌ๋ค.
RedBlack-Tree์ ๊ฒฝ์ฐ ๊ฐ๊ฐ์ ๋
ธ๋๋ฅผ ์ฐธ์กฐ ํฌ์ธํฐ๋ง ์ฌ์ฉํด์ ์ ๊ทผํ์ง๋ง, B-Tree์ ๊ฒฝ์ฐ ๊ฐ์ ๋
ธ๋์ ๊ฐ์ ๋ฐฐ์ด์ฒ๋ผ ์์ ์ธ๋ฑ์ค ๋ง์
์ผ๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ์ ์ ๊ทผ ํ ์ ์๋ค. ์ฆ ํน์ ๊ฐ์ ํ์ํ๊ฑฐ๋ ๋ถ๋ฑํธ(<, >) ๋ฑ์ ์ฐ์ฐ์์ ์์๋๋ก ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ ํจ์ฌ ์ข์ ํจ์จ์ ๋ธ๋ค.
@ ๊ทธ๋ผ ์ฐธ์กฐ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉ ์ํ๋ Array ์ฐ๋ฉด ๋ ์ข์๊ฑฐ ์๋์์?
B-Tree๊ฐ ์๋๋ผ ์์ ๋ฐฐ์ด์ ์ฌ์ฉํด์ ์ ๋ถ ์์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๋ค๋ฉด ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ ํจ์ฌ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ฌ ์ ์๋๊ฑด ๋ง๋ค. ์ฌ์ง์ด ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ๋ถ๋ฑํธ ์ฐ์ฐ๋ B-Tree๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ ํ ์์์ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋ฐฐ์ด์ '์ ๊ทผ'๋ง ์ข์ ๋ฟ์ด์ง ๋ฐ์ดํฐ์ ์ ์ฅ, ์ญ์ ๊ฐ ์ผ์ด๋๋ ์๊ฐ ๋์ฐํ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ๋ฉด์ผ๋ก ์ ์ ํ ๋ฐธ๋ฐ์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ B-Tree๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ด๋ค.์ค์ ๋ก B-Tree ๋ฅผ ์ค๋ช ํ ๋ '๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ์ผ ์์คํ ์ ๋๋ฆฌ ํ์ฉ๋๋ ๋ฐธ๋ฐ์ค ์กํ ํธ๋ฆฌ๊ตฌ์กฐ'๋ผ๊ณ ํ๊ธฐ๋ ํ๋ค.
# B-Tree ์์ฝ
1. ๋
ธ๋์์ ๋ฐฐ์ด์ ํญ์ ์ ๋ ฌ๋ ์ํ๋ก ์์ด ํฌ๊ณ ์์ ๋ถ๋ฑํธ ์ฐ์ฐ์ ๋ฌธ์ ๊ฐ ์๋ค.
2. ๋ฐฐ์ด์ ์ธ๋ฑ์ค ์ ๊ทผ์ ์ ์ ํ๊ฒ ์์ด์ ์ฌ์ฉํ๊ธฐ์ ๋ฐฉ๋ํ ๋ฐ์ดํฐ ํ์์๋ ๋น ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ง์ํ๋ค.
3. ๋ฐธ๋ฐ์ค ํธ๋ฆฌ๋ผ์ ์ ์ฅ, ์์ , ์ญ์ ์๋ O(logN)์ ๋ณต์ก๋๋ฅผ ํญ์ ๋ณด์ฅํ๋ค.
๊ทธ๋์ DB ์ธ๋ฑ์ค๋ ๋ฐฐ์ด๊ณผ ๋ฐธ๋ฐ์คํธ๋ฆฌ์ ์ฅ์ ์ ์ ์ ํ ์์ด์ ์ฌ์ฉํ๋ B-Tree๊ฐ ์ ์ผ ์ ํฉํ๋ค.
'๐๊ธฐ๋ณธ ์ง์ > CS ๊ธฐ๋ณธ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ท๋ชจ ๋ถ์ฐ ํ๊ฒฝ key-value ์ ์ฅ์ ์ค๊ณ (1) | 2024.02.22 |
---|---|
์์ ํด์(Consistent Hashing) (1) | 2024.02.18 |
๋คํธ์ํฌ L4, L7 ๋ก๋๋ฐธ๋ฐ์ฑ (Load balancing) (0) | 2021.09.08 |
์ ์์ผ๊ณผ ์ต์คํธ๋ฆผ ํ๋ก๊ทธ๋๋ฐ(Agile , XP) (0) | 2021.08.25 |
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค(DB Isolation Level) (0) | 2021.08.10 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev