์ž๋ฃŒ๊ตฌ์กฐ in DB ์ธ๋ฑ์Šค

2023. 2. 11. 14:22ใ†Database/DB ์Šคํ„ฐ๋””

์ถœ์ฒ˜: https://mangkyu.tistory.com/96

RDBMS์˜ ์ธ๋ฑ์Šค๋ž€?

์ธ๋ฑ์Šค๋ž€ DB ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ์ด๋‹ค. 

๋งŒ์•ฝ ๋ฐ์ดํ„ฐ N๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ์นผ๋Ÿผ์˜ ๊ฐ’์ด X์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์ „์ฒด ํ…Œ์ด๋ธ”์„ ๋ชจ๋‘ ํ™•์ธํ•ด์•ผ ํ•˜๋ฉฐ O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ด๋ฅผ Full table scan์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•ด ๋งค๋ฒˆ O(N)์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ๋น„ํšจ์œจ์ ์ด๋‹ค. 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์ธ๋ฑ์Šค์ด๋‹ค. ์ฃผ๋กœ ์“ฐ์ด๋Š” B+Tree ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉ ์‹œ ์œ„์™€ ๋™์ผํ•œ ์กฐ๊ฑด์—์„œ O(logN)์˜ ํ–ฅ์ƒ๋œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

 

 

์ธ๋ฑ์Šค์— ์ด์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

1. Hash Table

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ Key - Value ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

๋”ฐ๋ผ์„œ ํŠน์ • ๋ฐ์ดํ„ฐ์˜ Key๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด ํ•ด๋‹น Key๋ฅผ ํ•ด์‹ฑํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ๋„์ถœํ•ด๋‚ด๊ณ , ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋ฐ ์‹œ๊ฐ„๋ณต์žก๋„ O(1)์ด ์†Œ์š”๋œ๋‹ค. 

์ถœ์ฒ˜: https://laboputer.github.io/ps/2017/10/03/hashtable/

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ๋ฐ์ดํ„ฐ์˜ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ์— ์žˆ์–ด ๊ต‰์žฅํžˆ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.

ํ•˜์ง€๋งŒ ํ‚ค ๊ฐ’์ด ์ค‘๋ณต๋  ์‹œ์—๋Š” ๊ฒ€์ƒ‰์ด ์–ด๋ ต๋‹ค๋Š” ์ , ํ‚ค ๊ฐ’์˜ ์ •๋ ฌ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฒ”์œ„ ํƒ์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์  ๋•Œ๋ฌธ์— RDBMS ์ธ๋ฑ์Šค์— ๋งŽ์ด ํ™œ์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

 

2. B-Tree

B-Tree๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๊ฐ ๋…ธ๋“œ์— ํ‚ค ๊ฐ’๊ณผ ๊ทธ ํ‚ค ๊ฐ’์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ, ํ‚ค ๊ฐ’์˜ ์ˆ˜๋ณด๋‹ค ํ•˜๋‚˜ ๋” ๋งŽ์€ ํ•˜์œ„ ๋…ธ๋“œ๋“ค์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. 

์ถœ์ฒ˜: https://ko.wikipedia.org/wiki/B_%ED%8A%B8%EB%A6%AC

๊ธฐ๋ณธ์ ์œผ๋กœ Binary Tree์™€ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋ฐ, B-Tree๋Š” ๊ฐ ๋…ธ๋“œ์— ํ•˜๋‚˜๋ณด๋‹ค ๋งŽ์€ ํ‚ค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ฐจ์ด์ ์ด๊ณ  ์ด๋กœ ์ธํ•ด ํŠธ๋ฆฌ์˜ ๊นŠ์ด๊ฐ€ ๋” ์–•๊ฒŒ ์œ ์ง€๋˜๋ฉฐ ์ด๋กœ ์ธํ•ด ๋” ํšจ์œจ์ ์ธ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

B-Tree์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” O(logN)์ด ๊ฑธ๋ฆฌ๋ฉฐ, ์‚ฝ์ž…, ์‚ญ์ œ์—๋„ O(logN)์ด ๊ฑธ๋ฆฐ๋‹ค.

์‚ฝ์ž…๊ณผ ์‚ญ์ œ์—๋„ O(logN)์ด ๊ฑธ๋ฆฌ๋Š” ์ด์œ ๋Š” Tree๋ฅผ ๊ท ํ˜• ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด ์ˆ˜๋ฐ˜๋˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ๊ฐ€๋ น ํŠน์ • ๋…ธ๋“œ๊ฐ€ ๋น„๋Œ€ํ•ด์งˆ ๊ฒฝ์šฐ ์ƒ์œ„ ๋…ธ๋“œ์— ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๋Œ€ ๋…ธ๋“œ๋ฅผ ์ชผ๊ฐœ๊ฒŒ ๋˜๋ฉฐ, ๋ฐ˜๋Œ€์˜ ์ƒํ™ฉ์—๋„ ์ผ๋งฅ์ƒํ†ตํ•œ ์—ฐ์‚ฐ์ด ์š”๊ตฌ๋œ๋‹ค.

