Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

컬렉션 수 줄이기

이 페이지의 내용

  • 이 작업에 대하여
  • 예시
  • 자세히 알아보기

컬렉션을 너무 많이 만들면 성능이 저하될 수 있습니다. 모든 컬렉션 에서 MongoDB 는 추가 저장 를 사용하는 기본값 _id 인덱스 를 생성합니다. 컬렉션을 과도하게 만들면 해당 컬렉션과 인덱스로 인해 복제본 세트 리소스에 부하가 걸리고 성능이 저하될 수 있습니다.

매시간 측정한 일일 온도 측정값을 저장하는 다음 스키마 를 고려하세요. temperature 데이터베이스 는 매일의 측정값을 별도의 컬렉션에 저장합니다.

// Temperatures for May 10, 2024
{
_id: 1,
timestamp: "2024-05-10T010:00:00Z",
temperature: 60
},
{
_id: 2
timestamp: "2024-05-10T011:00:00Z",
temperature: 61
},
{
_id: 3
timestamp: "2024-05-10T012:00:00Z",
temperature: 64
}
...
// Temperatures for May 11, 2024
{
_id: 1,
timestamp: "2024-05-11T010:00:00Z",
temperature: 68
},
{
_id: 2
timestamp: "2024-05-11T011:00:00Z",
temperature: 72
},
{
_id: 3
timestamp: "2024-05-11T012:00:00Z",
temperature: 72
}
...

컬렉션 수가 제한되지 않으면 기본값 _id 인덱스 수가 증가하여 성능이 저하될 수 있습니다.

또한 이 접근 방식에서는 여러 컬렉션을 쿼리 하기 위해 $lookup 작업이 필요합니다. $lookup 작업은 쿼리 복잡성을 가중시키고 리소스에 부담을 줄 수 있습니다.

컬렉션 수를 줄이려면 사용하지 않는 컬렉션을 삭제 또는 보관하거나 관련 컬렉션을 통합하거나, 데이터를 비정규화하거나, 적절한 경우 내장된 문서를 활용하여 데이터 스키마 를 리모델링하세요.

일일 온도 측정값을 단일 컬렉션 에 저장 하도록 스키마 를 수정할 수 있습니다. 예를 예시 다음과 같습니다.

db.dailyTemperatures.insertMany( [
{
_id: ISODate("2024-05-10T00:00:00Z"),
readings: [
{
timestamp: "2024-05-10T10:00:00Z",
temperature: 60
},
{
timestamp: "2024-05-10T11:00:00Z",
temperature: 61
},
{
timestamp: "2024-05-10T12:00:00Z",
temperature: 64
}
]
},
{
_id: ISODate("2024-05-11T00:00:00Z"),
readings: [
{
timestamp: "2024-05-11T10:00:00Z",
temperature: 68
},
{
timestamp: "2024-05-11T11:00:00Z",
temperature: 72
},
{
timestamp: "2024-05-11T12:00:00Z",
temperature: 72
}
]
}
] )

업데이트된 스키마 는 원본보다 더 적은 리소스를 필요로 합니다. 각 날짜에 대해 별도의 인덱스 가 필요하지 않은 대신 이제 기본값 _id 인덱스 를 사용하면 날짜별 쿼리를 용이하게 할 수 있습니다.

돌아가기

무제한 배열 피하기