Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ /

임베딩으로 데이터 일관성 강화

스키마가 여러 컬렉션에 동일한 데이터를 저장하는 경우 관련 데이터를 임베드하여 중복을 제거할 수 있습니다. 업데이트된 비정규화 스키마는 데이터 값을 단일 위치에 유지하여 데이터의 일관성을 유지합니다.

관련 데이터를 임베딩하면 스키마가 간소화되고 사용자가 항상 최신 데이터를 읽을 수 있습니다. 그러나 임베딩은 다대다와 같은 복잡한 관계를 나타내는 데에는 최선의 선택이 아닐 수 있습니다.

관련 데이터를 최적으로 내장하는 방법은 애플리케이션에서 실행하는 쿼리에 따라 다릅니다. 단일 컬렉션에 데이터를 내장할 때는 성능 좋은 쿼리를 지원하는 인덱스를 고려하고 효율적이고 논리적인 인덱스가 가능하도록 스키마를 구성하세요.

문서 및 참조 임베딩의 이점을 비교하려면 임베디드 데이터 대 참조를 참조하세요.

데이터 일관성을 시행하는 다양한 방법을 검토하여 임베딩이 애플리케이션에 가장 적합한 접근 방식인지 확인하세요. 자세한 내용은 데이터 일관성에서 확인하세요.

데이터베이스에 데이터가 저장되는 방식을 업데이트하면 기존 인덱스와 쿼리에 영향을 미칠 수 있습니다. 스키마를 업데이트할 때는 스키마 변경 사항을 고려하여 애플리케이션의 인덱스와 쿼리도 업데이트하세요.

다음 예시 전자상거래 애플리케이션 에서 데이터 일관성 적용합니다. 초기 스키마 에서 제품 정보는 productssellers 컬렉션에 중복됩니다. 컬렉션 의 필드 컬렉션 sellerId products 에 대한 참조이며 데이터를 함께 연결합니다. sellers

// products collection
[
{
_id: 111,
sellerId: 456,
name: "sweater",
price: 30,
rating: 4.9,
color: "green"
},
{
_id: 222,
sellerId: 456,
name: "t-shirt",
price: 10,
rating: 4.2,
color: "blue"
},
{
_id: 333,
sellerId: 456,
name: "vest",
price: 20,
rating: 4.7,
color: "red"
}
]
// sellers collection
[
{
_id: 456,
name: "Cool Clothes Co",
location: {
address: "21643 Andreane Shores",
state: "Ohio",
country: "United States"
},
phone: "567-555-0105",
products: [
{
id: 111,
name: "sweater",
price: 30
},
{
id: 222,
name: "t-shirt",
price: 10
},
{
id: 333
name: "vest",
price: 20
}
]
}
]

스키마를 비정규화하고 일관성을 시행하려면 sellers 컬렉션 내에 제품 정보를 내장하세요.

db.sellers.insertOne(
{
_id: 456,
name: "Cool Clothes Co",
location: {
address: "21643 Andreane Shores",
state: "Ohio",
country: "United States"
},
phone: "567-555-0105",
products: [
{
id: 111,
name: "sweater",
price: 30,
rating: 4.9,
color: "green"
},
{
id: 222,
name: "t-shirt",
price: 10,
rating: 4.2,
color: "blue"
},
{
id: 333,
name: "vest",
price: 20,
rating: 4.7,
color: "red"
}
]
}
)

업데이트된 스키마는 사용자가 특정 판매자를 쿼리할 때 모든 제품 정보를 반환합니다. 업데이트된 스키마에는 데이터가 단일 컬렉션에서 비정규화되므로 데이터 일관성을 유지하기 위한 추가 논리나 유지 관리가 필요하지 않습니다.

스키마를 재구성한 후 일반적인 쿼리를 지원하는 인덱스를 만들 수 있습니다. 예를 들어 사용자가 색상별로 제품을 자주 쿼리하는 경우 products.color 필드에 인덱스를 생성할 수 있습니다.

db.sellers.createIndex( { "products.color": 1 } )

돌아가기

트랜잭션 사용

이 페이지의 내용