문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

개발 체크리스트

이 페이지의 내용

  • 데이터 내구성
  • 스키마 설계
  • 복제
  • 샤딩
  • 드라이버

다음 체크리스트는 작업 체크리스트 와 함께 프로덕션 MongoDB 배포에서 문제를 방지하는 데 도움이 되는 권장 사항을 제공합니다.

  • 당신의 복제본 세트가 최소한 세 개의 데이터를 보유한 투표 멤버를 포함하고 있고, 쓰기 작업에서 w: majority 쓰기 고려 (write concern)를 사용해야 합니다. 복제본 세트 전체의 데이터 내구성을 위해서는 3개의 데이터 보유 투표 멤버가 필요합니다.

  • 모든 인스턴스가 저널링을사용하도록 합니다.

MongoDB의 데이터에는 동적 스키마 가 있습니다. 컬렉션문서 구조를 강제하지 않습니다. 이는 반복적인 개발과 다형성을 용이하게 합니다. 그럼에도 불구하고 컬렉션에는 매우 동질적인 구조의 문서가 포함되는 경우가 많습니다. 자세한 내용은 데이터 모델링을 참조하세요.

  • 쿼리를 지원하는 데 필요한 컬렉션 집합과 필요한 인덱스를 결정합니다. _id 인덱스를 제외한 모든 인덱스를 명시적으로 생성해야 합니다. MongoDB는 _id 이외의 인덱스를 자동으로 생성하지 않습니다.

  • 스키마 설계가 배포 유형을 지원하는지 확인합니다: 수평적 확장을 위해 샤드 클러스터 를 사용할 계획인 경우 강력한 샤드 키를 포함하도록 스키마를 설계합니다. 샤드 키는 나중에 변경할 수 있지만, 확장성 및 성능 문제를 방지하려면 샤드 키 선택 을 신중하게 고려하는 것이 중요합니다.

  • 스키마 설계가 제한 없이 길이가 증가하는 인덱스 배열에 의존하지 않도록 하세요. 일반적으로 이러한 인덱싱된 배열의 요소가 1000 미만일 때 최상의 성능을 얻을 수 있습니다.

  • 스키마를 설계할 때는 문서 크기 제한을 고려하세요. BSON 문서 크기 제한은 문서당 16MB입니다. 더 큰 문서가 필요한 경우 GridFS를 사용하세요.

  • 투표가 성공적으로 진행되도록 하려면 투표 노드를 홀수로 사용하세요. 투표권이 있는 멤버는 최대 7 명까지 보유할 수 있습니다. 투표 멤버 수가 짝수 이고 비용과 같은 제약 사항으로 인해 투표 멤버가 될 다른 세컨더리 멤버를 추가할 수 없는 경우, 중재자 를 추가하여 홀수 투표를 보장할 수 있습니다. 3멤버 복제본 세트(PSA)에 중재자를 사용할 때 추가 고려 사항은 복제본 세트 중재자를 참조하세요.

    참고

    다음 MongoDB 버전에서 중재자가 있는 복제본 세트의 경우 pv1pv0 (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 를 사용합니다.

← 운영 체크리스트