JiwonDev

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๊ฐ€ ์ œ์ผ ์ ํ•ฉํ•˜๋‹ค.

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