Docs Menu
Docs Home
/
MongoDB ๋งค๋‰ด์–ผ
/ / /

sh.updateZoneKeyRange()

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

  • ์ •์˜
  • ํ˜ธํ™˜์„ฑ
  • ํ–‰๋™
  • ์˜ˆ์‹œ
sh.updateZoneKeyRange(namespace, minimum, maximum, zone)

๋ฒ„์ „ 3.4์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ”์œ„ ์ƒค๋“œ ํ‚ค ๊ฐ’์„ ๊ตฌ์—ญ ๊ณผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

updateZoneKeyRange ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ช…๋ น ๊ณผ ํ•ด๋‹น ํ—ฌํผ sh.updateZoneKeyRange() ๋ฐ sh.addTagRange() ๋ฅผ ์ƒค๋”ฉ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜ ๋˜๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜ ์—์„œ ์‹คํ–‰ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์š”

Mongo์‰ฌ ๋ฐฉ๋ฒ•

์ด ํŽ˜์ด์ง€์—์„œ๋Š” mongosh ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ช…๋ น ๋˜๋Š” Node.js์™€ ๊ฐ™์€ ์–ธ์–ด๋ณ„ ๋“œ๋ผ์ด๋ฒ„์— ๋Œ€ํ•œ ์„ค๋ช…์„œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ช…๋ น์— ๋Œ€ํ•ด์„œ๋Š” updateZoneKeyRange ๋ช…๋ น์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

MongoDB API ๋“œ๋ผ์ด๋ฒ„์˜ ๊ฒฝ์šฐ ์–ธ์–ด๋ณ„ MongoDB ๋“œ๋ผ์ด๋ฒ„ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

sh.updateZoneKeyRange() ๋‹ค์Œ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Parameter
์œ ํ˜•
์„ค๋ช…

namespace

๋ฌธ์ž์—ด

์ƒค๋“œ ์ปฌ๋ ‰์…˜์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋Š” zone ์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ž‘์—…์ด ์„ฑ๊ณตํ•˜๋ ค๋ฉด ์ปฌ๋ ‰์…˜์„ ์ƒค๋”ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

minimum

๋ฌธ์„œ

์ƒค๋“œ ํ‚ค ๊ฐ’ ๋ฒ”์œ„์˜ ํฌ๊ด„์  ํ•˜ํ•œ์ž…๋‹ˆ๋‹ค.

์ƒค๋“œ ํ‚ค์˜ ๊ฐ ํ•„๋“œ๋ฅผ <fieldname> : <value> ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ์ƒค๋“œ ํ‚ค์™€ ๋™์ผํ•œ BSON ์œ ํ˜•์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ ์ƒค๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•„๋“œ ๊ฐ’์ด NumberLong ์œ ํ˜•์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

maximum

๋ฌธ์„œ

์ƒค๋“œ ํ‚ค ๊ฐ’ ๋ฒ”์œ„์˜ ๋ฐฐํƒ€์  ์ƒํ•œ์ž…๋‹ˆ๋‹ค.

์ƒค๋“œ ํ‚ค์˜ ๊ฐ ํ•„๋“œ๋ฅผ <fieldname> : <value> ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ์ƒค๋“œ ํ‚ค์™€ ๋™์ผํ•œ BSON ์œ ํ˜•์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ ์ƒค๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•„๋“œ ๊ฐ’์ด NumberLong ์œ ํ˜•์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

zone

๋ฌธ์ž์—ด

minimum ๋ฐ maximum ๋กœ ๋ฌถ์ธ ์ƒค๋“œ ํ‚ค ๊ฐ’ ๋ฒ”์œ„์™€ ์—ฐ๊ฒฐํ•  ๊ตฌ์—ญ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

sh.updateZoneKeyRange() ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.mongos

์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ ํ™˜๊ฒฝ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋ฐฐํฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • MongoDB Atlas: ํด๋ผ์šฐ๋“œ์—์„œ์˜ MongoDB ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค

์ค‘์š”

์ด ๋ช…๋ น์€ M0, M2 ๋ฐ M5 ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ช…๋ น์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  • MongoDB Enterprise: MongoDB์˜ ๊ตฌ๋… ๊ธฐ๋ฐ˜ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

  • MongoDB Community: MongoDB์˜ ์†Œ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฌด๋ฃŒ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

