Skip to content

Latest commit

ย 

History

History
535 lines (333 loc) ยท 30.9 KB

chapter6.md

File metadata and controls

535 lines (333 loc) ยท 30.9 KB

6. ์ƒค๋”ฉ

๋ณต์ œ(๋ ˆํ”Œ๋ฆฌ์นด) vs ์ƒค๋”ฉ ๋ณต์ œ: ๊ณ ๊ฐ€์šฉ์„ฑ ์ƒค๋”ฉ: ๋ถ„์‚ฐ์ฒ˜๋ฆฌ

Shared Cluster ๊ตฌ์ถ•

  • Config Server : ๋ฉ”ํƒ€ ์ •๋ณด ์ €์žฅ
  • Mongos : ๋ผ์šฐํ„ฐ ์„œ๋ฒ„ ( for ๋ฐ์ดํ„ฐ ์กฐํšŒ, ์ €์žฅ)
  • Shard Server : ๋ฐ์ดํ„ฐ ์ €์žฅ

6.1 Sharding ์ด๋ž€?

์Šค์ผ€์ผ ์—… vs ์Šค์ผ€์ผ ์•„์›ƒ
  • ์Šค์ผ€์ผ ์—… : cpu๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์˜ ์„œ๋ฒ„ ์‚ฌ์–‘์„ UP
  • ์Šค์ผ€์ผ ์•„์›ƒ : ์„œ๋ฒ„์˜ ์ˆ˜ Up

6.1.1 ํ•„์š”์„ฑ

  • Scale Up์—๋Š” ํ•œ๊ณ„.
  • ์ƒค๋”ฉ์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์œผ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒค๋”ฉ ์ถ”์ฒœ( ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ์ˆ˜์ • ๋น„์šฉ)

6.1.2 ์ƒค๋”ฉ ์ข…๋ฅ˜

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

๋ณดํ†ต ์‹œ์Šคํ…œ ๊ตฌ์กฐ ํ๋ฆ„

  • ๋‹จ์ผ ์ƒค๋“œ -> ์ˆ˜์ง ์ƒค๋”ฉ -> ์ˆ˜์ง ๋ฐ ์ˆ˜ํ‰ ์ƒค๋”ฉ

  • ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ƒค๋”ฉ ๋น„ํ™œ์„ฑํ™” -> ์ž๋™์œผ๋กœ ์ˆ˜์ง ์ƒค๋”ฉ

  • ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ƒค๋”ฉ ํ™œ์„ฑํ™” -> ์ˆ˜ํ‰ ์ƒค๋”ฉ

6.2 MongoDB ์ƒค๋”ฉ ์•„ํ‚คํ…์ณ

  • Shard Server : ๋‹ค์ˆ˜์˜ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์œผ๋กœ ๊ตฌ์„ฑ
  • Config Server : ํ•˜๋‚˜์˜ ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋‹จ ํ•˜๋‚˜์˜ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹๋งŒ ์กด์žฌ
  • Mongos(๋ผ์šฐํ„ฐ) : 1๊ฐœ ์ด์ƒ.

6.2.1 ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ์ปดํฌ๋„ŒํŠธ

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

6.2.2 ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ ์ ˆ์ฐจ (๋ผ์šฐํ„ฐ ~ Config ์„œ๋ฒ„ ํ†ต์‹ )

๊ณผ์ •
  1. ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋ ‰์…˜์˜ ์ฒญํฌ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ (Config Server) ๋ผ์šฐํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œ
  2. ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ ์กฐ๊ฑด ๋ถ„์„
    • ์กฐ๊ฑด์— ์ƒค๋”ฉ ํ‚ค ์กด์žฌ -> ํ•ด๋‹น ์ƒค๋”ฉ ํ‚ค๊ฐ€ ํฌํ•จ๋œ ์ฒญํฌ ์ •๋ณด ๊ฒ€์ƒ‰ํ•ด์„œ ํ•ด๋‹น ์ƒค๋“œ์—๋งŒ ์š”์ฒญ
    • ์กฐ๊ฑด์— ์ƒค๋”ฉ ํ‚ค X -> ๋ชจ๋“  ์„œ๋ฒ„์— ์š”์ฒญ
  3. ๊ฒฐ๊ณผ ๋ณ‘ํ•ฉํ•˜์—ฌ ๋ฐ˜ํ™˜
Config ์„œ๋ฒ„ ์š”์ฒญ when?
  • ๋ผ์šฐํ„ฐ์— ์ฒญํฌ ๋ฉ”ํƒ€ ์ •๋ณด ์—†์„ ๊ฒฝ์šฐ

  • ๋ฉ”ํƒ€ ์ •๋ณด๊ฐ€ ์˜ค๋ž˜๋˜์–ด ์ƒค๋“œ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ์™€ ๋งž์ง€ ์•Š์„ ๋•Œ

    -> ์ปจํ”ผ๊ทธ ์„œ๋ฒ„ ๋ถ€ํ•˜๋Š” ์ ์€ ํŽธ

6.2.3 Config ์„œ๋ฒ„

์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์šด์˜ํ•˜๋Š” ๋ฐ ์žˆ์–ด ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด ์ €์žฅ.

์ปจํ”ผ๊ทธ ์„œ๋ฒ„์— ์ง์ ‘ ๋กœ๊ทธ์ธ ํ•˜์—ฌ ํ™•์ธ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ผ์šฐํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ MongoDB ํด๋Ÿฌ์Šคํ„ฐ์— ๋กœ๊ทธ์ธํ•œ ๋‹ค์Œ config ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ด๋™ํ•˜๋ฉด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

