๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/mongoDB

[mongoDB] ์ƒค๋”ฉ(Sharding)

by dar0m! 2022. 7. 18.
  • 1) ์ƒค๋”ฉ(Sharding)์ด๋ž€?
    • 1.1) ์ƒค๋”ฉ์˜ ํ•„์š”์„ฑ
    • 1.2) ์ƒค๋”ฉ์˜ ์ข…๋ฅ˜
  • 2) MongoDB ์ƒค๋”ฉ ์•„ํ‚คํ…์ฒ˜
    • 2.1) ์ปจํ”ผ๊ทธ ์„œ๋ฒ„
      • ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ณต์ œ ๋ฐฉ์‹
  • 2.2) ๋ผ์šฐํ„ฐ
    • ์ฃผ์š” ์—ญํ• 
    • ์ฟผ๋ฆฌ ๋ถ„์‚ฐ
    • ๋ฐฐํฌ
  • 3) ์ƒค๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ์ฒญํฌ
    • 3.1) ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ(Range Sharding)
    • 3.2) ํ•ด์‹œ ์ƒค๋”ฉ(Hashed Sharding)
      • ์ œ์•ฝ ์‚ฌํ•ญ
    • 3.3) ์ง€์—ญ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ(Zone Sharding)
      • ์‚ฌ์šฉ ๋ชฉ์ 
  • 4) ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ
  • 5) ์ฒญํฌ ๋ฐธ๋Ÿฐ์‹ฑ
    • 5.1) ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐธ๋Ÿฐ์„œ
    • 5.2) ์ฒญํฌ ์Šคํ”Œ๋ฆฟ(Chunk split)
  • 6) ์ƒค๋”ฉ์œผ๋กœ ์ธํ•œ ์ œ์•ฝ
    • 6.1) ํŠธ๋žœ์žญ์…˜
    • 6.2) ์ƒค๋”ฉ๊ณผ ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค
    • 6.3) ์กฐ์ธ๊ณผ ๊ทธ๋ž˜ํ”„ ์ฟผ๋ฆฌ
  • ์ฐธ๊ณ ์ž๋ฃŒ

1) ์ƒค๋”ฉ(Sharding)์ด๋ž€?

์ƒค๋”ฉ์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ„์‚ฐํ•ด์„œ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ ์„ ๋งํ•œ๋‹ค.

MongoDB์˜ ๋ณต์ œ๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•œ ์†”๋ฃจ์…˜์ด๋ฉฐ, ์ƒค๋”ฉ์€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์†”๋ฃจ์…˜์ด๋‹ค.

 

MongoDB์— ์ƒค๋”ฉ์„ ์ ์šฉํ•˜๋ ค๋ฉด ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ(Sharded Cluster)๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•œ๋‹ค.

  1. ๋ผ์šฐํ„ฐ(Router)
  2. ์ƒค๋“œ ์„œ๋ฒ„(Shard server)
  3. ์ปจํ”ผ๊ทธ ์„œ๋ฒ„(Config server)

1.1) ์ƒค๋”ฉ์˜ ํ•„์š”์„ฑ

๊ธฐ์ˆ  ๋ฐœ์ „์— ๋”ฐ๋ผ ์ธํ„ฐ๋„ท์ด ๊ฐ€๋Šฅํ•œ ๋‹จ๋ง๊ธฐ๋Š” ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋งŒํผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ๋งŽ์ด ์ถœ์‹œ๋˜๊ณ , ๋ช‡๋ฐฑ๋งŒ ๋ช‡์ฒœ๋งŒ์˜ ์‚ฌ์šฉ์ž๋ฅผ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ๋„ ์˜ˆ์‚ฟ์ผ์ด๋‹ค.

๊ทธ๋งŒํผ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ์ด ์ค‘์š”ํ•ด์กŒ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹จ์ˆœํžˆ ์„œ๋ฒ„๋งŒ ํˆฌ์ž…ํ•œ๋‹ค๊ณ  ํ•ด์„œ ํ™•์žฅ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ๋ถ„์‚ฐ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋ฏธ๋ฆฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋ฅผ ์ƒค๋”ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ฒ˜์Œ์— ์ƒค๋”ฉ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๋˜ ์„œ๋น„์Šค์—์„œ ์ƒค๋”ฉ์˜ ํ•„์š”์„ฑ์„ ๋Š๋‚€๋‹ค → ์ด๋ฏธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ๋Ÿ‰ ํ•œ๊ณ„์— ๋‹ค๋‹ค๋ฆ„

๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ vs ๋งŽ์€ ์‚ฌ์šฉ๋Ÿ‰ ๋”œ๋ ˆ๋งˆ. ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒค๋”ฉ์„ ์ ์šฉํ• ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์€ ํ”ผํ•  ์ˆ˜ ์—†๋Š” ์„ค๊ณ„ ๊ณผ์ •์ด๋‹ค.

1.2) ์ƒค๋”ฉ์˜ ์ข…๋ฅ˜


์ข…๋ฅ˜ํŠน์ง•
1 ์ˆ˜ํ‰(Horizontal)

์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹
ํ•˜๋‚˜์˜ ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ๋„ํ๋จผํŠธ๋“ค์„ ์˜์—ญ๋ณ„๋กœ ํŒŒํ‹ฐ์…”๋‹ํ•ด์„œ 1/N๊ฐœ์”ฉ ๊ฐ ์ƒค๋“œ๊ฐ€ ๋‚˜๋ˆ  ๊ฐ€์ง€๋Š” ๋ฐฉ์‹
  • ๊ธฐ์ค€์ด ๋˜๋Š” ํ•„๋“œ(์ปฌ๋Ÿผ) ์„ ์ •์ด ๋งค์šฐ ์ค‘์š”ํ•จ. ํŒŒํ‹ฐ์…˜ ํ‚ค์— ๋”ฐ๋ผ ๊ฐ ์ƒค๋“œ์˜ ๋ถ€ํ•˜๊ฐ€ ๊ท ๋“ฑํ•ด์งˆ ์ˆ˜๋„ ์žˆ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
2 ์ˆ˜์ง(Vertical) ๊ธฐ๋Šฅ๋ณ„๋กœ ์ปฌ๋ ‰์…˜์„ ๊ทธ๋ฃนํ•‘ํ•˜์—ฌ ๊ทธ๋ฃน๋ณ„๋กœ ์ƒค๋“œ๋ฅผ ํ• ๋‹น
์žฅ์ 
  • ๊ตฌํ˜„์ด ๊ฐ„๋‹จ
  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณ€ํ™” ์ตœ์†Œํ™”
๋‹จ์ 
  • ์ปฌ๋ ‰์…˜๋ณ„๋กœ ์ฟผ๋ฆฌ ์ƒค์šฉ๋Ÿ‰์ด ๊ฐ™์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒค๋“œ ๊ฐ„ ๋ถ€ํ•˜์˜ ๋ถˆ๊ท ํ˜•์ด ์žฆ์Œ

