私と各ユーザーには、毎月collection SocialWall独自の通知機能があります。DocumentEvent
私の問題は、内部のオブジェクトusersのフィールドに基づいて新しい通知を取得したいということです。効果的に尋ねるTS 以降のすべての通知をくれますか? (例のために、同じ月内であるとしましょう)TSEventSocialWallTS
ユーザーが望むものだけを提供するために、ここで行う選択肢が 1 つあります。
1) から月全体をすべて取得してSocialWall並べ替えますPHPか?
ユーザーの友達が増え、アプリとのさまざまなやり取りが増えると、ユーザーには多くのイベントが発生するため、その配列は非常に急速に大きくなります。TSしたがって、巨大な配列でソートおよびフィルタリングする必要があります。これは、大規模なパフォーマンスやメモリ管理には最適ではない可能性があります。
2)Map Reduce関数を作成MongoDBして、並べ替えおよびフィルター処理された配列を取得しますか?
私は周りを読んでmap reduceいて、あまり効率的ではないというコメントがたくさんあります。はい、2.4改善されましたがnew to Mongo、Map Reduceパフォーマンスに関してそれが実際に何を意味するのかはわかりません。したがって、遅いクエリを作成すると、Mongo サーバーにより多くの負荷がかかるのではないかと心配しています。また、最高のパフォーマンスを得るために、多くの人Hadoopが複雑なクエリにを使用することを好むことも読んでいます。map reduce
私の問題に対する現在の最善の解決策は何ですか? 仕分けに行くべきですか、PHPそれとも作るべきMap Reduceですか?
最善の解決策である場合Map Reduce、どうすればそれを実行できますか?
ドキュメントは次のようになります
SocialWall
{
_id: MongoId
userId: MongoId
Month: 1003(MonthYear)
Events:[]
}
Event
{
_id: MongoId
userId: MongoId
ts: ISODate
details:[]
likedBy:[]
comments:[]
}