Config ์„œ๋ฒ„์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปฌ๋ ‰์…˜
  • database

    • ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชฉ๋ก ๊ด€๋ฆฌ
    • ์ƒค๋”ฉ ์—ฌ๋ถ€, ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๊ฐ€ ์–ด๋Š ์ƒค๋“œ์ธ์ง€
  • collections

    • ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปฌ๋ ‰์…˜์˜ ๋ชฉ๋ก ๊ด€๋ฆฌ
    • ์ƒค๋”ฉ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜์€ ๊ฐ ๋กœ์ปฌ ์ƒค๋“œ ์„œ๋ฒ„์— ์ €์žฅ
    • ๋ณ€๊ฒฝ ์‹œ์ , ์‚ญ์ œ ๋œ ์ปฌ๋ ‰์…˜์ธ์ง€ ์—ฌ๋ถ€, ์ƒค๋”ฉ ํ‚ค, ์ƒค๋”ฉ ํ‚ค๊ฐ€ ์œ ๋‹ˆํ‚ค์ธ์ง€ ์—ฌ๋ถ€
  • chunks

    • ์ƒค๋”ฉ๋œ ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ์ฒญํฌ ์ •๋ณด ๊ด€๋ฆฌ
    • ์ฒญํฌ๊ฐ€ ํฌํ•จ๋œ ์ปฌ๋ ‰์…˜์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ์ฒญํฌ๊ฐ€ ๊ฐ€์ง€๋Š” ๊ฐ’์˜ ์‹œ์ž‘, ๋ ๋ฒ”์œ„, ์ƒค๋“œ ์ด๋ฆ„
  • shards

    • ๋ชจ๋“  ์ƒค๋“œ ์„œ๋ฒ„์˜ ์ •๋ณด๋ฅผ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ
    • host, tags(์ง€์—ญ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ์ผ ๋•Œ ํƒœ๊ทธ ๋ชฉ๋ก)
  • mongos

    • ๋ผ์šฐํ„ฐ๋Š” ๋งค 30์ดˆ๋งˆ๋‹ค ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“  ๋ฉค๋ฒ„์™€ ping ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ํ™•์ธ
    • ์ธ์Šคํ„ด์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์‚ญ์ œ ๋˜์ง€ ์•Š์Œ
    • ์„œ๋ฒ„์™€ ํฌํŠธ๋ฅผ _id ํ•„๋“œ์— ์ €์žฅ, ์‹คํ–‰ ์—ฌ๋ถ€ ๋ฐ ํ•‘ ๋ฉ”์‹œ์ง€ ์ฃผ๊ณ  ๋ฐ›์€ ์‹œ์  ์ €์žฅ
  • settings

    • ์ฒญํฌ์˜ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์˜ ์„ค์ • ์ €์žฅ

      {"_id": "chunkSize", "value": 64} // ์ฒญํฌ ์‚ฌ์ด์ฆˆ 64MB
      {"_id": "balancer", "stopped": false} // ๋ฐธ๋Ÿฐ์„œ ์ž‘๋™ ์—ฌ๋ถ€
      {"_id": "autosplit", "enabled": true} // ์ž๋™ ์ฒญํฌ์Šคํ”Œ๋ฆฟ ์—ฌ๋ถ€
      
  • version

    • ๋ฒ„์ „ ์ •๋ณด
  • lockpings

    • ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ ๋ฉ”๋ฒ„์™€ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ ํ™•์ธ ์ •๋ณด
  • locks

    • ์ƒค๋“œ ์„œ๋ฒ„๋‚˜ ๋ผ์šฐํ„ฐ ๋ฉค๋ฒ„๋“ค์ด ์„œ๋กœ์˜ ์ž‘์—…์„ ๋™๊ธฐํ™”ํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋ ‰์…˜
  • changelog

    • ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋ณ€๊ฒฝ์„ ์œ ๋ฐœํ•œ ์ด๋ฒคํŠธ์— ๊ด€ํ•ด ์ •๋ณด์„ฑ ์ด๋ ฅ ๊ด€๋ฆฌ

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

ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋Š” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•œ ๋งค์šฐ ์ค‘์š”ํ•œ ์ •๋ณด์ด๋ฏ€๋กœ Config Server๋ฅผ 3๋Œ€ ์ด์ƒ์œผ๋กœ ๋ณต์ œํ•  ๊ฒƒ์„ ๊ถŒ์žฅ.

  • ๋ฏธ๋Ÿฌ๋ง ๋œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๋ณต์ œ ๋ฐฉ์‹ ์‚ฌ์šฉ (3.2 ์ด์ „ ๋ฒ„์ „)
  • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ์™€ ๋™์ผํ•˜๊ฒŒ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์œผ๋กœ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ œ๊ณต (3.2 ์ด์ƒ ๋ฒ„์ „)
6.2.4.1 SCSS(Sync Cluster Connection Config)

๋ฏธ๋Ÿฌ๋ง ๋ฐฉ์‹์œผ๋กœ config server์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™” ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„๋“ค์„ ๊ฐ๊ฐ ๋”ฐ๋กœ ์„ค์น˜ํ•˜๊ณ  ์šด์˜ ํ”„๋กœ๊ทธ๋žจ(MongoDb์„œ๋ฒ„ & ๋ผ์šฐํ„ฐ์„œ๋ฒ„)์—์„œ ๋ชจ๋‘ ์ ‘์†ํ•˜์—ฌ ๊ฐ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™” ํ•œ๋‹ค.

config ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•  ๋•Œ, config server๋“ค์— ์ ‘์†ํ•˜์—ฌ ๋ณ€๊ฒฝ(UPDATE)ํ•˜๋Š” ๋ฌธ์žฅ์„ ๊ฐ๊ฐ ์‹คํ–‰ํ•˜๊ณ  ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

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

3.2 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” Deprecated, 3.4๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ๋ฏธ๋Ÿฌ๋ง ๋ฐฉ์‹์˜ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„ ๊ตฌ์„ฑ์ด ์™„์ „ํžˆ ์—†์–ด์กŒ๋‹ค.

6.2.4.2 CSRS(Config Server as Replaca Sets)

์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ƒค๋“œ ์„œ๋ฒ„์ฒ˜๋Ÿผ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์œผ๋กœ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์™€ ์ƒค๋“œ ์„œ๋ฒ„์˜ ๊ตฌ์„ฑ๋ฐฉ์‹์ด ๊ฐ™์•„์กŒ๋‹ค.

๋ ˆํ”Œ๋ฆฌ์นด ์…‹์œผ๋กœ ๊ตฌ์ถ•ํ•  ๋•Œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

  • ์ปจํ”ผ๊ทธ ์„œ๋ฒ„๋Š” WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. (must)
  • ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์€ ์•„๋น„ํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.
  • ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์€ ์ง€์—ฐ๋œ ๋ฉค๋ฒ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.
  • ์ตœ์†Œ 3๊ฐœ ์ด์ƒ์˜ ๋ฉค๋ฒ„๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค. (๊ถŒ์žฅ ์‚ฌํ•ญ)

ํด๋ผ์ด์–ธํŠธ๋Š” ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ„๋กœ ์ ‘์†ํ•˜์—ฌ ์ฟผ๋ฆฌ๋‚˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.

6.2.5 ์ปจํ”ผ๊ทธ ์„œ๋ฒ„ ๊ฐ€์šฉ์„ฑ๊ณผ ์ฟผ๋ฆฌ ์‹คํ–‰

์ตœ์†Œ 3๋Œ€ ์ด์ƒ ํˆฌ์ž… ๊ถŒ์žฅ

