mydatabase 라는 이름의 데이터베이스

mycollection 이라는 이름의 콜렉션에 데이터가 있고, 이를 샤딩하고 싶다.

 

MongoDB는 자기 마음대로 sharding 을 하지 않고, sharding 하라는 명령어가 주어져야 시작한다.

 

 

 

1. 제일 먼저 해당 데이터베이스를 샤딩 가능 상태로 만든다.

 

sh.enableSharding("[데이터베이스 이름]")

예 ) sh.enableSharding("mydatabase")

 

 

 

2. Index를 만든다.

기본적으로 _id:1 인덱스가 생성되는데, 아래 명령어를 통해 다른 인덱스를 만들 수 있다.

_id : 1과 -1 은 오름차순, 내림차순 정렬 인덱싱을 의미하고

hashed 는 hash 값으로 정렬 인덱싱을 의미한다.

 

< index 만들기(ranged) >

db.[데이터베이스 이름].createIndex({ [콜렉션의 키 이름] : 1 })

예) db.mydatabase.createIndex({ _id: 1 })

 

< index 만들기(ranged) >

db.[데이터베이스 이름].createIndex({ [콜렉션의 키 이름] : "hashed" })

예) db.mydatabase.createIndex({ _id: "hashed" })

 

< compound index 만들기 >
db.[데이터베이스 이름].createIndex({ [콜렉션의 키 이름] : 1, [콜렉션의 키 이름] :1, .... })

예) db.mydatabase.createIndex( { _id: 1, name : 1} )

 

< index 가져오기 >
db.[데이터베이스 이름].getIndexes()

예) db.mydatabase.getIndexes()

 

< index 제거하기 >
db.[데이터베이스 이름].dropIndex( { [콜렉션의 키 이름] : 1 } )

예) db.mydatabase.dropIndex({ name : 1 })

 

 

 

 

3. 데이터베이스 내에서 샤딩하고 싶은 콜렉션을 샤딩시킨다.

방법은 두 가지가 있는데, hashed 샤딩, ranged 샤딩이 있다.

ranged 로 sharding 하려면 ranged index가 있어야 하고,

hashed 로 sharding 하려면 hashed index가 있어야 한다.

 

ranged sharding : sh.shardCollection( "[데이터베이스 이름].[콜렉션 이름]", { [콜렉션의 키 이름] : 1 } )

hashed sharding : sh.shardCollection( "[데이터베이스 이름].[콜렉션 이름]", { [콜렉션의 키 이름] : "hashed" } )

 

예 )

ranged sharding : sh.shardCollection( "mydatabase.mycollection", { _id : 1 } )

hashed sharding : sh.shardCollection( "mydatabase.mycollection", { _id : "hashed" } )

 

 

샤딩 후 상태를 보는 방법

 

mongos> sh.status()

mongos> use mydatabase

mongos> db.mycollection.getShardDistribution()

 

 

 

 

참고

https://docs.mongodb.com/manual/indexes/

https://docs.mongodb.com/manual/core/ranged-sharding/

https://docs.mongodb.com/manual/core/hashed-sharding/

+ Recent posts