중복 데이터 처리
단일 문서에 관련 데이터를 포함할 경우, 두 컬렉션 간에 데이터가 중복될 수 있습니다. 데이터를 복제하면 모델에서 엔티티를 논리적으로 분리하면서 애플리케이션에서 여러 엔티티에 대한 관련 정보를 한 번의 쿼리로 쿼리할 수 있습니다.
이 작업에 대하여
데이터 복제에 대한 한 가지 우려는 스토리지 비용 증가입니다. 그러나 액세스 패턴 최적화의 이점은 일반적으로 스토리지로 인한 잠재적 비용 증가보다 큽니다.
데이터를 복제하기 전에 다음 요소를 고려하세요.
중복된 데이터를 업데이트해야 하는 빈도. 중복된 데이터를 자주 업데이트하면 워크로드가 과중해지고 성능 문제가 발생할 수 있습니다. 그러나 간헐적인 업데이트를 처리하는 데 필요한 추가 논리는 읽기 작업에서 조인(조회)을 수행하는 것보다 비용이 적게 듭니다.
데이터가 중복되면 읽기 성능에 이점이 생깁니다. 데이터를 복제하면 여러 컬렉션에서 조인(join)을 수행할 필요가 없으므로 애플리케이션 성능을 향상할 수 있습니다.
예시: 예: 전자상거래 스키마에서 데이터 복제하기
다음 예시에서는 전자상거래 애플리케이션 스키마에서 데이터를 복제하여 데이터 액세스 및 성능을 개선하는 방법을 보여 줍니다.
단계
데이터베이스 로 eCommerce
전환합니다.
use eCommerce
데이터베이스 채우기
eCommerce
데이터베이스에 다음 컬렉션을 만듭니다.
컬렉션 이름 | 설명 | 샘플 문서 | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
customers | 이름, 이메일, 전화번호와 같은 고객 정보를 저장합니다. |
| ||||||||||||||||||||||||||
products | 가격, 크기, 재료 등의 제품 정보를 저장합니다. |
| ||||||||||||||||||||||||||
orders | 날짜 및 총 가격 등의 주문 정보를 저장합니다. orders 컬렉션의 문서에는 lineItems 필드의 해당 주문에 해당하는 제품이 포함됩니다. |
|
products
컬렉션에서 나온 다음과 같은 속성은 orders
컬렉션에서 복제됩니다.
productId
product
price
size
데이터 복제의 이점
애플리케이션 에 주문 정보가 표시되면 해당 주문의 항목이 표시됩니다. 주문 정보와 제품 정보가 별도의 컬렉션에 저장된 경우 애플리케이션 은 $lookup
를 수행하여 두 컬렉션의 데이터를 결합해야 합니다. 조회 작업은 비용이 많이 들고 성능이 저하되는 경우가 많습니다.
orders
컬렉션에 품목만 포함하는 것이 아니라 제품 정보를 복제하는 이유는 주문을 표시할 때 응용 프로그램에 제품 정보의 하위 집합만 필요하기 때문입니다. 필수 필드만 포함하면 응용 프로그램은 orders
컬렉션에 불필요한 팽창을 추가하지 않고 추가 제품 세부 정보를 저장할 수 있습니다.
예시: 제품 리뷰에 대한 중복 데이터
다음 예제에서는 하위 집합 패턴 을 사용하여 온라인 스토어의 액세스 패턴을 최적화합니다.
사용자가 제품을 볼 때 해당 제품의 정보와 가장 최근 리뷰 5개를 표시하는 애플리케이션을 생각해 보세요. 리뷰는 products
컬렉션과 reviews
컬렉션 모두에 저장됩니다.
새 리뷰가 작성되면 다음과 같은 쓰기가 발생합니다.
단계
데이터베이스 로 productsAndReviews
전환
use productsAndReviews
데이터베이스 채우기
productsAndReviews
데이터베이스에 다음 컬렉션을 만듭니다.
컬렉션 이름 | 설명 | 샘플 문서 | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
products | 제품 정보를 저장합니다. products 컬렉션의 문서에는 recentReviews 필드의 가장 최근 제품 리뷰 5개가 포함되어 있습니다. |
| |||||||||||||||||||||
reviews | 최근 리뷰뿐만 아니라 제품에 대한 모든 리뷰를 저장합니다. reviews 컬렉션의 문서에는 리뷰와 관련된 제품을 나타내는 productId 필드가 포함되어 있습니다. |
|
데이터 복제의 이점
애플리케이션은 데이터베이스를 한 번만 호출하여 표시해야 하는 모든 정보를 반환할 수 있습니다. 데이터가 완전히 별도의 컬렉션에 저장된 경우 애플리케이션은 products
컬렉션과 reviews
컬렉션의 데이터를 결합해야 하므로 성능 문제가 발생할 수 있습니다.
리뷰는 거의 업데이트되지 않으므로 중복 데이터를 저장하는 데 비용이 많이 들지 않으며, 컬렉션 간에 데이터를 일관성 있게 유지하는 것도 어렵지 않습니다.
자세히 알아보기
중복 데이터의 일관성을 유지하는 방법을 알아보려면 데이터 일관성을 참조하세요.