2012-03-14 6 views
1

mongoDBに基づいて日付関連の情報を表示するいくつかのレポートを作成しようとしています。たとえば、過去30日間の1日のユーザー登録数を表示する必要があります。各ユーザー文書には、登録された日付フィールドがあります。レポートには、1日に一致するレコード(合計)の数を表示する必要があります。MongoDBのデータに基づいてレポートを作成する

map-reduceオプションはありますか?それとも重すぎますか?

どのようにアプローチするべきですか?

私はmongoにアクセスするために春を使用しています。しかし、私の質問は、mongoDBを照会する方法の詳細です。

+0

MongoDBには、SQL GROUP BYと同様の方法で[group()]レコードを持つことができます。しかし、そのドキュメンテーションでは、代わりに[map/reduce] [2]を使うべきだと述べています。 –

+0

[1]:http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group [2]:http://www.mongodb.org/display/DOCS/MapReduce –

+0

ありがとうございます。日付オブジェクトのみで 'yyyy-MM-dd'のクエリを実行し、 'HH:mm:ss'を無視する –

答えて

1

Map/reduceは非常に柔軟性があり、他のテクニックでは難しいことをすることができますが、あまり柔軟性のない方法が必要な場合は、柔軟性の低い方法ほどリソースや効率が悪くありません。私はそれが「重い」という考えの源だと思う。 db.collection.find({a:1})。count()は実行しますが、count()の方が速くなるようにmap/reduceの関数を書くことができます。

あなたの説明から、map/reduceは合理的なアプローチのように聞こえます。必要に応じて文書内の他のフィールドに基づいてグループ化を柔軟に調整できます。これは、文書が一様でない場合に役立ちます。マップ/リダクションジョブはサーバーに負荷を追加します。そのため、挿入や更新の速度がそれほど速くない場合、大きな追加ではないかもしれませんが、それは追加されたワークロードに適用されます。それを行う能力があれば、パフォーマンスの影響をテストしてベンチマークすることが最善の計画です。

関連する問題