목차
요약하려면 :
데이터 베이스 몽고DB MongoDB 스키마 모범 사례

MongoDB 스키마 모범 사례

Aug 06, 2025 am 11:59 AM

스키마는 쿼리 패턴에 따라 설계되었습니다. 고주파에서 확인 된 데이터는 포함되며 참조는 독립적으로 업데이트됩니다. 2. 임베딩은 작은 쌍에 적합하며 참조는 빅 데이터 또는 빈번한 업데이트에 적합합니다. 3. 확장으로 인한 움직임을 피하기 위해 문서 크기를 제어하고 성장하는 데이터 모음을 개별적으로 구축하십시오. 4. 정확한 색인 설계, 느린 쿼리를 분석하며 복합 및 오버레이 인덱스를 잘 활용합니다. 5. 나중에 유지 보수에서 혼란을 피하기 위해 필드 명명의 스타일과 유형을 통합하십시오. 이러한 관행은 MongoDB 성능 장점을 활용하고 구조를 효율적이고 유지 관리하기 쉽게 만듭니다.

MongoDB 스키마 모범 사례

MongoDB의 스키마를 설계하는 것은 전통적인 관계형 데이터베이스만큼 "일대일에 맞는"것이 아닙니다. 더 융통성이 있지만 갇히기가 더 쉽습니다. 방금 SQL에서 MongoDB로 전환 한 경우 본능적으로 "테이블 구조를 모방"하고 싶을 수도 있지만, 이는 종종 중첩 문서, 어레이, 집계 성능 등과 같은 MongoDB의 장점을 상실합니다.

MongoDB 스키마 모범 사례

다음은보다 효율적이고 유지 관리 가능한 구조를 작성하는 데 도움이되는 실용적이고 입증 된 MongoDB 스키마 디자인 모범 사례 입니다.


✅ 1. 쿼리 모드에 따른 설계 스키마 (쿼리 구동 설계)

MongoDB의 핵심 개념은 다음과 같습니다. 스키마는 데이터 자체의 논리적 관계가 아닌 읽기 및 쓰기 작업 주위에 설계되어야합니다 .

MongoDB 스키마 모범 사례
  • 사용자와 주문 정보를 함께 쿼리 해야하는 경우 → 주문을 사용자 문서 ( embedded )에 포함시켜야합니다.
  • 주문 데이터가 거대하거나 개별적으로 업데이트되는 경우 → references 사용은 쿼리를 $lookup 와 연결하십시오.

? 제안:

  • 먼저 고주파 쿼리 (예 : /users/:id/orders )를 나열하십시오.
  • 포함 또는 인용 여부를 결정하십시오
  • 명확한 성능 또는 일관성 요구 사항이없는 한 "표준화"를 위해 문서를 분할하지 마십시오.

✅ 2. 참조를 합리적으로 포함하는 것과 참조를 사용하십시오

장면 권장 방법 이유
작은 하위 문서, 함께 자주 읽으십시오 포함시키다 단일 가져 오기로 완성 된 쿼리 수를 줄입니다.
대규모 하위 부문 및 빈번한 독립 업데이트 참조 $lookup 문서 팽만감을 피하고 작문 성능을 향상시킵니다
다수의 관계 (예 : 사용자 및 태그) 참조 색인 임베딩은 데이터 중복성 및 업데이트 어려움을 유발할 수 있습니다

? 팁 :
임베드 어레이는 수십 개의 주소를 가진 사용자와 같은 "소량 쌍"에 적합합니다. 그러나 주문에 수천 개의 항목 항목이있는 경우 별도의 세트로 분할하는 것을 고려해야합니다.

MongoDB 스키마 모범 사례

✅ 3. 문서 크기 제어 (문서 성장 방지)

MongoDB 문서 캡은 16MB이지만 이것이 유일한 한계는 아닙니다. 문서 성장은 성능 저하로 이어질 것입니다 !

  • 새 배열 요소 (예 : 로그, 댓글)를 삽입하면 문서가 더 커집니다.
  • MongoDB는 문서 위치를 이동해야 할 수도 있습니다 (원래 공간이 충분하지 않은 경우) "문서 재배치"라고 불리는 것은 매우 느립니다!

✅ 솔루션 :

  • 데이터 성장 (채팅 레코드, 작동 로그)의 경우 별도의 컬렉션 작성
  • 고정 크기 로그를 저장하려면 capped collection 사용하십시오 (이전 데이터를 자동으로 제거)
  • 또는 "Time Sharding"전략을 사용하여 낮/월별 하위 수집을 만듭니다 (예 : logs_2024_10 ).