์ƒค๋“œ ์ปฌ๋ ‰์…˜์˜ ๊ธฐ์กด ๋ฒ”์œ„์™€ ํ•˜ํ•œ์„  ๋ฐ ์ƒํ•œ์„ ์ด ๊ฒน์น˜๋Š” ์ƒค๋“œ ํ‚ค ๊ฐ’ ๋ฒ”์œ„๋Š” ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์กด ๋ฒ”์œ„๊ฐ€ 1 ~ 10 ์ธ ๊ฒฝ์šฐ ์ƒˆ ๋ฒ”์œ„๊ฐ€ ๊ธฐ์กด ๋ฒ”์œ„์™€ ๊ฒน์น˜๋ฏ€๋กœ 5 ~ 20 ์˜ ์ƒˆ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ตฌ์—ญ์€ ์—ฌ๋Ÿฌ ๋ฒ”์œ„์˜ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฒ”์œ„๋Š” ์ตœ๋Œ€ ๋‹จ์ผ ๊ตฌ์—ญ๊ณผ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ตฌ์—ญ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ตฌ์—ญ ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

์ดˆ๊ธฐ ์ฒญํฌ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊ตฌ์—ญ ๋ฐ ๊ตฌ์—ญ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•˜๋Š” ์˜ˆ ๋Š” ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ๊ตฌ์—ญ ๋ฐ ๊ตฌ์—ญ ๋ฒ”์œ„ ์‚ฌ์ „ ์ •์˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

ํ•ด์‹œ๋œ ํ•„๋“œ๊ฐ€ ์ƒค๋“œ ํ‚ค์˜ ์ ‘๋‘์‚ฌ(์ฆ‰, ์ƒค๋“œ ํ‚ค์˜ ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ)์ธ ๊ฒฝ์šฐ, MongoDB๊ฐ€ ์ดˆ๊ธฐ ์ฒญํฌ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์‚ฌํ•ญ์ด ๋ชจ๋‘ ์ถฉ์กฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ปฌ๋ ‰์…˜์—๋Š” ๋ชจ๋“  ํ•˜ํ•œ ํ•„๋“œ์— ๋Œ€ํ•ด MinKey ์ด๊ณ  ๋ชจ๋“  ์ƒํ•œ ํ•„๋“œ์— ๋Œ€ํ•ด MaxKey ์ธ ๋‹จ์ผ ๊ตฌ์—ญ ๋ฒ”์œ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • sh.shardCollection() ๋Š” presplitHashedZones: true ์˜ต์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ ๋œ ํ•„๋“œ ๊ฐ€ ์ƒค๋“œ ํ‚ค ์˜ ์ ‘๋‘์‚ฌ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ(์ฆ‰, ์ƒค๋“œ ํ‚ค ์— ํ•ด์‹œ๋˜์ง€ ์•Š์€ ์„ ํ–‰ ํ•„๋“œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ) MongoDB ๊ฐ€ ์ดˆ๊ธฐ ์ฒญํฌ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์‚ฌํ•ญ์ด ๋ชจ๋‘ ์ถฉ์กฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ปฌ๋ ‰์…˜์—๋Š” ๊ณ ์œ ํ•œ ์ ‘๋‘์‚ฌ ํ•„๋“œ ๊ฐ’์˜ ๊ฐ ์กฐํ•ฉ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๊ตฌ์—ญ ๋ฒ”์œ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ํ•ด์‹œ๋œ ํ•„๋“œ ์•ž์— ์˜ค๋Š” ๋ชจ๋“  ํ•„๋“œ).

  • ๊ฐ ๊ตฌ์—ญ ๋ฒ”์œ„ ์˜ ํ•˜ํ•œ์— ๋Œ€ํ•ด ํ•ด์‹œ ํ•„๋“œ ์™€ ๋ชจ๋“  ํ›„์† ํ•„๋“œ์— ๋Œ€ํ•ด MinKey ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ ๊ตฌ์—ญ ๋ฒ”์œ„์— ๋Œ€ํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ์ƒํ•œ ์ ‘๋‘์‚ฌ ํ•„๋“œ๋Š” ํ•˜ํ•œ ์ ‘๋‘์‚ฌ ํ•„๋“œ์™€ ๋‹ฌ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค .

  • sh.shardCollection() ๋Š” presplitHashedZones: true ์˜ต์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

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

