2011-01-28 3 views
2

많은 양의 Twitter 데이터를 저장하고 있으며 한 번에 데이터 처리를 위해 약 500k 레코드를 검색하려고합니다. 나는 기본 트윗 데이터를 포함하는 TwitterTweet의 몽고 문서를 가지고,하고 다음과 같이 검색하려고 :Mongo 매퍼에서 대규모 데이터 세트를 효율적으로 검색 할 수 있습니까?

weekly_tweets = TwitterTweet.all(:created_at.gt => 1.week.ago, :fields => [:created_at, :text, :from_user])

문제이며,이 시간과 메모리를 많이 차지 -이 더 많이 만들 수있는 방법이있다 확장 가능하고 효율적입니다. 나는 map reduce를 사용하는 것을 생각해 왔지만, 내가하고 싶은 일 (텍스트 처리 및 트윗의 regexp stuff)은 매우 복잡해 보인다.

+0

왜 전화가 더 적습니까? 건너 뛰기 및 제한을 사용하고 한 번에 1000 개를 가져옵니다. –

답변

0

모든 것을 mongo에있는 모든 항목 500k의 개체로 만드는 효과가 있으며 모든 메모리와 시간을 사용한다는 것을 눈치 챘을 것입니다. find_each를 대신 사용하고 반복합니다. Find는보다 효율적인 커서를 반환합니다.

+0

이 작업을 설명하는 문서를 찾을 수없는 것 같습니다. 내 질문에 .all() 코드를 .find() 반복으로 변환하도록 도와 주시겠습니까? – bluebit

+1

원시 mongo 드라이버에서는 find 만 할 수 있지만 mongomapper를 사용하면 find_each와 결합 된 where 쿼리를 수행해야합니다. 또는 건너 뛰기 (x)를 한 다음 10000 등의 일괄 처리에 대한 제한을 수행 할 수 있습니다. 일반적으로 mongomapper는 일관성이없고 큰 데이터에는 적합하지 않으므로 mongomapper를 좋아하지 않습니다. 그것들이 잠시 동안 빠져 나간 후에 문서화로 인해 코드가 무엇을하는지 알지 못하더라도 그 문서를 확인하십시오. 건너 뛸 수 있고 제한 할 수 있으며 각각을 찾을 수 있습니다. 또는 10gen mongo lib를 사용할 수 있으며 find를 호출하면 더 잘 작동합니다. –

+0

http://mongomapper.com/documentation/plugins/querying/ –

관련 문제