2013-12-24 2 views
1

케이스 가구 1mongoose이 경우 하위 문서와 전역 사이에 성능 차이가 있습니까?

var MessageSchema = new Schema({ 
    text: {type: String, required: true} 
}); 

var UserSchema = new Schema({ 
    .. 
    messages: {type: [MessageSchema], required: false} 
}); 

UserSchema.find({_id:id},'messages',function(err, messages){ 
    // case 1 
}); 

난 그냥 MongoDB를이 두 가지 방법을 조작하는 방법을 알고

case2

var MessageSchema = new Schema({ 
    text: {type: String, required: true}, 
    userId: {type:Schema.Types.ObjectId, required: true} 
}); 
MessageSchema.find({userId:id}, function(err, messages){ 
    //case 2 
}); 

대.

+0

-1 표를 가져 주셔서 감사합니다. 메리 크리스마스. 누구나. –

답변

2

사용자의 모든 문서를 찾는 방법을 비교한다고 가정합니다.

첫 번째 경우 _id는 자동으로 인덱싱되므로 찾기가 빠르며 사용자 문서가있을 때 메시지가로드됩니다.

메시지 userID에 색인을 추가한다고 가정하면 find는 색인에서 userID를 찾아보고 userID와 일치하는 모든 문서를로드합니다.

그래서 찾기 및 액세스 메시지를 최적화하는 경우 첫 번째 경우가 항상 빠릅니다.

그러나 메시지 추가를 최적화하고 많은 수의 메시지가 있고 새 메시지가 자주 추가되는 경우 첫 번째 경우 사용자 문서가 커지고 이동합니다. 문서 크기 제한을 초과 할 수 있습니다. 더 큰 문서가 저장됩니다.

자세한 내용은 참조 및 포함 된 문서 간의 절충에 대한 좋은 토론이있는이 가이드를 참조하십시오.

http://docs.mongodb.org/manual/MongoDB-data-models-guide.pdf

나는이 도움이되기를 바랍니다.

+0

case2를 이미 선택했습니다. 그러나 당신의 의견은 또한 유익하다 :) –

관련 문제