์์น๋ณ๋ก ๋ฐ์ดํฐ ์ธ๋ถํ
์ค๋ฉ๋ ํด๋ฌ์คํฐ์์๋ ์ค๋ ํค ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค๋ฉ๋ ๋ฐ์ดํฐ์๊ตฌ์ญ ์ ๋ง๋ค ์ ์์ต๋๋ค. ๊ฐ ๊ตฌ์ญ ์ ํด๋ฌ์คํฐ ์ ์๋ ํ๋ ์ด์์ ์ค๋์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ค๋ ๋ ์ฌ๋ฌ ๊ฐ์ ๊ตฌ์ญ๊ณผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ๊ท ํ ์กํ ํด๋ฌ์คํฐ ์์ MongoDB ๋ ๊ตฌ์ญ ์ ํฌํจ๋ ์ฒญํฌ ๋ฅผ ํด๋น ๊ตฌ์ญ ๊ณผ ๊ด๋ จ๋ ์ค๋๋ก๋ง ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค.
ํ
์ค๋ ์ปฌ๋ ์ ์์ ์ ๋น์ด ์๊ฑฐ๋ ์กด์ฌํ์ง ์๋ ์ปฌ๋ ์ ์ ์ค๋ฉํ๊ธฐ ์ ์ ๊ตฌ์ญ ๋ฐ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์ ์ํ์ฌ ์ ์๋ ๊ตฌ์ญ ๋ฒ์์ ๋ํ ์ฒญํฌ์ ์ค๋ ํค ๊ฐ์ ์ ์ฒด ๋ฒ์๋ฅผ ํฌํจํ๋ ์ถ๊ฐ ์ฒญํฌ๋ฅผ ์์ฑํ๊ณ ๊ทธ์ญ ๋ฒ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ธฐ ์ฒญํฌ ๋ถ๋ฐฐ๋ฅผ ์ํํฉ๋๋ค. ์ด๋ฌํ ์ฒญํฌ์ ์ด๊ธฐ ์์ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ํตํด ์ค๋ฉ์ ๋ ๋น ๋ฅด๊ฒ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๊ธฐ ๋ถ๋ฐฐ ์ดํ์๋ ๋ฐธ๋ฐ์๊ฐ ์์ผ๋ก์ ์ฒญํฌ ๋ถ๋ฐฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์๋ฅผ ๋ณด๋ ค๋ฉด ๋น์ด ์๊ฑฐ๋ ์กด์ฌํ์ง ์๋ ์ปฌ๋ ์ ์ ๋ํ ๊ตฌ์ญ ๋ฐ ๊ตฌ์ญ ๋ฒ์ ์ฌ์ ์ ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ด ํํ ๋ฆฌ์ผ์์๋ ๊ตฌ์ญ์ ์ฌ์ฉํ์ฌ ์ง๋ฆฌ์ ๊ตฌ์ญ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถํํฉ๋๋ค.
๋ค์์ ์ง๋ฆฌ์ ์์ญ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฅํ๋ ๋ช ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค.
๊ตญ๊ฐ๋ณ๋ก ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถํํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์
๊ตญ๊ฐ๋ณ๋ก ๋ฆฌ์์ค๋ฅผ ํ ๋นํด์ผ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
๋ค์ ๋ค์ด์ด๊ทธ๋จ์ ์ง๋ฆฌ์ ๊ตฌ์ญ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธ๋ถํ ์๊ตฌ ์ฌํญ์ ๊ด๋ฆฌํ๊ณ ์ถฉ์กฑํ๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
Scenario
๊ธ์ต ์ฑํ
์ ํ๋ฆฌ์ผ์ด์
์ ๋ฉ์์ง๋ฅผ ๊ธฐ๋กํ๊ณ ์๋ณธ ์ฌ์ฉ์์ ๊ตญ๊ฐ๋ฅผ ์ถ์ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ด messages
collection ์๋์ chat
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก๊ทธ๋ฅผ ์ ์ฅํฉ๋๋ค. ์ฑํ
์๋ ํด๋น ๊ตญ๊ฐ์ ๋ก์ปฌ ์๋ฒ๊ฐ ํด๋น ๊ตญ๊ฐ์ ์ฌ์ฉ์์ ๋ํ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ตญ๊ฐ๋ณ๋ก ๋ถ๋ฅํด์ผ ํ๋ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ตญ๊ฐ ๊ทธ๋ฃน์ ๋์ผํ ๊ตฌ์ญ์ ํ ๋นํ ์ ์์ต๋๋ค.
์ด ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ฌ ๋ฏธ๊ตญ, ์๊ตญ, ๋
์ผ์ ์ฌ์ฉ์๊ฐ ์์ต๋๋ค. ํ๋๋ ISO - 31661 Alpha-2 country
์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์์ ๊ตญ๊ฐ๋ฅผ ๋ํ๋
๋๋ค. ๋ ๊ธ์๋ก ๋ ๊ตญ๊ฐ ์ฝ๋.
๋ค์ ๋ฌธ์๋ ์ธ ๊ฐ์ง ์ฑํ ๋ฉ์์ง์ ๋ถ๋ถ ๋ณด๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค.
{ "_id" : ObjectId("56f08c447fe58b2e96f595fa"), "country" : "US", "userid" : 123, "message" : "Hello there", ..., } { "_id" : ObjectId("56f08c447fe58b2e96f595fb"), "country" : "UK", "userid" : 456, "message" : "Good Morning" ..., } { "_id" : ObjectId("56f08c447fe58b2e96f595fc"), "country" : "DE", "userid" : 789, "message" : "Guten Tag" ..., }
์ค๋ ํค
messages
collection์ { country : 1, userid : 1 }
๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์ค๋ ํค๋ก ์ฌ์ฉํฉ๋๋ค.
๊ฐ ๋ฌธ์์ country
ํ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ๊ตญ๊ฐ ๊ฐ์ ๋ํ ๊ตฌ์ญ์ ์์ฑํ ์ ์์ต๋๋ค.
userid
ํ๋๋ country
์ ๋นํด ์ค๋ ํค์ ๋์ ์นด๋๋๋ฆฌํฐ์ ๋ฎ์ ๋น๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ค๋ ํค ์ ํ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ง์นจ์ ์ค๋ ํค ์ ํ์ ์ฐธ์กฐํ์ญ์์ค.
์ํคํ ์ฒ
์ค๋ฉ๋ ํด๋ฌ์คํฐ๋ ์ ๋ฝ๊ณผ ๋ถ๋ฏธ์ ๋ ๋ฐ์ดํฐ ์ผํฐ์ ์ค๋๋ฅผ ๋ณด์ ํ๊ณ ์์ต๋๋ค.
Zones
์ด ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๋ฐ์ดํฐ ์ผํฐ๋น ํ๋์ ๊ตฌ์ญ์ด ํ์ํฉ๋๋ค.
EU
- ์ ๋ฝ ๋ฐ์ดํฐ ์ผํฐ์ด ๋ฐ์ดํฐ ์ผํฐ์ ๋ฐฐํฌ๋ ์ค๋๊ฐ
EU
๊ตฌ์ญ์ ํ ๋น๋์์ต๋๋ค.๋ก์ปฌ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ์
EU
๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ ๊ตญ๊ฐ์ ๋ํด ๋ค์์ ์ฌ์ฉํ์ฌEU
๊ตฌ์ญ์ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์์ฑํฉ๋๋ค.์ ํํ ๊ฐ
{ "country" : <country>, "userid" : MinKey }
์ ์ํ ๊ฐ
{ "country" : <country>, "userid" : MaxKey }
NA
- ๋ถ๋ฏธ ๋ฐ์ดํฐ ์ผํฐ์ด ๋ฐ์ดํฐ ์ผํฐ์ ๋ฐฐํฌ๋ ์ค๋๊ฐ
NA
๊ตฌ์ญ์ ํ ๋น๋์์ต๋๋ค.๋ก์ปฌ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ์
NA
๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ ๊ตญ๊ฐ์ ๋ํด ๋ค์์ ์ฌ์ฉํ์ฌNA
๊ตฌ์ญ์ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์์ฑํฉ๋๋ค.์ ํํ ๊ฐ
{ "country" : <country>, "userid" : MinKey }
์ ์ํ ๊ฐ
{ "country" : <country>, "userid" : MaxKey }
์ฐ๊ธฐ ์์
๊ตฌ์ญ์ ์ฌ์ฉํ๋ฉด ์ฝ์ ๋๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ ๋ฌธ์๊ฐ ๊ตฌ์ฑ๋ ๊ตฌ์ญ๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ ํด๋น ๊ตฌ์ญ ๋ด๋ถ์ ์ค๋์๋ง ์ธ ์ ์์ต๋๋ค.
MongoDB๋ ๊ตฌ์ฑ๋ ๊ตฌ์ญ๊ณผ ์ผ์นํ์ง ์๋ ๋ฌธ์๋ฅผ ํด๋ฌ์คํฐ์ ์ค๋์ ์์ฑํ ์ ์์ต๋๋ค.
์ฐธ๊ณ
์์์ ์ค๋ช ํ ๋์์ ์ํํ๋ ค๋ฉด cluster๊ฐ ๊ตฌ์ฑ๋ ๊ตฌ์ญ์ ์๋ฐํ๋ ์ฒญํฌ๊ฐ ์๋ ์ ์ ์ํ์ฌ์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฐธ๋ฐ์ ๋ํ ๋ค์ ์น์ ์ ์ฐธ์กฐํ์ธ์.
์ฝ๊ธฐ ์์
์ฟผ๋ฆฌ์ ์ ์ด๋ country
ํ๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ MongoDB๋ ์ฟผ๋ฆฌ๋ฅผ ํน์ ์ค๋๋ก ๋ผ์ฐํ
ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, MongoDB๋ ๋ค์ ์ฟผ๋ฆฌ์ ๋ํด ๋์ ์ฝ๊ธฐ ์ฐ์ฐ์ ์๋ํ ์ ์์ต๋๋ค.
chatDB = db.getSiblingDB("chat") chatDB.messages.find( { "country" : "UK" , "userid" : "123" } )
country
ํ๋๊ฐ ์๋ ์ฟผ๋ฆฌ๋ ๋ธ๋ก๋์บ์คํธ ์ฐ์ฐ์ ์ํํฉ๋๋ค.
๋ฐธ๋ฐ์
๋ฐธ๋ฐ์๋ ๊ตฌ์ฑ๋ ๋ชจ๋ ๊ตฌ์ญ๊ณผ ๊ด๋ จํ์ฌ ์ฒญํฌ๋ฅผ ์ ์ ํ ๋ถํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์ด ์๋ฃ๋ ๋๊น์ง ์ค๋์๋ ๊ตฌ์ฑ๋ ๊ตฌ์ญ์ ์๋ฐํ๋ ์ฒญํฌ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋ฐธ๋ฐ์ฑ์ด ์๋ฃ๋๋ฉด ์ค๋์๋ ๋ฒ์๊ฐ ํ ๋น๋ ๊ตฌ์ญ์ ์๋ฐํ์ง ์๋ ์ฒญํฌ๋ง ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๊ตฌ์ญ ๋๋ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ฉด ์ฒญํฌ ๋ง์ด๊ทธ๋ ์ด์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ธํธ์ ํฌ๊ธฐ์ ๊ตฌ์ญ ๋๋ ๊ตฌ์ญ ๋ฒ์๊ฐ ์ํฅ์ ๋ฏธ์น๋ ์ฒญํฌ์ ์์ ๋ฐ๋ผ ์ด๋ฌํ ๋ง์ด๊ทธ๋ ์ด์ ์ ํด๋ฌ์คํฐ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ํน์ ์์ฝ ๊ธฐ๊ฐ ๋์ ๋ฐธ๋ฐ์๋ฅผ ์คํํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์ธ์. ์ค์ผ์ค๋ง ๊ธฐ๊ฐ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํํ ๋ฆฌ์ผ์ ๋ฐธ๋ฐ์ฑ ๊ธฐ๊ฐ ์์ฝ์ ์ฐธ์กฐํ์ธ์.
๋ณด์
์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์์ ์ญํ ๊ธฐ๋ฐ ์ก์ธ์ค ์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ admin
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ต์ํ clusterManager
์ญํ ์ ๊ฐ์ง ์ฌ์ฉ์๋ก ์ธ์ฆํฉ๋๋ค.
์ ์ฐจ
๊ตฌ์ญ ๋ฐ ๊ตฌ์ญ ๋ฒ์๋ฅผ ๋ง๋ค๋ ค๋ฉด mongos
์ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํฉ๋๋ค. ๊ตฌ์ญ ๋๋ ๊ตฌ์ญ ๋ฒ์๋ ๋ถํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ฐ๊ฒฐํ์ฌ ๋ง๋ค ์ ์์ต๋๋ค.
๋ฐธ๋ฐ์ ๋นํ์ฑํ(์ ํ ์ฌํญ)
์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ด๊ธฐ ์ํด ์ ์ฒด ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์์ ๋ฐธ๋ฐ์ ๋ฅผ ๋นํ์ฑํํ์ฌ ์ ๊ตฌ์ญ์ ๊ตฌ์ฑํ๋ ๋์ ๋ง์ด๊ทธ๋ ์ด์ ์ด ๋ฐ์ํ์ง ์๋๋ก ํ ์ ์์ต๋๋ค.
๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ์ ๋ํ ๋ฐธ๋ฐ์ ๋ฅผ sh.stopBalancer()
์ค์งํฉ๋๋ค.
sh.stopBalancer()
sh.isBalancerRunning()
์(๋ฅผ) ์ฌ์ฉํ์ฌ ๋ฐธ๋ฐ์ ํ๋ก์ธ์ค๊ฐ ํ์ฌ ์คํ ์ค์ธ์ง ํ์ธํ์ธ์. ๊ณ์ ์งํํ๊ธฐ ์ ์ ํ์ฌ ๋ฐธ๋ฐ์ฑ ๋ผ์ด๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
๊ฐ ์ค๋๋ฅผ ์ ์ ํ ๊ตฌ์ญ์ ์ถ๊ฐ
๋ถ๋ฏธ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฐ ์ค๋๋ฅผ NA
๊ตฌ์ญ์ ์ถ๊ฐํฉ๋๋ค.
sh.addShardTag(<shard name>, "NA")
์ ๋ฝ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฐ ์ค๋๋ฅผ EU
๊ตฌ์ญ์ ์ถ๊ฐํฉ๋๋ค.
sh.addShardTag(<shard name>, "EU")
sh.status()
๋ฅผ ์คํํ์ฌ ํน์ ์ค๋์ ํ ๋น๋ ๊ตฌ์ญ์ ๊ฒํ ํ ์ ์์ต๋๋ค.
๊ฐ ๊ตฌ์ญ์ ๋ฒ์ ์ ์
country : US
์ธ ์ค๋ ํค ๊ฐ์ ๊ฒฝ์ฐ ์ค๋ ํค ๋ฒ์๋ฅผ ์ ์ํ๊ณ sh.addTagRange()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ NA
๊ตฌ์ญ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด ๋ฉ์๋์๋ ๋ค์์ด ํ์ํฉ๋๋ค.
collection์ ์ ์ฒด ๋ค์์คํ์ด์ค์ ๋๋ค.
๋ฒ์์ ํฌ๊ด์ ์ธ ํํ์ ๋๋ค.
๋ฒ์์ ๋ฐฐํ์ ์ํ์ ์ ๋๋ค.
๊ตฌ์ญ์ ์ด๋ฆ์ ๋๋ค.
sh.addTagRange( "chat.messages", { "country" : "US", "userid" : MinKey }, { "country" : "US", "userid" : MaxKey }, "NA" )
country : UK
์ธ ์ค๋ ํค ๊ฐ์ ๊ฒฝ์ฐ ์ค๋ ํค ๋ฒ์๋ฅผ ์ ์ํ๊ณ sh.addTagRange()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ EU
๊ตฌ์ญ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด ๋ฉ์๋์๋ ๋ค์์ด ํ์ํฉ๋๋ค.
collection์ ์ ์ฒด ๋ค์์คํ์ด์ค์ ๋๋ค.
๋ฒ์์ ํฌ๊ด์ ์ธ ํํ์ ๋๋ค.
๋ฒ์์ ๋ฐฐํ์ ์ํ์ ์ ๋๋ค.
๊ตฌ์ญ์ ์ด๋ฆ์ ๋๋ค.
sh.addTagRange( "chat.messages", { "country" : "UK", "userid" : MinKey }, { "country" : "UK", "userid" : MaxKey }, "EU" )
country : DE
์ธ ์ค๋ ํค ๊ฐ์ ๊ฒฝ์ฐ ์ค๋ ํค ๋ฒ์๋ฅผ ์ ์ํ๊ณ sh.addTagRange()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ EU
๊ตฌ์ญ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด ๋ฉ์๋์๋ ๋ค์์ด ํ์ํฉ๋๋ค.
collection์ ์ ์ฒด ๋ค์์คํ์ด์ค์ ๋๋ค.
๋ฒ์์ ํฌ๊ด์ ์ธ ํํ์ ๋๋ค.
๋ฒ์์ ๋ฐฐํ์ ์ํ์ ์ ๋๋ค.
๊ตฌ์ญ์ ์ด๋ฆ์ ๋๋ค.
sh.addTagRange( "chat.messages", { "country" : "DE", "userid" : MinKey }, { "country" : "DE", "userid" : MaxKey }, "EU" )
MinKey
๋ฐ MaxKey
๊ฐ์ ๋น๊ต๋ฅผ ์ํด ์์ฝ๋ ํน์ ๊ฐ์
๋๋ค. MinKey
๋ ํญ์ ๊ฐ๋ฅํ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๋ณด๋ค ๋ฎ๊ฒ ๋น๊ต๋๋ ๋ฐ๋ฉด, MaxKey
๋ ํญ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ๋ณด๋ค ๋๊ฒ ๋น๊ต๋ฉ๋๋ค. ๊ตฌ์ฑ๋ ๋ฒ์๋ ๊ฐ device
์ ๋ํ ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ์บก์ฒํฉ๋๋ค.
country : UK
๋ฐ country : DE
๋ชจ๋ EU
๊ตฌ์ญ์ ํ ๋น๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด UK
๋๋ DE
๋ฅผ country
์ ๊ฐ์ผ๋ก ๊ฐ์ง ๋ชจ๋ ๋ฌธ์๊ฐ EU ๋ฐ์ดํฐ ์ผํฐ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
๋ฐธ๋ฐ์ ํ์ฑํ(์ ํ ์ฌํญ)
์ด์ ๋จ๊ณ์์ ๋ฐธ๋ฐ์๊ฐ ๋นํ์ฑํ๋ ๊ฒฝ์ฐ ์ด ์ ์ฐจ๊ฐ ์๋ฃ๋๋ฉด ๋ฐธ๋ฐ์๋ฅผ ๋ค์ ํ์ฑํํ์ฌ cluster์ ๊ท ํ์ ์ฌ์กฐ์ ํฉ๋๋ค.
collection์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํ๋ sh.enableBalancing()
์ ์ฌ์ฉํ์ฌ ๋ฐธ๋ฐ์๋ฅผ ์์ํฉ๋๋ค.
sh.enableBalancing("chat.message")
sh.isBalancerRunning()
์(๋ฅผ) ์ฌ์ฉํ์ฌ ๋ฐธ๋ฐ์ ํ๋ก์ธ์ค๊ฐ ํ์ฌ ์คํ ์ค์ธ์ง ํ์ธํ์ธ์.
๋ณ๊ฒฝ ์ฌํญ ๊ฒํ
๋ค์์ ๋ฐธ๋ฐ์๊ฐ ์คํ๋๋ฉด ํ์ํ ๊ฒฝ์ฐ ์ฒญํฌ๋ฅผ ๋ถํ ํ๊ณ ๊ตฌ์ฑ๋ ๊ตฌ์ญ์ ๋ฐ๋ผ ์ค๋ ๊ฐ์ ์ฒญํฌ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค.
๋ฐธ๋ฐ์ฑ์ด ์๋ฃ๋ ํ์๋ ๋ค์์ด ์ํ๋์ด์ผ ํฉ๋๋ค.
NA
๊ตฌ์ญ์ ์ค๋์๋country : US
์ด ์๋ ๋ฌธ์๋ง ํฌํจ๋์ด์ผ ํ๋ฉฐEU
๊ตฌ์ญ์ ์ค๋์๋country : UK
๋๋country : DE
์ด ์๋ ๋ฌธ์๋ง ํฌํจ๋์ด์ผ ํฉ๋๋ค.
US
, UK
๋๋ DE
์ด์ธ์ country
๊ฐ์ ๊ฐ์ง ๋ฌธ์๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ์ค๋์ ์์ ์ ์์ต๋๋ค.
์ฒญํฌ ๋ถํฌ๋ฅผ ํ์ธํ๋ ค๋ฉด sh.status()
๋ฅผ ์คํํ์ธ์.
๊ตฌ์ญ ์ ๋ฐ์ดํธ
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค.
์ด์
country : UK
๊ฐ ์๋ ๋ฌธ์๋ฅผ ์UK
๋ฐ์ดํฐ ์ผํฐ์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.EU
๋ฐ์ดํฐ ์ผํฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ ํฉ๋๋ค.์ด์ ์ฑํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฉ์์ฝ์ ์ฌ์ฉ์๋ฅผ ์ง์ํฉ๋๋ค.
country : MX
๊ฐ ์๋ ๋ฌธ์๋NA
๋ฐ์ดํฐ ์ผํฐ๋ก ๋ผ์ฐํ ๋์ด์ผ ํฉ๋๋ค.
๋ค์ ์ ์ฐจ์ ๋ฐ๋ผ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
๋ฐธ๋ฐ์ ๋นํ์ฑํ(์ ํ ์ฌํญ)
์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ด๊ธฐ ์ํด ์ ์ฒด ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์์ ๋ฐธ๋ฐ์ ๋ฅผ ๋นํ์ฑํํ์ฌ ์ ๊ตฌ์ญ์ ๊ตฌ์ฑํ๊ฑฐ๋ ์ด์ ๊ตฌ์ญ์ ์ ๊ฑฐํ๋ ๋์ ๋ง์ด๊ทธ๋ ์ด์ ์ด ๋ฐ์ํ์ง ์๋๋ก ํ ์ ์์ต๋๋ค.
๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ์ ๋ํ ๋ฐธ๋ฐ์ ๋ฅผ sh.stopBalancer()
์ค์งํฉ๋๋ค.
sh.stopBalancer()
sh.isBalancerRunning()
์(๋ฅผ) ์ฌ์ฉํ์ฌ ๋ฐธ๋ฐ์ ํ๋ก์ธ์ค๊ฐ ํ์ฌ ์คํ ์ค์ธ์ง ํ์ธํ์ธ์. ๊ณ์ ์งํํ๊ธฐ ์ ์ ํ์ฌ ๋ฐธ๋ฐ์ฑ ๋ผ์ด๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
์ UK
๊ตฌ์ญ์ถ๊ฐ
UK
๋ฐ์ดํฐ ์ผํฐ์ ๊ฐ ์ค๋๋ฅผ UK
๊ตฌ์ญ์ ์ถ๊ฐํฉ๋๋ค.
sh.addShardTag("<shard name>", "UK")
sh.status()
๋ฅผ ์คํํ์ฌ ํน์ ์ค๋์ ํ ๋น๋ ๊ตฌ์ญ์ ๊ฒํ ํ ์ ์์ต๋๋ค.
์ด์ ๊ตฌ์ญ ๋ฒ์ ์ ๊ฑฐ
sh.removeTagRange()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ UK
๊ตญ๊ฐ์ ์ฐ๊ด๋ ์ด์ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์ ๊ฑฐํ์ญ์์ค. ์ด ๋ฉ์๋์๋ ๋ค์์ด ํ์ํฉ๋๋ค.
collection์ ์ ์ฒด ๋ค์์คํ์ด์ค์ ๋๋ค.
๋ฒ์์ ํฌ๊ด์ ์ธ ํํ์ ๋๋ค.
๋ฒ์์ ๋ฐฐํ์ ์ํ์ ์ ๋๋ค.
sh.removeTagRange( "chat.messages", { "country" : "UK", "userid" : MinKey }, { "country" : "UK", "userid" : MaxKey } )
์ ๊ตฌ์ญ ๋ฒ์ ์ถ๊ฐ
country : UK
์ธ ์ค๋ ํค ๊ฐ์ ๊ฒฝ์ฐ ์ค๋ ํค ๋ฒ์๋ฅผ ์ ์ํ๊ณ sh.addTagRange()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ UK
๊ตฌ์ญ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด ๋ฉ์๋์๋ ๋ค์์ด ํ์ํฉ๋๋ค.
collection์ ์ ์ฒด ๋ค์์คํ์ด์ค์ ๋๋ค.
๋ฒ์์ ํฌ๊ด์ ์ธ ํํ์ ๋๋ค.
๋ฒ์์ ๋ฐฐํ์ ์ํ์ ์ ๋๋ค.
๊ตฌ์ญ์ ์ด๋ฆ์ ๋๋ค.
sh.addTagRange( "chat.message", { "country" : "UK", "userid" : MinKey }, { "country" : "UK", "userid" : MaxKey }, "UK" )
country : MX
์ธ ์ค๋ ํค ๊ฐ์ ๊ฒฝ์ฐ ์ค๋ ํค ๋ฒ์๋ฅผ ์ ์ํ๊ณ sh.addTagRange()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ NA
๊ตฌ์ญ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด ๋ฉ์๋์๋ ๋ค์์ด ํ์ํฉ๋๋ค.
collection์ ์ ์ฒด ๋ค์์คํ์ด์ค์ ๋๋ค.
๋ฒ์์ ํฌ๊ด์ ์ธ ํํ์ ๋๋ค.
๋ฒ์์ ๋ฐฐํ์ ์ํ์ ์ ๋๋ค.
๊ตฌ์ญ์ ์ด๋ฆ์ ๋๋ค.
sh.addTagRange( "chat.messages", { "country" : "MX", "userid" : MinKey }, { "country" : "MX", "userid" : MaxKey }, "NA" )
MinKey
๋ฐ MaxKey
๊ฐ์ ๋น๊ต๋ฅผ ์ํด ์์ฝ๋ ํน์ ๊ฐ์
๋๋ค. MinKey
๋ ํญ์ ๊ฐ๋ฅํ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๋ณด๋ค ๋ฎ๊ฒ ๋น๊ต๋๋ ๋ฐ๋ฉด, MaxKey
๋ ํญ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ๋ณด๋ค ๋๊ฒ ๋น๊ต๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ ๋ฒ์๊ฐ userid
์ ๊ฐ๋ฅํ ์ ์ฒด ๊ฐ ๊ณต๊ฐ์ ์บก์ฒํ ์ ์์ต๋๋ค.
๋ฐธ๋ฐ์ ํ์ฑํ(์ ํ ์ฌํญ)
์ด์ ๋จ๊ณ์์ ๋ฐธ๋ฐ์๊ฐ ๋นํ์ฑํ๋ ๊ฒฝ์ฐ ์ด ์ ์ฐจ๊ฐ ์๋ฃ๋๋ฉด ๋ฐธ๋ฐ์๋ฅผ ๋ค์ ํ์ฑํํ์ฌ cluster์ ๊ท ํ์ ์ฌ์กฐ์ ํฉ๋๋ค.
์ปฌ๋ ์
์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํ๋ sh.enableBalancing()
์(๋ฅผ) ์ฌ์ฉํ์ฌ ๋ฐธ๋ฐ์๋ฅผ ์์ํฉ๋๋ค.
sh.enableBalancing("chat.messages")
sh.isBalancerRunning()
์(๋ฅผ) ์ฌ์ฉํ์ฌ ๋ฐธ๋ฐ์ ํ๋ก์ธ์ค๊ฐ ํ์ฌ ์คํ ์ค์ธ์ง ํ์ธํ์ธ์.
๋ณ๊ฒฝ ์ฌํญ ๊ฒํ
๋ค์์ ๋ฐธ๋ฐ์๊ฐ ์คํ๋๋ฉด ํ์ํ ๊ฒฝ์ฐ ์ฒญํฌ๋ฅผ ๋ถํ ํ๊ณ ๊ตฌ์ฑ๋ ๊ตฌ์ญ์ ๋ฐ๋ผ ์ค๋ ๊ฐ์ ์ฒญํฌ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค.
๋ฐธ๋ฐ์ฑ ์ :
EU
๊ตฌ์ญ์ ์ค๋์๋country : DE
๋๋country : UK
์ธ ๋ฌธ์๋ง ํฌํจ๋ฉ๋๋ค.country : MX
์ด ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ์ค๋์ ์ ์ฅ๋ ์ ์๋ ๋ฌธ์.
๋ฐธ๋ฐ์ฑ ํ:
EU
๊ตฌ์ญ์ ์ค๋์๋country : DE
์ธ ๋ฌธ์๋ง ํฌํจ๋ฉ๋๋ค.UK
๊ตฌ์ญ์ ์ค๋์๋country : UK
์ธ ๋ฌธ์๋ง ํฌํจ๋ฉ๋๋ค.NA
๊ตฌ์ญ์ ์ค๋์๋country : US
๋๋country : MX
์ธ ๋ฌธ์๋ง ํฌํจ๋ฉ๋๋ค.
US
, MX
, UK
, DE
์ด์ธ์ country
๊ฐ์ ๊ฐ์ง ๋ฌธ์๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ์ค๋์ ์์ ์ ์์ต๋๋ค.
์ฒญํฌ ๋ถํฌ๋ฅผ ํ์ธํ๋ ค๋ฉด sh.status()
๋ฅผ ์คํํ์ธ์.