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()
使用する正しい関数ではありませんか?