2012-11-10 3 views
2

나는 mongodb와 mongoid gem을 사용하며 조언을 받고 싶습니다.임베디드 또는 참조 된 관계

사용자가 has many 마켓 및 마켓 has many 인 앱이 있습니다. 사용자에게 속한 시장을 전체 또는 일부에서 특정 가격대로 검색해야합니다.

어떤 관계가 더 적합합니까, 임베디드 또는 참조 되나요?

나는 현재 참조 사용하고 있으므로

class User 
    has_many :markets 
end 

class Market 
    belongs_to :user 
    has_many :products 
end 

class Product 
    belongs_to :calendar 
    belongs_to :user 
end 

그리고 검색

, 나는이 쿼리를 사용하는 것 같습니다

Product.where(user_id: current_user.id). 
    in(market_id: marked_ids). 
    where(:price.gte => price) 

mongdb 문서 지향 데이터베이스이기 때문에 나는 것, 궁금하다 이 상황에서 임베디드 문서를 사용했다면 성능이나 디자인에 이익이됩니까?

답변

3

귀하의 경우에 참조 된 데이터를 사용하는 것이 좋습니다. 왜냐하면 당신이 그 컬렉션을 각각 조작해야 할 필요가 있다고 가정하기 때문에 (당신은 _id에 의해 "제품"을 편집/삭제/업데이트하고 다른 복잡한 쿼리를 수행 할 수 있어야합니다. 별도의 작업을 할 때 훨씬 쉽고 효과적입니다. 수집).

동시에 일부를 사용자 컬렉션에 저장하여 방문자의 브라우저로 빠르게 표시 할 수 있습니다. 사용자의 프로필과 상위 5 개 시장 및 상위 20 개 제품을 표시하려는 사용자 페이지가 있다고 가정 해 보겠습니다. 새로운 시장/제품이있을 때 사용자의 문서에 최신 Top-5 및 Top-20을 임베드하고 해당 임베디드 객체를 업데이트 할 수 있습니다. 이 경우 - 사용자의 페이지를 보여줄 때 MongoDB에 단 하나의 쿼리를 만들어야합니다. 그래서 이것은 캐시로 작동합니다. 방문자가 더 많은 제품을 볼 필요가 있다면, 그는 다음 페이지 "제품"으로 가서 MongoDB의 "제품"컬렉션을 따로 질의합니다.

1

상위 클래스를 통해서만 항목에 액세스해야하는 경우 포함 된 문서를 사용하십시오. 직접 또는 여러 개체에서 쿼리해야하는 경우 참조를 사용하십시오.

관련 문제