2) MongoDB ์ƒค๋”ฉ ์•„ํ‚คํ…์ฒ˜

  1. ๋ผ์šฐํ„ฐ(Router)
    1. ์˜๊ตฌ์  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์Œ
    2. ์‚ฌ์šฉ์ž์˜ ์ฟผ๋ฆฌ๋ฅผ ์–ด๋–ค ์ƒค๋“œ๋กœ ์ „๋‹ฌํ• ์ง€ ์ •ํ•˜๊ณ , ๊ฐ ์ƒค๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘ํ•ฉํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋˜๋Œ๋ ค์ฃผ๋Š” ์—ญํ• 
    3. ์ƒค๋“œ๊ฐ„ ์ฒญํฌ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐ ์ฒญํฌ ์Šคํ”Œ๋ฆฟ ์ˆ˜ํ–‰
    4. ์ผ์ข…์˜ ํ”„๋ก์‹œ ์—ญํ• 
  2. ์ƒค๋“œ ์„œ๋ฒ„(Shard server)
    1. ์˜๊ตฌ์  ๋ฐ์ดํ„ฐ ์ €์žฅ
    2. ์‹ค์ œ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ
  3. ์ปจํ”ผ๊ทธ ์„œ๋ฒ„(Config server)
    1. ์˜๊ตฌ์  ๋ฐ์ดํ„ฐ ์ €์žฅ
    2. ์ƒค๋“œ ์„œ๋ฒ„์— ์ €์žฅ๋œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์Šคํ”Œ๋ฆฟ ๋˜์–ด์„œ ๋ถ„์‚ฐ๋ผ ์žˆ๋Š”์ง€์— ๊ด€ํ•œ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ €์žฅ

์ฒญํฌ(Chunk) : ์ปฌ๋ ‰์…˜์„ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ํŒŒํ‹ฐ์…˜ํ•˜๊ณ  ๊ฐ ์กฐ๊ฐ์„ ์—ฌ๋Ÿฌ ์ƒค๋“œ ์„œ๋ฒ„์— ๋ถ„์‚ฐํ•ด์„œ ์ €์žฅํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์„ ์ฒญํฌ๋ผ๊ณ  ํ•œ๋‹ค.

 

๋ผ์šฐํ„ฐ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ๊ณผ์ •

  1. ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋ ‰์…˜์˜ ์ฒญํฌ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์™€์„œ ๋ผ์šฐํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œ
    1. (๋ผ์šฐํ„ฐ๊ฐ€ ์ฒญํฌ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ฑฐ๋‚˜, ์ฒญํฌ ๋ฉ”ํƒ€ ์ •๋ณด๊ฐ€ ์˜ค๋ž˜๋ผ์„œ ๋งž์ง€ ์•Š์„ ๋•Œ์—๋งŒ ์ˆ˜ํ–‰๋จ) → ์ปจํ”ผ๊ทธ ์„œ๋ฒ„๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ๊ฑฐ์˜ ์—†๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€
  2. ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ์˜ ์กฐ๊ฑด์—์„œ ์ƒค๋”ฉ ํ‚ค ์กฐ๊ฑด์„ ์ฐพ์Œ
    1. ์ฟผ๋ฆฌ ์กฐ๊ฑด์— ์ƒค๋”ฉ ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ƒค๋”ฉ ํ‚ค๊ฐ€ ํฌํ•จ๋œ ์ฒญํฌ ์ •๋ณด๋ฅผ ๋ผ์šฐํ„ฐ์˜ ์บ์‹œ์—์„œ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ•ด๋‹น ์ƒค๋“œ ์„œ๋ฒ„๋กœ๋งŒ ์ƒค์šฉ์ž ์ฟผ๋ฆฌ ์š”์ฒญ
      1. ์ƒค๋”ฉ ํ‚ค ์กฐ๊ฑด์— ํฌํ•จ๋œ ์ฒญํฌ๊ฐ€ ์—ฌ๋Ÿฌ ์ƒค๋“œ์— ๊ฑธ์ณ ์žˆ๋‹ค๋ฉด ๋Œ€์ƒ์ด ๋˜๋Š” ์—ฌ๋Ÿฌ ์ƒค๋“œ ์„œ๋ฒ„์— ์ฟผ๋ฆฌ๋ฅผ ์š”์ฒญ
    2. ์ฟผ๋ฆฌ ์กฐ๊ฑด์— ์ƒค๋”ฉ ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ๋ชจ๋“  ์ƒค๋“œ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ์ž์˜ ์ฟผ๋ฆฌ ์š”์ฒญ
  3. ์ฟผ๋ฆฌ๋ฅผ ์ „์†กํ•œ ๋Œ€์ƒ ์ƒค๋“œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

2.1) ์ปจํ”ผ๊ทธ ์„œ๋ฒ„

์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์šด์˜ํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ €์žฅ (databases, collections, chunks, chards, mongos)

์ผ๋ฐ˜์ ์œผ๋กœ ๋ผ์šฐํ„ฐ(mongos)๋ฅผ ์ด์šฉํ•ด์„œ MongoDB ํด๋Ÿฌ์Šคํ„ฐ์— ๋กœ๊ทธ์ธํ•œ ๋‹ค์Œ 'config' ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ด๋™ํ•˜๋ฉด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๋ผ์šฐํ„ฐ์˜ 'config'๋Š” ์ปจํ”ผ๊ทธ ์„œ๋ฒ„๋กœ ์ ‘์†ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค. ๊ทธ ์ด์™ธ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ปฌ๋ ‰์…˜์€ ์ƒค๋“œ ์„œ๋ฒ„๋กœ ์ฟผ๋ฆฌ๋ฅผ ์š”์ฒญํ•œ๋‹ค.