๋ฏธ๋Ÿฌ๋ง์ผ ๋•Œ๋Š” 1๋Œ€ ๋˜๋Š” 3๋Œ€๋งŒ ํ—ˆ์šฉํ•˜๋Š”๋ฐ ์ด๋Š” ์ปจํ”ผ๊ทธ ์„œ๋ฒ„ ์ฝ”๋“œ ์ƒ์— ๊ณ ์ •๋œ ์ƒ์ˆซ๊ฐ’์ด๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด ์…‹ ๋ฐฉ์‹์—์„œ๋Š” ์ตœ์†Œ 3๊ฐœ ์ด์ƒ์˜ ๋ฉค๋ฒ„๋ฅผ ๊ถŒ์žฅํ•˜๊ณ  ์„œ๋ฒ„ 1๋Œ€๊ฐ€ ์ฃฝ์„ ๋•Œ๋ฅผ ๊ณ ๋ คํ•ด ํ™€์ˆ˜ ๊ฐœ๋กœ ๋งž์ถฐ์•ผ ํ•œ๋‹ค. ๋ชจ๋“  ๋ฉ”ํƒ€ ์ •๋ณด ์กฐํšŒ ๋ฐ ๋ณ€๊ฒฝ ์ฟผ๋ฆฌ์˜ ReadConcern๊ณผ WriteConcern์„ "majority"๋กœ ์„ค์ •ํ•˜๋Š”๋ฐ, ์ด๋Š” ์ „์ฒด ๋ ˆํ”Œ๋ฆฌ์นด ์…‹ ๋ฉค๋ฒ„์˜ ๊ณผ๋ฐ˜์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ๋งŒ ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์ปจํ”ผ๊ทธ ์„œ๋ฒ„๊ฐ€ 2๋Œ€์ผ ๊ฒฝ์šฐ ๋ฉค๋ฒ„ ์ค‘ ํ•˜๋‚˜๋งŒ ์ฃฝ์–ด๋„ ๋ฉ”ํƒ€ ์ •๋ณด ์กฐํšŒ ๋ฐ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€ํ•ด์ง„๋‹ค.

  • ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ
    • ์ฒญํฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํ–‰ ์‹œ
    • ์ฒญํฌ ์Šคํ”Œ๋ฆฟ ์‹คํ–‰ ์‹œ
  • ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ
    • ๋ผ์šฐํ„ฐ ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ ์‹œ์ž‘๋˜๋Š” ๊ฒฝ์šฐ(ํ˜น์€ ์žฌ์‹œ์ž‘)
    • ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ
    • ์‚ฌ์šฉ์ž ์ธ์ฆ ์ฒ˜๋ฆฌ ์‹œ

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

6.2.6 ๋ผ์šฐํ„ฐ(mongos)

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

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

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

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

๋˜ํ•œ, ์ •๋ ฌ์ด๋‚˜ LIMIT ๊ทธ๋ฆฌ๊ณ  SKIP ๊ฐ™์€ ํŠน์ • ์ฟผ๋ฆฌ ์˜ต์…˜์— ๋Œ€ํ•ด์„œ ํŠน์ˆ˜ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์ •๋ ฌ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ฟผ๋ฆฌ์ผ ๋•Œ๋Š” ๊ฐ ์ƒค๋“œ๋กœ๋ถ€ํ„ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ผ์šด๋“œ-๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.ํ•˜์ง€๋งŒ ์ •๋ ฌ์ด ํ•„์š”ํ•  ๋Œ€์—๋Š” ๋ผ์šฐํ„ฐ๊ฐ€ ์ƒค๋“œ ์„œ๋ฒ„๋“ค ์ค‘์—์„œ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ "$orderby" ์˜ต์…˜์„ ๊ฐ™์ด ์ฟผ๋ฆฌ์— ์ „์†กํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๊ฐ€ ๋‚˜๋จธ์ง€ ์ƒค๋“œ๋กœ๋ถ€ํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์ •๋ ฌ ์ˆ˜ํ–‰ ํ›„ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ผ์šฐํ„ฐ ์„œ๋ฒ„๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

6.2.7 ๋ผ์šฐํ„ฐ์˜ ์ฟผ๋ฆฌ๋ถ„์‚ฐ

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

6.2.7.1 ํƒ€๊ฒŸ ์ฟผ๋ฆฌ(Targeted Query)

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

6.2.7.2 ๋ธŒ๋ž˜๋“œ์บ์ŠคํŠธ ์ฟผ๋ฆฌ(Broadcast Query)

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

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋Š” ์ƒค๋“œ ํ‚ค์™€ ์ „ํ˜€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฟผ๋ฆฌ ๋ฐฉ์‹์œผ๋กœ๋งŒ ์ฒ˜๋ฆฌ๋œ๋‹ค.

  • ๋‹ค์ค‘ ์—…๋ฐ์ดํŠธ(Multi-Update)
  • UpdateMany()์™€ DeleteMany() ์—…๋ฐ์ดํŠธ ๋Œ€์ƒ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ๋ฐ˜๋“œ์‹œ ์ƒค๋“œ ํ‚ค๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํƒ€๊ฒŸ ์ฟผ๋ฆฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณตํ•ฉ ํ•„๋“œ๋ฅผ ์ƒค๋“œ ํ‚ค๋กœ ๊ฐ€์ง€๋Š” ์ปฌ๋ ‰์…˜์—์„œ๋Š” ์ƒค๋“œ ํ‚ค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ํ•„๋“œ๊ฐ€ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ๋งŒ ํƒ€๊ฒŸ์ฟผ๋ฆฌ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

6.2.8 ๋ผ์šฐํ„ฐ ๋ฐฐํฌ

2.x ๋ฒ„์ „์—์„œ๋Š” ์ƒค๋“œ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์ž‘์—…๋„ ์ผ๋ถ€ ์ˆ˜ํ–‰ 3.x ๋ฒ„์ „์—์„œ๋ถ€ํ„ฐ๋Š” ์ •๋ ฌ๊ณผ ๊ด€๋ จ๋œ ๋ฌด๊ฑฐ์šด ์ž‘์—…์€ ๋ชจ๋‘ ์ƒค๋“œ ์„œ๋ฒ„๋กœ ์˜ฎ๊ฒจ์กŒ๋‹ค. ์ด๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ์•„์ฃผ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” MongoDB์˜ ๋ฐฉํ–ฅ์„ฑ์ด ์ž˜ ๋ณด์ด๋Š” ๋ถ€๋ถ„์ด๋‹ค.