ํŒ

๋‹ค์Œ๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

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

๊ตฌ์—ญ ๋ฒ”์œ„๋Š” ํ•ญ์ƒ ํ•˜ํ•œ ๊ฒฝ๊ณ„๋ฅผ ํฌํ•จํ•˜๊ณ  ์ƒํ•œ ๊ฒฝ๊ณ„๋ฅผ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์„ ์ œ๊ฑฐํ•˜๋ฉด ๊ด€๋ จ๋œ ์˜์—ญ/ํƒœ๊ทธ ๋ฒ”์œ„๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

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

authentication ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • config ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‹ค์–‘ํ•œ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ์ง€์ •๋œ ์ž‘์—…์ด ํฌํ•จ๋œ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.

    • find ์ปฌ๋ ‰์…˜์˜ config.shards {

    • find update config.tags ์ปฌ๋ ‰์…˜์˜ ๋ฐ ์ž…๋‹ˆ๋‹ค.

    ๋˜๋Š”,

  • ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ฐ€ enableSharding ํฌํ•จ๋œ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.

clusterAdmin ๋˜๋Š” clusterManager ๊ธฐ๋ณธ ์ œ๊ณต ์—ญํ• ์—๋Š” sh.updateZoneKeyRange() ๋ฐœ๊ธ‰์— ์ ํ•ฉํ•œ ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ญํ•  ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด ์— ๋Œ€ํ•œ ์„ค๋ช…์„œ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ƒค๋“œ ํ‚ค๊ฐ€ { a : 1 } ์ธ ์ƒค๋“œ ์ปฌ๋ ‰์…˜ exampledb.collection ์ด ์ฃผ์–ด์ง€๋ฉด ๋‹ค์Œ ์ž‘์—…์€ alpha ๊ตฌ์—ญ์— ํ•˜ํ•œ์ด 1 ์ด๊ณ  ์ƒํ•œ์ด 10 ์ธ ๋ฒ”์œ„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange(
"exampledb.collection",
{ a : 1 },
{ a : 10 },
"alpha"
)

๋‹ค์Œ ์ž‘์—…์€ null ์„ zone ํ•„๋“œ์— ์ „๋‹ฌํ•˜์—ฌ ์ด์ „์— ์ƒ์„ฑ๋œ ๋ฒ”์œ„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange(
"exampledb.collection",
{ a : 1 },
{ a : 10 },
null
)

min ๋ฐ max ๋Š” ๋Œ€์ƒ ๋ฒ”์œ„์˜ ๊ฒฝ๊ณ„์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ž‘์—…์€ ์ด์ „์— ์ƒ์„ฑ๋œ ๋ฒ”์œ„๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ { a : 0 } ๋ฅผ min ๋ฐ”์šด๋“œ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange(
"exampledb.collection",
{ a : 0 },
{ a : 10 },
null
)

{ a : 0 } ๋ฐ { a : 10 } ๋ฒ”์œ„๋Š” ๊ธฐ์กด ๋ฒ”์œ„๋ฅผ ํฌํ•จํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ updateZoneKeyRange ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ œ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒค๋“œ ํ‚ค๊ฐ€ { a : 1, b : 1 } ์ธ ์ƒค๋“œ๋œ ์ปฌ๋ ‰์…˜ exampledb.collection ์ด ์ฃผ์–ด์ง€๋ฉด ๋‹ค์Œ ์ž‘์—…์€ { a: 1, b : 1 } ์˜ ํ•˜ํ•œ๊ณผ { a : 10, b : 10} ์˜ ์ƒํ•œ์„ ํฌํ•จํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ alpha ๊ตฌ์—ญ๊ณผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange(
"exampledb.collection",
{ a : 1, b : 1 },
{ a : 10, b : 10 },
"alpha"
)

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

์•„๋ž˜ ์„น์…˜์—๋Š” ์„ธ ๊ฐ€์ง€ ์ƒค๋“œ ํ‚ค ์œ ํ˜•์— ๋Œ€ํ•œ ์˜ˆ์‹œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๊ฐ€์ง€ ์„œ๋กœ ๋‹ค๋ฅธ ์ƒค๋“œ ํ‚ค ์œ ํ˜•์— ๋Œ€ํ•ด ์‚ฌ์ „ ์ •์˜๋œ ๊ตฌ์—ญ ๋˜๋Š” ๊ตฌ์—ญ ๋ฒ”์œ„๋ฅผ ์‚ดํŽด๋ณด๋Š” ๋‹ค์Œ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”.

์ฐธ๊ณ 

์ด ์˜ˆ์‹œ๋Š” ํ•ด์‹œ ํ•„๋“œ๊ฐ€ ์—†๋Š” ๋‹จ์ผ ํ•„๋“œ ๋˜๋Š” ๋ณตํ•ฉ ์ƒค๋“œ ํ‚ค์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ: { "zip" : 1 } ๋˜๋Š” { "zip" : 1, "account" : 1}

1

sh.addShardToZone() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์—ญ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

sh.addShardToZone("shardA", "DC1")
sh.addShardToZone("shardB", "DC2")
2

sh.updateZoneKeyRange() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ exampledb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋นˆ contacts ์ปฌ๋ ‰์…˜์˜ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange(
"exampledb.contacts",
{ zip: 10001 },
{ zip: 10090 },
"DC1"
);
sh.updateZoneKeyRange(
"exampledb.contacts",
{ zip: 90001 },
{ zip: 96054 },
"DC2"
);
3

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ด๋ฏธ ์ƒค๋”ฉ์„ ํ™œ์„ฑํ™”ํ•œ ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

sh.enableSharding() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ƒค๋”ฉ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค:

sh.enableSharding("exampledb")
4

์ฐธ๊ณ 

์ปฌ๋ ‰์…˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒค๋”ฉ ์ž‘์—…์€ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์ด ๋น„์–ด ์žˆ๊ณ  ์ƒค๋“œ ํ‚ค๋ฅผ ์ง€์›ํ•˜๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ƒค๋”ฉ ์ž‘์—…์€ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

sh.shardCollection() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ contacts ์ปฌ๋ ‰์…˜์„ ์ƒค๋”ฉํ•ฉ๋‹ˆ๋‹ค.

sh.shardCollection("exampledb.contacts", { zip: 1 } );
5

์ƒ์„ฑ๋œ ์ฒญํฌ์™€ ๋ถ„ํฌ๋ฅผ ๋ณด๋ ค๋ฉด sh.status() ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

sh.status()

์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5b80c06d35a961fd0ae1986d")
}
shards:
{ "_id" : "shardA", "host" : "shardA/mongodb0.example.net:27018,mongodb1.example.net:27018,mongodb2.example.net:27018", "state" : 1, "tags" : [ "DC1" ] }
{ "_id" : "shardB", "host" : "shardB/mongodb3.example.net:27018,mongodb4.example.net:27018,mongodb5.example.net:27018", "state" : 1, "tags" : [ "DC2" ] }
active mongoses:
"4.2.0" : 2
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
{ "_id" : "exampledb", "primary" : "shardA", "partitioned" : true, "version" : { "uuid" : UUID("6c351bcf-acd2-4fd9-82d8-9f6bd7321558"), "lastMod" : 1 } }
exampledb.contacts
shard key: { "zip" : 1 }
unique: false
balancing: true
chunks:
shardA 3
shardB 2
{ "zip" : { "$minKey" : 1 } } -->> { "zip" : 10001 } on : shardA Timestamp(1, 0)
{ "zip" : 10001 } -->> { "zip" : 10090 } on : shardA Timestamp(1, 1)
{ "zip" : 10090 } -->> { "zip" : 90001 } on : shardB Timestamp(1, 2)
{ "zip" : 90001 } -->> { "zip" : 96054 } on : shardB Timestamp(1, 3)
{ "zip" : 96054 } -->> { "zip" : { "$maxKey" : 1 } } on : shardA Timestamp(1, 4)
tag: DC1 { "zip" : 10001 } -->> { "zip" : 10090 }
tag: DC2 { "zip" : 90001 } -->> { "zip" : 96054 }

