私は、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の機能は次のようになります!