✅ 4. 인덱스 디자인이 정확해야합니다. 맹목적으로 추가하지 마십시오.

MongoDB 인덱스는 가능한 한 많지 않으며 각 인덱스는 다음과 같습니다.

  • 메모리를 취합니다
  • 영향 쓰기 속도 (삽입/업데이트 중에 인덱스를 유지해야합니다)

? 올바른 방법 :

  • 느린 쿼리 로그 분석 ( db.setProfilingLevel(2) )
  • .explain("executionStats") 사용하여 쿼리가 인덱스에 도달하는지 확인하십시오.
  • 복합 색인 순서 { userId: 1, createdAt: -1 } 매우 중요합니다.
  • 덮은 쿼리는 문서 자체를 검색하지 않고 인덱스에서 직접 결과를 반환 할 수 있습니다.

✅ 5. 명명 및 일관된 유형 (나중에 유지 보수 충돌을하지 마십시오)

MongoDB는 "Modeless"이지만 팀워크에는 계약이 있어야합니다.

  • 필드 이름은 스타일로 통합되어 있습니다 (예 : created_at 또는 createdAt ? 하나를 선택하고 고수 함)
  • 동일한 필드 유형은 동일해야합니다 (예 : 문서가 없으면 age 숫자이고 일부는 줄입니다).
  • 필드의 의미를 설명하기 위해 의견이나 문서를 추가하십시오 (특히 복잡한 중첩 구조)

그렇지 않으면 당신은 다음과 같습니다.

 db.users.findone ({age : "25"}) // 찾을 수 없습니까? 다른 사람은 번호 (25)를 저장하기 때문에

요약하려면 :

  • 포함 또는 참조? 확인 방법에 따라 다릅니다
  • 너무 크지 말고 "확장"하지 마십시오.
  • 색인이 정확하고 쌓지 마십시오
  • 이름과 유형은 통일되어야합니다. 그렇지 않으면 팀원과 자신이 속일 것입니다.

이것들은 이론적이지 않지만 실제 프로젝트에서 반복적으로 검증 된 경험입니다. MongoDB는 유연하지만 잘 사용되지 않으면 느립니다. 디자인 전에 더 많은 질문을하십시오. "이 데이터를 가장 자주 읽는 방법은 무엇입니까?" - 대답은 스키마 방향입니다.

기본적 으로이 모든 것은 복잡하지 않지만 무시하기 쉽습니다.

위 내용은 MongoDB 스키마 모범 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

MongoDB의 무료 계층 제품 (예 : 아틀라스)의 한계는 무엇입니까? MongoDB의 무료 계층 제품 (예 : 아틀라스)의 한계는 무엇입니까? Jul 21, 2025 am 01:20 AM

Mongodbatlas의 무료 계층은 성능, 가용성, 사용 제한 및 스토리지에 많은 제한 사항이 있으며 생산 환경에는 적합하지 않습니다. 첫째, M0 클러스터는 512MB의 메모리와 최대 2GB의 스토리지를 제공하는 CPU 리소스를 공유하여 실시간 성능 또는 데이터 성장을 지원하기가 어렵습니다. 둘째, 멀티-노드 복제 세트 및 자동 장애 조치와 같은 고 대용 성 아키텍처가 부족하여 유지 보수 또는 고장 중에 서비스 중단으로 이어질 수 있습니다. 또한, 시간별 읽기 및 쓰기 작업은 제한되어 있으며 연결 수와 대역폭도 제한되며 현재 한도가 트리거 될 수 있습니다. 마지막으로, 백업 기능은 제한되어 있으며 인덱싱 또는 파일 스토리지로 인해 스토리지 제한이 쉽게 소진되므로 데모 또는 소규모 개인 프로젝트에만 적합합니다.

UpdateOne (), updatemany () 및 replarone () 메소드의 차이점은 무엇입니까? UpdateOne (), updatemany () 및 replarone () 메소드의 차이점은 무엇입니까? Jul 15, 2025 am 12:04 AM

MongoDB의 UpdateOne (), updatemany () 및 replarone ()의 주요 차이점은 업데이트 범위와 메소드입니다. hududone ()는 첫 번째 일치하는 문서의 필드의 일부만 업데이트되며, 이는 하나의 레코드 만 수정 된 장면에 적합합니다. hpodatemany () 업데이트 모든 일치하는 문서의 일부는 여러 레코드가 배치로 업데이트되는 장면에 적합합니다. werlopone ()는 첫 번째 일치하는 문서를 완전히 대체하는데,이 문서는 원래 구조를 유지하지 않고 문서의 전체 내용이 필요한 장면에 적합합니다. 세 가지는 다른 데이터 운영 요구 사항에 적용 할 수 있으며 업데이트 범위 및 작동 입도에 따라 선택됩니다.

