[MongoDB] ์ธ๋ฑ์Šค

๋ชฝ๊ณ  ๋˜ํ•œ ์ผ๋ฐ˜ RDB์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„ฑ๋Šฅ์˜ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ธ๋ฑ์Šค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŒ๊ฐœ๋งŒ ๋“ค์–ด์žˆ๋Š” ์ปฌ๋ ‰์…˜์„ ์ค€๋น„ํ–ˆ๋‹ค.

๋Œ€์ถฉ ์ด๋Ÿฐ์‹์œผ๋กœ ๋“ค์–ด์žˆ๋‹ค.




์‹คํ–‰ ๊ณ„ํš ํ™•์ธ

๋ชฝ๊ณ ๋””๋น„๋„ RDB์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์‹คํ–‰๊ณ„ํš์„ ๊ด€๋ฆฌํ•˜๊ณ , ๊ทธ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. explain ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

์ž์ž˜ํ•œ ์ •๋ณด๊ฐ€ ๋งŽ์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ์—ฌ๊ธฐ์„œ ๋ด์•ผํ• ๊ฑด queryPlanner.winningPlan์ด๋‹ค.
COLLSCAN์ด๋ผ๋Š” ์Šค์บ”๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธ์–ด์™€์„œ 10์œผ๋กœ ํ•„ํ„ฐ๋ฅผ ๊ฑด๋‹ค๋Š” ๋œป์ด ๋œ๋‹ค.
COLLSCAN์€ ๊ธฐ์กด RDB์— ๋น„๊ตํ•˜๋ฉด ํ’€์Šค์บ”์ด๋‹ค. ์ „์ฒด ๋ชฉ๋ก์„ ์‹น ๊ธ์–ด์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

๋‹น์—ฐํžˆ ์„ฑ๋Šฅ์ด ๋น ๋ฅด์ง€๋Š” ์•Š๋‹ค.

์ด๋ ‡๊ฒŒ ๋งŽ์€ ๋ฐ์ดํ„ฐ์—์„œ ํŠน์ • ์†Œ๊ทœ๋ชจ ๊ฐ’๋งŒ ์ถ”์ถœํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.




์ธ๋ฑ์Šค ์ƒ์„ฑ

์ธ๋ฑ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

createIndex({ ์ธ๋ฑ์Šค๋Œ€์ƒA: 1 or -1, ... }, ์˜ต์…˜);

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๋ฉด number๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์ƒ๊ฒจ๋‚œ๋‹ค. ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์žˆ๋˜๊ฑธ ๋˜๋งŒ๋“œ๋ คํ•˜๋ฉด ๊ทธ๋ƒฅ ๋ฌด์‹œํ•œ๋‹ค.

๋ฐ˜๋Œ€๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด -1๋กœ ์ฃผ๋ฉด ๋œ๋‹ค.
๊ทธ๋Ÿผ ์กฐ๊ฑด์„ number๋กœ ๊ฑธ๋ฉด ์–ด์ง€๊ฐ„ํ•ด์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ฐธ์กฐํ•ด์„œ ๋” ๋น ๋ฅด๊ฒŒ ๊ธ์–ด์˜ฌ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ๋‹ค์‹œ explain์œผ๋กœ ์ฐ์–ด๋ณด๋ฉด

์ธ๋ฑ์Šค ์Šค์บ”์ธ IXSCAN์ด ๋œฐ ๊ฒƒ์ด๋‹ค.




์œ ์ผํ‚ค ์ธ๋ฑ์Šค(Unique Index)

์ด๊ฒƒ๋„ RDB์˜ ์œ ์ผํ‚ค์™€ ๋ณ„๋กœ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค. ์ธ๋ฑ์Šค์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ๋”ํ•ด ์œ ์ผ์„ฑ(unique)๊นŒ์ง€ ๋ณด์žฅํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๋งŒ๋“œ๋Š” ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค. ์˜ต์…˜์— unique ๊ฐ’๋งŒ true๋กœ ์ฃผ๋ฉด ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•œ ์ฑ„๋กœ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ‚ค๊ฐ’์— ๋˜ ์‚ฝ์ž… ์‹œ๋„๋ฅผ ํ•œ๋‹ค๋ฉด, ์ค‘๋ณต ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

upsert ๊ธฐ๋Šฅ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.