B-Tree๋Š” Hash Table๋ณด๋‹ค ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์„ฑ๋Šฅ์ด ์ข‹์ง€๋Š” ์•Š์ง€๋งŒ ๋ฒ”์œ„ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋” ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. 

 

3. B+Tree

์•ž์„œ ์„ค๋ช…ํ•œ B-Tree๋Š” ๋งŽ์€ ์ด์ ์ด ์กด์žฌํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ๋‹ค์Œ์˜ ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  1. ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด Full table scan์„ ์ˆ˜ํ–‰ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ํƒ์ƒ‰ ๊ณผ์ •์—์„œ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํƒ์ƒ‰์ด ํ•„์š”ํ•จ.
  2. ์‚ฝ์ž…, ๊ฐฑ์‹ , ์‚ญ์ œ ๋“ฑ์˜ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ํŠธ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์žฌ์ •๋ ฌ๋  ๋•Œ ๋ฐ์ดํ„ฐ์˜ ์ด๋™๋„ ์ˆ˜๋ฐ˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌ ๊ณผ์ •์ด ๋น„ํšจ์œจ์ ์ž„.
  3. ๋‚ด๋ถ€ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋„ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋…ธ๋“œ๊ฐ€ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ์Œ. ๋”ฐ๋ผ์„œ ํŠธ๋ฆฌ์˜ ๊นŠ์ด๊ฐ€ ๊นŠ์–ด์ง€๊ณ  ์ด๋Š” ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ๋–จ์–ด๋œจ๋ฆผ.
  4. Full table scan ์‹œ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N)์„ ๊ฐ€์ง€๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์—ฐ์‚ฐ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด B-Tree๋ฅผ ๋ฐœ์ „์‹œํ‚จ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ B+Tree์ด๋‹ค.

B+Tree๋Š” B-Tree์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋‚ด๋ถ€ ๋…ธ๋“œ(๋ง๋‹จ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋…ธ๋“œ)์— ํ‚ค ๊ฐ’๊ณผ ์ž์‹ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋งŒ ์กด์žฌํ•˜๊ณ  ์‹ค์งˆ์ ์ธ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ ๋ง๋‹จ ๋…ธ๋“œ์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜๋ฉฐ ๊ฐ ๋ง๋‹จ ๋…ธ๋“œ๋“ค์€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ด์–ด์ ธ์žˆ๋‹ค.

์ถœ์ฒ˜: https://www.geeksforgeeks.org/difference-between-b-tree-and-b-tree/

B+Tree๋Š” B-Tree์™€ ๋น„๊ตํ•˜์—ฌ ๋‹ค์Œ์˜ ์ด์ ์„ ๊ฐ–๋Š”๋‹ค.

  1. ๋ง๋‹จ ๋…ธ๋“œ์—์„œ๋งŒ ์‹ค์งˆ์ ์ธ ๋ฐ์ดํ„ฐ์˜ ํƒ์ƒ‰, ์ ‘๊ทผ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์—ฐ์‚ฐ์— ์žˆ์–ด ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ง.
  2. ๋ง๋‹จ ๋…ธ๋“œ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ณต๊ฐ„์ ์ธ ์ธก๋ฉด์—์„œ ๋” ๊ฒฝ์ œ์ ์ž„.
  3. ๋ง๋‹จ ๋…ธ๋“œ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ๊ฐฑ์‹ , ์‚ญ์ œ ์—ฐ์‚ฐ์— ์žˆ์–ด ๋œ ๋ณต์žกํ•˜๋ฉฐ ์„ฑ๋Šฅ์  ์šฐ์œ„ ์กด์žฌ.
  4. ๋ง๋‹จ ๋…ธ๋“œ๋“ค์€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ๊ฐ ๋ง๋‹จ ๋…ธ๋“œ๋“ค์˜ ๋ฐ์ดํ„ฐ๋Š” ์ •๋ ฌ๋˜์–ด ์žˆ์Œ. ๋”ฐ๋ผ์„œ ๋ฒ”์œ„ ํƒ์ƒ‰ ์‹œ ๋‹จ์ˆœ ์„ ํ˜• ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์ด๋ฅผ ํ†ตํ•ด ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์คŒ.

์ด๋Ÿฌํ•œ ์žฅ์ ๋“ค ๋•Œ๋ฌธ์— ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ RDBMS ์ธ๋ฑ์Šค๋Š” B+Tree ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.