2012-02-16 14 views
0

私はsqlからmongodbへ私のコードの一部を移しています。和とソートを使ったmongodbクエリの最適なアプローチは何ですか

のは、私は次のような単純なSQLクエリ(単なる例)

select count(a.id) as count, b_id 
     from table group by b_id 
     where c_id=[SOME ID] 
     group by b_id 
     order by count desc; 

私は誰もがそれが何をするかを理解仮定があるとしましょう。

私はmongo側ですべてを行い、結果を集めてクライアント側に並べ替えたり、クライアント側に生データを取得してすべての処理を行います。

上記のクエリのための最良の方法は、内部のmongodbメカニズム(mapreduceなど)を使用してデータベース内ですべて行うか、またはコレクションをクライアント側にフェッチしてそこで処理することです。一般的にデータセットは膨大ですが、必要に応じてクエリを複数の部分に分割できます。

クライアントは、その点ではJavaベースです。

答えて

2

今後のMongoDB Aggregation Frameworkでは、必要なことを行うのはかなり簡単です。すでに2.1.xの開発リリースで利用可能です。

2.0以前のバージョンに固執している場合は、最初にスポット集計を行う必要がないように、言及しているオプションまたはスキーマの変更を確認する必要があります。たとえば、NoSQLでは、ソースデータが操作されるときに、集計されたデータを持つフィールドまたは文書を維持するのが一般的です。最も一般的な例は、フィールドの配列のサイズを維持することです:

update({..}, {$push:{array:element}, $inc:{elementCount:1}) 
+0

私は生産にはまだありません(まだ)ので、私はそれを使用することができます、あなたの意見では、上記? – mikkom

+0

集計されたデータを手動で管理することを除いて(非常に状況の良い)、はい。 AFは完全にネイティブですが、グループとm/rはJavaScriptを使用しているため、シングルスレッドで(比較的)遅くなります。率直に言って、m/rを使いたいのであれば、MongoDB m/r –

+0

を使うのではなく、Hadoopと統合したいと思っています。ありがとう、私は最新の不安定なものをインストールしなければならないと思います。 – mikkom

1

Map/Reduceを使用してmongo側のデータをグループ化し、クライアント側またはmongo側で並べ替えることができます。また、マップ/リダクションの例を見つけることができますhere.

関連する問題