2012-08-07 4 views
1

다음과 같은 개체가 있습니다. 회사, 사용자 및 주문 (주문 라인 포함). 1 개 이상의 주문 라인이있는 사용자의 주문은 회사와 관련이 있습니다. 이 회사에 주문할 수있는 기간은 1 주일입니다.MongoDB 스키마 디자인 주문 서비스

내가 잘 모르겠지만 주문 배열을 배치 할 위치가 어디인지는 모르겠지만 사용자의 링크와 회사에 대한 링크가 포함 된 자체 컬렉션이거나 회사에 있어야하거나 마침내 명령은 사용자 아래에 있어야합니다.

현명한 숫자 나는 50k + 주문을 계획해야한다.

검색어를 사용하면 주로 회사 별 주문을 볼 수 있지만 특정 사용자를 기준으로 주문을 찾아야합니다.

답변

8

1) SQL 세계에서 온 사람들 (예 : 나 자신)의 경우 MongoDB에 관해 가장 어려운 점은 스키마 디자인의 새로운 스타일입니다. SQL 세계에서 모든 것이 세 번째 정규 형식으로 바뀝니다. 스키마를 설계하는 데는 올바른 방법이 하나 있다고 생각하게됩니다. 스키마가 일반적으로 하나이기 때문입니다.

MongoDB 세계에는 최고의 스키마 디자인이 없습니다. 보다 정확하게 MongoDB 스키마 디자인은 응용 프로그램이 데이터에 액세스하는 방법에 따라 다릅니다.

  • 당신이 얼마나 많은 데이터가 않습니다

    2) 다음은 MongoDB를위한 좋은 스키마를 설계하기 위해 대답 한 데 필요한 핵심 질문은?

  • 가장 일반적인 작업은 무엇입니까? 주로 새 데이터를 삽입하거나 기존 데이터를 업데이트하거나 쿼리를 수행합니까?
  • 가장 일반적인 검색어는 무엇입니까?
  • 초당 예상되는 I/O 작업 수는 얼마입니까?

당신이 여기에 대해 얘기 다 대일 관계를 모델링된다

  • 회사 -> 사용자
  • 사용자 -> 주문
  • 주문 -> 주문 라인
  • 회사 -> 주문

SQL을 사용하면 기본 키가있는 마스터/세부 테이블 쌍을 생성 할 수 있습니다 y/외래 키 관계. MongoDB에는 여러 가지 선택 사항이 있습니다. 데이터를 임베드하거나, 링크 된 관계를 만들거나, 데이터를 복제하거나 비정규화할 수 있거나, 하이브리드 방식을 사용할 수 있습니다.

정확한 접근 방식은 제공하지 않은 응용 프로그램의 사용 사례에 대한 많은 세부 정보에 따라 달라집니다.

3) 이것은 가장 좋은 추측이며, 좋은 스키마는 추측에 불과합니다. 당신은 50K + 주문에서 찾고 있다면

a)는 사용자, 회사 및 주문

에 대해 별도의 컬렉션을 가지고, 하나의 문서에 포함 너무 많습니다. 별도의 컬렉션으로 만들면 회사 및 사용자 문서에서 참조 할 수 있습니다.

b) 회사 및 사용자 문서에서 주문 문서에 대한 참조가 나열되어 있습니다. 이렇게하면 "이 회사의 모든 주문 찾기"단일 문서 쿼리

c) 쿼리 패턴이 지원하는 경우 Orders에서 소유 한 회사 및/또는 사용자에게 중복 링크가있을 수 있습니다.

d) 주문 라인이 개별 주문에 고유하다고 가정하면 주문 문서 내의 배열에 주문 라인을 포함시킵니다.

전자) 주문 라인이 다시 개별 제품 참조하면, 별도의 제품 콜렉션을 갖고 싶어하고, 주문 라인 하위 문서

4의 제품 문서에 대한 참조를 포함 할 수 있습니다) 다음은 몇 가지 MongoDB 스키마 디자인에 대한 일반적인 참고 자료.

MongoDB를 프리젠 테이션 :

  • http://shop.oreilly.com/product/0636920018391.do
  • 일부 샘플 스키마 디자인과 같다 : "MongoDB의 행동에"책 샘플을 포함

    주 스키마는 전자 상거래 응용 프로그램의 스키마로, 작성하려는 것과 매우 유사합니다. 체크 아웃하는 것이 좋습니다.

    +2

    내가 본보다 나은 설명 중 하나입니다. 잘 했어. –