์ค‘์š”์„ฑ์ด ๋–จ์–ด์ง€๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค ๋ณด๋‹ˆ ๋ฐฐํฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ์ƒ๊ธด๋‹ค.

6.2.8.1 ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ๋ผ์šฐํ„ฐ ๋ฐฐํฌ

์žฅ์ 

  • ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ ์žฅ๋น„์— ์žฅ์• ๊ฐ€ ๋‚˜๋ฉด ํ•ด๋‹น ์žฅ๋น„๋งŒ ์ž‘๋™ ๋ฉˆ์ถ”๊ณ  ๋‚˜๋จธ์ง€ ์„œ๋ฒ„๋“ค์€ ์ •์ƒ ์ž‘๋™

  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๊ฐ™์€ ๋ฌผ๋ฆฌ ์„œ๋ฒ„ ์œ„์น˜ ๋„คํŠธ์›Œํฌ ๋น„์šฉ ์ตœ์†Œํ™” (๋กœ์ปฌ ์ปค๋„ฅ์…˜)

๋‹จ์ 

  • ์‘์šฉํ”„๋กœ๊ทธ๋žจ ๊ฐœ์ˆ˜ ์ฆ๊ฐ€์™€ ํ•จ๊ป˜ ์ƒค๋“œ์„œ๋ฒ„๋“ค์˜ ์ปค๋„ฅ์…˜ ์ฆ๊ฐ€
  • ๋ผ์šฐํ„ฐ ์„œ๋ฒ„๋งŒ ์ฃฝ์„ ๊ฒฝ์šฐ -> ์‚ด์•„์žˆ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ์˜ ์š”์ฒญ์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ??
6.2.8.2 ์ „์šฉ์˜ ๋ผ์šฐํ„ฐ ์„œ๋ฒ„ ๋ฐฐํฌ

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ผ์šฐํ„ฐ ์‚ฌ์šฉ์‹œ MongoDB ๋“œ๋ผ์ด๋ฒ„๋Š” ๋ช…์‹œ๋œ ๋ผ์šฐํ„ฐ ์„œ๋ฒ„ ์ค‘ ์ ์ ˆํ•œ ์„œ๋ฒ„ ์„ ํƒ(๊ฐœ๋ฐœ ์–ธ์–ด๋ณ„ ํด๋ผ์ด์–ธํŠธ ๋“œ๋ผ์ด๋ฒ„์— ๋”ฐ๋ผ ๋™์ž‘ ๋‹ค๋ฆ„)

์žฅ์ 

  • ๋ผ์šฐํ„ฐ ์„œ๋ฒ„ ์ˆ˜ ๊ฐ์†Œ
  • ์ƒค๋“œ ์„œ๋ฒ„์™€ ๋งบ์–ด์•ผ ํ•˜๋Š” ์ปค๋„ฅ์…˜ ์ˆ˜ ๊ฐ์†Œ

๋‹จ์ 

  • MongoDB์—์„œ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹
  • ๋ผ์šฐํ„ฐ ๊ฐ„ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ๋ฌธ์ œ
  • ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ๋ผ์šฐํ„ฐ์— ๋Œ€ํ•œ ์š”์ฒญ ์ค‘์ง€ ๋ฐ ๋˜์‚ด์•„๋‚ฌ์„ ๋•Œ ์š”์ฒญ ์žฌ ์ „๋‹ฌํ•ด์•ผํ•˜๋Š” ๋“ฑ์˜ ๋ฌธ์ œ์ 
  • ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•„์„œ ๋ฒ„๊ทธ ๋ ˆํฌํŒ… ์ ๊ณ  ํŒจ์น˜ ๊ฐ€๋Šฅ์„ฑ๋„ ์ž‘๋‹ค.
6.2.8.3 L4์™€ ํ•จ๊ป˜ ๋ผ์šฐํ„ฐ ๋ฐฐํฌ

L4 ์Šค์œ„์น˜๋กœ ๋ฌถ์–ด์„œ ๋ผ์šฐํ„ฐ ์‚ฌ์šฉ

๋‹จ์ 

  • L4 ์Šค์œ„์น˜๋ฅผ ๊ฑฐ์นจ์œผ๋กœ์จ ๋„คํŠธ์›Œํฌ ์™•๋ณต ์‹œ๊ฐ„ ์ฆ๊ฐ€

  • Find ์ฟผ๋ฆฌ์™€ ํ›„์†์˜ GetMore ๋ช…๋ น์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ผ์šฐํ„ฐ๋กœ ์š”์ฒญ๋˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ

    MongoCursor<Document> cursor = coll.find(query).iterator();
    while(cursor.hasNext()) {
        Document obj = cursor.next(); // ์ž๋ฐ” ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์บ์‹œํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด ์ปค์„œ id๋ฅผ ์ด์šฉํ•ด ๋ผ์šฐํ„ฐ๋กœ ๋‹ค์‹œ ๊ฒฐ๊ณผ ์š”์ฒญ -> ๋‹ค๋ฅธ ๋ผ์šฐํ„ฐ๋กœ ์š”์ฒญํ•˜๊ฒŒ ๋˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ
        ...
    }
6.2.8.4 ์ƒค๋“œ ์„œ๋ฒ„๋‚˜ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ๋ผ์šฐํ„ฐ ๋ฐฐํฌ

๋ผ์šฐํ„ฐ๋Š” CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ฒŒ ๋ฌธ์ œ ๋˜์ง€ ์•Š์ง€๋งŒ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰์˜ ์ ์ ˆ์„ฑ์— ๋Œ€ํ•ด์„œ๋Š” ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. (RDBMS์— ๋น„ํ•ด ๋ ˆ์ฝ”๋“œ๋“ค์ด ํฐ ํŽธ)

6.2.9 ์ปค๋„ฅ์…˜ ํ’€ ๊ด€๋ฆฌ

๋ผ์šฐํ„ฐ๋Š” MongoDB ๋“œ๋ผ์ด๋ฒ„(Client Driver)์™€ MongoDb ์ƒค๋“œ ์„œ๋ฒ„๋ฅผ ์ค‘๊ณ„ํ•˜๋Š” ์—ญํ• ๋กœ ํด๋ผ/์„œ๋ฒ„ ์ชฝ ์ปค๋„ฅ์…˜์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

6.2.9.1 MongoDB ํด๋ผ์ด์–ธํŠธ

์ž๋ฐ” ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ด์šฉํ•œ MongoDB ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์˜ˆ์ œ

/* ๋‹จ์ผ ์„œ๋ฒ„ ์ ‘์† */
ServerAddress server = new ServerAddress("single-mongodb.com", 27017);
MongoClient mongoClient = new MongoClient(server);

