ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

์˜์—ญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜ ๋ฐฐํฌํ•˜๊ธฐ

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

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

์ด ํŠœํ† ๋ฆฌ์–ผ์„ ์™„๋ฃŒํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ์„ธ ๊ฐœ์˜ ์ƒค๋“œ๊ฐ€ ์žˆ๋Š” ์ƒค๋“œ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • mongos ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ƒค๋“œ์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ตฌ์—ญ ๋˜๋Š” ๊ตฌ์—ญ ๋ฒ”์œ„๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ตœ์†Œํ•œ clusterManager ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ๋ณด๋ ค๋ฉด db.getUser() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐœ์˜ ์ƒค๋”ฉ๋œ ์ปฌ๋ ‰์…˜์ด ํฌํ•จ๋œ shardDistributionDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • bigData, ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • manyIndexes, ๋งŽ์€ ํฐ ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์ปฌ๋ ‰์…˜์ด ์ƒค๋“œ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ์  ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ ์ปฌ๋ ‰์…˜์„ ์ƒค๋“œ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ์ œํ•œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋Š” 3๊ฐœ์˜ ์ƒค๋“œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์ƒค๋“œ์—๋Š” ๊ณ ์œ ํ•œ ๋ฌผ๋ฆฌ์  ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒค๋“œ ์ด๋ฆ„
๋ฌผ๋ฆฌ์  ๋ฆฌ์†Œ์Šค

shard0

๋†’์€ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰

shard1

๋น ๋ฅธ ํ”Œ๋ž˜์‹œ ์ €์žฅ

shard2

๊ณ ์šฉ๋Ÿ‰ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋น ๋ฅธ ํ”Œ๋ž˜์‹œ ์Šคํ† ๋ฆฌ์ง€

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

๊ตฌ์—ญ ์ด๋ฆ„
์„ค๋ช…
์ด ๊ตฌ์—ญ์˜ ์ปฌ๋ ‰์…˜

HI_RAM

๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์ด ํฐ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ํฐ ์ปฌ๋ ‰์…˜๊ณผ ๊ฐ™์ด ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ์ปฌ๋ ‰์…˜์€ HI_RAM ์ƒค๋“œ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

FLASH

๋น ๋ฅธ ์ €์žฅ ์†๋„๋ฅผ ์œ„ํ•œ ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ๊ฐ€ ์žฅ์ฐฉ๋œ ์„œ๋ฒ„.

๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•œ ๋Œ€๊ทœ๋ชจ collection์€ FLASH ์ƒค๋“œ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ ๊ฐ ์ปฌ๋ ‰์…˜ ์„ ์ƒค๋“œ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ƒค๋“œ ํ‚ค ๋Š” { _id: "hashed" } ์ž…๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์„ ์ƒค๋“œ ํ•˜๊ธฐ ์ „์— ์ƒค๋“œ ์˜์—ญ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ ์ปฌ๋ ‰์…˜์˜ ๋ฐ์ดํ„ฐ๋Š” ํ•ด๋‹น ๊ตฌ์—ญ ์˜ ์ƒค๋“œ์—๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

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

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

์ค‘์š”

์„ฑ๋Šฅ

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

๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒค๋“œ ๊ตฌ์—ญ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์ƒค๋“œ ๋ฌผ๋ฆฌ์  ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปฌ๋ ‰์…˜์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

1

๊ฐ ๊ตฌ์—ญ ์—์„œ ์ƒค๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด addShardToZone ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

HI_RAM ๊ตฌ์—ญ์— shard0 ๋ฐ shard2 ์ถ”๊ฐ€:

sh.addShardToZone("shard0", "HI_RAM")
sh.addShardToZone("shard2", "HI_RAM")

FLASH ๊ตฌ์—ญ์— shard1 ๋ฐ shard2 ์ถ”๊ฐ€:

sh.addShardToZone("shard1", "FLASH")
sh.addShardToZone("shard2", "FLASH")
2

์ƒค๋“œ ํ‚ค ๋ฒ”์œ„ ๋ฅผ ๊ตฌ์—ญ ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด sh.updateZoneKeyRange() ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” collection์˜ ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์ ์ ˆํ•œ ๊ตฌ์—ญ์— ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  collection ๋ฌธ์„œ๋ฅผ ๊ตฌ์—ญ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ตฌ์—ญ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • { "_id" : MinKey }์˜ ํ•˜ํ•œ

  • { "_id" : MaxKey }์˜ ์ƒํ•œ

bigData ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ๋‹ค์Œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • shardDistributionDB.bigData์— ๋Œ€ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค,

  • MinKey ์˜ ํ•˜ํ•œ์€ ,

  • MaxKey์˜ ์ƒํ•œ์ž…๋‹ˆ๋‹ค.

  • FLASH์— ๋Œ€ํ•œ ๊ตฌ์—ญ

sh.updateZoneKeyRange(
"shardDistributionDB.bigData",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"FLASH"
)

manyIndexes ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ๋‹ค์Œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • shardDistributionDB.manyIndexes์— ๋Œ€ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค,

  • MinKey ์˜ ํ•˜ํ•œ์€ ,

  • MaxKey์˜ ์ƒํ•œ์ž…๋‹ˆ๋‹ค.

  • HI_RAM์— ๋Œ€ํ•œ ๊ตฌ์—ญ

sh.updateZoneKeyRange(
"shardDistributionDB.manyIndexes",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"HI_RAM"
)
3

๋‘ ์ปฌ๋ ‰์…˜(bigData ๋ฐ manyIndexes)์„ ๋ชจ๋‘ ์ƒค๋”ฉํ•˜๋ ค๋ฉด ์ƒค๋“œ ์ƒค๋“œ ํ‚ค ๋ฅผ { _id: "hashed" } ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

sh.shardCollection(
"shardDistributionDB.bigData", { _id: "hashed" }
)
sh.shardCollection(
"shardDistributionDB.manyIndexes", { _id: "hashed" }
)
4

์ฒญํฌ ๋ถ„ํฌ ๋ฐ ์ƒค๋“œ ์˜์—ญ์„ ๋ณด๋ ค๋ฉด sh.status() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

sh.status()

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

๋ฐธ๋Ÿฐ์‹ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  • manyIndexes collection์— ์žˆ๋Š” ๋ฌธ์„œ ์ฒญํฌ๋Š” shard0 ๋ฐ shard2์— ์žˆ์Šต๋‹ˆ๋‹ค.

  • bigData ์ปฌ๋ ‰์…˜์˜ ๋ฌธ์„œ ์ฒญํฌ๋Š” shard1 ๋ฐ shard2 ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒค๋”ฉ ๋ฐ ๋ฐธ๋Ÿฐ์‹ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.