1. 다형성 패턴:
- 개념: 동일한 컬렉션 내에서 서로 다른 구조의 문서를 저장합니다. 공통 필드는 문서 유형을 식별합니다.
- 사용 사례: 일부 공통 필드를 공유하지만 유형에 따라 고유한 필드도 포함하는 관련 데이터가 있는 경우. 예를 들어, 단일 "제품" 컬렉션에 다양한 유형의 제품(도서, 전자제품, 의류)을 저장합니다.
- 예:
{ "_id": 1, "type": "book", "title": "The Book", "author": "John Doe" }
{ "_id": 2, "type": "electronics", "name": "Laptop", "brand": "XYZ", "processor": "Intel" }
로그인 후 복사
2. 속성 패턴:
- 개념: 키-값 쌍을 사용하여 문서마다 크게 다를 수 있는 속성을 나타냅니다.
- 사용 사례: 고정 필드에 꼭 맞지 않는 선택적 또는 동적 속성이 많은 경우. 이렇게 하면 인구 밀도가 낮은 필드가 많이 생성되는 것을 방지할 수 있습니다.
- 예:
{ "_id": 1, "name": "Product A", "attributes": { "color": "red", "size": "large", "material": "cotton" } }
{ "_id": 2, "name": "Product B", "attributes": { "weight": "2kg", "power": "100W" } }
로그인 후 복사
3. 버킷 패턴:
- 개념: 관련 데이터를 단일 문서("버킷")로 그룹화합니다.
- 사용 사례: "다" 측이 비교적 작고 "일" 측과 함께 자주 액세스되는 일대다 관계가 있는 경우. 이렇게 하면 필요한 읽기 수가 줄어듭니다.
- 예: 블로그 게시물과 댓글을 동일한 문서에 저장합니다.
{ "_id": 1, "title": "My Blog Post", "content": "...", "comments": [
{ "author": "User A", "text": "Great post!" },
{ "author": "User B", "text": "I agree." }
]}
로그인 후 복사
4. 이상값 패턴:
- 개념: 거의 접근하지 않거나 매우 큰 데이터를 주 문서와 별도로 저장합니다.
- 사용 사례: 자주 사용되지 않거나 기본 문서의 크기가 크게 늘어나 성능에 영향을 미치는 일부 데이터가 있는 경우. 예를 들어 큰 이미지나 자세한 제품 설명을 별도로 저장합니다.
- 구현: 대용량 파일의 경우 GridFS를 사용하거나 별도의 문서에 대한 참조를 저장하여 구현하는 경우가 많습니다.
5. 계산된 패턴:
- 개념: 읽기 작업 중 비용이 많이 드는 계산을 피하기 위해 미리 계산된 값을 저장합니다.
- 사용 사례: 복잡한 계산이 필요한 데이터에 자주 액세스하는 경우. 계산된 값을 저장하면 쓰기 복잡성이 증가하는 대신 읽기 성능이 향상됩니다(소스 데이터가 변경될 때마다 계산된 값을 업데이트해야 함).
- 예: 개별 품목 가격으로 계산된 총 주문 가격을 저장합니다.
6. 하위 집합 패턴:
- 개념: 빠른 검색을 위해 포함된 문서 내에 자주 액세스하는 필드의 하위 집합을 저장합니다.
- 사용 사례: 큰 문서가 있지만 작은 필드 집합만 필요한 경우가 많습니다. 이 하위 집합을 포함하면 디스크에서 읽는 데이터의 양이 줄어듭니다.
7. 확장 참조 패턴:
- 개념: 참조 문서의 일부 핵심 필드와 참조를 결합합니다.
- 사용 사례: 관련 문서의 일부 정보가 자주 필요하지만 매번 별도의 조회를 수행하고 싶지 않은 경우. 이렇게 하면 쿼리 수가 줄어들지만 일부 데이터 중복이 발생합니다.
8. 근사 패턴:
- 개념: 성능 향상을 위해 정확한 값 대신 대략적인 값을 저장합니다.
- 사용 사례: 절대 정밀도가 필요하지 않고 성능이 중요한 경우. 예를 들어, 비용이 많이 드는 계산 작업을 수행하는 대신 추정된 계산을 저장합니다.
9. 나무 패턴:
- 개념: 중첩된 문서나 참조를 사용하여 계층적 데이터 구조(예: 카테고리 또는 조직도)를 나타냅니다.
- 사용 사례: 나무와 같은 관계를 모델링해야 하는 경우. 상위 참조, 하위 참조 또는 상위 항목 배열 사용과 같은 다양한 접근 방식이 있습니다.
10. 사전 할당 패턴:
- 개념: 문서 내 향후 데이터 증가에 대비한 공간을 확보합니다.
- 사용 사례: 문서가 시간이 지남에 따라 커지는 것을 알고(예: 일련의 이벤트) 성능에 영향을 미칠 수 있는 빈번한 문서 크기 조정을 피하고 싶은 경우.
11. 문서 버전 관리 패턴:
- 개념: 문서의 다양한 버전을 저장하여 시간 경과에 따른 변경 사항을 추적할 수 있습니다.
- 사용 사례: 데이터 변경 기록을 유지해야 하는 경우. 이는 각 버전에 대한 새 문서를 생성하거나 기본 문서의 배열 내에 버전을 저장하여 구현할 수 있습니다.
올바른 패턴을 선택하는 것은 특정 애플리케이션의 요구 사항, 데이터 구조 및 액세스 패턴에 따라 크게 달라집니다. 최적의 성능과 유지 관리성을 달성하기 위해 이러한 패턴을 조합하여 사용하는 경우가 많습니다.
위 내용은 MongoDB의 스키마 디자인 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!