/* ๋ ˆํ”Œ๋ฆฌ์นด ์…‹ ์ ‘์†*/
// ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์˜ ์‹œ๋“œ ๋ฆฌ์ŠคํŠธ ์ค€๋น„
List<ServerAddress> seedList = new ArrayList<ServerAddress>();
seedList.add(new ServerAddress("rs-mongodb1.com", 27017));
seedList.add(new ServerAddress("rs-mongodb2.com", 27017));
// ์ธ์ฆ ์ •๋ณด ์„ค์ •
List<MongoCredential> credentials = new ArrayList<MongoClient>();
credentails.add(MongoCredential.createScramSha1Credential(username, DEFAULT_DB, password.toCharArray()));
// ์ ‘์† ์˜ต์…˜ ์„ค์ •
MongoClientOptions options = MongoClientOptions.builder()
    .requireReplicaSetName(ReplSetName).build();
MongoClient client = new MongoClient(seedList, credentials, options);

/* MongoDB ๋ผ์šฐํ„ฐ ์ ‘์†*/
// ๋ผ์šฐํ„ฐ ๋ฆฌ์ŠคํŠธ ์ค€๋น„
List<ServerAddress> seedList = new ArrayList<ServerAddress>();
seedList.add(new ServerAddress("mongos1.com", 27017));
seedList.add(new ServerAddress("mongos2.com", 27017));
// ์ธ์ฆ ์ •๋ณด ์„ค์ •
List<MongoCredential> credentials = new ArrayList<MongoClient>();
credentails.add(MongoCredential.createScramSha1Credential(username, DEFAULT_DB, password.toCharArray()));
MongoClient client = new MongoClient(seedList, credentials, options);
  1. ์ฃผ์–ด์ง„ ์„œ๋ฒ„(์ƒค๋“œ์„œ๋ฒ„์ผ ์ˆ˜๋„, ๋ผ์šฐํ„ฐ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.)๋กœ๋งŒ ์—ฐ๊ฒฐ ์ƒ์„ฑ
  2. ๋ ˆํ”Œ๋ฆฌ์นด ์…‹ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ดˆ ์ ‘์† ์‹œ์— ์ฃผ์–ด์ง„ ์„œ๋ฒ„๋กœ๋งŒ ์ ‘์†ํ•˜๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ ๋ชฝ๊ณ  ์„œ๋ฒ„๊ฐ€ ์ž๋™ ํŽ˜์ผ์˜ค๋ฒ„๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ํด๋ผ์ด์–ธํŠธ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ด๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  3. ์ฒซ๋ฒˆ์งธ ๋ฐฉ์‹์ด๋ž‘ ๋™์ผํ•œ ๋ฐฉ์‹์ด๋‹ค. ๋‹ค๋งŒ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋ฅผ ๋‚˜์—ดํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•  ๋•Œ ์ฃผ์–ด์ง„ ์„œ๋ฒ„๋“ค๊ฐ„์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์ด๋‚˜ ํŽ˜์ผ ์˜ค๋ฒ„์ฒ˜๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.
6.2.9.2 MongoDB ๋ผ์šฐํ„ฐ - MongoDB ์ƒค๋“œ ์„œ๋ฒ„

MongoDB ๋ผ์šฐํ„ฐ๋Š” ํด๋ผ์ด์–ธํŠธ์™€์˜ ์ปค๋„ฅ์…˜๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ์ƒค๋“œ ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์„ ๋งบ๋Š”๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ์™€์˜ ์ปค๋„ฅ์…˜์ด ๋งŽ์ด ์ƒ์„ฑ๋œ๋‹ค๊ณ  ์ƒค๋“œ์™€์˜ ์ปค๋„ฅ์…˜์ด ๊ทธ๋งŒํผ ๋งŽ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • TaskExecutorPool : ์„œ๋ฒ„์˜ CPU ์ฝ”์–ด ๊ฐœ์ˆ˜๋งŒํผ ์ค€๋น„๋œ๋‹ค.
  • ์ปค๋„ฅ์…˜ ํ’€
  • ์„œ๋ธŒ ์ปค๋„ฅ์…˜ ํ’€ : ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜ ํ’€ ๋‚ด์— ์ƒค๋“œ ์„œ๋ฒ„ ๊ฐœ์ˆ˜๋งŒํผ ์ƒ์„ฑ.

๊ฐ‘์ž‘์Šค๋Ÿฝ๊ฒŒ ์š”์ฒญ์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๋ถ€์กฑํ•œ ์ปค๋„ฅ์…˜์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„ ์ง€์—ฐ ํ˜„์ƒ์ด ๋ฐœ์ƒ ๊ฐ€๋Šฅ.

์ปค๋„ฅ์…˜ ๊ด€๋ จ ์˜ต์…˜์„ ํ†ตํ•ด ์ตœ์†Œ, ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์•„์ง ๋ผ์šฐํ„ฐ์™€ ์ƒค๋“œ์„œ๋ฒ„ ๊ฐ„์˜ ์ปค๋„ฅ์…˜์„ ์ถฉ๋ถ„ํžˆ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์›Œ๋ฐ์—… ๋ฐฉ๋ฒ•์€ ์—ฌ์˜์น˜๊ฐ€ ์•Š์€ ์ƒํƒœ์ด๋‹ค.

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

  • ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ
  • ํ•ด์‹œ ์ƒค๋”ฉ
  • ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ(Tag-Aware Sharding, 3.4 ๋ฒ„์ „ ์ดํ›„๋กœ ์ง€์—ญ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ)

๋ ˆ์ธ์ง€, ํ•ด์‹œ ์ƒค๋”ฉ : ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ์ฒญํฌ์— ํฌํ•จ์‹œํ‚ฌ์ง€ ๊ฒฐ์ •

ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ : ์œ„์˜ ์ƒค๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ + ์ฒญํฌ์˜ ๋ถ„์‚ฐ ๋ฐฉ์‹

6.3.1 ์ฒญํฌ(Chunk)

์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ฐ ์ปฌ๋ ‰์…˜์€ ์ƒค๋“œ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•„์ฃผ ์ž˜๊ฒŒ ์ชผ๊ฐœ์ ธ ์—ฌ๋Ÿฌ ์ƒค๋“œ์—์„œ ๋ถ„์‚ฐ ๊ด€๋ฆฌ ๋˜๊ณ , ์ด ์ž˜๊ฐœ ์ชผ๊ฐœ์ง„ ์กฐ๊ฐ๋“ค์„ ์ฒญํฌ๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ ์ฒญํฌ๋Š” ์ƒค๋“œ ํ‚ค์˜ ์›๋ณธ ๋˜๋Š” ํ•ด์‹œ ๊ฐ’์˜ ์ผ์ •๋ฒ”์œ„(์ตœ๋Œ€, ์ตœ์†Œ)๋ฅผ ๊ฐ€์ง„๋‹ค.