์ปฌ๋ ‰์…˜์˜ ๊ฒฝ์šฐ ์ƒค๋”ฉ ์ž‘์—…์œผ๋กœ shardA ๋ฐ shardB์— ๊ฑธ์ณ 5 ์ฒญํฌ(์˜์—ญ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” 2๊ฐœ, ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ์ฒญํฌ 3๊ฐœ)๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ด ์˜ˆ์‹œ๋Š” ํ•ด์‹œ ํ•„๋“œ๊ฐ€ ์ƒค๋“œ ํ‚ค์˜ ์ ‘๋‘์‚ฌ(์ฆ‰, ์ƒค๋“œ ํ‚ค์˜ ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ๊ฐ€ ํ•ด์‹œ๋จ)์ธ ๋ณตํ•ฉ ํ•ด์‹œ ์ƒค๋“œ ํ‚ค์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. { "_id" : "hashed", "facility" : 1 }

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

๋‘ ์ œ์กฐ ์‹œ์„ค ์ค‘ ํ•˜๋‚˜์˜ ๋ถ„์„์„ ์ €์žฅํ•  ๋นˆ ์ปฌ๋ ‰์…˜ examples.metrics ์„ ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณ„ํš๋œ ์ƒค๋“œ ํ‚ค๋Š” { "_id" : "hashed", "facility" : 1} ์ด๋ฉฐ, ์—ฌ๊ธฐ์„œ ํ•ด์‹œ ํ•„๋“œ๋Š” ์ƒค๋“œ ํ‚ค ์ ‘๋‘์‚ฌ ์ž…๋‹ˆ๋‹ค.

