Shading

mongoDB 2014. 4. 23. 16:28

mongoDB에서 샤딩을 해주기 위해서는 shard key를 정해주어야 한다.

샤딩을 하는 이유는 읽기와 쓰기를 분산시켜 디비의 부하를 줄이기 위함인 것처럼

이 목적을 가장 잘 달성할  수 있는 컬럼을 shard key로 잡아야 한다.

거의 대부분은 _id를 샤드키로 잡고 쓴다고 하고, mongodb도 기본적으로 _id에 맞추어 샤드를 테스트하고 최적화 했을 것이다.

샤딩 key로 데이터쓰기를 할때 range 방법과 hash방법이 있는데, range는 데이터가 얼마나 들어올지 fix된 상황에 적합할 것이고, 대부분의 경우는 hash방법이 좋지 않을까 생각한다.

그리고 샤드는 컬렉션 단위로 이루어지는데, 디비에 저장된 전체 데이터를 읽어서 처리해야 하는 데이터같은 경우는 샤드에 포함시키지 않아야 한다. 샤드된다면 각 샤드를 모두 뒤져서 가져와햐 하기 때문이다. 이때 샤드에 포함되지 않은 컬렉션은 따로 디비를 만들어 사용할 수도 있지만 그렇지 않은경우는 샤드들중 primary shard에 저장된다. 따라서 request에 따라서 primary shard에 부하가 집중될 수도 있으니 디자인을 잘 설계해야 할 것이다.

그리고 샤드들중 db하나가 lock이 걸리면 다른 샤드들은 정상동작하고 하나의 샤드만 lock이 걸린다. (collection이 1,2,3,4로 나눠졌을때 3번샤드의 collection때문에 락이 걸리면 그 collection이 속한 db가 락이 걸릴텐데 이때 3번샤드의 db만 락이 걸린다는 소리)  

블로그 이미지

시간을 거스르는자

ytkang86@gmail.com

,