대용량 문서의 크기 줄이기
개요
데이터베이스에 대용량 문서를 저장하면 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편의 title
및 poster
을(를) 찾는 것입니다. 모든 영화 정보를 쿼리하는 대신 movie
collection을 두 개의 개별 collection인 movies
와 movie_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의 데이터 모델링과 유연한 스키마 모델에 대해 자세히 알아보려면 데이터 모델링 소개를 참조하세요.
참조를 사용해 스키마를 모델링하는 방법에 관한 자세한 내용은 문서 참조를 통한 일대다 관계 모델링을 참조하세요.
MongoDB는 데이터 모델링에 대한 무료 MongoDB University 과정: MongoDB용 데이터모델링도 제공합니다.
디자인 패턴
작업 세트의 문서를 관리 가능한 크기로 유지하기 위한 전략에 대해 알아보려면 다음 패턴을 참조하세요.
MongoDB.live 2020 프레젠테이션
유연한 데이터 모델을 스키마에 통합하는 방법을 알아보려면 MongoDB.live 2020의 다음 프레젠테이션을 참조하세요:
MongoDB의엔티티 관계에 대해 알아보고, MongoDB를 사용한 데이터 모델링으로 구현한 예시를 살펴보세요.
고급 스키마 설계 패턴을 통해 스키마에 통합할 수 있는 고급 데이터 모델링 디자인 패턴에 대해 알아보세요.