2011-01-28 23 views
2

私は大量のTwitterデータを保存しており、一度にデータを処理するために約500kレコードを取得したいと考えています。私は基本的なツイートデータが含まれているTwitterTweetのmongo文書を持っており、次のようにそれを取得しよう:Mongoマッパーで大量のデータを効率的に取得できますか?

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

トラブルをされ、これは時間とメモリの多くを取る - この多くを作るためにどのような方法がありますスケーラブルで効率的です。私はmap reduceを使うことを考えていましたが、私がやりたいこと、つまりつぶやきのテキスト処理と正規表現の仕掛けには非常に複雑です。

+0

なぜ、それ以上の電話はありませんか?スキップとリミットを使用し、一度に1000を取る。 –

答えて

0

これはmongoであなたのエントリーのすべての500kのオブジェクトを作るという効果を持っているので、すべてを呼び出さないでください。あなたが気づいたように、多量のメモリと時間を使用します。 find_eachを代わりに使用してからiterateを実行します。 Findは、より効率的なカーソルを返します。

+0

この操作を説明するドキュメントを見つけることができないようです。私の質問の.all()コードを.find()繰り返しに変換する手助けをしてもらえますか? – bluebit

+1

まあ、生のmongoドライバでは見つけることができますが、mongomapperを使うと、find_eachと組み合わせたwhereクエリを実行しなければならないようです。または、スキップ(x)を行い、10000などのバッチの制限を行うことができます。一般に、mongomapperは矛盾しており、大規模なデータには適していません。しばらく外出した後に文書化することによってコードが何をしているのか分からなくても、その文書をチェックしてください。あなたはすべてスキップして制限するか、それぞれを見つけることができます。または、あなたは10gen mongo libを使用してfindを呼び出すだけで、よりうまく動作します。 –

+0

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

関連する問題