์ฝ์ ์ ์ฉ ์ํฌ๋ก๋๋ฅผ ์ํ ๋ถ์ฐ ๋ก์ปฌ ์ฐ๊ธฐ
MongoDB ํ๊ทธ ์ธ์ ์ค๋ฉ์ ์ฌ์ฉํ๋ฉด ๊ด๋ฆฌ์๊ฐ ์ค๋ ํค ์ ๋ฒ์๋ฅผ ์ ์ํ๊ณ ํ๋ ์ด์์ ์ค๋์ ํ๊ทธ๋ฅผ ์ง์ ํ์ฌ ์ค๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์ ๋ฐ์ดํฐ ๋ฐฐํฌ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์๋ ๋ค์ค ๋ฐ์ดํฐ ์ผํฐ ์ค๋ cluster ๋ฐฐํฌ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ธก ๋ก์ง๊ณผ ํจ๊ป Zones ์ ์ฌ์ฉํ์ฌ ๋ถ์ฐ๋ ๋ก์ปฌ ์ฐ๊ธฐ๋ ๋ฌผ๋ก replica set ์ด๋ฒคํธ ๋๋ ๋ฐ์ดํฐ ์ผํฐ ์ฅ์ ๋ฐ์ ์ ๋์ ์ฐ๊ธฐ ๊ฐ์ฉ์ฑ์ ์ง์ํฉ๋๋ค.
์ค๋ ์ปฌ๋ ์ ์์ ์ ๋น์ด ์๊ฑฐ๋ ์กด์ฌํ์ง ์๋ ์ปฌ๋ ์ ์ ์ค๋ฉํ๊ธฐ ์ ์ ๊ตฌ์ญ ๋ฐ ๊ตฌ์ญ ๋ฒ์๋ฅผ ์ ์ํ์ฌ ์ ์๋ ๊ตฌ์ญ ๋ฒ์์ ๋ํ ์ฒญํฌ์ ์ค๋ ํค ๊ฐ์ ์ ์ฒด ๋ฒ์๋ฅผ ํฌํจํ๋ ์ถ๊ฐ ์ฒญํฌ๋ฅผ ์์ฑํ๊ณ ๊ทธ์ญ ๋ฒ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ธฐ ์ฒญํฌ ๋ถ๋ฐฐ๋ฅผ ์ํํฉ๋๋ค. ์ด๋ฌํ ์ฒญํฌ์ ์ด๊ธฐ ์์ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ํตํด ์ค๋ฉ์ ๋ ๋น ๋ฅด๊ฒ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๊ธฐ ๋ถ๋ฐฐ ์ดํ์๋ ๋ฐธ๋ฐ์๊ฐ ์์ผ๋ก์ ์ฒญํฌ ๋ถ๋ฐฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์๋ฅผ ๋ณด๋ ค๋ฉด ๋น์ด ์๊ฑฐ๋ ์กด์ฌํ์ง ์๋ ์ปฌ๋ ์ ์ ๋ํ ๊ตฌ์ญ ๋ฐ ๊ตฌ์ญ ๋ฒ์ ์ฌ์ ์ ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ค์
์ด ํํ ๋ฆฌ์ผ์์ ์ค๋ช ํ๋ ๊ฐ๋ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๋ก์ง๋ฟ๋ง ์๋๋ผ ํน์ ๋ฐฐํฌ ์ํคํ ์ฒ๊ฐ ํ์ํฉ๋๋ค.
์ด๋ฌํ ๊ฐ๋ ์ ์ดํดํ๋ ค๋ฉด MongoDB ์ค๋ cluster, ๋ณต์ ๋ณธ ์ธํธ ๋ฐ ๊ตฌ์ญ์ ์ผ๋ฐ์ ์ธ ๋์์ ์ ์๊ณ ์์ด์ผ ํฉ๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์๋ ์ฝ์ ์ ์ฉ ๋๋ ์ฝ์ ์ง์ฝ์ ์ธ ์ํฌ๋ก๋๋ฅผ ๊ฐ์ ํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์ ์ค๋ช ํ๋ ๊ฐ๋ ๊ณผ ์ ๋ต์ ๋น ๋ฅธ ์ฝ๊ธฐ ๋๋ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ์ฌ์ฉ ์ฌ๋ก์๋ ์ ํฉํ์ง ์์ต๋๋ค.
Scenario
์ฝ๊ธฐ๊ฐ ๋น๋ฒํ์ง ์๊ณ ์ฐ๊ธฐ์ ๋นํด ์ฐ์ ์์๊ฐ ๋ฎ์ ์ฝ์ ์ง์ฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐํด ๋ณด์ธ์. ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ collection์ ๋ฌธ์๋ฅผ ์์ฑํ๋ฉฐ, SLA ๋๋ SLO๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฑฐ์ ์ผ์ ํ ๊ฐ๋ ์๊ฐ์ด ํ์ํฉ๋๋ค.
๋ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ ๋ฌธ์ ํ์์ ๋ถ๋ถ ๋ณด๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค.
{ "_id" : ObjectId("56f08c447fe58b2e96f595fa"), "message_id" : 329620, "datacenter" : "alfa", "userid" : 123, ... } { "_id" : ObjectId("56f08c447fe58b2e96f595fb"), "message_id" : 578494, "datacenter" : "bravo", "userid" : 456, ... } { "_id" : ObjectId("56f08c447fe58b2e96f595fc"), "message_id" : 689979, "datacenter" : "bravo", "userid" : 789, ... }
์ค๋ ํค
์ด collection์ { datacenter : 1, userid : 1 }
๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์ค๋ ํค๋ก ์ฌ์ฉํฉ๋๋ค.
๊ฐ ๋ฌธ์์ datacenter
ํ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ๊ณ ์ ๋ฐ์ดํฐ ์ผํฐ ๊ฐ์ ํ๊ทธ ๋ฒ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. datacenter
ํ๋๊ฐ ์์ผ๋ฉด ๋ฌธ์๋ฅผ ํน์ ๋ฐ์ดํฐ ์ผํฐ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
userid
ํ๋๋ datacenter
์ ๋นํด ์ค๋ ํค์ ๋์ ์นด๋๋๋ฆฌํฐ์ ๋ฎ์ ๋น๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ค๋ ํค ์ ํ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ง์นจ์ ์ค๋ ํค ์ ํ์ ์ฐธ์กฐํ์ญ์์ค.
์ํคํ ์ฒ
๋ฐฐํฌ๋ ๋ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ alfa
๋ฐ bravo
๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ ๊ฐ์ ์ค๋, shard0000
๋ฐ shard0001
๊ฐ ์์ต๋๋ค. ๊ฐ ์ค๋๋ ์ธ ๋ช
์ ๋ฉค๋ฒ๋ก ๊ตฌ์ฑ๋ ๋ณต์ ๋ณธ ์ธํธ ์
๋๋ค. shard0000
์ ์๋ ๋ ๊ฐ์ ๋ฉค๋ฒ๊ฐ alfa
์๊ณ ์๋ ํ๋์ ์ฐ์ ์์ 0 ๋ฉค๋ฒ ๊ฐ bravo
์์ต๋๋ค. shard0001
์ bravo
์ ๋ ๊ฐ์ ๋ฉค๋ฒ๊ฐ ์๊ณ alfa
์ ์ฐ์ ์์ 0 ๋ฉค๋ฒ ๊ฐ ํ ๊ฐ ์์ต๋๋ค.
ํ๊ทธ
์ด ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๋ฐ์ดํฐ ์ผํฐ๋น ํ๋์ ํ๊ทธ๊ฐ ํ์ํฉ๋๋ค. ๊ฐ ์ค๋์๋ ๋๋ถ๋ถ์ ๋ณต์ ๋ณธ ์ธํธ ๊ตฌ์ฑ์์ ํฌํจํ๋ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋์ ํ๊ทธ๊ฐ ํ ๋น๋์ด ์์ต๋๋ค. ๊ฐ ๋ฐ์ดํฐ ์ผํฐ๋ง๋ค ํ๋์ฉ ๋ ๊ฐ์ง ํ๊ทธ ๋ฒ์๊ฐ ์์ต๋๋ค.
alfa
๋ฐ์ดํฐ ์ผํฐ์ด ๋ฐ์ดํฐ ์ผํฐ์์ ๋๋ค์์ ๊ตฌ์ฑ์์ ๊ฐ์ง ์ค๋์
alfa
์ผ๋ก ํ๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค.๋ค์์ ์ฌ์ฉํ์ฌ ํ๊ทธ ๋ฒ์๋ฅผ ์์ฑํฉ๋๋ค.
{ "datacenter" : "alfa", "userid" : MinKey }
์ ํํ๊ฐ,{ "datacenter" : "alfa", "userid" : MaxKey }
์ ์ํ์ ,ํ๊ทธ
alfa
bravo
๋ฐ์ดํฐ ์ผํฐ์ด ๋ฐ์ดํฐ ์ผํฐ์์ ๋๋ค์์ ๊ตฌ์ฑ์์ ๊ฐ์ง ์ค๋์
bravo
์ผ๋ก ํ๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค.๋ค์์ ์ฌ์ฉํ์ฌ ํ๊ทธ ๋ฒ์๋ฅผ ์์ฑํฉ๋๋ค.
{ "datacenter" : "bravo", "userid" : MinKey }
์ ํํ๊ฐ,{ "datacenter" : "bravo", "userid" : MaxKey }
์ ์ํ์ ,ํ๊ทธ
bravo
๊ตฌ์ฑ๋ ํ๊ทธ ๋ฐ ํ๊ทธ ๋ฒ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก mongos
๋ datacenter : alfa
์ด ์๋ ๋ฌธ์๋ฅผ alfa
๋ฐ์ดํฐ ์ผํฐ๋ก ๋ผ์ฐํ
ํ๊ณ datacenter : bravo
์ด ์๋ ๋ฌธ์๋ฅผ bravo
๋ฐ์ดํฐ ์ผํฐ๋ก ๋ผ์ฐํ
ํฉ๋๋ค.
์ฐ๊ธฐ ์์
์ฝ์ ๋๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ ๋ฌธ์๊ฐ ๊ตฌ์ฑ๋ ํ๊ทธ ๋ฒ์์ ์ผ์นํ๋ ๊ฒฝ์ฐ ๊ด๋ จ ํ๊ทธ๊ฐ ์๋ ์ค๋์๋ง ์ธ ์ ์์ต๋๋ค.
MongoDB๋ ๊ตฌ์ฑ๋ ํ๊ทธ ๋ฒ์์ ์ผ์นํ์ง ์๋ ๋ฌธ์๋ฅผ cluster์ ์ค๋์ ์์ฑํ ์ ์์ต๋๋ค.
์ฐธ๊ณ
์์์ ์ค๋ช ํ ๋์์ ์ํํ๋ ค๋ฉด ํด๋ฌ์คํฐ ๊ฐ ๊ตฌ์ฑ๋ ํ๊ทธ๋ฅผ ์ง์ ํ๋ค ๋ฒ์ ๋ฅผ ์๋ฐํ๋ ์ฒญํฌ๊ฐ ์๋ ์ ์ ์ํ ์ฌ์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฐธ๋ฐ์ ์ ๋ํ ๋ค์ ์น์ ์ ์ฐธ์กฐํ์ธ์.
๋ฐธ๋ฐ์
๋ฐธ๋ฐ์ ๋ ํ๊ทธ๊ฐ ์ง์ ๋ ์ฒญํฌ๋ฅผ ์ ์ ํ ์ค๋ ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์ด ์๋ฃ๋ ๋๊น์ง ์ค๋์๋ ๊ตฌ์ฑ๋ ํ๊ทธ ๋ฒ์ ๋ฐ ํ๊ทธ๋ฅผ ์๋ฐํ๋ ์ฒญํฌ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋ฐธ๋ฐ์ฑ์ด ์๋ฃ๋๋ฉด ์ค๋์๋ ๋ฒ์๊ฐ ํ ๋น๋ ํ๊ทธ ๋ฐ ํ๊ทธ ๋ฒ์๋ฅผ ์๋ฐํ์ง ์๋ ์ฒญํฌ๋ง ํฌํจ๋์ด์ผ ํฉ๋๋ค.
ํ๊ทธ ๋๋ ํ๊ทธ ๋ฒ์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ฉด ์ฒญํฌ ๋ง์ด๊ทธ๋ ์ด์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ธํธ์ ํฌ๊ธฐ์ ํ๊ทธ ๋ฒ์๊ฐ ์ํฅ์ ๋ฏธ์น๋ ์ฒญํฌ์ ์์ ๋ฐ๋ผ ์ด๋ฌํ ๋ง์ด๊ทธ๋ ์ด์ ์ ํด๋ฌ์คํฐ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ํน์ ์์ฝ Windows ๋์ ๋ฐธ๋ฐ์ ๋ฅผ ์คํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ค์ผ์ค๋ง ๊ธฐ๊ฐ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํํ ๋ฆฌ์ผ ์ ๋ฐธ๋ฐ์ฑ ๊ธฐ๊ฐ ์์ฝ์ ์ฐธ์กฐํ์ธ์.
์ ํ๋ฆฌ์ผ์ด์ ๋์
๊ธฐ๋ณธ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ ์ผํฐ์ ๊ธฐ๋กํฉ๋๋ค. ๋ก์ปฌ ๋ฐ์ดํฐ ์ผํฐ๊ฐ ๋ค์ด๋๊ฑฐ๋ ํด๋น ๋ฐ์ดํฐ ์ผํฐ์ ๋ํ ์ฐ๊ธฐ๊ฐ ์ค์ ๋ ๊ธฐ๊ฐ ๋ด์ ์น์ธ๋์ง ์์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌธ์๋ฅผ ์ฐ๊ธฐ๋ฅผ ์๋ํ๊ธฐ ์ ์ datacenter
ํ๋์ ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ๋ก ์ ํํฉ๋๋ค.
์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ธฐ ์๊ฐ ์ด๊ณผ๋ฅผ ์ง์ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ธฐ ๊ณ ๋ ค (write concern) ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ฐ๊ธฐ ์์ ์ ๋ํ ์๊ฐ ์ ํ ์ ์ค์ ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ ์ฐ๊ธฐ ๋๋ ์๊ฐ ์ด๊ณผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๊ฐ ๋ฌธ์์ datacenter
ํ๋๋ฅผ ์์ ํ๊ณ ์ฐ๊ธฐ๋ฅผ ์ํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ๋ก ๋ผ์ฐํ
๋ฉ๋๋ค. ๋ ๋ฐ์ดํฐ ์ผํฐ๊ฐ ๋ชจ๋ ๋ค์ด๋๋ฉด ์ฐ๊ธฐ๊ฐ ์ฑ๊ณตํ ์ ์์ต๋๋ค. ์ฐ๊ธฐ ์คํจ ํด๊ฒฐ์ ์ฐธ์กฐํ์ธ์.
์ด ์ ํ๋ฆฌ์ผ์ด์ ์ '๋ค์ด'์ผ๋ก ํ์๋ ๋ฐ์ดํฐ ์ผํฐ์ ๋ํ ์ฐ๊ฒฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํฉ๋๋ค. ์ฐ๊ฒฐ์ด ๋ณต์๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ ์ฐ๊ธฐ ์์ ์ ๊ณ์ ์ํํ ์ ์์ต๋๋ค.
์ ํ ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ผํฐ ๊ฐ ํด๋ผ์ด์ธํธ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ก๋ ๋ฐธ๋ฐ์ ๋๋ ์ ์ฌํ ๋ฉ์ปค๋์ฆ์ ๊ฐ์ํ ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ ๋ฐ์ดํฐ ์ผํฐ ์ค ํน์ ๋ฌธ์๊ฐ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์์ธกํ ์ ์์ต๋๋ค. ์ฝ๊ธฐ ์์
์ ์ผ๋ถ๋ก ๋๋ฝ๋ ๋ฌธ์๊ฐ ์๋๋ก ํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ datacenter
ํ๋๋ฅผ ์ฟผ๋ฆฌ์ ์ผ๋ถ๋ก ํฌํจ ํ์ง ์์ ์ผ๋ก์จ ๋ธ๋ก๋์บ์คํธ ์ฟผ๋ฆฌ ๋ฅผ ์ํ ํด์ผ ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ ์ง์ฐ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด nearest
์ ์ฝ๊ธฐ ๊ธฐ๋ณธ ์ค์ ์ ์ฌ์ฉํ์ฌ ์ฝ๊ธฐ ๋ฅผ ์ํํฉ๋๋ค.
๋ณด๊ณ ๋ ์๊ฐ ์ด๊ณผ ์ค๋ฅ์๋ ๋ถ๊ตฌํ๊ณ ์ฐ๊ธฐ (write) ์์ ์ด ์ฑ๊ณตํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ์ ๋ฌธ์ ๋ฅผ ๋ค์ ์์ฑํ๋ ค๊ณ ์๋ํ์ฌ ์ค๋ฅ์ ์๋ตํ๋ฉฐ, ์ด๋ก ์ธํด ๋ ๋ฐ์ดํฐ ์ผํฐ์์ ๋ฌธ์ ๊ฐ ์ค๋ณต๋ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ธฐ ๋ก์ง์ ์ผ๋ถ๋ก ์ค๋ณต ํญ๋ชฉ์ ํด๊ฒฐํฉ๋๋ค.
์ ํ ๋ก์ง
์ ํ๋ฆฌ์ผ์ด์
์๋ ํ๋ ์ด์์ ์ฐ๊ธฐ๊ฐ ์คํจํ๊ฑฐ๋ ์ค์ ๋ ๊ธฐ๊ฐ ๋ด์ ์ฐ๊ธฐ๊ฐ ์น์ธ ๋์ง ์๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ ํํ๋ ๋ก์ง์ด ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ๋์ ๋ฐ์ดํฐ ์ผํฐ์ ํ๊ทธ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก datacenter
ํ๋๋ฅผ ์์ ํ์ฌ ๋ฌธ์๋ฅผ ํด๋น ๋ฐ์ดํฐ ์ผํฐ๋ก ํฅํ๊ฒ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด alfa
๋ฐ์ดํฐ ์ผํฐ์ ์ฐ๊ธฐ๋ฅผ ์๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ ์ ์ฐจ๋ฅผ ๋ฐ๋ฅผ ์ ์์ต๋๋ค.
datacenter : alfa
์(๋ฅผ) ์ง์ ํ์ฌ ๋ฌธ์ ์์ฑ์ ์๋ํฉ๋๋ค.์ฐ๊ธฐ ์๊ฐ ์ด๊ณผ ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด
alfa
๋ฅผ ์ผ์์ ์ผ๋ก ๋ค์ด๋ ๊ฒ์ผ๋ก ๋ก๊ทธํฉ๋๋ค.datacenter : bravo
์(๋ฅผ) ์์ ํ์ฌ ๋์ผํ ๋ฌธ์๋ฅผ ์์ฑํ๋ ค๊ณ ์๋ํฉ๋๋ค.์ฐ๊ธฐ ์๊ฐ ์ด๊ณผ ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด
bravo
๋ฅผ ์ผ์์ ์ผ๋ก ๋ค์ด๋ ๊ฒ์ผ๋ก ๋ก๊ทธํฉ๋๋ค.alfa
๋ฐbravo
๋ชจ๋ ๋ค์ด๋ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณด๊ณ ํฉ๋๋ค.
์ ์ฐจ
์ค๋ ํ๊ทธ ๊ตฌ์ฑ
๊ณ์ mongos
์งํํ๋ ค๋ฉด ๋์ ์ค๋ cluster ์ ์ฐ๊ฒฐ๋ ์ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํฉ๋๋ค. ์ค๋ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์ ์ง์ ์ฐ๊ฒฐํ์ฌ ํ๊ทธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๊ฐ ์ค๋์ ํ๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค.
alfa
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ alfa
๋ฐ์ดํฐ ์ผํฐ์ ๊ฐ ์ค๋์ ํ๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค.
sh.addShardTag("shard0000", "alfa")
bravo
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ bravo
๋ฐ์ดํฐ ์ผํฐ์ ๊ฐ ์ค๋์ ํ๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค.
sh.addShardTag("shard0001", "bravo")
sh.status()
๋ฅผ ์คํํ์ฌ ํน์ ์ค๋์ ํ ๋น๋ ํ๊ทธ๋ฅผ ๊ฒํ ํ ์ ์์ต๋๋ค.
๊ฐ ํ๊ทธ์ ๋ฒ์๋ฅผ ์ ์ํฉ๋๋ค.
alfa
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฒ์๋ฅผ ์ ์ํ๊ณ sh.addTagRange()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ alfa
ํ๊ทธ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด ๋ฉ์๋์๋ ๋ค์์ด ํ์ํฉ๋๋ค.
collection์ ์ ์ฒด ๋ค์์คํ์ด์ค์ ๋๋ค.
๋ฒ์์ ํฌ๊ด์ ์ธ ํํ์ ๋๋ค.
๋ฒ์์ ๋ฐฐํ์ ์ํ์ ์ ๋๋ค.
ํ๊ทธ์ ์ด๋ฆ์ ๋๋ค.
sh.addTagRange( "<database>.<collection>", { "datacenter" : "alfa", "userid" : MinKey }, { "datacenter" : "alfa", "userid" : MaxKey }, "alfa" )
bravo
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฒ์๋ฅผ ์ ์ํ๊ณ sh.addTagRange()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ bravo
ํ๊ทธ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด ๋ฉ์๋์๋ ๋ค์์ด ํ์ํฉ๋๋ค.
collection์ ์ ์ฒด ๋ค์์คํ์ด์ค์ ๋๋ค.
๋ฒ์์ ํฌ๊ด์ ์ธ ํํ์ ๋๋ค.
๋ฒ์์ ๋ฐฐํ์ ์ํ์ ์ ๋๋ค.
ํ๊ทธ์ ์ด๋ฆ์ ๋๋ค.
sh.addTagRange( "<database>.<collection>", { "datacenter" : "bravo", "userid" : MinKey }, { "datacenter" : "bravo", "userid" : MaxKey }, "bravo" )
MinKey
๋ฐ MaxKey
๊ฐ์ ๋น๊ต๋ฅผ ์ํด ์์ฝ๋ ํน์ ๊ฐ์
๋๋ค. MinKey
์ ํญ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ๋ณด๋ค ์๊ฒ ๋น๊ต๋๋ ๋ฐ๋ฉด, MaxKey
๋ ํญ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ๋ณด๋ค ํฌ๊ฒ ๋น๊ต๋ฉ๋๋ค. ๊ตฌ์ฑ๋ ๋ฒ์๋ ๊ฐ datacenter
์ ๋ํ ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ์บก์ฒํฉ๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ ๊ฒํ ํฉ๋๋ค.
๋ค์์ ๋ฐธ๋ฐ์ ๊ฐ ์คํ๋๋ฉด ๊ตฌ์ฑ๋ ๊ตฌ์ญ๊ณผ ๊ด๋ จํ์ฌ ์ค๋ ์ ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค.
๋ฐธ๋ฐ์ฑ์ด ์๋ฃ๋๋ฉด alfa
ํ๊ทธ๊ฐ ์ง์ ๋ ์ค๋์๋ datacenter : alfa
์ด ์๋ ๋ฌธ์๋ง ํฌํจํด์ผ ํ๊ณ , bravo
ํ๊ทธ๊ฐ ์ง์ ๋ ์ค๋์๋ datacenter : bravo
์ด ์๋ ๋ฌธ์๋ง ํฌํจํด์ผ ํฉ๋๋ค.
sh.status()
์(๋ฅผ) ์คํํ์ฌ ์ฒญํฌ ๋ถํฌ๋ฅผ ๊ฒํ ํ ์ ์์ต๋๋ค.
์ฐ๊ธฐ ์คํจ ํด๊ฒฐ
์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ผํฐ๊ฐ ๋ค์ด๋๊ฑฐ๋ ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์ datacenter
ํ๋๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ณธ์ ์ผ๋ก alfa
๋ฐ์ดํฐ ์ผํฐ์ ๋ค์ ๋ฌธ์๋ฅผ ์ฐ๋ ค๊ณ ์๋ํฉ๋๋ค.
{ "_id" : ObjectId("56f08c447fe58b2e96f595fa"), "message_id" : 329620, "datacenter" : "alfa", "userid" : 123, ... }
์ ํ๋ฆฌ์ผ์ด์
์ด ์ฐ๊ธฐ ์๋ ์ ์ค๋ฅ๋ฅผ ์์ ํ๊ฑฐ๋ ์ฐ๊ธฐ ํ์ธ์ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ผ๋ก ๋ก๊ทธํ๊ณ bravo
๋ฐ์ดํฐ ์ผํฐ๋ฅผ ๊ฐ๋ฆฌํค๋๋ก datacenter
ํ๋๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
{ "_id" : ObjectId("56f08c457fe58b2e96f595fb"), "message_id" : 329620, "datacenter" : "bravo", "userid" : 123, ... }
์ ํ๋ฆฌ์ผ์ด์
์ด ์ฃผ๊ธฐ์ ์ผ๋ก alfa
๋ฐ์ดํฐ ์ผํฐ์ ์ฐ๊ฒฐ์ ํ์ธํฉ๋๋ค. ๋ฐ์ดํฐ ์ผํฐ์ ๋ค์ ์ฐ๊ฒฐํ ์ ์์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์์ ์ธ ์ฐ๊ธฐ๋ฅผ ์ฌ๊ฐํ ์ ์์ต๋๋ค.
์ฐธ๊ณ
ํนํ ์ค๋ฅ๊ฐ ์๊ฐ ์ด๊ณผ ์ ๊ด๋ จ๋ ๊ฒฝ์ฐ datacenter : alfa
์ ๋ํ ์๋ ์ฐ๊ธฐ๊ฐ ์ฑ๊ณตํ์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ message_id : 329620
์ด ์๋ ๋ฌธ์๊ฐ ๋ ๋ฐ์ดํฐ ์ผํฐ ๋ชจ๋์์ ์ค๋ณต๋ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ธฐ ์์
์ ์ผ๋ถ๋ก ์ค๋ณต ํญ๋ชฉ์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
์ฝ๊ธฐ ์ ์ค๋ณต ๋ฌธ์ ํด๊ฒฐ
์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํ ๋ก์ง์ผ๋ก ์ธํด ์ ์ฌ์ ์ธ ๋ฌธ์ ์ค๋ณต์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ธฐ๋ฅผ ์ํํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ๋ชจ๋ ์ค๋ณต ๋ฌธ์๋ฅผ ํ์ธํฉ๋๋ค.
๋ค์ ์ฟผ๋ฆฌ๋ userid
๊ฐ 123
์ธ ๋ฌธ์๋ฅผ ๊ฒ์ํฉ๋๋ค. ์ฐธ๊ณ ๋ก userid
์(๋) ์ค๋ ํค์ ์ผ๋ถ์ด์ง๋ง ์ฟผ๋ฆฌ์๋ datacenter
ํ๋๊ฐ ํฌํจ๋์ด ์์ง ์์ผ๋ฏ๋ก ๋์ ์ฝ๊ธฐ ์์
์ ์ํํ์ง ์์ต๋๋ค.
db.collection.find( { "userid" : 123 } )
๊ฒฐ๊ณผ๋ 329620
์ message_id
๊ฐ ์๋ ๋ฌธ์๊ฐ ์ฐ๊ธฐ ์น์ธ์ด ์ง์ฐ๋ ๊ฒฐ๊ณผ๋ก MongoDB์ ๋ ๋ฒ ์ฝ์
๋์์์ ๋ณด์ฌ์ค๋๋ค.
{ "_id" : ObjectId("56f08c447fe58b2e96f595fa"), "message_id" : 329620 "datacenter" : "alfa", "userid" : 123, data : {...} } { "_id" : ObjectId("56f08c457fe58b2e96f595fb"), "message_id" : 329620 "datacenter" : "bravo", "userid" : 123, ... }
์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ณต ๋ฌธ์๋ฅผ ๋ฌด์ํ์ฌ ๋ ๋ฌธ์ ์ค ํ๋๋ฅผ ์ ํํ๊ฑฐ๋, ๋ฌธ์๊ฐ ํ๋๋ง ๋จ์ ๋๊น์ง ์ค๋ณต ๋ฌธ์๋ฅผ ์๋ผ๋ด๋ ค๊ณ ํ ์ ์์ต๋๋ค.
์ค๋ณต ํญ๋ชฉ์ ํธ๋ฆฌ๋ฐํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ObjectId.getTimestamp()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ _id
ํ๋์์ ํ์์คํฌํ๋ฅผ ์ถ์ถํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ์
๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ ๋ง์ง๋ง์ผ๋ก ์ฝ์
๋ ๋ฌธ์๋ฅผ ์ ์งํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ _id
ํ๋๊ฐ MongoDB ObjectId()
์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ObjectId("56f08c447fe58b2e96f595fa")
๊ฐ ์๋ ๋ฌธ์์์ getTimestamp()
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์์ด ๋ฐํ๋ฉ๋๋ค.
ISODate("2016-03-22T00:05:24Z")
ObjectId("56f08c457fe58b2e96f595fb")
๊ฐ ์๋ ๋ฌธ์์์ getTimestamp()
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์์ด ๋ฐํ๋ฉ๋๋ค.
ISODate("2016-03-22T00:05:25Z")