2

MongoDB에 대한 일반적인 질문입니다. 언제 임베드 할 지, 참조 할 시점입니다.내 경우에 대한 견해 MongoDB 스키마 디자인

그러나 제 경우에는 이것이 어떻게 든 딜레마 인 것처럼 보입니다. 나는 그것을 삽입 할 수있는 참조가있는 문서를 가지고 있지만 디스크의 크기는 나에게 부담이 될 것이다. 하지만 제가 참고 자료를 작성하면 성능 비용이 많이 듭니다. 나는이 회원의 세부 사항이 멤버를 블로그 모든 될 "자위대"모든 블로그를 표시 할 원인이 만든하려는

Member: { 
    _id: "abc", 
    detail: { 
     name: "Stack Overflow", 
     website: "www.stackoverflow.com" 
    } 
} 

: 여기

는 예를 들어, 난 내 문제로 '디테일'이 회원이 있다고 회원 정보를 표시하십시오. 대신,

Blog: { 
    _id: 123, 
    memberId: "asdf" ---> will be used as reference to query specific member 
} 

또는 제 블로그에 멤버 포함 :

먼저 만 회원의 _id를 넣어 참조합니다 그래서이 옵션은 내 블로그 문서에 대해 할 수있다

Blog: { 
    _id: 123, 
    member: { 
     _id: "asdf", 
     detail: { 
      name: "Stack Overflow", 
      website: "www.stackoverflow.com" 
     } 
    } 
} 

첫 번째 옵션에는 성능 문제가되는 멤버에 대한 다른 쿼리가 필요합니다. 그러나 두 번째 옵션은 더 빨리 발생하기 때문에 한 번만 쿼리하면되지만 블로그 수가 늘어남에 따라 내 디스크가 '구성원'임베디드 문서의 중복 데이터에 대해 더 커질 수 있습니다.

추신 :이 예제에서 볼 수 있듯이 회원 및 블로그 관계는 일대 다이므로 회원은 많은 블로그를 보유 할 수 있지만 회원의 세부 변수는 그대로 유지됩니다. '이름'과 '웹 사이트'.

이 경우 더 좋은 의견이 있습니까? 또한 3 번째 솔루션이 있다면 좋을 것입니다. 전에 고마워.

답변

1

포럼 정보와 같이 회원 정보를 별도로 보관하는 것이 좋습니다. 이렇게하면 회원이 세부 정보를 업데이트 할 때마다 응용 프로그램이 모든 이전 게시물의 중복 데이터를 업데이트하지 않아도 모든 게시물에서 현재 정보가 표시됩니다.

설명을 통해 사용자가 페이지에 작성한 모든 의견보다는 사용자가 작성하는 블로그 게시물에만 표시 할 수있는 것처럼 들립니다.

사용자 당 추가 쿼리의 성능 비용이 걱정되면 단일 DB 쿼리에서 모든 블로그 정보를 가져 오는 대신 해당 사용자 데이터 (또는 생성 된 페이지 출력)를 항상 캐싱 할 수 있습니다. 문제가되지 않을 수도있는 유스 케이스를 최적화하기 전에 애플리케이션이 실제 사용에서 어떻게 수행되는지 확인할 수 있습니다.

또 다른 방법은 그래서 established user에 대한 자세한 정보를 표시하는 방법과 유사한 아약스 호버로 추가 사용자 세부 사항을 (표시하는 것입니다.

+0

감사합니다! 당신이 첫 번째 단락에서 설명 할 때까지 나는 충분히 생각하지 않았다 . 결국, 내 경우에는 자주 참조 (회원 세부 사항)에 의해 업데이 트되는 데이터에 대한 임베디드 의사가 나에게 성능 비용도 줄 것이다 따라서 별도의 하나를 선택할거야. 캐시 제안도 주셔서 감사합니다, Stennie. –

관련 문제