2017-03-06 9 views
0

MongoDBに接続するREST APIをNodeJSで作成し、MapReduceを実行して別のコレクションに結果を格納します。MongoDB + NodeJS:MapReduceまたは手動計算

コードはかなりシンプルです。それはユーザIDを取り、何らかのアルゴリズムを使用してこのユーザに関係する他のすべてのユーザを取得し、次にそれぞれについて、類似率を計算する。テストデータベースにユーザーが50,000人いると仮定すると、このMapReduceは約200〜800msかかります。それは私にとって理想的です。これが有名になり、このような何百もの同時リクエストがあった場合、私はそれがもうこれ以上ないと確信しています。私は、必要に応じてMongoDBを断片化する必要があるかもしれないことを理解しています。

もう1つのシナリオは、通常のfind()を実行し、カーソルをループして同じロジックを実行することです。 MapReduceと同じ時間がかかります。しかし、私はちょうどクライアントの側(NodeJS)に計算の重い吊り上げを入れて、MapReduceのようなサーバー側では試してみることを考えました。このアイデアにもメリットはありますか?私はこの方法で、ロードバランサの背後にAPIを水平にスケールすることができると思いました。

答えて

2

各リクエストを処理してデータベースに格納するサーバーを大量に持ち上げることをお勧めします。

1000件のリクエストがあり、そのうち200件が計算を必要とする場合、mongoがmapReduceまたは集計を使用して計算を実行する限り、800リクエストは通常​​どおりサーバーで処理できます。

代わりにノードサーバーで手動で計算を実行すると、すべての要求がサーバーの負荷が高くなり、影響を受けます。

Mongoも確かに集約にはかなり効率的ですが、mapReduceも私は想像しています。

私は最近、私のサーバーからmongoDBに多大なロジックを移しました。できるだけ多くのロジックを作りました。