์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ณต์ œ ๋ฐฉ์‹

  1. SCCC(Sync Cluster Connection Config) - 3.2 ๋ฒ„์ „๋ถ€ํ„ฐ Deprecated
    1. ๋ฏธ๋Ÿฌ๋ง ๋ฐฉ์‹์œผ๋กœ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”
    2. ๋ฏธ๋Ÿฌ๋ง ๋ฐฉ์‹: ์„œ๋กœ ์ „ํ˜€ ๊ด€๊ณ„ ์—†์ด ์ž‘๋™ํ•˜๋Š” ์ปจํ”ผ๊ทธ ์„œ๋ฒ„๋ฅผ ๊ฐ๊ฐ ๋”ฐ๋กœ ์„ค์น˜ํ•˜๊ณ  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ(๋ผ์šฐํ„ฐ: mongos)์—์„œ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์— ๋ชจ๋‘ ์ ‘์†ํ•˜์—ฌ ๊ฐ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ์‹.
    3. ๋ผ์šฐํ„ฐ ์„œ๋ฒ„๊ฐ€ ์ฒญํฌ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋ฉด, ๋ชจ๋“  ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ์ฒญํฌ ์ •๋ณด ๋ณ€๊ฒฝ(update)๋ฌธ์žฅ์„ ๊ฐ๊ฐ ์‹คํ–‰ํ•จ. ์™„๋ฃŒ๋˜๋ฉด ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•จ →  ์ปจํ”ผ๊ทธ ์„œ๋ฒ„๊ฐ€ ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๊ตฌํ˜„์ด ์–ด๋ ต๊ณ  ๋™๊ธฐํ™” ๋ฌธ์ œ ์ž์ฃผ ์œ ๋ฐœ.
      1. ex) ์ž ๊ธˆ ํ…Œ์ด๋ธ”(locks, lockpings)์„ ๋™๊ธฐํ™”ํ•˜์ง€ ๋ชปํ•ด ๋ผ์šฐํ„ฐ ์„œ๋ฒ„๊ฐ€ ์ฒญํฌ ์Šคํ”Œ๋ฆฟ์ด๋‚˜ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•จ.
  2. ๋ ˆํ”Œ๋ฆฌ์นด ์…‹(CSRS: Config Servers as Replica Sets)
    1. ์ƒค๋“œ ์„œ๋ฒ„์ฒ˜๋Ÿผ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ. ์ฆ‰ ์ƒค๋“œ ์„œ๋ฒ„์™€ ๊ตฌ์„ฑ ๋ฐฉ์‹์ด ๊ฐ™์•„์ง.
    2. ์กฐ๊ฑด
      1. ์ปจํ”ผ๊ทธ ์„œ๋ฒ„๋Š” ๋ฐ˜๋“œ์‹œ WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
      2. ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์€ ์•„๋น„ํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค
        1. ์•„๋น„ํ„ฐ : ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์˜ ๋ฉค๋ฒ„๋กœ ํ”„๋ผ์ด๋จธ๋ฆฌ ์„ ์ถœ ๊ด€์—ฌ. but, ์‹ค์ œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๊ด€์—ฌ X, ๋ฉค๋ฒ„๋กœ๋ถ€ํ„ฐ Oplog ๊ฐ€์ ธ์˜ค์ง€๋„ ์•Š์Œ
      3. ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์€ ์ง€์—ฐ๋œ ๋ฉค๋ฒ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.
      4. ์ตœ์†Œ 3๊ฐœ ์ด์ƒ์˜ ๋ฉค๋ฒ„๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค.(๊ถŒ์žฅ)
    3. ํด๋ผ์ด์–ธํŠธ๋Š” ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ„๋กœ ์ ‘์†ํ•˜์—ฌ ์ฟผ๋ฆฌ๋‚˜ ๋ณ€๊ฒฝ ๋ช…๋ น์„ ์‹คํ–‰
    4. Read Concern ์ด๋‚˜ Write Concern ์€ majority ๋กœ ์„ค์ •. → ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ„๊ฐ€ ์ผ์‹œ์ ์ธ ์žฅ์• ๋กœ ๋ณต๊ตฌ๋์„ ๋–„ ๋กค๋ฐฑ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ
      1. ๋ ˆํ”Œ๋ฆฌ์นด ์…‹ ๋ฉค๋ฒ„์˜ ๊ณผ๋ฐ˜์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ๋งŒ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ
      2. ์ปจํ”ผ๊ทธ ์„œ๋ฒ„๊ฐ€ 2๋Œ€์ผ ๋–„๋Š” ๋ฉค๋ฒ„ ์ค‘ ํ•˜๋‚˜๋งŒ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•„๋„ ๋ฉ”ํƒ€ ์ •๋ณด ์กฐํšŒ์™€ ์‚ญ์ œ๋ฅผ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

 

 Read Concern

 

2.2) ๋ผ์šฐํ„ฐ

์‚ฌ์šฉ์ž์˜ ์ฟผ๋ฆฌ ์š”์ฒญ์„ ์ƒค๋“œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๊ณ , ์ƒค๋“œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„์„œ ๋‹ค์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ”„๋ก์‹œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ฃผ์š” ์—ญํ• 

  • ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•  ์ƒค๋“œ ์„œ๋ฒ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ํ•ด๋‹น ์ƒค๋“œ๋กœ ์ฟผ๋ฆฌ ์ „์†ก
  • ์ƒค๋“œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
  • ์ƒค๋“œ๊ฐ„ ์ฒญํฌ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐ ์ฒญํฌ ์Šคํ”Œ๋ฆฟ ์ˆ˜ํ–‰

์ปจํ”ผ๊ทธ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•˜๊ณ  ์žˆ์–ด์„œ ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ๋ฅผ ๋ฐ›์œผ๋ฉด ๊ทธ ์ฟผ๋ฆฌ๋ฅผ ์–ด๋Š ์ƒค๋“œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•ด์•ผ ํ• ์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒค๋“œ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง€์ง€ ๋ง์•„์•ผ ํ•  ๋ฐ์ดํ„ฐ์ธ์ง€ ํŒ๋‹จํ•˜๊ณ , ๊ฐ€์ง€์ง€ ๋ง์•„์•ผ ํ•  ๋ฐ์ดํ„ฐ๋ผ๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

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

์ด๋Ÿฐ ํ•„ํ„ฐ๋ง์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋‚˜ ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜๋  ์ˆ˜ ์žˆ๋‹ค.

์ฟผ๋ฆฌ ๋ถ„์‚ฐ

์ƒค๋“œ ํ‚ค ์กฐ๊ฑด์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด์„œ ์ƒค๋“œ ์„œ๋ฒ„๋“ค์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํƒ€๊ฒŸ ์ฟผ๋ฆฌ
    • ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์•„์ฃผ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์œ ์ž…๋˜๋Š” ์„œ๋น„์Šค์—์„œ ์œ ๋ฆฌ
  • ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฟผ๋ฆฌ
    • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ€์ง€๋งŒ ๋นˆ๋ฒˆํ•˜์ง€ ์•Š์€ ๋ฐฐ์น˜ ํ˜•ํƒœ์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋ชจ๋“  ์ƒค๋“œ๋ฅผ ๊ณจ๊ณ ๋ฃจ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ๋„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    • ์ƒค๋“œ ํ‚ค๋ฅผ ์ฟผ๋ฆฌ ์กฐ๊ฑด์œผ๋กœ ๊ฐ€์ง€์ง€ ์•Š์•„ ์ž‘์—… ๋ฒ”์œ„๋ฅผ ํŠน์ • ์ƒค๋“œ๋กœ ์ค„์ผ ์ˆ˜ ์—†๋‹ค.

๋ฐฐํฌ

์ผ๋ฐ˜์ ์œผ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ๋ผ์šฐํ„ฐ๋ฅผ ๋ฐฐํฌํ•จ - MongoDB ์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ์‹

์žฅ์ 

  • ๊ณ ๊ฐ€์šฉ์„ฑ
  • ๋„คํŠธ์›Œํฌ ๋ ˆ์ดํ„ด์‹œ ์ตœ์†Œํ™”
    • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„์™€ MongoDB ๋ผ์šฐํ„ฐ๊ฐ€ ๊ฐ™์€ ๋ฌผ๋ฆฌ ์„œ๋ฒ„์— ์œ„์น˜ํ•จ

๋‹จ์ 

  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„์˜ ๋Œ€์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์–ด๋‚  ์ˆ˜๋ก MongoDB ์ƒค๋“œ ์„œ๋ฒ„ ์ž…์žฅ์—์„œ๋Š” ์ปค๋„ฅ์…˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.
  • ์‹คํ–‰ ์ค‘์ธ MongoDB ๋ผ์šฐํ„ฐ๋งŒ ์‘๋‹ตํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„๊ฐ€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ถ€๋ถ„
    • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ → ์‚ฌ์šฉ์ž ์š”์ฒญ์€ ์œ ์ž…, ์‹ค์ œ ์ฒ˜๋ฆฌ๋Š” ํ•˜๋‚˜๋„ ์™„๋ฃŒํ•˜์ง€ ๋ชปํ•จ.
    • ์‚ฌ์šฉ์ž ์š”์ฒญ์ด ๋”์ด์ƒ ์œ ์ž…๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋“ฑ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•จ.

 

