Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

모델 계산 데이터

이 페이지의 내용

  • 개요
  • 계산된 패턴
  • 예제

애플리케이션은 데이터베이스에 저장된 소스 데이터에서 값을 파생해야 하는 경우가 많습니다. 새 값을 계산하려면 특히 큰 데이터 세트의 경우나 여러 문서를 검사해야 하는 경우 상당한 CPU 리소스가 필요할 수 있습니다.

계산된 값이 자주 요청되는 경우에는 해당 값을 데이터베이스에 미리 저장하는 것이 더 효율적일 수 있습니다. 이렇게 하면 애플리케이션이 데이터를 요청할 때 읽기 작업이 한 번만 필요합니다.

읽기가 쓰기보다 훨씬 많은 경우 계산된 패턴이 계산을 수행해야 하는 빈도를 줄여줍니다. 애플리케이션은 모든 읽기에 계산 부담을 가하는 대신 계산된 값을 저장하고 필요에 따라 다시 계산합니다. 애플리케이션은 계산된 값의 소스 데이터를 변경하는 모든 쓰기 작업을 수행할 때마다 값을 다시 계산하거나 주기적 작업의 일부로 수행할 수 있습니다.

참고

주기적인 업데이트로 인해 계산된 값은 특정 읽기에서 정확한지 보장되지 않습니다. 그러나 정확한 정확도가 요구되지 않는 경우 이 접근 방식을 사용하여 성능을 향상할 가치가 있을 수 있습니다.

영화 뷰어 및 수익 정보를 표시하는 애플리케이션입니다.

다음 screenings collection을 가정해 보겠습니다.

db.screenings.insertMany( [
{
theater : "Alger Cinema",
location : "Lakeview, OR",
movie_title : "Reservoir Dogs",
num_viewers : 344,
revenue : 3440
},
{
theater : "City Cinema",
location : "New York, NY",
movie_title : "Reservoir Dogs",
num_viewers : 1496,
revenue : 22440
},
{
theater : "Overland Park Cinema",
location : "Boise, ID",
movie_title : "Reservoir Dogs",
num_viewers : 760,
revenue : 7600
}
] )

사용자는 종종 얼마나 많은 사람들이 특정 영화를 보았고 그 영화로 얼마나 많은 돈을 벌 수 있었는지 알고 싶어합니다. 이 예에서는 num_viewersrevenue 의 합계를 구하려면 제목이 'Reservoir Dogs'인 영화를 상영한 극장에 대한 읽기를 수행하고 해당 필드의 값을 합산해야 합니다. 정보가 요청될 때마다 해당 계산을 수행하지 않으려면 총 값을 계산하여 영화 레코드 자체와 함께 movies collection에 저장할 수 있습니다.

db.movies.insertOne( [
{
title : "Reservoir Dogs",
total_viewers : 2600,
total_revenue : 33480,
...
}
] )

쓰기 작업이 적은 환경에서는 screenings 데이터의 모든 업데이트와 함께 계산을 수행할 수 있습니다.

쓰기가 더 정기적인 환경에서는 정의된 간격(예: 매시간)으로 계산을 수행할 수 있습니다. screenings 의 소스 데이터는 movies collection에 대한 쓰기의 영향을 받지 않으므로 언제든지 계산을 실행할 수 있습니다.

이는 CPU 워크로드를 줄이고 애플리케이션 성능을 향상시키는 일반적인 설계 패턴입니다. 동일한 계산을 반복적으로 수행하고 읽기 대 쓰기 비율이 높을 때마다 계산된 패턴을 고려하세요.

영화 데이터베이스 예제에서 총 수익이나 뷰어를 가져오는 것과 같이 서밍이 자주 요청되는 경우 외에도 계산된 패턴은 데이터에 대해 계산을 실행해야 하는 모든 곳에 적합합니다. 예를 들면 다음과 같습니다.

  • 차량 데이터에 대한 대규모 애그리게이션 쿼리를 실행하고 데이터가 다시 계산될 때까지 향후 몇 시간 동안 표시할 결과를 저장하는 자동차 회사입니다.

  • 여러 소스의 데이터를 컴파일하여 '가장 좋은 평가를 받은 가제트 100선'과 같이 순위가 지정된 목록을 만드는 소비자 보고 회사입니다. 목록은 기본 데이터가 독립적으로 업데이트되는 동안 주기적으로 다시 생성될 수 있습니다.

돌아가기

원자 조작

이 페이지의 내용