샤딩(Sharding)이란?
- 데이터의 스케일 아웃(Scale Out)을 하는 방법으로 여러 대의 머쉰을 통해 데이터를 분산하는 것을 의미합니다.
- 즉, 데이터를 여러 그룹으로 쪼개어 이 그룹들을 각기 다른 머쉰에 저장하는 처리 방법입니다.
- 파티셔닝(Partitioning)이라고도 합니다.
- 늘어나는 데이터와 이에 대한 처리를 위해 더욱 강력하고 보다 큰 저장공간을 제공하는 다른 머쉰으로 교체하는 대신 여러 대의 머쉰을 추가하는 것입니다.
MongoDB의 자동 샤딩
대부분의 데이터베이스 소프트웨어는 수동 샤딩 도구를 제공합니다. 수동 샤딩의 경우 클러스터의 노드를 추가하거나 삭제 시 또는 데이터 분산 및 처리량 분산 등의 경우 관리에 어려움이 있을 수 있습니다.
MongoDB는 사용자의 이러한 부담을 줄여주기 위해 자동 샤딩 기능을 제공합니다.
MongoDB에서의 샤딩에 기본 개념은 컬렉션을 더 작은 조각(Chunk)의 그룹으로 분해하고, 분해된 각 데이터 조각들에 대한 저장 및 처리는 각각의 샤드가 담당하게 됩니다. 역으로, 각 샤드에 분산된 데이터를 모두 모으면 전체 데이터 세트가 됩니다.
MongoDB를 이용하는 어플리케이션의 입장에서 어느 샤드에 어느 데이터가 저장되어 있는지 알 필요가 없습니다. 이 부분은 오직 MongoDB만이 알고 있으며, MongoDB의 mongos
가 담당하고 있습니다 (이는 마치, 우리가 라디오를 켜기 위해 전자회로의 원리를 알 필요가 없는 것과 같습니다. 라디오를 켜기 위해 단지 우리는 라디오의 전원 버튼만 누를 줄 알면 됩니다!).
mongos
는 샤드들에 대한 라우팅 역할을 하며 어떤 데이터가 어느 샤드에 있는지 알고 있으며 요청된 작업을 적절한 샤드에 연결시켜 줍니다.
다음 그림은 비-샤드(Non-shard) 개념과 샤드 개념을 설명하기 위한 그림입니다.
샤딩을 해야하는 경우
- 현재 머쉰의 저장 공간이 모자라는 경우
- 단일 머쉰의 mongod를 활용할 때보다 데이터를 빠르게 처리해야 하는 경우
- 데이터 처리 성능을 향상하기 위해 인메모리 데이터를 늘려야 하는 경우
비-샤딩에서 필요할 경우 샤딩으로 전환할 수 있습니다.