๊ทธ ์™ธ๋กœ ์ „์šฉ ๋ผ์šฐํ„ฐ ์„œ๋ฒ„ ๋ฐฐํฌ, L4์™€ ํ•จ๊ป˜ ๋ฐฐํฌ ๋ฐฉ์‹ ๋“ฑ์ด ์žˆ๋‹ค.

 ๋ฐฐํฌ ๋ฐฉ์‹

 

3) ์ƒค๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜

MongoDB ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋‹ค. ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์˜ ๊ทผ๊ฐ„์€ ๋ฐ”๋กœ ์—ฌ๋Ÿฌ ์ƒค๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ๊ธฐ์ค€์ด๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ ๊ธฐ์ค€์„ ์ƒค๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•œ๋‹ค.

  1. ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ
  2. ํ•ด์‹œ ์ƒค๋”ฉ (๊ถŒ์žฅ)
  3. ์ง€์—ญ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ

์ฒญํฌ

์ปฌ๋ ‰์…˜์„ ์ƒค๋“œ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ํŒŒํ‹ฐ์…˜ํ•˜๊ณ  ๊ฐ ์กฐ๊ฐ์„ ์—ฌ๋Ÿฌ ์ƒค๋“œ ์„œ๋ฒ„์— ๋ถ„์‚ฐํ•ด์„œ ์ €์žฅํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ(ํŒŒํ‹ฐ์…˜)์„ ์ฒญํฌ๋ผ๊ณ  ํ•œ๋‹ค.

์ฒญํฌ๋Š” ์ƒค๋“œ ํ‚ค์˜ ์›๋ณธ ๊ฐ’ ๋˜๋Š” ํ•ด์‹œ ๊ฐ’์˜ ์ผ์ • ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ฒญํฌ์˜ ์‹ค์ฒด๋Š” ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋กœ๋งŒ ์กด์žฌํ•˜๊ณ , ์‹ค์ œ ๊ฐ MongoDB์˜ ์ƒค๋“œ ์„œ๋ฒ„๋Š” ์ฒญํฌ๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์•Œ ํ•„์š”๋„ ์—†๋‹ค.

ํ•˜์ง€๋งŒ ์ฒญํฌ๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ๋งŒ ์กด์žฌํ•˜๋Š ใ„ด๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒค๋“œ๊ฐ„ ์ฒญํฌ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒญํฌ ๊ฐœ์ˆ˜ ๋ถˆ๊ท ํ˜•→ ๋‹ค๋ฅธ ์ƒค๋“œ๋กœ ์˜ฎ๊ฒจ์ง → MongoDB ์ƒค๋“œ ์„œ๋ฒ„์—์„œ๋Š” INSERT์™€ DELETE๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ 64MB ์ •๋„๊นŒ์ง€ ์ปค์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ์ด์ƒ์œผ๋กœ ์ปค์ง€๋ฉด ๋ฐธ๋Ÿฐ์„œ์— ์˜ํ•ด์„œ ์ž๋™์œผ๋กœ ์Šคํ”Œ๋ฆฟ๋œ๋‹ค.

3.1) ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ(Range Sharding)

์ƒค๋“œ์˜ ํ‚ค ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋ฒ”์œ„๋ฅผ ๋‚˜๋ˆ„๊ณ , ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋Š ์ฒญํฌ์— ํฌํ•จ๋ ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์ƒค๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ƒค๋“œ ํ‚ค ๊ฐ’์ด ๊ทธ ์ž์ฒด๋กœ ์ •๋ ฌ๋ผ์„œ ๊ฐ ์ฒญํฌ์˜ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.(์–ด๋Š ์ƒค๋“œ ์„œ๋ฒ„๋กœ ์ €์žฅ๋ ์ง€๋Š” ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ์˜ ๋ชฉ์ ์ด๋‚˜ ์—ญํ• ์ด ์•„๋‹˜. ๋‹จ์ˆœ ์ฒญํฌ์˜ ๋ฒ”์ฃผ ๊ฐ’์„ ๊ฒฐ์ •)

์žฅ์ 

  • ๋ฒ”์œ„ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ ํƒ€๊ฒŸ ์ฟผ๋ฆฌ(Target Query)๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

๋‹จ์  

  • ์ƒค๋“œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ท ํ˜• ์žˆ๊ฒŒ ๋ถ„์‚ฐ๋˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
    • ํ•œ ๋ฒ”์œ„์— ์†ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด, ๋ฐ์ดํ„ฐ ๋ถˆ๊ท ํ˜• → ์ ๋ณด ์ฒญํฌ ๋ฌธ์ œ, ์ƒค๋“œ ์„œ๋ฒ„์˜ ์ž์›์„ ๊ท ํ˜• ์žˆ๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•จ → ๋ถˆ๊ท ํ˜•์ด ์‹ฌํ•ด์ง€๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„ฑ๋Šฅ์ด ๋‚˜์•„์ง€์ง€ ์•Š์Œ.
    • ์ž˜๋ชป ์„ ํƒ๋œ ์ƒค๋“œ ํ‚ค๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ถˆ๊ท ํ˜•๊ณผ ์ƒค๋“œ ๊ฐ„ ์ฒญํฌ ์ด๋™ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ์ œ๋Œ€๋กœ ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.

→ ๊ฐ€๋Šฅํ•œ ํ•ด์‹œ ์ƒค๋”ฉ์„ ์‚ฌ์šฉํ•˜๊ณ  ํ•ด์‹œ ์ƒค๋”ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ ๋ ˆ์ธ์ง€ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅ

3.2) ํ•ด์‹œ ์ƒค๋”ฉ(Hashed Sharding)

์ƒค๋“œ ํ‚ค ๊ฐ’์˜ ํ•ด์‹œ๊ฐ’์„ ์ด์šฉํ•ด์„œ ์ฒญํฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ƒค๋”ฉ ๋ฐฉ์‹ MD5 ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค. ์š”์ฆ˜์—๋Š” ์ถฉ๋Œ์ด์Šˆ๋กœ ๋ฆฌ๋ฒ„์Šค ํ•ด์‹œ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์ƒค๋“œ ํ‚ค๋Š” ์•”ํ˜ธํ™”๊ฐ€ ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ์ด ์ฃผ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— MD5 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•ด์‹œ ์ƒค๋”ฉ๋„ ๊ฒฐ๊ตญ ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ์˜ ์ผ์ข…์ด๋‹ค. 64bit ์ •์ˆ˜๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์œผ ใ…ฃ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ์ปค๋ฒ„ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐ ์ฒญํฌ๋Š” 64bit ์ •์ˆ˜์˜ ์—ฐ์†๋œ ๊ฐ’์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ๊ณผ ๋™์ผํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒค๋“œ ํ‚ค์˜ ํ•ด์‹œ ๊ฒฐ๊ด๊ฐ’์œผ๋กœ ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์•”ํ˜ธํ™” ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์ง€์ •๋œ ๋ฒ”์œ„ ๋‚ด์—์„œ ๋งค์šฐ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํฌ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒค๋“œ ํ‚ค์˜ ๊ฐ’์ด ๋น„์Šทํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค ํ•˜๋”๋ผ๋„ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ด๊ฐ’์€ ๋งค์šฐ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์นœ ์ƒค๋“œ ํ‚ค ๊ฐ’์€ ์ „์ฒด ๋ฒ”์œ„์— ๋Œ€ํ•ด์„œ ๊ณจ๊ณ ๋ฃจ ๋ถ„์‚ฐ๋˜๋Š” ํšจ๊ณผ๋ฅผ ๋‚ด๊ฒŒ ๋œ๋‹ค.

→ ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ์ด ๊ฐ€์ง€๋Š” ๋Œ€ํ‘œ์ ์ธ ๋‹จ์ ์„ ์ œ๊ฑฐ 1. ์ƒค๋“œ ํ‚ค ๊ฐ’์ด ํŠน์ • ๋ฒ”์œ„์— ์ง‘์ค‘๋˜์–ด ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ถˆ๊ท ํ˜• 2. ์—ฐ์†๋œ ์ƒค๋“œ ํ‚ค ์•ก์„ธ์Šค๋กœ ์ธํ•œ ํŠน์ • ์ƒค๋“œ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜ ํŽธ์ค‘

์ œ์•ฝ ์‚ฌํ•ญ

  • ๋ฒ”์œ„ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฟผ๋ฆฌ๋กœ ์‹คํ–‰
    • ์ƒค๋“œ ํ‚ค์˜ ์›๋ณธ์ด ์•„๋‹Œ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ด๊ฐ’์œผ๋กœ ์ฒญํฌ๋ฅผ ๋ถ„์‚ฐํ•˜๊ธฐ ๋–„๋ฌธ์— ์›๋ณธ๊ฐ’์˜ ๋ฒ”์œ„ ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ ํŠน์ • ์ฒญํฌ๋ฅผ ํ•œ์ •ํ•  ์ˆ˜ ์—†์–ด ํƒ€๊ฒŸ ์ฟผ๋ฆฌ๋กœ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ์ƒค๋“œ ํ‚ค ํ•„๋“œ์— ๋Œ€ํ•ด์„œ ํ•ด์‹œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•จ
    • ์ƒค๋“œ ํ‚ค ํ•„๋“œ์— ๋Œ€ํ•ด ํ•ด์‹œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ๋งŒ ํ•ด์‹œ ์ƒค๋”ฉ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. → ํ•ด์‹œ ์ธ๋ฑ์Šค์˜ ์ œ์•ฝ ์‚ฌํ•ญ์ด ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค.
    • ํ•ด์‹œ ์ธ๋ฑ์Šค
      • ๋‹จ์ผ ํ•„๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ํ•ด์‹œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ
      • ๋ฉ€ํ‹ฐ ํ‚ค ํ•„๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ํ•ด์‹œ ์ธ๋ฑ์Šค ์ƒ์„ฑ ๋ถˆ๊ฐ€
      • ๋ถ€๋™ ์†Œ์ˆ˜์  ํ•„๋“œ๋Š” ์†Œ์ˆ˜์  ์ดํ•˜๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ํ•ด์‹œ ํ•จ์ˆ˜ ์ˆ˜ํ–‰
      • 2^53๋ณด๋‹ค ํฐ ๋ถ€๋™์†Œ์ˆ˜์ ์— ๋Œ€ํ•ด์„œ๋Š” ํ•ด์‹œ ์ธ๋ฑ์Šค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ

3.3) ์ง€์—ญ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ(Zone Sharding)

๋ ˆ์ธ์ง€ ์ƒค๋”ฉ์ด๋‚˜ ํ•ด์‹œ ์ƒค๋”ฉ๊ณผ ๋ฐ˜๋“œ์‹œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ์ด๋‚˜ ํ•ด์‹œ ์ƒค๋”ฉ์€ ์ƒค๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ, ์ง€์—ญ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ์€ ์„ ํƒ์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์น˜ ์˜ต์…˜์ฒ˜๋Ÿผ.

์ฆ‰, ๊ด€์‹ฌ ๋Œ€์ƒ์˜ ๋ฐ์ดํ„ฐ์—๋งŒ ์ƒค๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ ๋ชฉ์ 

  • ์ง€์—ญ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ์˜ ๊ตฌ๋ถ„
  • ํŠน์ • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •๋œ ์ƒค๋“œ ์„œ๋ฒ„๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๊ด€๋ฆฌ
  • ์ƒค๋“œ ์„œ๋ฒ„์˜ ํด๋ž˜์Šค(์ƒค๋“œ ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์ด๋‚˜ ์ €์žฅ๊ณต๊ฐ„)๋ณ„๋กœ ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„

 

์ง€์—ญ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ์ด๋‚˜ ํ•ด์‹œ ์ƒค๋”ฉ์„ ํ•œ ์ƒํƒœ์—์„œ ์ถ”๊ฐ€๋กœ ๋‘ ๊ฐ€์ง€ ์ค€๋น„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  1. ์ƒค๋“œ๋ณ„๋กœ ํƒœ๊ทธ๋ฅผ ํ• ๋‹นํ•˜๊ณ 
  2. ์ƒค๋“œ ํ‚ค ๋ฒ”์œ„๋ณ„๋กœ ํƒœ๊ทธ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
์ƒค๋“œ๋ณ„๋กœ ํƒœ๊ทธ ํ• ๋‹น
mongos> sh.addShardTag("shard-01", "KR")
mongos> sh.addShardTag("shard-02", "KR")
mongos> sh.addShardTag("shard-03", "US")

 

4) ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ

์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.

ํ”„๋ผ์ด๋จธ๋ฆฌ์ƒค๋“œ๋ž€ ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒค๋”ฉ ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜๋“ค์„ ์ €์žฅํ•˜๋Š” ์ƒค๋“œ๋ฅผ ๋œปํ•จ. ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ์™€๋Š” ์ „ํ˜€ ๋ฌด๊ด€ํ•˜๋‹ค.

 

์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ฒ˜์Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๊ฐ ์ƒค๋“œ ์ค‘์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ์ ๊ฒŒ ๊ฐ€์ง„ ์ƒค๋“œ๋ฅผ ์„ ํƒํ•ด์„œ ์ƒ์„ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๋กœ ์„ค์ •ํ•œ๋‹ค.

์ƒค๋”ฉ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜์„ ์–ด๋Š ์ƒค๋“œ์— ์ €์žฅํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๊ธฐ์ค€์ด ๋˜๋Š” ์ •๋ณด๊ฐ€ ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๋‹ค.

 

ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๋Š” ๋‹ค๋ฅธ ์ƒค๋“œ๋กœ ์˜ฎ๊ฒจ์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๋ฅผ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์€ MongoDB ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํŠน์ • ์ƒค๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ ์ž ํ•  ๋•Œ ํ•„์š”ํ•˜๋‹ค.

