0

私と各ユーザーには、毎月collection SocialWall独自の通知機能があります。DocumentEvent

私の問題は、内部のオブジェクトusersのフィールドに基づいて新しい通知を取得したいということです。効果的に尋ねるTS 以降のすべての通知をくれますか? (例のために、同じ月内であるとしましょう)TSEventSocialWallTS

ユーザーが望むものだけを提供するために、ここで行う選択肢が 1 つあります。

1) から月全体をすべて取得してSocialWall並べ替えますPHPか?

ユーザーの友達が増え、アプリとのさまざまなやり取りが増えると、ユーザーには多くのイベントが発生するため、その配列は非常に急速に大きくなります。TSしたがって、巨大な配列でソートおよびフィルタリングする必要があります。これは、大規模なパフォーマンスやメモリ管理には最適ではない可能性があります。

2)Map Reduce関数を作成MongoDBして、並べ替えおよびフィルター処理された配列を取得しますか?

私は周りを読んでmap reduceいて、あまり効率的ではないというコメントがたくさんあります。はい、2.4改善されましたがnew to MongoMap 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:[]
}
4

1 に答える 1