2012-02-28 9 views
1

私は、MongoとRailsアプリケーションを実行するWebサーバー(40ギガヘルツ、1ギガ・ラム)を持っています。制限されたリソースでMongoをスケールする最も簡単な方法は?

Mongo DBは数百万のレコードを持つTwitterのつぶやきとユーザーのドキュメントストアです。データに対してmap-reduceクエリを実行して、最も一般的なハッシュタグ、単語、言及など(非常に標準的なもの)のようなものを抽出します。各ツイートのメタデータは既に格納されているので、map-reduceは実際には1つの収集と同じくらい効率的です。

しかし、それは(かなり)大量のデータセットで実行されるため、リアルタイムでは実行できません。たとえば、私はレポート生成プログラムを持っています。 20,000のつぶやきで約2分かかります。

mongoをスケールするには、特にマップを減らすために、最も速く、最も簡単な方法は何ですか?追加のサーバーを設定して負荷を分割することはできますが、シャーディング、レプリケーション、またはその両方を使用する必要があるのだろうか?シャーディングはこのような状況では過度のものになる可能性があります。

私のmysql-mongo接続でいくつかの入力が大好きです。 mysqlには、各プロファイルのtwitter IDを格納するtwitterプロファイルが含まれています。マップを減らすたびに行われ、それがのMapReduceすなわちへのオプションとして供給されるすべてのIDを収集します。

def daily_trend(options={}) 
    options[:out] = "daily_trend" 

    map = %Q(function(){ 
       if (this.created_at != null) 
       { 
        emit(this.created_at.toDateString(), 1); 
       } 
      }) 

    result = collection.map_reduce(map, standard_reduce, options) 
    normalize_results(result) 
end 

何かアドバイスが高く評価されていますTwitterTweetで

@profile_tweet_ids = current_profile_tweet_ids # array of ids 
@daily_trend = TwitterTweet.daily_trend :query => {:twitter_id => {"$in" => @profile_tweet_ids}} 

MapReduceの機能は次のようになります!

答えて

0
使用MongoLabのようなクラウドサービスの一つ..はしかし安いのあなたの定義に依存

..

2

あなたは、単純なカウント、合計、ユニークなどを行っている場合は、完全にマップ-減らす使用を避けることができるかもしれ。 $ inc演算子を使用すると、必要なものをリアルタイムで得ることができます。 私はこれについて、ブログ記事real-time analytics with MongoDBで詳しく説明しました。

0

MapReduceではなく演算子を使用することに関する答えはメリットがあり、リアルタイム応答を得るためのあなたの努力にはるかに有益です。マップReduce on mongodbはリアルタイム応答を得られません。

さらに、新しいアグリゲーションフレームワーク(http://www.mongodb.org/display/DOCS/Aggregation+Framework)を次回のリリースで利用できるようになると、メリットが得られます。

MapReduceをスケールアウトする方法に関するより一般的な質問に答えるには、新しいサーバーを追加するだけでセカンダリとして追加するだけでは役に立ちません。セカンダリとしては、M/Rはコレクションを生成するので、インラインが唯一のオプションです。コレクションに結果を格納する必要がない場合は、これが最も簡単な方法です。詳細については、こちらをご覧ください:http://groups.google.com/group/mongodb-user/browse_thread/thread/bd8f5734dc64117a

シャーディングはスケーリングアウトに役立ちますが、モンゴスプロセスを通してすべてを実行し、設定サーバーが必要であり、モンゴが必要とすることに注意してください。各シャードから返された結果セットをファイナライズすることで、データに応じて新たな潜在的なボトルネックを追加し、信頼できる方法で動作させるには余分なマシンが1台以上必要になります。

2

あなたのユースケースのようなサウンドは、オンラインストリーム/イベント処理の行に多くあります。 mongoまたは他のデータベース/キャッシング製品を使用して、参照データと、イベントを受信して​​処理するためのイベント処理フレームワークを格納できます。Twitterのストーム、Apache S4、GigaSpaces XAP(免責事項 - 私はGigaSpacesの仕事をしています)とGridGainは、私の頭の中であなたを助けるためのツールがいくつかあります。

0

それはあなたに、したがってまたhttp://indresult.com

最も危険な(彼らは国民が、それは貴重な作るためにデータを分類する仕事をさせて)彼らにとって最も貴重であり、異なるデータ項目間の接続であります
関連する問題