2011-12-10 10 views
0

夜間にデータをリフレッシュする別のコレクションを作成します。最初に行うことは、現在その中にあるすべてのエントリを削除することです。プロファイリングを通して、私はこの削除コマンドが101190ミリ秒以上かかることがわかります。MongoDB:プロファイリング - 削除

これは正常ですか?この質問をスピードアップするために何かすべきことはありますか?それは単にコレクションを空にすることはかなり瞬間的でなければならないと思われる。

ありがとうございました!

答えて

1

フィルタ条件なしでremove()を実行すると、コレクションデータファイルと存在するインデックス(_idのデフォルトインデックスを含む)から各ドキュメントを削除する必要があるため、処理が非常に遅くなる可能性があります。

コレクション内のすべてのドキュメントを削除する場合、特に既定のインデックスのみを使用している場合やアプリケーションコード内から簡単にインデックスを再作成できる場合は、代わりにdrop()コレクションを開始してから開始できます新しいデータを追加する。

あなたは、さらにコレクションが空または(擬似Pythonで)のようなrenameCollection commandを使用して、部分的に完全なように見えるという時間を最小限に抑えることができます

for new_record in new_records: 
    db.newcollection.insert(new_record) 

for index_spec in index_specs: 
    db.newcollection.ensure_index(index_spec) 

db.oldcollection.drop() 
db.command('renameCollection', 'newcollection', to='oldcollection') 
+0

優れています。私は除去が時間がかかることに気づいていませんでした。 – Petrogad

0

dcrostaはremove()が遅くなることがなかった理由を説明しました、コレクション内のすべてのデータをクリアするのは良い考えではありません。

MongoDBですぐにコレクションを作成または削除することができますので、コレクションを削除してから新しいドキュメントを挿入するだけです(コレクションは自動的に再作成されます)。

最初にdb.collname.drop()を発行してください。

関連する問題