2016-10-25 12 views
0

私は、1つのコレクションで動作する関数を持っています。再帰的に2つの集計を行い、ドキュメントを更新しています。すべての私のインデックスは正しいです。Python/Mongo関数を「絞り込む」方法はありません

現時点ではこのコードをリファクタリングできません。このコードを実行すると、データを処理するためにMongoを約10分間スラムします。コレクションのサイズに基づいて成長すると思われ、追加の3k文書ごとに平均約60秒。このコレクションは、何十万ものドキュメントに成長することができます。 (文書は小さい - 約10個のキーがそれぞれ非常に小さい。)

この機能の結果はリアルタイムである必要はない。スケジュールされているので、 。

質問は、操作に与えたCPUを制限するようにと言っているのですか?mongoまたは、私はsleepまたは他の方法を使用してPythonのスロットリングを解決する必要がありますか?

答えて

0

は再帰的に使用すると、再モデル化スキーマに検討する必要があるように見えます

文書を更新し、2件の集計を行います。 MongoDBドキュメントスキーマの柔軟性は、プロセスを最適化するためのものです。より多くの情報、例、パターンについては、MongoDB: Data Modelingを参照してください。

問題は、mongoに操作に与えるCPUを制限するように指示する方法はありますか?

MongoDBには、操作ごとのCPU使用率を制限する機能はありません。この機能は分散された意味では意味がありません。たとえば、複数のシャードにまたがる操作の場合、1 CPUの制限は、それほどシンプルではなくなりました。

また、ユースケースによっては、機能がリアルタイムである必要がない場合は、セカンダリread-preferenceを利用できます。 基本的に、スケジュールされたレポートをセカンダリメンバーに送信し、プライマリが他のデータを処理できるようにします。

この二次読み取りのprosconsを必ずお読みください。

も参照してください。MongoDB Replication

関連する問題