2014-01-23 8 views
3

Node.js와 몽구스를 사용하여 토론 포럼을 만들고 있다고 가정 해 봅시다. 사용자는 여러 개의 포럼을 가질 수 있으며 포럼은 여러 개의 댓글을 가질 수 있습니다. 사용자는 다른 사용자를 포럼에 초대 할 수도 있습니다. 따라서, 내 질문은 참조 또는 포함 된 문서를 사용하여 모델 디자인에 관한 것입니다! 나는 고투 위의 디자인을 사용하여임베디드 문서와 몽구스 디자인 모델의 참조?

var Comment = new Schema({ ... }); 

var Forum = new Schema({ 
    title: {type: String}, 
    content: {type: String}, 
    comments: [Comment], 
    attendees: [User] 
}); 

var User = new Schema({ 
    name: {type: String}, 
    email: {type: String}, 
    forums: [Forum] 
}); 

var Account = mongoose.model('Account', User); 

: 내가 포함 된 문서에 가면

, 그것은 같을 것이다 사용자가 포럼에 코멘트를 추가하고, 그 포럼 내 포럼에있을 때, 내 포럼 목록에 새 코멘트를 업데이트 할 수 없을 것이라고 생각합니다. 나는? 이 경우 임베디드 문서를 작동시키는 방법을 알고 있습니까?

그래서 나는 참조을 몽구스로 생각하고있었습니다. 이 경우 두 개의 콜렉션이 있습니다 : 계정포럼. 이 경우 포럼에 새 코멘트를 추가하는 것은 문제가되지 않습니다. 내가 맞습니까?

참조이 응용 프로그램에 대한보다 좋을까요?

미리 감사드립니다.

+0

아래 답변 중 하나가 도움이 되었습니까? – Chev

+0

이 게시물은 퍼가기를 이해하는 데 도움이되었습니다. – DataEngineer

답변

26

주로 데이터를 쿼리하고 업데이트하는 방법에 따라 달라집니다. 이 경우 일관성과 문서 크기 또한 중요합니다.

임베딩 :

  • 작은 하위 문서
  • 데이터를 정기적으로
  • 최종 일관성을 변경하지 않습니다 작은 성장 허용
  • 문서는 여기 참조 또는 문서를 삽입 할 때에 좋은 요약입니다 amout
  • 자주 가져올 두 번째 쿼리를 수행해야하는 데이터
  • Fas t 읽기

참조하는 :

  • 대형 하위
  • 즉시 일관성이 필요
  • 휘발성 데이터
  • 많은 양을 자주 결과에서 제외됩니다
  • 데이터 성장
  • 문서
  • 빠른 기록

이것은 내가 읽은 몽고에 대한 책에서 exctract입니다. 이것들은 단지 일반적인 규칙 일 뿐이지 만 제 경험에서 볼 때, 그것을 사용하면 대부분의 시간을 참조하거나 포함시키는 것이 매우 명확합니다.

이 경우 포럼을 참조하고 싶습니다. 그러나 모든 요구 사항을 고려하십시오. 예를 들어 Forum from User를 참조하고 특정 포럼의 모든 사용자에게 쿼리해야하는 경우 쿼리가이 경우 느릴 수 있습니다.내가 당신이라면 필요한 모든 것을 목록으로 작성한 다음 일반 규칙을 사용하면 포함 및 참조의 장단점을 찾을 수 있습니다.

희망이 있습니다.

+0

이것이 답으로 표시되어야한다고 생각합니다. – Chev

+0

@AlexFord 흠, 나는 그것에 대해 내기를하지 않을 것이다. 하나 : MongoDB 책은 "즉시 일관성"이후 정확히 읽었던 책인가? 그가 의미하는 바를 확신 할 수 없지만 MongoDB의 수동 참조는 아무런 일관성을 제공하지 않습니다. – Sammaye

+2

@Sammaye "즉각적인 일관성"- 많은 다른 사람들이 참조하는 하나의 객체입니다. 업데이트하면이 자료를 참조하는 모든 객체로부터 최신 데이터를 가져옵니다. "최종적인 일관성"- 하나의 객체는 다른 많은 객체에 중첩되어 있으므로 변경하면 모든 부분을 변경해야하므로 일부 객체가 업데이트되었지만 일부 객체는 변경되지 않을 수도 있습니다. 물론 이것은 트랜잭션 일관성과는 아무런 관련이 없습니다. 예를 들어 견인 객체를 업데이트해야하거나 그렇지 않은 경우는 없습니다. –

3

개인적으로 나는 당신과 같은 상황에서 참조를하고 싶습니다. 이 방법으로 복잡한 임베디드 문서 쿼리를 수행하는 것에 대해 걱정할 필요없이 사용자, 포럼의 사용자, 의견의 포럼, 사용자의 포럼 등에서 의견을 얻을 수 있습니다. 임베디드 참조 문서 저장에 신경 쓰지 않습니다. 포럼과 댓글 사이에 일대일 관계가있는 경우 댓글 모음에 포럼 참조를 저장하고 포럼에 덧글 참조를 저장합니다. 댓글 컬렉션에서 댓글을 추가/삭제할 때 포함 된 댓글을 삭제해야하기 때문입니다. 포럼의 의견 모음에있는 참조 문서.

포럼 참조를 사용하여 의견을 포럼에 쿼리 할 수 ​​있습니다. 해당 포럼 참조에 대한 의견 모음을 쿼리하여 포럼에 대한 모든 의견을 얻을 수 있습니다 (이는 몽구스가 당신).

관련 문제