0

Amazon EC2 マイクロ インスタンスに MongoDB をセットアップしました。データベースには約 700 万のアイテムがあります。それらすべてを繰り返し処理し、各項目に関する情報を出力しようとしています。そのために python ラッパーを使用しています。

import pymongo as p
db_client = p.MongoClient()
db = db_client.my_awesome_db
photo_collection = db.photos
for photo in photo_collection.find():
    print photo['attr']

私はメモリに何も格納しておらず、DB は他に使用されていません。

クエリの実行時間が長いため、これlimit()までにかかる時間を見積もっていました。制限を大きくするほど、非線形の時間が表示されます。例えば、

  • 制限 -> 時間
  • 1,000 -> 1 秒
  • 10,000 -> 10 秒
  • 100,000 -> 720 秒 (~ 12 分)
  • 700,000 -> 9000 秒

これはばかげているわけではありませんが、線形よりも大きいです (10k から 100k へのジャンプはかなり悪いようです)。1 秒で 700 万行を超えるファイルを簡単に反復処理できますが、この速度では、DB 全体を反復処理するには 25 時間かかります。

何か間違った設定がありますか? find()使用する正しい関数ではありませんか?

4

0 に答える 0