문서 홈 → 애플리케이션 개발 → MongoDB 매뉴얼
개발 체크리스트
다음 체크리스트는 작업 체크리스트 와 함께 프로덕션 MongoDB 배포에서 문제를 방지하는 데 도움이 되는 권장 사항을 제공합니다.
데이터 내구성
당신의 복제본 세트가 최소한 세 개의 데이터를 보유한 투표 멤버를 포함하고 있고, 쓰기 작업에서
w: majority
쓰기 고려 (write concern)를 사용해야 합니다. 복제본 세트 전체의 데이터 내구성을 위해서는 3개의 데이터 보유 투표 멤버가 필요합니다.모든 인스턴스가 저널링을사용하도록 합니다.
스키마 설계
MongoDB의 데이터에는 동적 스키마 가 있습니다. 컬렉션 은 문서 구조를 강제하지 않습니다. 이는 반복적인 개발과 다형성을 용이하게 합니다. 그럼에도 불구하고 컬렉션에는 매우 동질적인 구조의 문서가 포함되는 경우가 많습니다. 자세한 내용은 데이터 모델링을 참조하세요.
쿼리를 지원하는 데 필요한 컬렉션 집합과 필요한 인덱스를 결정합니다.
_id
인덱스를 제외한 모든 인덱스를 명시적으로 생성해야 합니다. MongoDB는_id
이외의 인덱스를 자동으로 생성하지 않습니다.스키마 설계가 배포 유형을 지원하는지 확인합니다: 수평적 확장을 위해 샤드 클러스터 를 사용할 계획인 경우 강력한 샤드 키를 포함하도록 스키마를 설계합니다. 샤드 키는 나중에 변경할 수 있지만, 확장성 및 성능 문제를 방지하려면 샤드 키 선택 을 신중하게 고려하는 것이 중요합니다.
스키마 설계가 제한 없이 길이가 증가하는 인덱스 배열에 의존하지 않도록 하세요. 일반적으로 이러한 인덱싱된 배열의 요소가 1000 미만일 때 최상의 성능을 얻을 수 있습니다.
스키마를 설계할 때는 문서 크기 제한을 고려하세요. BSON 문서 크기 제한은 문서당 16MB입니다. 더 큰 문서가 필요한 경우 GridFS를 사용하세요.
복제
투표가 성공적으로 진행되도록 하려면 투표 노드를 홀수로 사용하세요. 투표권이 있는 멤버는 최대 7 명까지 보유할 수 있습니다. 투표 멤버 수가 짝수 이고 비용과 같은 제약 사항으로 인해 투표 멤버가 될 다른 세컨더리 멤버를 추가할 수 없는 경우, 중재자 를 추가하여 홀수 투표를 보장할 수 있습니다. 3멤버 복제본 세트(PSA)에 중재자를 사용할 때 추가 고려 사항은 복제본 세트 중재자를 참조하세요.
참고
다음 MongoDB 버전에서 중재자가 있는 복제본 세트의 경우
pv1
은pv0
(MongoDB 4.0 이상에서는 더 이상 지원되지 않음)에 비해w:1
롤백 가능성을 높입니다.MongoDB 3.4.1
MongoDB 3.4.0
MongoDB 3.2.11 또는 이전 버전
모니터링 도구 를 사용하고 적절한 쓰기 고려를 지정하여 세컨더리가 최신 상태로 유지되는지 확인합니다.
전체 읽기 처리량을 확장하기 위해 세컨더리 읽기를 사용하지마세요. 참조: 더 많은 복제본 노드를 사용하여 를 확장할 수 있나요? 읽기 스케일링에 대한 개요를 참조하세요. 세컨더리 읽기에 대한 자세한 내용은읽기 설정을 참조하세요.
샤딩
샤드 키가 샤드에 부하를 균등하게 분산하는지 확인합니다. 자세한 내용은 샤드 키 를 참조하세요.
샤드 수에 따라 확장해야 하는 워크로드에는 타겟팅된 작업 을 사용하세요.
MongoDB 3 4 의 경우. 이하의 경우, 타겟팅되지 않은 쿼리 또는 브로드캐스트 쿼리의 경우 이러한 쿼리는 오래되거나 고아 데이터 에 민감할 수 있으므로 프라이머리 노드에서 읽습니다. .
- MongoDB 3 의 경우.6 이상에서는 읽기 고려
"available"
( 인과적으로 일관적인 세션 과 연결되지 않은 경우 세컨더리에 대한 읽기에 대한 기본 읽기 고려)를 사용하지 않는 한 세컨더리가 더 이상 고아 데이터를 반환하지 않습니다.MongoDB 부터 3 시작.6, 샤드 복제본 세트의 모든 멤버가 청크 메타데이터를 유지 관리하므로 를 사용하지 않을 때 고아를 필터링할"available"
수 있습니다. 따라서 를 사용하지 않는대상이 지정되지 않은"available"
쿼리 또는 브로드캐스트 쿼리는 모든 멤버에서 안전하게 실행될 수 있으며 고아 데이터를 반환하지 않습니다."available"
읽기 고려는 업데이트된 청크 메타데이터를 확인하지 않으므로 세컨더리 멤버로부터 고아 문서 를 반환할 수 있습니다. 그러나 애플리케이션에 고아 문서의 반환이 중요하지 않은 경우"available"
읽기 고려는 다양한 읽기 고려 중 가능한 가장 짧은 읽기 지연 시간을 제공합니다. 대규모 데이터 세트를 새로운 비해시 샤드 컬렉션에 삽입할 때 청크를 사전 분할하고 수동으로 균형 을 맞춥니다. 사전 분할 및 수동 밸런싱을 통해 삽입 로드를 샤드 간에 분산할 수 있으므로 초기 로드에 대한 성능이 향상됩니다.
드라이버
연결 풀링을 사용합니다. 대부분의 MongoDB 드라이버는 연결 풀링을 지원합니다. 연결 풀 크기를 사용 사례에 맞게 조정하며, 일반적인 동시 데이터베이스 요청 수의 110~115%에서 시작합니다.
복제본 세트 투표 중에 애플리케이션이 일시적인 쓰기 및 읽기 오류를 처리하는지 확인하세요.
애플리케이션이 실패한 요청을 처리하는지 확인하고 해당되는 경우 다시 시도하세요. 드라이버는 실패한 요청을 자동으로 재시도 하지 않습니다 .
데이터베이스 요청 재시도에 지수 백오프 로직을 사용합니다.
데이터베이스 작업의 실행 시간을 제한해야 하는 경우 읽기에는
cursor.maxTimeMS()
, 쓰기에는wtimeout
를 사용합니다.