최근 블로그 게시물에서 MongoDB를 확장해야 하는 경우에 대해 논의했습니다. 이 게시물에서는 MongoDB를 확장하는 방법에 중점을 둡니다.
MongoDB 버전 3.0은 WiredTiger를 기본 스토리지 엔진으로 도입했습니다. 이후 MongoDB는 확장성과 관련하여 두 가지 접근 방식을 제공할 수 있었습니다. Mongo는 이제 가로뿐만 아니라 세로로도 확장할 수 있습니다. 두 접근 방식 모두 자세히 살펴봐야 합니다.
수직 크기 조정
수직 확장은 CPU의 수와 유형, RAM 또는 디스크 공간의 양과 같은 컴퓨팅 리소스를 증가시킵니다. 이를 염두에 두고 WiredTiger로 수직 확장할 때 병목 현상에 기여하는 리소스를 식별해야 합니다(CPU/RAM/디스크 공간 또는 이들의 조합인지 여부).
WiredTiger RAM에 대한 참고 사항
할당된 RAM이 1GB 미만인 경우 WiredTiger는 일반적으로 256MB 또는 사용 가능한 RAM의 50%로 기본 설정됩니다. 따라서 더 많은 RAM이 할당되면 WiredTiger 캐시의 크기를 조정해야 합니다.
가로 크기 조정
확장은 일반적으로 서버를 추가하여 네트워크 전체에 컴퓨팅 리소스를 수평으로 분산합니다. 추가되는 여러 노드에 데이터를 분산하기 위해 MongoDB는 여러 데이터베이스 인스턴스에 분산된 데이터를 분할하기 위해 키 범위를 사용하는 샤딩이라는 데이터베이스 아키텍처를 활용합니다.
샤딩 인프라 설정
샤딩 구성 설정과 관련된 물리적 구성 요소에는 다음 항목이 필요합니다.
- 몽고족 쿼리 라우터 역할을 합니다.
- 구성 서버 샤딩 메타데이터를 보유합니다.
- 데이터 노드 실제 데이터를 보유합니다.
물리적 구성요소에 대한 자세한 내용은 MongoDB 개요를 참조하세요.
샤드 키 정의
물리적 샤딩 인프라를 설정한 후에는 샤딩의 논리적 측면에 집중하십시오. 샤드 키는 MongoDB가 데이터를 분할하는 데 사용하는 컬렉션 내의 다양한 필드를 나타냅니다. 편리하게도 Mongo에서는 이러한 키를 정의할 수 있습니다.
분할 키 구현과 관련된 필드를 식별하려면:
- 분할 컬렉션을 식별합니다. 200MB보다 크고 데이터를 고르게 배포할 수 있는 컬렉션은 샤딩에 적합한 후보입니다.
- 적절한 샤드 키를 생성하거나 고안합니다. 샤드 키를 생성할 때 다음 권장 사항과 질문을 고려하십시오.
- 애플리케이션이 데이터베이스와 상호작용하는 방식에 대한 통찰력을 얻으십시오.
- 애플리케이션이 읽기 또는 쓰기가 더 많은지 또는 균등하게 균형을 이루고 있는지 고려하십시오.
- 데이터베이스에 대한 가장 중요한 활동은 무엇입니까? 예를 들어, 애플리케이션은 데이터베이스에 많은 양의 데이터를 기록할 수 있지만 가장 중요한 활동은 100ms 이내에 데이터를 반환하는 쿼리와 관련될 수 있습니다.
- 예상되는 주간 및 월간 데이터 증가 패턴은 무엇입니까?
- 느린 쿼리와 같이 해결해야 할 문제나 문제 영역이 있습니까?
- 일, 주, 월 또는 연도 중 특정 시간에 애플리케이션이 더 바쁜가요? 항상 바쁜가요?
이러한 문제를 조사한 후 더 자세한 분석을 시작할 수 있습니다. 다음 블로그 게시물에서는 올바른 샤드 키를 찾는 방법에 대해 설명합니다.