1

๊ณ„ํš๋œ ์ƒค๋“œ ํ‚ค๋Š” { "_id" : "hashed", "facility" : 1 } ์ž…๋‹ˆ๋‹ค. ํ•ด์‹œ๋œ ํ•„๋“œ๋Š” ์ ‘๋‘์‚ฌ(์ฆ‰, ์ƒค๋“œ ํ‚ค์˜ ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ)์ด๋ฏ€๋กœ sh.addShardToZone() ์„์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ๊ตฌ์—ญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

sh.addShardToZone("shardA", "FacilityAlpha")
sh.addShardToZone("shardB", "FacilityAlpha")
2

ํ•ด์‹œ ์ ‘๋‘์‚ฌ๊ฐ€ ์žˆ๋Š” ๋ณตํ•ฉ ํ•ด์‹œ ์ƒค๋“œ ํ‚ค์˜ ์ดˆ๊ธฐ ์ฒญํฌ ๋ฐฐํฌ์—๋Š” ๋ชจ๋“  ํ•˜ํ•œ ํ•„๋“œ์— MinKey , ๋ชจ๋“  ์ƒํ•œ ํ•„๋“œ์— MaxKey ๊ฐ€ ์žˆ๋Š” ๋‹จ์ผ ๊ตฌ์—ญ ๋ฒ”์œ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange() ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ๋ฒ”์œ„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange(
"examples.metrics",
{ "_id" : MinKey, "facility" : MinKey },
{ "_id" : MaxKey, "facility" : MaxKey },
"FacilityAlpha"
);
3

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ด๋ฏธ ์ƒค๋”ฉ์„ ํ™œ์„ฑํ™”ํ•œ ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

sh.enableSharding() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ƒค๋”ฉ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค:

sh.enableSharding("examples")
4

์ฐธ๊ณ 

์ปฌ๋ ‰์…˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒค๋”ฉ ์ž‘์—…์€ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์ด ๋น„์–ด ์žˆ๊ณ  ์ƒค๋“œ ํ‚ค๋ฅผ ์ง€์›ํ•˜๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ƒค๋”ฉ ์ž‘์—…์€ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์„ ์ƒค๋”ฉํ•˜๊ณ  ์ดˆ๊ธฐ ์ฒญํฌ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด sh.shardCollection() ๋ฅผ presplitHashedZones: true ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

sh.shardCollection(
"examples.metrics",
{ "_id" : "hashed", "facility" : 1 },
false,
{ presplitHashedZones: true }
)
5

์ƒ์„ฑ๋œ ์ฒญํฌ์™€ ๋ถ„ํฌ๋ฅผ ๋ณด๋ ค๋ฉด sh.status() ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

sh.status()