์ฒญํฌ๋Š” ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ํŒŒ์ผ(๋ฌผ๋ฆฌ์ )๋กœ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค๋งŒ ๋…ผ๋ฆฌ์ ์œผ๋กœ๋งŒ ๊ด€๋ฆฌ ๋˜์–ด์ง€๊ณ  ๊ทธ ์‹ค์ฒด๋Š” ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์— ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋กœ์จ ์กด์žฌํ•œ๋‹ค. ์ฒญํฌ ๊ฒ€์ƒ‰ ๋น„์šฉ X

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

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

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

์ƒค๋“œ ํ‚ค๋กœ ์„ ์ •๋œ ํ•„๋“œ์˜ ๊ฐ’์„ ๋ณ€ํ˜•ํ•˜์ง€ ์•Š๊ณ  ๋น„๊ต ์ •๋ ฌํ•œ๋‹ค.

mongo chunkรฌ๏ฟฝ๏ฟฝ รซ๏ฟฝ๏ฟฝรญ๏ฟฝ๏ฟฝ รฌ๏ฟฝยดรซยฏยธรฌยง๏ฟฝ รชยฒ๏ฟฝรฌ๏ฟฝ๏ฟฝรชยฒยฐรชยณยผ

์žฅ์ 

  • ๋ฒ”์œ„ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ ํƒ€๊ฒŸ ์ฟผ๋ฆฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๊ท ํ˜•์žˆ๊ฒŒ ๋ถ„์‚ฐ๋˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
    • ์ชผ๊ฐค ์ˆ˜ ์—†์„ ์ •๋„๊ฐ€ ๋˜๋ฉด ์ฒญํฌ๊ฐ€ ์ ๋ณด ์ฒญํฌ๊ฐ€ ๋˜๊ณ  ์ด๋Ÿฌํ•œ ์ฒญํฌ์— ๋Œ€ํ•ด์„œ๋Š” ๊ด€๋ฆฌ ์ž‘์—…์„ ํฌ๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๊ท ๋“ฑ ๋ถ„์‚ฐ ์—ฌ๋ถ€ (MongoDB ๋ฐธ๋Ÿฐ์„œ -> ์ฒญํฌ ๊ฐœ์ˆ˜ ๊ธฐ์ค€) ์ •ํ™•ํ•œ ํŒŒ์•… ์–ด๋ ค์›€. ( ๋น„์ •์ƒ ์ ์œผ๋กœ ํฐ ์ฒญํฌ ์กด์žฌ ๊ฐ€๋Šฅ)
  • ์ƒค๋“œ ํ‚ค์˜ ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉํ–ฅ์ธ ๊ฒฝ์šฐ ํŠน์ • ์ฒญํฌ์—๋งŒ insert๊ฐ€ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ƒค๋“œํ‚ค ์„ ์ •์ด ์ค‘์š”.!!!

6.3.3 ํ•ด์‹œ ์ƒค๋”ฉ

์ƒค๋“œ ํ‚ค ๊ฐ’์˜ ํ•ด์‹œ๊ฐ’์„ ์ด์šฉํ•ด์„œ ์ฒญํฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ƒค๋”ฉ ๋ฐฉ์‹.(MD5 ํ•ด์‹œ ์‚ฌ์šฉ)

์ƒค๋“œ ํ‚ค ๊ฐ’ -> ํ•ด์‹œ -> ์•ž์ชฝ 64bit ์ž˜๋ผ์„œ 64bit ์ •์ˆ˜ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด์‹œ ์ƒค๋“œํ‚ค๊ฐ€ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ๋ฒ”์œ„๋Š” -2^64~ 2^63-1 ์ด๋‹ค.

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

๋ ˆ์ธ์ง€ ์ƒค๋”ฉ์˜ ๋‹จ์  ์ œ๊ฑฐ

  • ์ƒค๋“œ ํ‚ค ๊ฐ’์ด ํŠน์ • ๋ฒ”์œ„์— ์ง‘์ค‘๋ผ ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ถˆ๊ท ํ˜•
  • ์—ฐ์†๋œ ์ƒค๋“œ ํ‚ค ์•ก์„ธ์Šค๋กœ ์ธํ•œ ํŠน์ • ์ƒค๋“œ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜ ํŽธ์ค‘

๊ทธ๋ ‡๋‹ค ํ•˜๋”๋ผ๋„ ์ƒค๋“œ ํ‚ค ๊ฐ’์˜ ๋‹ค์–‘์„ฑ์ด ๋–จ์–ด์ง€๋ฉด ํ•ด์‹œ ์ƒค๋”ฉ์ด๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ํŠน์ • ์ฒญํฌ๋กœ ๋ชฐ๋ฆฌ๋Š” ํ˜„์ƒ์€ ํ”ผํ•  ์ˆ˜ ์—†๋‹ค.

์ œ์•ฝ์‚ฌํ•ญ

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

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

3.2 ๋ฒ„์ „๊นŒ์ง€๋Š” ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ(Tag-Aware Sharding), 3.4๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ์ง€์—ญ ๊ธฐ๋ฐ˜ ์ƒค๋”ฉ(Zone Sharding)์œผ๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ ๋˜์—ˆ๋‹ค. ๊ธฐ๋Šฅ์ƒ ๋ณ€ํ™”๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

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

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

6.3.5 ์ƒค๋“œ ํ‚ค

์ƒค๋“œ ํ‚ค๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋Š” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜๋Š” ์š”์†Œ ์ด๋ฉด์„œ ํ•œ๋ฒˆ ์„ค์ •๋œ ์ƒค๋“œ ํ‚ค๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ƒค๋“œ ํ‚ค๊ฐ€ ๋ชฝ๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

  • ํƒ€๊ฒŸ ์ฟผ๋ฆฌ์™€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฟผ๋ฆฌ ๊ฒฐ์ •
  • ๊ฐ ์ƒค๋“œ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ
  • ์ฒญํฌ ๋ฐธ๋Ÿฐ์Šค ์ž‘์—…
6.3.5.1 ํƒ€๊ฒŸ ์ฟผ๋ฆฌ์™€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฟผ๋ฆฌ ๊ฒฐ์ •

๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ€๋Š” ๋นˆ๋ฒˆํ•˜์ง€ ์•Š์€ ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฟผ๋ฆฌ๊ฐ€ ๋” ์ข‹๋‹ค(์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ํšจ๊ณผ ๋ฐœ์ƒ) ํ•˜์ง€๋งŒ ๊ฐ€๋ฒผ์šฐ๋ฉด์„œ ๋นˆ๋ฒˆํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ์ผ ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ๋‹ค.

6.3.5.2 ๊ฐ ์ƒค๋“œ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ

์ ์ ˆํ•˜์ง€ ๋ชปํ•œ ์ƒค๋“œ ํ‚ค๋Š” ๊ฐ ์ƒค๋“œ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ถˆ๊ท ํ˜•์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

6.3.5.3 ์ฒญํฌ ๋ฐธ๋Ÿฐ์Šค ์ž‘์—…

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

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

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

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

ํ”„๋ผ๋ฏธ์–ด๋ฆฌ ์ƒค๋“œ๋Š” ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํŠนํžˆ ์ƒค๋“œ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ ํ•ด๋‹น ์ƒค๋“œ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ์ƒค๋“œ๋กœ ์ด๋™์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์ด ๋•Œ ์ƒค๋”ฉ๋œ ์ปฌ๋ ‰์…˜๋งŒ ํ•ด๋‹น ์ƒค๋“œ์— ์žˆ๋‹ค๋ฉด sh.removeShard() ๋ช…๋ น์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ์ƒค๋“œ๋กœ ์ด๋™์‹œํ‚ค๊ณ  ์ƒค๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒค๋”ฉ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜์ด ์žˆ๋‹ค๋ฉด movePrimary ๋ช…๋ น์œผ๋กœ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๋ฅผ ์ด๋™์‹œํ‚ค๊ณ  ์ƒค๋“œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ์˜ ์ด๋™์ค‘์—๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ๋ณด์žฅ์„ ์ฑ…์ž„์ง€์ง€ ์•Š๋Š”๋‹ค.

๋˜ํ•œ, ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ๊ฐ€ ์ด๋™๋œ ํ›„์— ๋ผ์šฐํ„ฐ์—๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  • ๋ชจ๋“  MongoDB ๋ผ์šฐํ„ฐ ์žฌ์‹œ์ž‘
  • ๋ชจ๋“  MongoDB ๋ผ์šฐํ„ฐ์—์„œ flushRouterConfig ๋ช…๋ น ์‹คํ–‰ -> ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ๋†’์•„์งˆ ์ˆ˜ ์žˆ์Œ.

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

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

๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๊ฐ ์ƒค๋“œ๊ฐ€ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ์˜ ๋ถˆ๊ท ํ˜•์€ ์–ธ์ œ๋“ ์ง€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

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

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

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

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

์ผ๋‹จ ์ฒญํฌ ์ด๋™์ด ์‹œ์ž‘๋˜๋ฉด ์ฒญํฌ ๊ฐœ์ˆ˜ ์ฐจ์ด๊ฐ€ ๊ธฐ์ค€์น˜ ์ดํ•˜๋กœ ๋–จ์–ด์งˆ ๋•Œ๊นŒ์ง€ ์ด๋™ ๋ถ„์‚ฐ์‹œํ‚จ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์ฒญํฌ ๋ถˆ๊ท ํ˜• ๊ฐ์ง€ -> ์ฒญํฌ ์ด๋™ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ๊นŒ์ง€์˜ ์ฃผ๊ธฐ๋ฅผ ๋ฐธ๋Ÿฐ์‹ฑ ๋ผ์šด๋“œ(Balancing Round)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 3.2 ๋ฒ„์ „๊นŒ์ง€๋Š” ๋ผ์šฐํ„ฐ์—์„œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์‹คํ–‰ ๋˜์—ˆ๋Š”๋ฐ ๋‹ค์ˆ˜์˜ ๋ผ์šฐํ„ฐ ์ธ์Šคํ„ด์Šค๋“ค์ด ์ฒญํฌ ์ด๋™์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋„๋ก ๋™๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์ด ์žˆ๋Š”๋ฐ ์ด๋กœ ์ธํ•ด ์ˆ˜๋งŽ์€ ๋ผ์šฐํ„ฐ๊ฐ€ ์ฒญํฌ ์ด๋™์„์œ„ํ•ด์„œ ๊ฒฝํ•ฉํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ ๊ตฌ์„ฑ์ด ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ 3.4๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ๋ฐธ๋Ÿฐ์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์—์„œ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

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

mongos> db.settings.update(
	{_id: "balancer"},
	{$set: {activeWindow: {start : "22:00", stop : "04:00"}}},
	{upsert: true}
)

6.5.2 ์ฒญํฌ ์Šคํ”Œ๋ฆฟ

๋ชฝ๊ณ ๋””๋น„์˜ ์ฒญํฌ๋Š” ์ž๋™ ๋˜๋Š” ์ˆ˜๋™์œผ๋กœ ์Šคํ”Œ๋ฆฟ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ž๋™ ์Šคํ”Œ๋ฆฟ์€ ์ฒญํฌ์— Document๊ฐ€ insert๋˜๊ฑฐ๋‚˜ update ๋  ๋•Œ์—๋งŒ ํ•ด๋‹น ์ฒญํฌ๋ฅผ ์Šคํ”Œ๋ฆฟํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

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

๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒญํฌ๋Š” 64MB ์ •๋„์˜ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์œผ๋กœ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ด ํฌ๊ธฐ๋ณด๋‹ค ์ปค์ง€๋ฉด ์ฒญํฌ๋ฅผ ์ชผ๊ฐœ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ์Šคํ”Œ๋ฆฟ์€ splitVector์™€ splitChunk ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰˜์–ด ์ฒ˜๋ฆฌ๋œ๋‹ค.

  • splitVector : ํŠน์ • ์ฒญํฌ์—์„œ ์Šคํ”Œ๋ฆฟ์ด ํ•„์š”ํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ์Šคํ”Œ๋ฆฟ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์Šคํ”Œ๋ฆฟ์„ ์‹คํ–‰ํ•  ์œ„์น˜์˜ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • splitChunk : ์œ„์—์„œ ๋ฆฌํ„ดํ•œ ๊ฐ’์ด ์Šคํ”Œ๋ฆฟํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจํ•œ ํฌ์ธํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ง€์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ฒญํฌ๋ฅผ ์Šคํ”Œ๋ฆฟํ•˜๋„๋ก splitChunk ๋ช…๋ น์ด ์‹คํ–‰๋œ๋‹ค. splitChunk ์ž‘์—…์€ ์ฒญํฌ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ƒˆ๋กœ์šด ์ฒญํฌ ์ •๋ณด๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์ „๋ถ€์ด๋‹ค.