movePrimary ๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ MongoDB ๋ผ์šฐํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ช…๋ น์œผ๋กœ ์˜ฎ๊ฒจ์ง€๋Š” ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋˜ํ•œ ์ƒค๋”ฉ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜์ด ์ƒˆ๋กœ์šด ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๋กœ ์˜ฎ๊ฒจ์ง€๊ณ  ๋‚œ ์ดํ›„์— ํ•ด๋‹น ์ปฌ๋ ‰์…˜์˜ ์ธ๋ฑ์Šค ์ƒ์„ฑ์ด ์‹คํ–‰๋ผ์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ์ธ๋ฑ์Šค ์ƒ์„ฑ์€ ํฌ๊ทธ๋ผ์šด๋“œ(Foreground) ๋ชจ๋“œ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ์ƒ์„ฑ ์‹œ๊ฐ„ ๋™์•ˆ ๊ทธ ์ปฌ๋ ‰์…˜์ด ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด์„œ ์ฝ๊ธฐ์™€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. ๋งŒ์•ฝ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์˜ฎ๊ฒจ์ ธ์•ผ ํ•˜๋Š” ์ปฌ๋ ‰์…˜์ด ํฌ๊ณ  ๋งŽ๋‹ค๋ฉด ํ•ด๋‹น ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฝ๊ธฐ๋‚˜ ๋ณ€๊ฒฝ ์ฟผ๋ฆฌ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ์„œ๋น„์Šค ์ „์ฒด๋ฅผ ์ ๊ฒ€ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๋˜ํ•œ ๋ชจ๋“  MongoDB ๋ผ์šฐํ„ฐ์—๊ฒŒ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. ๋ชจ๋“  MongoDB ๋ผ์šฐํ„ฐ ์žฌ์‹œ์ž‘
  2. ๋ชจ๋“  MongoDB ๋ผ์šฐํ„ฐ์—์„œ flushRouterConfig ๋ช…๋ น ์‹คํ–‰
    1. ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ ์ •๋ณด๋งŒ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒค๋”ฉ๋œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์˜ ๋ฉ”ํƒ€ ์ •๋ณด(์ปฌ๋ ‰์…˜์˜ ์ฒญํฌ ๋ชฉ๋ก๊ณผ ๊ฐ ์ฒญํฌ์˜ ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’ ์ •๋ณด)๋ฅผ ๋ชจ๋‘ ๊ฐฑ์‹ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋™์‹œ์— ์ˆ˜๋ฐฑ ๋Œ€์˜ MongoDB ๋ผ์šฐํ„ฐ์—์„œ ์‹คํ–‰ํ•  ๋•Œ์—๋Š” ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ๋†’์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์€ ์„œ๋น„์Šค์— ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ž‘์—…์ด๋‹ค. ์ƒค๋”ฉ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด ์ ๊ฒ€ ๋ชจ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋„๋ก ํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์—์„œ ์ƒค๋”ฉ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜์€ ๋ณดํ˜ธ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์กด์žฌ์™€ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€๋Šฅํ•œ ์ƒค๋”ฉ์„ ์ ์šฉํ•˜๋„๋ก ํ•˜์ž.

5) ์ฒญํฌ ๋ฐธ๋Ÿฐ์‹ฑ

MongoDB์˜ ๊ฐ ์ƒค๋“œ ์„œ๋ฒ„๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์„œ๋กœ ๊ท ๋“ฑํ•œ ์ˆ˜์ค€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹ค. ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ์ƒค๋“œ๊ฐ€ ๋™๋“ฑํ•œ ๋ถ€ํ•˜์˜ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๊ทธ ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ตœ๊ณ ์˜ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ ์ƒค๋“œ๊ฐ€ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ์˜ ๋ถˆ๊ท ํ˜•์€ ์–ธ์ œ๋“ ์ง€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

MongoDB๋Š” ์ด๋Ÿฌํ•œ ์ƒค๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถˆ๊ท ํ˜• ํ˜„์ƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ตœ๋Œ€ํ•œ ๊ฐ ์ƒค๋“œ๊ฐ€ ๊ฐ€์ง„ ์ฒญํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹ค. ๋˜ํ•œ ์ฒญํฌ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๋ฉด ์ƒค๋“œ ์„œ๋ฒ„๋Š” ์ฒญํฌ ํ•˜๋‚˜์˜ ์ด๋™์— ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ์Šคํ…œ ์ž์›์„ ์†Œ๋ชจํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๊ฐ ์ฒญํฌ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ฒญํฌ๋ฅผ ์Šคํ”Œ๋ฆฟํ•ด์•ผ ํ• ์ง€ ์ฒดํฌํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

5.1) ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐธ๋Ÿฐ์„œ

๋ฐธ๋Ÿฐ์„œ๋Š” ๊ฐ ์ƒค๋“œ๊ฐ„ ์ฒญํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋‹ค๊ฐ€ ๊ฐ ์ƒค๋“œ์˜ ์ฒญํฌ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์ • ์ˆ˜์น˜ ์ด์ƒ ์ฐจ์ด๋‚˜๋ฉด(๋ถˆ๊ท ๋“ฑํ•ด์ง€๋ฉด) ์ ์ ˆํžˆ ์ฒญํฌ๋ฅผ ์˜ฎ๊ฒจ์„œ ์ƒค๋“œ ๊ฐ„ ๋ถ€ํ–์˜ ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค.

๋ถˆ๊ท ํ˜•์„ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์€ ์ฒญํฌ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ๊ฐ€์ง„ ์ƒค๋“œ์™€ ์ฒญํฌ๋ฅผ ๊ฐ€์žฅ ์ ๊ฒŒ ๊ฐ€์ง„ ์ƒค๋“œ์˜ ์ฒญํฌ ๊ฐœ์ˆ˜๊ฐ€ ์ž„๊ณ„์น˜ ์ด์ƒ ์ฐจ์ด๊ฐ€ ๋‚˜๋ฉด ์ฒญํฌ ์ด๋™์„ ์‹คํ–‰ํ•œ๋‹ค.

์ „์ฒด ์ฒญํฌ ์ˆ˜๊ธฐ์ค€ ์น˜(Threshold)
20๊ฐœ ๋ฏธ๋งŒ์˜ ์ฒญํฌ๋ฅผ ๊ฐ€์ง„ ์ปฌ๋ ‰์…˜ 2
20๊ฐœ~79๊ฐœ ์‚ฌ์ด์˜ ์ฒญํฌ๋ฅผ ๊ฐ€์ง„ ์ปฌ๋ ‰์…˜ 4
80๊ฐœ ์ด์ƒ์˜ ์ฒญํฌ๋ฅผ ๊ฐ€์ง„ ์ปฌ๋ ‰์…˜  8

์ž„๊ณ„์น˜๋ฅผ ์ •ํ•ด๋‘” ์ด์œ ๋Š” ์ฒญํฌ ์ด๋™ ๋น„์šฉ์ด ๋งค์šฐ ํฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ, ์‚ญ์ œ๋˜๋ฉด์„œ ์ฒญํฌ๋Š” ๊ณ„์† ์ปค์งˆ ์ˆ˜ ์žˆ๊ณ , ์ด๋กœ ์ธํ•ด ์ฒญํฌ๊ฐ€ ์Šคํ”Œ๋ฆฟ๋˜์–ด ์ „์ฒด์ ์œผ๋กœ ์ƒค๋“œ์˜ ์ฒญํฌ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋“  ์ƒค๋“œ์˜ ์ฒญํฌ๊ฐ€ ๋™์ผ ์‹œ์ ์— ์Šคํ”Œ๋ฆฟ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์‹œ์ ์œผ๋กœ 2~3๊ฐœ ์ด์ƒ์˜ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ผ์‹œ์ ์œผ๋กœ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ฒญํฌ๋ฅผ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ์ƒค๋“œ ์„œ๋ฒ„์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ถ€๋‹ด์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ปฌ๋ ‰์…˜์˜ ์ฒญํฌ ๊ฐœ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž„๊ณ„์น˜๋ฅผ ์„ค์ •ํ•ด ๋‘์—ˆ๋‹ค.

๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๊ฐ ์ƒค๋“œ๊ฐ€ ๊ฐ€์ง„ ์ฒญํฌ์˜ ๊ฐœ์ˆ˜ ์ฐจ์ด๊ฐ€ ๊ธฐ์ค€์น˜ ์ดํ•˜๋กœ ๋–จ์–ด์งˆ๋•Œ๊นŒ์ง€ ์ฒญํฌ๋ฅผ ์ด๋™ํ•ด์„œ ๋ถ„์‚ฐ์‹œํ‚จ๋‹ค.

๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์ฒญํฌ์˜ ๋ถˆ๊ท ํ˜•์„ ๊ฐ์ง€ํ•˜์—ฌ ์ฒญํฌ ์ด๋™์„ ์‹œ์ž‘ํ•˜๊ณ  ๋๋‚  ๋•Œ๊นŒ์ง€๋ฅผ ๋ฐธ๋Ÿฐ์‹ฑ ๋ผ์šด๋“œ(Balancing Round)๋ผ๊ณ  ํ•œ๋‹ค. 

MongoDB 3.2๊นŒ์ง€๋Š” ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ๋ผ์šฐํ„ฐ์—์„œ ์‹คํ–‰๋๋Š”๋ฐ, ํด๋Ÿฌ์Šคํ„ฐ์— ๋ผ์šฐํ„ฐ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ˆ˜๋งŽ์€ ๋ผ์šฐํ„ฐ ์ธ์Šคํ„ด์Šค๋“ค์ด ์„œ๋กœ ์ฒญํฌ ์ด๋™์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋„๋ก ๋ผ์šฐํ„ฐ๋Š” ๋ฐธ๋Ÿฐ์‹ฑ ๋ผ์šด๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋จผ์ € config ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ locks ์ปฌ๋ ‰์…˜์—์„œ ์ž ๊ธˆ์„ ํš๋“ํ•ด์•ผ ํ•œ๋‹ค. 

๋‹จ์ 

  • ์–ด๋–ค ๋ผ์šฐํ„ฐ๊ฐ€ ์ฒญํฌ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ•˜๋Š”์ง€ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์›€
  • ๋ผ์šฐํ„ฐ๋Š” Statelessํ•˜๊ณ„ ์„ค๊ณ„๋˜์—ˆ๊ณ  ๊ด€๋ฆฌ์ƒ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค์— ์†ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ผ์šฐํ„ฐ๊ฐ€ ์ฒญํฌ ๋ฐธ๋Ÿฐ์‹ฑ์„ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜๋ฉด ๊ด€๋ฆฌ์ƒ์˜ ์–ด๋ ค์›€์„ ์œ ๋ฐœ
  • ๋ผ์šฐํ„ฐ๋Š” ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์™€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋œ ์„œ๋ฒ„์—์„œ ์ž‘๋™ → ์„œ๋ฒ„๊ฐ„ ํ†ต์‹ ์ƒ ์‹ ๋ขฐ์„ฑ์ด ๋‚ฎ์•„์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ

๋”ฐ๋ผ์„œ, MongoDB 3.4 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ๋ฐธ๋Ÿฐ์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์—์„œ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐœ์„ ํ–ˆ๋‹ค.

๊ฐœ์„ 

  • ๋ฐธ๋Ÿฐ์Šค ์ž ๊ธˆ ํš๋“์„ ์œ„ํ•ด์„œ ์„œ๋กœ ๊ฒฝํ•ฉํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง
  • ์ž๊ธฐ ์ž์‹ ์ด ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋‹จ๊ณ„์—์„œ ์‹คํŒจํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํš๊ธฐ์ ์œผ๋กœ ์ค„์–ด๋“ฆ
  • ์ฒญํฌ ๋ฐธ๋Ÿฐ์Šค ์ž‘์—…์—์„œ ๋ผ์šฐํ„ฐ๊ฐ€ ๊ด€์—ฌ X. ์˜ค์ง ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ๋งŒ ์ƒค๋“œ๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ๋งŒ ์ฒ˜๋ฆฌ. ์–ธ์ œ๋“ ์ง€ ์žฌ์‹œ์ž‘ํ•ด๋„ ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋จ

5.2) ์ฒญํฌ ์Šคํ”Œ๋ฆฟ(Chunk split)

์ฒญํฌ๋Š” ์ƒค๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ท ํ˜•์„ ์œ„ํ•ด์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ(partition)์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ฒญํฌ๋Š” ์ƒค๋“œ ๊ฐ„์˜ ์ด๋™ํ•  ๋•Œ ์ƒค๋“œ ์„œ๋ฒ„์— ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋„๋ก ์ ์ ˆํ•œ ํฌ๊ธฐ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

์ฒญํฌ๋Š” ์ž๋™ ๋˜๋Š” ์ˆ˜๋™์œผ๋กœ ์Šคํ”Œ๋ฆฟ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ž๋™ ์Šคํ”Œ๋ฆฟ์€ ์ฒญํฌ์— ๋„ํ๋จผํŠธ๊ฐ€ INSERT๋˜๊ฑฐ๋‚˜ UPDATE๋  ๋•Œ์—๋งŒ ํ•ด๋‹น ์ฒญํฌ๋ฅผ ์Šคํ”Œ๋ฆฟํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. 

์ฒญํฌ ์Šคํ”Œ๋ฆฟ ๊ธฐ์ค€

  • ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ settings ์ปฌ๋ ‰์…˜์—์„œ balancer ์— ์„ค์ •๋œ ์ฒญํฌ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํ˜„์žฌ ์ฒญํฌ ํฌ๊ธฐ๊ฐ€ ํด ๋•Œ
  • ์ฒญํฌ ์ด๋™์˜ ์ตœ๋Œ€ ๋„ํ๋จผํŠธ ๊ฑด์ˆ˜๋ณด๋‹ค ๋งŽ์€ ๋„ํ๋จผํŠธ๋ฅผ ํ˜„์žฌ ์ฒญํฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ

 

์ฃผ์˜

์ฒญํฌ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ด์œ ๋Š” ํ•ด๋‹น ์ฒญํฌ์— ๋„ํ๋จผํŠธ๊ฐ€ INSERT๋˜๊ฑฐ๋‚˜ UPDATE๋˜๋ฉด์„œ ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

MongoDB ๋งค๋‰ด์–ผ์—์„œ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ฒญํฌ์˜ ํฌ๊ธฐ๋‚˜ ๋„ํ๋จผํŠธ์˜ ๊ฑด์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ INSERT ๋˜๊ฑฐ๋‚˜ UPDATE๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์Šคํ”Œ๋ฆฟํ•  ๊ฒƒ์ธ์ง€ ํŒ๋‹จํ•œ๋‹ค๋ฉด ํ•ญ์ƒ ๋ชจ๋“  ์ฒญํฌ๋Š” ์ฒญํฌ ์ด๋™์ด ๊ฐ€๋Šฅํ•œ ์ ์ • ํฌ๊ธฐ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋™์ผํ•œ ์ƒค๋“œ ํ‚ค๋ฅผ ๊ฐ€์ง€๋Š” ๋„ํ๋จผํŠธ๊ฐ€ ๋งŽ์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด์„œ๋Š” ์ด๋ก ์ ์œผ๋กœ ์ฒญํฌ ์ด๋™์ด ์ฒญํฌ์˜ ํฌ๊ธฐ๋‚˜ ๋„ํ๋จผํŠธ ๊ฑด์ˆ˜๋กœ ์ธํ•ด์„œ ์‹คํŒจํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์šด์˜ํ•ด ๋ณธ ๊ฒฝํ—˜์— ๋น„์ถ”์–ด๋ณด๋ฉด, ์ฒญํฌ์˜ ํฌ๊ธฐ๋‚˜ ๋„ํ๋จผํŠธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์„œ ์ฒญํฌ ์ด๋™์— ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ˆ˜ ์—†์ด ๊ฒฝํ—˜ํ–ˆ๋‹ค. ๋งค๋‰ด์–ผ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ์–ด์จŒ๊ฑฐ๋‚˜ ์ฒญํฌ์˜ ์ž๋™ ์Šคํ”Œ๋ฆฟ๋งŒ ๋ฏฟ๊ณ  ์žˆ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„์ฃผ ๋นจ๋ฆฌ ์ฆ๊ฐ€ํ•˜๋Š” ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ ์ฒญํฌ์˜ ํฌ๊ธฐ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

