2014-01-19 2 views
3

내가 Mongoid와 HABTM 연결을 사용하고 내가 다음과 같은 계획이 있습니다
1) 사용자 has_and_belongs_to_many : 전문
2) 특성화 has_and_belongs_to_many : 사용자Mongoid와 has_and_belongs_to_many 협회

모든 일을 내가 기쁘게 생각합니다, 나는에게 때를

<Specialization _id: 52db847e6d69631dee000000, user_ids:  [BSON::ObjectId('52db84b66d69631dff000000'), BSON::ObjectId('52db88906d69631f17000000')] 

내가이 전문에 단 2 사용자가있는 경우 그, 그리고 :하지만 나는 어떤 전문 인스턴스의 사용자 ID가과 같이 배열로 저장하는 것으로 나타났습니다 magine 얼마나 큰 일인지, 10,000 명의 사용자가있을 때 나는이 필드에 색인을 추가하더라도 문제를 해결하고 검색해야한다는 것을 두려워하며 문서의 크기도 커질 것입니다. 내가 perfomance 문제에 대해 걱정해야하고 내가 잘못 곳

당신에게 당신이 HABTM 관계를 사용할 또는 mongoid의 헬퍼없이 할 수 있다면 재고 할 필요가 모든

답변

2

귀하의 관심은 유효합니다. 나는 HABTM를 사용하려고 시도했지만 매우 저조한 스케일링을했습니다. 임베딩은 훨씬 더 빠른 속도를 제공했지만 임베디드 모델에 대해 독립적으로 기존의 문서가 필요했습니다. 임베딩은 수행 할 수 없다는 것을 의미합니다. 궁극적으로 방금 외래 ID를 저장할 배열 필드를 사용하여 수동 관계를 만들었습니다. 그것의 빠르고 더러운 그러나 확장 성 내 문제를 해결.

+0

나는 그 방법을 그만 두 겠지만 ".without"방법으로 쿼리를 최적화하면 문제가 해결 될 가능성이 높습니다. – JustMichael

0

먼저 감사 여부를 아무도 말해 줄 수있다.

사용자에게 특수 효과 포함을 고려할 수 있지만 데이터 양에 따라 다릅니다.

이제 id 스타일이 불편하면
예를 들어 재정의 할 수 있습니다. Specialiazation

에 대한
field :_id, as: :spec_id, type: String 
before_save :set_id 

... 

private 

def set_id 
    #creates a simpler id 
    #self.spec_id = ... 
end 

이 모델에 관한 좀 더 정보를 제공합니다 (기록이 계산 가능한 성장을, 당신은 등 쿼리 무슨)