์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค(๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋‚ด์šฉ์ด ์ƒ๋žต๋จ).

--- Sharding Status ---
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
{ "_id" : "examples", "primary" : "shardA", "partitioned" : true, "version" : { "uuid" : UUID("245f8abf-a363-48b0-8208-2a5b577bbb4e"), "lastMod" : 1 } }
examples.metrics
shard key: { "_id" : "hashed", "facility" : 1 }
unique: false
balancing: true
chunks:
shardA 2
shardB 2
{ "_id" : { "$minKey" : 1 }, "facility" : { "$minKey" : 1 } } -->> { "_id" : NumberLong("-4611686018427387902"), "facility" : { "$minKey" : 1 } } on : shardA Timestamp(1, 0)
{ "_id" : NumberLong("-4611686018427387902"), "facility" : { "$minKey" : 1 } } -->> { "_id" : NumberLong(0), "facility" : { "$minKey" : 1 } } on : shardA Timestamp(1, 1)
{ "_id" : NumberLong(0), "facility" : { "$minKey" : 1 } } -->> { "_id" : NumberLong("4611686018427387902"), "facility" : { "$minKey" : 1 } } on : shardB Timestamp(1, 2)
{ "_id" : NumberLong("4611686018427387902"), "facility" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 }, "facility" : { "$maxKey" : 1 } } on : shardB Timestamp(1, 3)
tag: FacilityAlpha { "_id" : { "$minKey" : 1 }, "facility" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 }, "facility" : { "$maxKey" : 1 } }

์ƒค๋”ฉ ์ž‘์—…์œผ๋กœ ์ด 4 ์ฒญํฌ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์ฒญํฌ๋Š” ์ ˆ๋Œ€ ํ•˜ํ•œ๊ณผ ์ƒํ•œ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. shardA ๋ฐ shardB ์— FacilityAlpha ์— ํ•ด๋‹นํ•˜๋Š” ํ•˜๋‚˜์˜ ๊ตฌ์—ญ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์—ญ์€ ํ•ด์‹œ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2 ์ฒญํฌ๋กœ ์„ธ๋ถ„ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ด ์˜ˆ์‹œ๋Š” ํ•ด์‹œ ํ•„๋“œ๊ฐ€ ์ƒค๋“œ ํ‚ค์˜ ์ ‘๋‘์‚ฌ๊ฐ€ ์•„๋‹Œ ๋ณตํ•ฉ ํ•ด์‹œ ์ƒค๋“œ ํ‚ค์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค(์ฆ‰, ์ƒค๋“œ ํ‚ค์˜ ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ๊ฐ€ ํ•ด์‹œ๋˜์ง€ ์•Š์Œ).

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. { "facility" : 1, "_id" : "hashed" }

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

๋‘ ์ œ์กฐ ์‹œ์„ค ์ค‘ ํ•˜๋‚˜์˜ ๋ถ„์„์„ ์ €์žฅํ•  ๋นˆ ์ปฌ๋ ‰์…˜ examples.metrics ์„ ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณ„ํš๋œ ์ƒค๋“œ ํ‚ค๋Š” { "facility" : 1, "_id" : "hashed" } ์ด๋ฉฐ, ์—ฌ๊ธฐ์„œ ํ•ด์‹œ ํ•„๋“œ๋Š” ์ƒค๋“œ ํ‚ค ์ ‘๋‘์‚ฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค .

  • facility ํ•„๋“œ๋Š” ์‹œ์„ค ์ด๋ฆ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค: "FacilityAlpha" ๋˜๋Š” "FacilityBaker". ๊ฐ ์‹œ์„ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ์ƒค๋“œ๋กœ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ปฌ๋ ‰์…˜์—๋Š” facility ์— ๋Œ€ํ•œ ๊ตฌ์—ญ ๋ฒ”์œ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • _id ํ•„๋“œ๋Š” facility ํ•„๋“œ์˜ ๋‚ฎ์€ ์นด๋””๋„๋ฆฌํ‹ฐ๋ฅผ ๋ณด์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•ด์‹ฑ์€ _id ํ•„๋“œ์˜ ๋‹จ์กฐ ์ฆ๊ฐ€ ํŠน์„ฑ์„ ๋ณด์ƒํ•ฉ๋‹ˆ๋‹ค.