ํ•˜๋‚˜์˜ ์ฒญํฌ๋Š” 64MB ์ •๋„์˜ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์œผ๋กœ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ ์ด์ƒ์œผ๋กœ ์ปค์ง€๋ฉด, ์ฒญํฌ๋ฅผ ์ชผ๊ฐœ์„œ 2๊ฐœ ์ด์ƒ์˜ ์ƒˆ๋กœ์šด ์ฒญํฌ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ชผ๊ฐœ๋Š” ๊ณผ์ •์„ ์Šคํ”Œ๋ฆฟ์ด๋ผ๊ณ  ํ•˜๊ณ , MongoDB์—์„œ ์Šคํ”Œ๋ฆฟ์€ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค.

  • splitVector
    • ํ•˜๋‚˜์˜ ์ฒญํฌ๋ฅผ ์ตœ๋Œ€ ์ฒญํฌ ํฌ๊ธฐ(64MB)์˜ ์ ˆ๋ฐ˜ ํฌ๊ธฐ(32MB)๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด์„œ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด๋‹ค.
    • ๋ฆฌํ„ด ๊ฐ’์ด ์ฒญํฌ๋ฅผ ์Šคํ”Œ๋ฆฟํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจํ•œ ํฌ์ธํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด ์‹คํ–‰
      • ์Šคํ”Œ๋ฆฟ ํฌ์ธํŠธ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ๋ผ์šฐํ„ฐ๋‚˜ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋กœ๊ทธ ํŒŒ์ผ๋กœ ๊ธฐ๋ก
    • ์ƒค๋“œ ํ‚ค ์ธ๋ฑ์Šค์˜ ์ผ๋ถ€(๋ถ„ํ•  ๋Œ€์ƒ์ด ๋˜๋Š” ์ฒญํฌ์˜ ์‹œ์ž‘ ํ‚ค ๊ฐ’๊ณผ ๋๋‚˜๋Š” ์ง€์ ์˜ ํ‚ค ๊ฐ’๊นŒ์ง€)๋งŒ ์Šค์บ” → ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€๋ณ๊ฒŒ ์ฒ˜๋ฆฌ
    • ํŠœ๋‹ ๋Œ€์ƒ์œผ๋กœ ๊ณ ๋ คํ•  ํ•„์š”๋Š” ์—†๋‹ค.
  • splitChunk
    • ์ฒญํฌ์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ƒˆ๋กœ์šด ์ฒญํฌ ์ •๋ณด๋กœ ๋Œ€์ฒด
    • ๋‹จ๊ณ„
      • ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž ๊ธˆ ํš๋“
      • ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด์„œ ๋ฐฐ์น˜ ์—…๋ฐ์ดํŠธ ๋ช…๋ น ์‹คํ–‰
      • ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ ์ €์žฅ(changelog ์ปฌ๋ ‰์…˜)

6) ์ƒค๋”ฉ์œผ๋กœ ์ธํ•œ ์ œ์•ฝ

6.1) ํŠธ๋žœ์žญ์…˜

ํŠธ๋žœ์žญ์…˜ ์†์„ฑ์œผ๋กœ ACID(Atomicity, Consistency, Isolation, Durability)๋ฅผ ์ฃผ๋กœ ์–ธ๊ธ‰ํ•œ๋‹ค.

MongoDB ์—์„œ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š์•„ ์›์ž์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ,

4.0 ๋ฒ„์ „์ด ๋ฆด๋ฆฌ์ฆˆ๋˜๋ฉด์„œ Replica Set์—์„œ ์ž‘๋™ํ•˜๋Š” ๋‹ค์ค‘ ๋„ํ๋จผํŠธ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๋˜ํ•œ, 4.2 ๋ฒ„์ „์—์„œ ๋‹ค์ค‘ ๋„ํ๋จผํŠธ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ์ง€์›์ด Sharded Cluster๋กœ ํ™•์žฅ๋˜์–ด ACID ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•จ.

6.2) ์ƒค๋”ฉ๊ณผ ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค

์ƒค๋”ฉ๋œ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค ์ƒ์„ฑ์€ ์ œ์•ฝ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

์ƒค๋”ฉ๋œ ์ปฌ๋ ‰์…˜์—์„œ ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ์ƒค๋“œ ํ‚ค๋ฅผ ํฌํ•จํ•˜๋Š” ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

MongoDB์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๋Š” ์ƒค๋”ฉ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ์œ ๋‹ˆํฌํ•ด์•ผํ•˜๋ฉฐ, ์„ธ์ปจ๋“œ๋ฆฌ ํ‚ค ์ค‘์—์„œ๋„ ์œ ๋‹ˆํฌ ์˜ต์…˜์ด ์„ค์ •๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์™€ ๋™์ผํ•˜๊ฒŒ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌ๋ผ์•ผ ํ•œ๋‹ค.

6.3) ์กฐ์ธ๊ณผ ๊ทธ๋ž˜ํ”„ ์ฟผ๋ฆฌ

์—ฌ๋Ÿฌ ์ปฌ๋ ‰์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ธํ•ด์„œ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก $lookup ์˜คํผ๋ ˆ์ด์…˜ ์ œ๊ณต, ๊ณ„์ธตํ˜• ์žฌ๊ท€ ์ฟผ๋ฆฌ๋‚˜ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก $graphLookup ์˜คํผ๋ ˆ์ด์…˜์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

๊ณ„์ธตํ˜• ์žฌ๊ท€ ์ฟผ๋ฆฌ์™€ ์กฐ์ธ ์ฟผ๋ฆฌ ๋ชจ๋‘ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปฌ๋ ‰์…˜์„ ๋Œ€์ƒ์œผ๋กœ ์‹คํ–‰๋˜๊ณ , ๊ณ„์ธตํ˜• ์žฌ๊ท€ ์ฟผ๋ฆฌ๋„ ๊ฒฐ๊ตญ ์กฐ์ธ ์ฟผ๋ฆฌ์˜ ๋˜ ๋‹ค๋ฅธ ํ˜•ํƒœ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ์˜คํผ๋ ˆ์ด์…˜์— ๋ชจ๋‘ "from" ์ธ์ž์— ์ฃผ์–ด์ง€๋Š” ์ปฌ๋ ‰์…˜์€ ์ƒค๋”ฉ๋œ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์ƒค๋“œ ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ๋‹ค๋ฅธ ์ƒค๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 


์ฐธ๊ณ ์ž๋ฃŒ

RealMongoDB

 
 
 

'๐Ÿ’Ž > mongoDB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[mongoDB] ์ธ๋ฑ์Šค(Index)  (0) 2022.07.18
[mongoDB] WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„  (0) 2022.07.15

๋Œ“๊ธ€