2013-04-05 2 views
1

몽고이 드라이브를 사용하여 mongodb에서 Model.find(array_of_ids)을 수행하는 데 성능이 떨어지고 있습니다. 왜 그런지 이해하지 못합니다.mongoid와 레일을 사용하여 mongodb에서 ID를 찾는 성능이 좋지 않음 3

관련 코드 :

ids = get_ids() #Get an array of 137 _ids for Topic model. 
Topic.find(ids) #Find all data, but take 4 seconds to do it. 

_id 필드는 자동 색인, 그래서 그것은 수동 구성이 필요하지 않습니다.

왜 그렇게 느린가요?

설명이 더 필요하거나 불쌍한 영어를 유감스럽게 생각하는지 물어보십시오.

+2

얼마 그들이 찾는 문서가 무엇입니까? 거대하다면 문제가 될 수 있습니다. 모든 필드가 필요하지 않은 경우 해결책이 있습니다. – Leopd

+0

Thanks @Leopd! N 오우 메신저 .without (: large_field)을 사용하고 50ms에 모든 주제를 찾습니다. –

+0

@ LeonardoBaptista Leopd는 ur가 찾고있는 문서는 무엇이며 32 비트 또는 64 비트 같은 OS 구성도 큰 도움이 될 것이라고 말했습니다 – Viren

답변

0

이미 해결책이있는 것으로 보입니다.

나는 단지 추가하고 싶다.

ID가 137에 도달 할 수 있으면 대신 주제 모음 에 관계를 저장해야한다고 생각합니다. 그것은 다른 방향입니다. 쿼리는

Topic.where(:id => self.topic_id) 

입니다. 여기서 self는이 모델의 레코드를 나타냅니다.

실제로 has_many 및 belongs_to 관계입니다.

배열을 저장할 수있는 몽고 (Mongodb) 능력은 다른 모델과 연관된 수많은 (137) 레코드에 대해 그렇게 저장할 수 있음을 의미하지 않습니다. 관계형 메서드가 더 좋습니다. 데이터 형식이 다른 모델/컬렉션과 관련이없는 경우 배열에 무언가를 넣으십시오. 예를 들어, "trendy, teen, childish, cheesy 등의 주제 태그가있을 수 있습니다. 대신 미리 정의 된 태그가 없으며 사용자가 으로 정의합니다.이 기능은 mongodb와 함께 배열 기능을 사용하는 좋은 기회입니다. 배열이 주제 주제 모음에 정의 된 데이터있는 주제 목록을 포함 귀하의 케이스를 들어

는 관계형 모델이 사용되어 있어야합니다.

그냥 몇 가지 제안은, 저를 아래로 투표하지 마십시오.