1

sh.addShardToZone() ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์—ญ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

sh.addShardToZone("shardA", "FacilityAlpha")
sh.addShardToZone("shardB", "FacilityBaker")
2

๊ณ„ํš๋œ ์ƒค๋“œ ํ‚ค๋Š” {"facility" : 1, "_id" : "hashed"} ์ž…๋‹ˆ๋‹ค. facility ํ•„๋“œ์—๋Š” FacilityAlpha ๋ฐ FacilityBaker ์˜ ๋‘ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด์‹œ ํ•„๋“œ๊ฐ€ ์ ‘๋‘์‚ฌ๊ฐ€ ์•„๋‹Œ ๋ณตํ•ฉ ํ•ด์‹œ ์ƒค๋“œ ํ‚ค์˜ ์ดˆ๊ธฐ ์ฒญํฌ ๋ฐฐํฌ์—๋Š” ๊ณ ์œ ํ•œ ์ ‘๋‘์‚ฌ ํ•„๋“œ ๊ฐ’์˜ ๊ฐ ์กฐํ•ฉ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๊ตฌ์—ญ ๋ฒ”์œ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ํ•ด์‹œ๋œ ํ•„๋“œ ์•ž์— ์˜ค๋Š” ๋ชจ๋“  ํ•„๋“œ). facility ์—๋Š” ๋‘ ๊ฐœ์˜ ๊ณ ์œ ํ•œ ์ ‘๋‘์‚ฌ ๊ฐ’์ด ์žˆ์œผ๋ฏ€๋กœ ์ปฌ๋ ‰์…˜์—๋Š” ํ•ด๋‹น ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ์ •ํ™•ํžˆ ๋‘ ๊ฐœ์˜ ๊ตฌ์—ญ ๋ฒ”์œ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•˜ํ•œ ๋ฒ”์œ„๋Š” ์ ‘๋‘์‚ฌ๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ํ•„๋“œ์— ๋Œ€ํ•ด MinKey ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์ƒํ•œ ๋ฒ”์œ„์—๋Š” ํ•˜ํ•œ๊ณผ ๋‹ค๋ฅธ ์ ‘๋‘์‚ฌ ํ•„๋“œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์Šต๋‹ˆ๋‹ค.

sh.updateZoneKeyRange() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "facility": "FacilityAlpha" ์˜ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange(
"examples.metrics",
{ "facility": "FacilityAlpha", "_id" : MinKey },
{ "facility": "FacilityBaker", "_id" : MinKey },
"FacilityAlpha"
);
  • ๊ตฌ์—ญ ๋ฒ”์œ„ ์ƒํ•œ์€ ๋ฐฐํƒ€์  ์ด๋ฏ€๋กœ ์ด ๋ฒ”์œ„๋Š” ๊ณ ์œ  ์ƒค๋“œ ํ‚ค ์ ‘๋‘์‚ฌ ๊ฐ’์ด "facilty" : "FacilityAlpha" ์ด๊ณ  ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฐ’์ด _id ์ธ ๋ฌธ์„œ๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "facility": "FacilityBaker" ์˜ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

sh.updateZoneKeyRange(
"examples.metrics",
{ "facility": "FacilityBaker", "_id" : MinKey },
{ "facility": MaxKey, "_id" : MinKey },
"FacilityBaker"
);
  • ์ด ๋ฒ”์œ„์˜ ์ƒํ•œ์€ ๊ธฐ์ˆ ์ ์œผ๋กœ facility ์˜ ๋‹ค๋ฅธ ๊ฐ’์„ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ดˆ๊ธฐ ์ฒญํฌ ๋ฐฐํฌ ๋กœ์ง์€ facility ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๊ณ ์œ  ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฐ€์ •์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์—๋Š” facility ์ด FacilityAlpha ๋˜๋Š” FacilityBaker ์ธ ๋ฌธ์„œ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด ๋ฒ”์œ„๋Š” ๊ณ ์œ  ์ƒค๋“œ ํ‚ค ์ ‘๋‘์‚ฌ ๊ฐ’์ด "facility" : "FacilityBaker" ์ด๊ณ  ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฐ’์ด _id ์ธ ๋ฌธ์„œ๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

