MongoDB로 sharding을 운영할 땐 치명적인 낙장불입이 몇가지 있다.
1. collection 이름을 변경할 수 없다.
MongoDB에는 renameCollection 이라는 collection의 이름을 변경하는 명령어가 있지만,
shard된 collection은 이름을 변경할 수 없다.
그냥 쓰는데는 딱히 문제가 되지 않지만, 뒤에 나오는 shard key를 변경해야 하는 경우,
collection을 export 한 다음 import 하는 방법을 쓰면 그나마 좀 나은데 collection 명을 변경할 수 없으므로,
저 방법을 사용한다면 관련된 소스코드에서 해당 collection 이름을 사용한 부분을 전부 새로운 collection 이름으로 변경해줘야 한다.
collection 을 반환하는 함수를 만들어 쓸 필요가 있겠다고 절실히 느꼈던 부분이다.
2. shard key를 변경할 수 없다.
완전 낙장불입이다.
한 번 지정해서 sharding 했다면 shard key는 변경불가다.
그냥 대충 감잡아서 shard key를 지정했거나, 추후 데이터 패턴이 변경되어 hot spot이 생기거나 해도 shard key를 변경할 수가 없다.
1번에서 설명한 import/export 방법을 사용하는 수 밖에는 없는데 collection 이름을 변경할 수가 없으므로 결국 소스코드를 다 뜯어고쳐야 하는 상황에 직면한다.
위에 적어놓은 대로 collection 을 반환하는 함수같은 걸 만들어서 피해를 최소화하는 방법은 있다.
3. chunk는 삭제하거나 병합할 수 없다.
진정한 낙장불입의 끝판대장이다.
좀 잘해볼라고 수동으로 chunk를 나누고 옮기고 하다가 실수로 100 바이트 짜리 chunk를 만들었고 해당 chunk는 더 이상 데이터가 증가하여 split 될 가능성이 없다면 그대로 평생 가는거다.
MongoDB 2.5.5 문서에 보면 mergeChunks 명령어가 있는데 여하튼 실제 서비스에 도입하려면 2.6 버전에서나 사용가능한 상황인 것이다.
게다가 잘 읽어보면 mergeChunks 명령어는 document가 삭제 되다가 document수가 0 이 되는 비어버린 chunk를 병합하는 용도지 수동으로 chunk를 관리하면서 작은 chunk를 큰 chunk에 병합하는 용도가 아니다.
결국 MongoDB는 shard key가 포인트다.
'DataBase' 카테고리의 다른 글
[MongoDB] 권장 ulimit 설정값 (0) | 2014.03.17 |
---|---|
[MongoDB] batchInsert시 current batch size is too large: 에러 발생 (0) | 2014.02.26 |
[MongoDB] shard간 chunk 이동 (migrate chunks) (0) | 2014.02.13 |
[MongoDB] chunk 사이즈 체크 및 나누기 (chunk, dataSize, split) (0) | 2014.02.12 |
[MongoDB] locks (0) | 2014.02.01 |