Docs Menu
Docs Home
/
MongoDB Atlas
/ /

대용량 문서의 크기 줄이기

이 페이지의 내용

  • 개요
  • 예시
  • 자세히 알아보기

데이터베이스에 대용량 문서를 저장하면 RAM 및 대역폭이 과도하게 사용될 수 있습니다. MongoDB는 작업 세트라고 하는 자주 액세스하는 데이터를 RAM에 보관합니다. 작업 세트가 RAM 할당량을 초과하면 대신 디스크에서 데이터를 검색해야 하므로 성능이 저하됩니다.

가장 빈번한 쿼리가 해당 쿼리에 필요한 것보다 훨씬 더 많은 정보가 포함된 문서에 대한 것이라면 추가 컬렉션에 대한 참조를 사용하여 더 작은 문서로 스키마를 재구성하는 것이 좋습니다. 데이터를 더 많은 컬렉션으로 나누고 자주 액세스하는 데이터에 대해 더 작은 문서를 사용하면 작업 세트의 전체 크기를 줄이고 성능을 개선할 수 있습니다.

참고

하드웨어 구성은 시스템이 지원할 수 있는 문서의 크기에 영향을 미칠 수 있습니다. BSON 문서 크기 제한은 16 메가바이트입니다.

홈페이지에 가장 최근에 개봉한 영화 50편의 제목과 해당 포스터 이미지의 목록을 표시하는 영화 카탈로그 웹사이트를 생각해 보세요. 홈페이지에서 사용자는 영화를 클릭하여 추가 세부 정보를 볼 수 있습니다.

웹사이트는 movies 컬렉션의 영화에 대한 정보를 저장합니다. 각 영화 문서에는 해당 영상에 사용할 수 있는 모든 정보가 포함되어 있습니다.

// movies collection
{
"_id": 123,
"title": "2001: A Space Odyssey",
"poster": <url>,
"director": "Stanley Kubrick",
"release_year": 1968,
"box_office_usd": 146000000,
"countries_released": [
"United States",
...
],
"cast": [
"Keir Dullea",
...
],
"crew": [
"Ray Lovejoy",
...
],
...
}

참고

가능할 때마다 MongoDB deployment 외부에서 이미지를 호스팅하고 URL로 참조해야 합니다. 데이터베이스에 이미지를 저장하는 경우 문서 크기 제한에 도달할 가능성이 훨씬 더 높습니다.

이 예시에서 웹사이트가 가장 자주 수행하는 쿼리는 가장 최근에 개봉한 영화 50편의 titleposter을(를) 찾는 것입니다. 모든 영화 정보를 쿼리하는 대신 movie collection을 두 개의 개별 collection인 moviesmovie_metadata로 분할하는 것이 좋습니다. collection은 movie 문서의 _id와(과) 연결되어 있습니다.

// movies collection
{
"_id": 123,
"title": "2001: A Space Odyssey",
"poster": <url>
}
// movie_metadata collection
{
"_id": <object_id>,
"movie_id": 123, // reference to a movies document
"director": "Stanley Kubrick",
"release_year": 1968,
"box_office_usd": 146000000,
"countries_released": [
"United States",
...
],
"cast": [
"Keir Dullea",
...
],
"crew": [
"Ray Lovejoy",
...
],
...
}

이렇게 하면 웹사이트에서 최신 영화 50편과 해당 포스터를 쿼리할 때 필요한 정보만 로드합니다. 사용자가 영화를 클릭하면 사이트는 해당 영화와 관련된 movie_metadata 문서를 찾기 위해 또 다른 쿼리를 수행합니다. 이 새 스키마는 가장 빈번한 쿼리가 훨씬 더 작은 문서를 반환하기 때문에 원본보다 성능이 더 좋습니다.

사용 사례, 특히 가장 자주 수행하는 작업을 고려하고 작업 세트를 효율적으로 사용하는 스키마를 설계하세요.

작업 세트의 문서를 관리 가능한 크기로 유지하기 위한 전략에 대해 알아보려면 다음 패턴을 참조하세요.

  • 확장 참조 패턴을 사용해 자주 읽는 데이터의 일부를 큰 문서에서 작은 문서로 복제할 수 있습니다.

  • 서브셋 패턴을 사용하면 배열 필드가 큰 문서의 크기를 줄일 수 있습니다.

  • 표준 컬렉션에서 소수의 대용량 문서를 처리하려면 이상값 패턴을 사용하세요.

유연한 데이터 모델을 스키마에 통합하는 방법을 알아보려면 MongoDB.live 2020의 다음 프레젠테이션을 참조하세요:

  • MongoDB의엔티티 관계에 대해 알아보고, MongoDB를 사용한 데이터 모델링으로 구현한 예시를 살펴보세요.

  • 고급 스키마 설계 패턴을 통해 스키마에 통합할 수 있는 고급 데이터 모델링 디자인 패턴에 대해 알아보세요.

돌아가기

사용하지 않는 인덱스 제거하기

이 페이지의 내용