3

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ด๋ฏธ ์ƒค๋”ฉ์„ ํ™œ์„ฑํ™”ํ•œ ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

sh.enableSharding() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ƒค๋”ฉ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค:

sh.enableSharding("examples")
4

์ฐธ๊ณ 

์ปฌ๋ ‰์…˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒค๋”ฉ ์ž‘์—…์€ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์ด ๋น„์–ด ์žˆ๊ณ  ์ƒค๋“œ ํ‚ค๋ฅผ ์ง€์›ํ•˜๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ƒค๋”ฉ ์ž‘์—…์€ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์„ ์ƒค๋”ฉํ•˜๊ณ  ์ดˆ๊ธฐ ์ฒญํฌ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด sh.shardCollection() ๋ฅผ presplitHashedZones: true ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

sh.shardCollection(
"examples.metrics",
{ "facility" : 1, "_id" : "hashed"},
false,
{ presplitHashedZones: true }
)
5

์ƒ์„ฑ๋œ ์ฒญํฌ์™€ ๋ถ„ํฌ๋ฅผ ๋ณด๋ ค๋ฉด sh.status() ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

sh.status()

์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค(๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋‚ด์šฉ์ด ์ƒ๋žต๋จ).

--- Sharding Status ---
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
{ "_id" : "examples", "primary" : "shardA", "partitioned" : true, "version" : { "uuid" : UUID("6c351bcf-acd2-4fd9-82d8-9f6bd7321558"), "lastMod" : 1 } }
examples.metrics
shard key: { "facility" : 1, "_id" : "hashed" }
unique: false
balancing: true
chunks:
shardA 3
shardB 3
{ "facility" : { "$minKey" : 1 }, "_id" : { "$minKey" : 1 } } -->> { "facility" : "FacilityAlpha", "_id" : { "$minKey" : 1 } } on : shard1 Timestamp(1, 0)
{ "facility" : "FacilityAlpha", "_id" : { "$minKey" : 1 } } -->> { "facility" : "FacilityAlpha", "_id" : NumberLong(0) } on : shard1 Timestamp(1, 1)
{ "facility" : "FacilityAlpha", "_id" : NumberLong(0) } -->> { "facility" : "FacilityBaker", "_id" : { "$minKey" : 1 } } on : shard1 Timestamp(1, 2)
{ "facility" : "FacilityBaker", "_id" : { "$minKey" : 1 } } -->> { "facility" : "FacilityBaker", "_id" : NumberLong(0) } on : shard2 Timestamp(1, 3)
{ "facility" : "FacilityBaker", "_id" : NumberLong(0) } -->> { "facility" : { "$maxKey" : 1 }, "_id" : { "$minKey" : 1 } } on : shard2 Timestamp(1, 4)
{ "facility" : { "$maxKey" : 1 }, "_id" : { "$minKey" : 1 } } -->> { "facility" : { "$maxKey" : 1 }, "_id" : { "$maxKey" : 1 } } on : shard2 Timestamp(1, 5)
tag: FacilityAlpha { "facility" : "FacilityAlpha", "_id" : { "$minKey" : 1 } } -->> { "facility" : "FacilityBaker", "_id" : { "$minKey" : 1 } }
tag: FacilityBaker { "facility" : "FacilityBaker", "_id" : { "$minKey" : 1 } } -->> { "facility" : { "$maxKey" : 1 }, "_id" : { "$minKey" : 1 } }

์ƒค๋”ฉ ์ž‘์—…์œผ๋กœ ์ด 6 ์ฒญํฌ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์ฒญํฌ๋Š” ์ ˆ๋Œ€ ํ•˜ํ•œ๊ณผ ์ƒํ•œ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. shardA ์— ํ•˜๋‚˜์™€ shardB ์— ๊ฐ๊ฐ FacilityAlpha ๋ฐ FacilityBaker ์— ํ•ด๋‹นํ•˜๋Š” ๋‘ ๊ฐœ์˜ ๊ตฌ์—ญ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ ๊ตฌ์—ญ์€ ํ•ด์‹œ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2 ์ฒญํฌ๋กœ ๋” ์„ธ๋ถ„ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŒ

๋‹ค์Œ๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ์•„๊ฐ€๊ธฐ

sh.stopBalancer

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