์ž๋™์œผ๋กœ ์Šคํ”Œ๋ฆฟ ํ•˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ ๊ด€๋ฆฌ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์Šคํ”Œ๋ฆฟ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ์˜ต์…˜์— ๋”ฐ๋ผ ์šฉ๋„์™€ ์Šคํ”Œ๋ฆฟ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • find ์˜ต์…˜ : ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ์ด์šฉํ•ด ํŠน์ • ์ฒญํฌ๋ฅผ ์ฐพ์€ ๋‹ค์Œ ๊ทธ ์ฒญํฌ๋ฅผ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€ 2๊ฐœ์˜ ์ฒญํฌ๋กœ ์Šคํ”Œ๋ฆฟ ์กฐ๊ฑด์—๋Š” ๋ฐ˜๋“œ์‹œ ์ƒค๋“œ ํ‚ค์˜ ์กฐ๊ฑด์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค
  • middle ์˜ต์…˜ : ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ์ด์šฉํ•ด ํŠน์ • ์ฒญํฌ๋ฅผ ์ฐพ์•„ 2๊ฐœ์˜ ์ฒญํฌ๋กœ ์Šคํ”Œ๋ฆฟํ•œ๋‹ค. find์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ฃผ์–ด์ง„ ์ƒค๋“œ ํ‚ค ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ฒญํฌ๊ฐ€ ์Šคํ”Œ๋ฆฟ ๋œ๋‹ค. ํ•ด์‹œ ์ƒค๋”ฉ์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • bounds ์˜ต์…˜ : ํ•ด์‹œ ์ƒค๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋ ‰์…˜์„ ์Šคํ”Œ๋ฆฟํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น. ํ•ด์‹œ ๋œ ์ƒค๋“œ ํ‚ค๊ฐ’์„ ๋ฒ”์œ„๋กœ ์‚ฌ์šฉ.

6.5.3 ์ฒญํฌ ๋จธ์ง€

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

์ œ์•ฝ ์‚ฌํ•ญ
  • ๋ณ‘ํ•ฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ฒญํฌ๋Š” ๊ฐ™์€ ์ƒค๋“œ์— ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ณ‘ํ•ฉ๋˜๋Š” ์ฒญํฌ ์ค‘์—์„œ ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ฒญํฌ๋Š” ๋น„์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์—ฐ์†๋œ ์ƒค๋“œ ํ‚ค ๋ฒ”์œ„์˜ ์ฒญํฌ๋งŒ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

6.5.4 ์ฒญํฌ ์ด๋™

  • ๋ฐธ๋Ÿฐ์„œ : From-shard๋กœ๋ถ€ํ„ฐ moveChunk ๋ช…๋ น ์‹คํ–‰
  • From-Shard : ์ด๋™ ๋Œ€์ƒ ์ฒญํฌ์˜ ์ƒํƒœ์™€ moveChunk์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์˜ค๋ฅ˜ ์ฒดํฌ
  • F : To-shard์—๊ฒŒ From-shard๋กœ๋ถ€ํ„ฐ ์ฒญํฌ๋ฅผ ๋ณต์‚ฌํ•˜๋„๋ก ์ง€์‹œ
  • To-shard : F์™€ ์ธ๋ฑ์Šค๋ฅผ ๋น„๊ตํ•œ ๋‹ค์Œ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ธ๋ฑ์Šค ์ƒ์„ฑ
  • T : F ๋กœ๋ถ€ํ„ฐ ์ฒญํฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์ €์žฅ
  • T : ์ด ์ „ ๋‹จ๊ณ„๊นŒ์ง€ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ F๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์™€์„œ ์ €์žฅ
  • T : Steady ์ƒํƒœ
  • F : ์ปจํ”ผ๊ทธ ์„œ๋ฒ„์˜ ์ฒญํฌ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
  • F : T ๋กœ ์ด๋™๋œ ์ฒญํฌ์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ (2.6 ๋ถ€ํ„ฐ๋Š” ๋กœ์ปฌ ๋””์Šคํฌ์— ๋ฐฑ์—…)

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

6.6.1 ํŠธ๋žœ์žญ์…˜

์ผ๋ฐ˜์ ์ธ ํŠธ๋žœ์žญ์…˜ ์†์„ฑ ACID(Atomicity, Consistency, Isolation, Durability)

  • MongoDB ๋‹จ์ผ ๋„ํ๋จผํŠธ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ(INSERT,UPDATE,DELETE)์€ ๋ชจ๋‘ ํŠธ๋žœ์žญ์…˜ ์ง€์›(์˜๋„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ณ€๊ฒฝ์„ ๋กค๋ฐฑ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†๋‹ค.)
  • 4 ์ ๋Œ€ ๋ฒ„์ „์—์„œ๋Š” ๋ฉ€ํ‹ฐ ๋„ํ๋จผํŠธ ํŠธ๋žœ์žญ์…˜ ์ง€์›
  • WiredTiger๋Š” ํŠธ๋žœ์žญ์…˜์ด ์ง€์›์ด ๊ฐ€๋Šฅํ•œ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด์ง€๋งŒ ์ƒค๋”ฉ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ์…‹์ด ๋ถ„์‚ฐ๋˜๋ฏ€๋กœ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ํŠธ๋žœ์žญ์…˜์€ ํฐ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

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

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

4.6.2.1 ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์˜ ์ค‘๋ณต ์ฒดํฌ ์ฒ˜๋ฆฌ

๋ชจ๋“  ์ปฌ๋ ‰์…˜์€ "_id" ํ•„๋“œ๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ํ•„๋“œ์ด๋ฉฐ ๋ฌด์กฐ๊ฑด ์œ ๋‹ˆํฌํ•ด์•ผ ํ•œ๋‹ค.

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

6.6.2.2 ์„ธ์ปจ๋“œ๋ฆฌ ํ‚ค์˜ ์ค‘๋ณต ์ฒดํฌ ์ฒ˜๋ฆฌ

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

$lookup(์กฐ์ธ), $graphLookup(๊ณ„์ธตํ˜• ์žฌ๊ท€ ์ฟผ๋ฆฌ, ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ) ์Šคํ…Œ์ด์ง€๋Š” ๋ผ์šฐํ„ฐ๊ฐ€ ์•„๋‹Œ ์ƒค๋“œ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š”๋ฐ ์ƒค๋“œ ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ์ƒค๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์œ„์˜ ์ฟผ๋ฆฌ๋“ค์€ ์ƒค๋”ฉ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.