Mongodb Atlas vs. 자조 주 Mongodb : 어느 쪽이 당신에게 적합합니까? Mongodb Atlas vs. 자조 주 Mongodb : 어느 쪽이 당신에게 적합합니까? Jul 30, 2025 am 12:50 AM

Mongodbatlas는 완전 자동 관리, 신속한 배포 및 내장 보안을 제공하기 때문에 DBA 자원이없는 소규모 팀 또는 조직에 더 적합합니다. 2. 아틀라스는 투명하고 초기 단계에서 예산이 쉽지 않지만, 대규모 사용 후 자조 주택보다 높을 수 있습니다. 인프라 수수료는 낮지 만 노동 및 위험 비용에 포함되어야합니다. 3. 보안 및 규정 준수 측면에서 Atlas 기본값은 엔터프라이즈 수준 구성 및 자동 업데이트에 대한 기본값을 수동으로 구현해야하며 오류가 발생하기 쉽습니다. 4. 강력한 제어, 사용자 정의 요구 또는 데이터 주권 제한이 필요한 경우 호스팅에서 선택하십시오. 그렇지 않으면 대부분의 팀은 먼저 운영 및 유지 보수보다는 제품 개발에 집중하기 위해 Atlas를 선택해야합니다. 이 선택은 가장 시간을 절약하고 신뢰할 수 있으며 향후 유연한 조정을 지원합니다.

MongoDB의 트랜잭션이란 무엇이며, 다중 문서 운영을위한 산성 특성을 어떻게 제공합니까? MongoDB의 트랜잭션이란 무엇이며, 다중 문서 운영을위한 산성 특성을 어떻게 제공합니까? Jul 31, 2025 am 06:25 AM

mongodbintructedmulti-documenttranscationsinversion4.0, enableatomicoperationsacrosscollectionstrongconsisconsency.transactionsallowmultipleread/writeOperationStobegroupedAsasingAsingalUnit, aLwecgeingOrfailingTogether.TheyAresupportedInreplica

작업 세트의 중요성은 무엇이며 RAM 용량과 어떤 관련이 있습니까? 작업 세트의 중요성은 무엇이며 RAM 용량과 어떤 관련이 있습니까? Jul 17, 2025 am 12:20 AM

TheWorkingSetDirectlyImpactssystemPerformanceBecauseXeceedSavailableAram, ThesystemSlowsDownDuetOpaging.1) theWorkingSetConsistSofconStOftIventActionAndInstructionsfrograms, notjustopenApps.2) ItdynamallysticallyStePrograms

연결 풀링은 MongoDB 드라이버와 어떻게 작동하며, 왜 중요한가? 연결 풀링은 MongoDB 드라이버와 어떻게 작동하며, 왜 중요한가? Jul 16, 2025 am 01:30 AM

mongodbconnectionpoolingworksbymaineateiningreuseBaseConnectionStoimprovePerferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferferformance.

MongoDB 데이터베이스 백업 및 복원을위한 모범 사례 MongoDB 데이터베이스 백업 및 복원을위한 모범 사례 Jul 27, 2025 am 12:33 AM

usemongodumpandmongorestoreforlogicalbackups, 바람직하게는 대상 의식 이외의 공동체 및 프로 론이 컬렉션을 제공합니다

MongoDB 복제에서 Oplog (Operations Log)의 역할은 무엇입니까? MongoDB 복제에서 Oplog (Operations Log)의 역할은 무엇입니까? Jul 14, 2025 am 12:18 AM

Oplog는 데이터 동기화를 구현하기위한 MongoDB Replica Set의 핵심 메커니즘입니다. 전체 이름 OperationSlog와 함께 로컬 데이터베이스에서 특수한 CAPPEDCOLLECTION으로, 기본 노드에 모든 쓰기 작업 (예 : 타임 스탬프, 작동 유형, 대상 컬렉션 및 수정 내용을 포함한 모든 쓰기 작업을 기록합니다. 슬레이브 노드는 이러한 작업을 복사하고 재생하여 마스터 노드와 일치합니다. 예를 들어, 마스터 노드가 삽입 작업을 수행 한 후, 작업은 Oplog에 기록되며 슬레이브 노드는 동일한 작업을 읽고 수행하여 동기화를 달성합니다. Oplog의 기능에는 다음이 포함됩니다. 1. 데이터 동기화의 기초가되고, 비동기 복제를 달성하기 위해 노드에서 순서대로 Oplog 항목을 당기고 실행합니다. 2.

See all articles