10

私は実際に検索エンジンプロジェクトで働いています。python+mongoDbを使用しています。

find()コマンドをmongo dbに実行した後、pymongoカーソルがあります。pymongoカーソルの結果は約20kです。

pymongoカーソルでの反復は、たとえば同じサイズのリストでの通常の反復と比較して、非常に遅いことに気付きました。

私は少しベンチマークをしました:

  • 20k文字列のリストに対する反復:0.001492秒
  • pymongoカーソルでの反復と20kの結果:1.445343秒

違いは本当にたくさんあります。この量の結果には問題がないかもしれませんが、何百万もの結果がある場合、その時間は受け入れられません。

pymongoカーソルが遅すぎて反復できない理由を誰かが知っていますか?より短い時間でカーソルを繰り返す方法について何か考えはありますか?

いくつかの追加情報:

  • Python v2.6
  • PyMongo v1.9
  • MongoDBv1.632ビット
4

4 に答える 4

15

付属のC拡張機能を使用してpymongoをインストールしていますか?

>>> import pymongo
>>> pymongo.has_c()
True

私は先週のほとんどを、実行に20秒かかった中程度のサイズのクエリと対応する処理のデバッグに費やしました。C拡張機能がインストールされると、同じプロセス全体で約1秒かかりました。

DebianにC拡張機能をインストールするには、easyinstallを実行する前にPython開発ヘッダーをインストールしてください。私の場合、古いバージョンのpymongoも削除する必要がありました。これによりCからバイナリがコンパイルされるため、通常のツールがすべて必要になることに注意してください。(GCCなど)

# on ubuntu with pip
$ sudo pip uninstall pymongo
$ sudo apt-get install python-dev build-essential
$ sudo pip install pymongo
于 2012-01-23T18:34:35.917 に答える
12

pymongoドライバーが一度にすべての20kの結果を返すわけではないことを覚えておいてください。反復するにつれて、mongodbバックエンドにネットワーク呼び出しを行ってより多くのアイテムを取得します。もちろん、文字列のリストほど速くはありません。ただし、 APIドキュメントで概説されているようにカーソルbatch_sizeを調整することをお勧めします。

于 2011-03-30T00:13:16.513 に答える
1

デフォルトのカーソルサイズは4MBで、最大で16MBになります。その制限に達するまでカーソルサイズを大きくして、改善が得られるかどうかを確認できますが、ネットワークが処理できる内容によっても異なります。

于 2011-10-19T22:17:42.313 に答える
-3

ドキュメント全体のサイズに関する情報は提供しません。このような量のドキュメントを取得するには、データベースサーバーでネットワークトラフィックとIOの両方が必要です。

ウォームキャッシュを使用した「ホット」状態でも、パフォーマンスは「不良」に維持されますか?「mongosniff」を使用して「wire」アクティビティを検査し、「iostat」などのシステムツールを使用してサーバー上のディスクアクティビティを監視できます。さらに、「mongostat」はたくさんの貴重な情報を提供します。

于 2011-03-30T00:24:45.687 に答える