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/
'MongoDB' 카테고리의 다른 글
[MongoDB] Array split 배열 분할하여 새로운 필드명 주기 (0) | 2019.07.13 |
---|---|
[MongoDB] collection 이름에 " . " dot 이 들어가는 경우 (0) | 2019.07.09 |
[MongoDB] Sharding Chunk size 바꾸기 (0) | 2019.05.14 |
[MongoDB] YCSB 를 이용한 벤치마킹 튜토리얼 링크 (0) | 2019.05.10 |
[MongoDB] mongo java driver 에서 aggregate 사용하기 (0) | 2019.02.28 |