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

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
๋ฌธ์„œ

์ƒค๋“œ ํ‚ค์—์„œ ๋™๋“ฑ์„ฑ ๋งค์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์ฟผ๋ฆฌ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ผ์น˜ ํ•ญ๋ชฉ์€ ์ง€์ •๋œ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋œ ์ฒญํฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. find, bounds ๋˜๋Š” middle ์ค‘ ํ•˜๋‚˜๋งŒ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋นˆ collection์—๋Š” find ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

bounds
๋ฐฐ์—ด

bounds ํ•ด์‹œ ์ƒค๋“œ ํ‚ค ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„ํ• ๋œ collection์˜ ์ฒญํฌ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ฐฐ์—ด์€ ์ฒญํฌ์˜ ํ•˜์œ„ ๋ฐ ์ƒ์œ„ ์ƒค๋“œ ํ‚ค ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ๋ฌธ์„œ๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ๊ธฐ์กด ์ฒญํฌ์˜ ์ตœ์†Œ๊ฐ’ ๋ฐ ์ตœ๋Œ€๊ฐ’๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. find, bounds ๋˜๋Š” middle ์ค‘ ํ•˜๋‚˜๋งŒ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋นˆ collection์—๋Š” bounds ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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 ๋ช…๋ น์„ ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

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

shardingState