split
์ด ํ์ด์ง์ ๋ด์ฉ
์ ์
split
์ค๋ฉ๋ ํด๋ฌ์คํฐ ์์ฒญํฌ ๋ฅผ ๋ ๊ฐ์ ์ฒญํฌ๋ก ๋ถํ ํฉ๋๋ค. ์ค๋๋ ์ ์ง ๊ด๋ฆฌํ๋ ์ฒญํฌ ํฌ๊ธฐ ํต๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฒญํฌ๋ฅผ ๊ด๋ฆฌ ํ๊ณ ๋ถํ ํฉ๋๋ค.
์์ธ์ ์ธ ๊ฒฝ์ฐ
split
๋ช ๋ น์ ์ฌ์ฉํ๋ฉด ๊ด๋ฆฌ์๊ฐ ์๋์ผ๋ก ๋ถํ ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํฉ๊ณผ ๋ฅผ ๋ํํ๋ MongoDB shell ๋ช ๋ น์ ๋ํ ์์ธํ ๋ด์ฉ ์ ์ค๋ ํด๋ฌ์คํฐ์split
์ฒญํฌ ๋ถํ ์ ์ฐธ์กฐํ์ธ์.split
๋ช ๋ น์admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์คํํด์ผ ํฉ๋๋ค.ํ
mongosh
์์ ์ด ๋ช ๋ น์sh.splitAt()
๋ฐsh.splitFind()
ํฌํผ ๋ฉ์๋๋ฅผ ํตํด์๋ ์คํํ ์ ์์ต๋๋ค.ํฌํผ ๋ฉ์๋๋
mongosh
์ฌ์ฉ์์๊ฒ ํธ๋ฆฌํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ช ๋ น๊ณผ ๋์ผํ ์์ค์ ์ ๋ณด๋ฅผ ๋ฐํํ์ง ๋ชปํ ์ ์์ต๋๋ค. ํธ์๊ฐ ํ์ํ์ง ์๊ฑฐ๋ ์ถ๊ฐ ๋ฆฌํด ํ๋๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
ํธํ์ฑ
์ด ๋ช ๋ น์ ๋ค์ ํ๊ฒฝ์์ ํธ์คํ ๋๋ ๋ฐฐํฌ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB Atlas: ํด๋ผ์ฐ๋์์์ MongoDB ๋ฐฐํฌ๋ฅผ ์ํ ์์ ๊ด๋ฆฌํ ์๋น์ค
์ค์
์ด ๋ช ๋ น์ ์๋ฒ๋ฆฌ์ค ์ธ์คํด์ค์์๋ ์ง์๋์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ง์๋์ง ์๋ ๋ช ๋ น์ ์ฐธ์กฐํ์ธ์.
MongoDB Enterprise: MongoDB์ ๊ตฌ๋ ๊ธฐ๋ฐ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB Community: MongoDB์ ์์ค ์ฌ์ฉ ๊ฐ๋ฅ ๋ฌด๋ฃ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
๊ตฌ๋ฌธ
๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ๊ฐ์ง๋๋ค:
db.adminCommand( { split: <database>.<collection>, <find|middle|bounds> } )
๋ช ๋ น ํ๋
์ด ๋ช ๋ น์ ๋ค์ ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ๋ | ์ ํ | ์ค๋ช
|
---|---|---|
split | ๋ฌธ์์ด | ์ฒญํฌ ๊ฐ ์กด์ฌํ๋ ์ปฌ๋ ์
์ ์ด๋ฆ์
๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ ํฌํจํ์ฌ ์ปฌ๋ ์
์ ์ ์ฒด ๋ค์์คํ์ด์ค ๋ฅผ ์ง์ ํฉ๋๋ค. |
find | ๋ฌธ์ | ์ค๋ ํค์์ ๋๋ฑ์ฑ ๋งค์น๋ฅผ ์ง์ ํ๋ ์ฟผ๋ฆฌ ๋ฌธ์
๋๋ค. ์ผ์น ํญ๋ชฉ์ ์ง์ ๋ ๋ฌธ์๊ฐ ํฌํจ๋ ์ฒญํฌ๋ฅผ ์ ํํฉ๋๋ค. ๋น collection์๋ |
bounds | ๋ฐฐ์ด |
๋น collection์๋ |
middle | ๋ฌธ์ | ๋ ๊ฐ์ ์ฒญํฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ถํ ์ง์ ์ผ๋ก ์ฌ์ฉํ ๋ฌธ์์
๋๋ค. split ์๋ find , bounds ๋๋ middle ์ต์
์ค ํ๋๊ฐ ํ์ํฉ๋๋ค. |
๊ณ ๋ ค ์ฌํญ
find
๋๋ bounds
์ต์
๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด split
๋ช
๋ น์ ์ค์๊ฐ์ ๋ฐ๋ผ ์ฒญํฌ๋ฅผ ๋ถํ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋น ์ฒญํฌ์๋ ์ค์๊ฐ์ด ์์ผ๋ฏ๋ก ๋ช
๋ น์ find
๋๋ bounds
์ต์
์ ์ฌ์ฉํ์ฌ ๋น ์ฒญํฌ๋ฅผ ๋ถํ ํ ์ ์์ต๋๋ค.
๋น ์ฒญํฌ๋ก ๋ถํ ์ ๋ง๋ค๋ ค๋ฉด split
๋ช
๋ น๊ณผ ํจ๊ป middle
์ต์
์ ์ฌ์ฉํ๊ฑฐ๋ sh.splitAt()
๋ช
๋ น์ ์ฌ์ฉํฉ๋๋ค.
๋ช ๋ น ํ์
์ฒญํฌ ๋ถํ ์ ์์ฑํ๋ ค๋ฉด mongos
์ธ์คํด์ค์ ์ฐ๊ฒฐํ๊ณ admin
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ๋ค์ ๋ช
๋ น์ ์คํํฉ๋๋ค.
db.adminCommand( { split: <database>.<collection>, find: <document> } )
๋๋:
db.adminCommand( { split: <database>.<collection>, middle: <document> } )
๋๋:
db.adminCommand( { split: <database>.<collection>, bounds: [ <lower>, <upper> ] } )
ํด์ ์ค๋ ํค ๋ฅผ ์ฌ์ฉํ๋ ์ปฌ๋ ์
์ ๋ํ ๋ถํ ์ ์์ฑํ๋ ค๋ฉด bounds
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ชฉ์ ์๋ middle
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์ .
๊ฒฝ๊ณ
์๋ก์ด ์ฒญํฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ค๋ collection์ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ ๋๋ ์ฃผ์ํ์ธ์. ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ์๋ collection์ ์ค๋ฉํ๋ฉด MongoDB๋ ์๋์ผ๋ก ์ฒญํฌ๋ฅผ ์์ฑํ์ฌ collection์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐํฉ๋๋ค. ์ค๋ ํด๋ฌ์คํฐ์์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถํ ํ๋ ค๋ฉด ์ฒญํฌ ๋ด ๋ฌธ์ ์์ ํ๊ท ๋ฌธ์ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ฌ ๊ท ์ผํ ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ฒญํฌ์ ํฌ๊ธฐ๊ฐ ๊ณ ๋ฅด์ง ์์ ๊ฒฝ์ฐ, ์ค๋๋ ๋์ผํ ์์ ์ฒญํฌ๋ฅผ ๊ฐ์ง ์ ์์ง๋ง ๋งค์ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ์ฒญํฌ๋ฅผ ๊ฐ์ง collection์ผ๋ก ์ฐ๊ฒฐ๋๋ ๋ถํ ์ ๋ง๋ค์ง ๋ง์ธ์.
์์
๋ค์ ์น์
์์๋ split
๋ช
๋ น์ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฒญํฌ๋ฅผ ๋ฐ์ผ๋ก ๋ถํ
db.adminCommand( { split : "test.people", find : { _id : 99 } } )
split
๋ช
๋ น์ test
๋ฐ์ดํฐ๋ฒ ์ด์ค์ people
์ปฌ๋ ์
์์ {
_id : 99 }
์ ์ผ์นํ๋ ๋ฌธ์๊ฐ ์๋ ์ฒญํฌ๋ฅผ ์๋ณํฉ๋๋ค. split
๋ ์ ์ ํ ์ฒญํฌ๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ผ์น ํญ๋ชฉ์ด ์กด์ฌํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ช
๋ น์ ์ด๋ฅผ ๋์ผํ ํฌ๊ธฐ์ ๋ ์ฒญํฌ๋ก ๋ถํ ํฉ๋๋ค.
์ฐธ๊ณ
split
์(๋) ํฌ๊ธฐ๊ฐ ์๋ ๋ฒ์ ๋ณ๋ก ๋์ผํ ์ฒญํฌ ๋ ๊ฐ๋ฅผ ์์ฑํ๊ณ , ์ ํํ ์ ์ ์ ์ฒญํฌ์ ๊ฒฝ๊ณ๋ก ์ฌ์ฉํ์ง ์์ต๋๋ค.
์์ ๋ถํ ์ ์ ์
์์ ๋ถํ ์ ์ ์ ์ํ๋ ค๋ฉด ๋ค์ ํ์์ ์ฌ์ฉํฉ๋๋ค.
db.adminCommand( { split : "test.people", middle : { _id : 99 } } )
split
๋ช
๋ น์ test
๋ฐ์ดํฐ๋ฒ ์ด์ค์ people
์ปฌ๋ ์
์์ ์ฟผ๋ฆฌ { _id : 99 }
์ ์ผ์นํ๋ ๋ฌธ์๋ฅผ ๋ณด์ ํ ์ฒญํฌ๋ฅผ ์๋ณํฉ๋๋ค. split
๋ ์ ์ ํ ์ฒญํฌ๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ผ์น ํญ๋ชฉ์ด ์กด์ฌํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ช
๋ น์ ๋ฌธ์๋ฅผ ๋ ๊ฐ์ ์ฒญํฌ๋ก ๋ถํ ํ๊ณ , ์ผ์นํ๋ ๋ฌธ์๋ฅผ ๋ถํ ๋ ์ฒญํฌ ์ค ํ๋์ ํํ์ผ๋ก ์ค์ ํฉ๋๋ค.
์ด ์์์ ์ผ๋ฐ์ ์ผ๋ก collection์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ๋ถํ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
ํด์ ์ค๋ ํค ๊ฐ์ ์ฌ์ฉํ์ฌ ์ฒญํฌ ๋ถํ
์ด ์์ ์์๋ test
๋ฐ์ดํฐ๋ฒ ์ด์ค์ people
collection์์ ํด์ ์ค๋ ํค userid
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค์ ๋ช
๋ น์ ๋ ๊ฐ์ ๋จ์ผ ํ๋ ๋ฌธ์๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ฒญํฌ๋ฅผ ๋ถํ ํ๋ ํด์ ์ค๋ ํค์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๋ํ๋
๋๋ค.
db.adminCommand( { split: "test.people", bounds : [ { userid: NumberLong("-5838464104018346494") }, { userid: NumberLong("-5557153028469814163") } ] } )
์ฐธ๊ณ
MongoDB๋ 64๋นํธ NumberLong ์ ํ์ ์ฌ์ฉํ์ฌ ํด์๋ ๊ฐ์ ๋ํ๋ ๋๋ค.
sh.status()
์(๋ฅผ) ์ฌ์ฉํ์ฌ ์ค๋ ํค์ ๊ธฐ์กด ๊ฒฝ๊ณ๋ฅผ ํ์ธํฉ๋๋ค.
๋ฉํ๋ฐ์ดํฐ ์ ๊ธ ์ค๋ฅ
๋ฐธ๋ฐ์ ํ๋ก์ธ์ค์ ๊ฐ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ split
๊ฐ ์คํ๋๋ ๋์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด metadata lock error
๊ฐ ํ์๋ ์ ์์ต๋๋ค.
errmsg: "The collection's metadata lock is already taken."
์ด ๋ฉ์์ง๋ ๋ถํ ์ด ๋ถ์์ฉ ์์ด ์คํจํ์์ ๋ํ๋
๋๋ค. split
๋ช
๋ น์ ๋ค์ ์๋ํฉ๋๋ค.